diff --git a/.claude/skills/code-dedup/SKILL.md b/.claude/skills/code-dedup/SKILL.md index 2032a9b6..f2a05bcf 100644 --- a/.claude/skills/code-dedup/SKILL.md +++ b/.claude/skills/code-dedup/SKILL.md @@ -1,109 +1,70 @@ --- name: code-dedup -description: Searches for duplicate code, duplicate tests, and dead code, then safely merges or removes them. Use when the user says "deduplicate", "find duplicates", "remove dead code", "DRY up", or "code dedup". Requires test coverage — refuses to touch untested code. +description: Finds duplicated code and dead code with deslop, then merges or removes the worst of it. Use when the user says "deduplicate", "find duplicates", "remove dead code", "DRY up", or "code dedup". --- # Code Dedup -Carefully search for duplicate code, duplicate tests, and dead code across the repo. Merge duplicates and delete dead code — but only when test coverage proves the change is safe. +Find duplication with **deslop**, then use judgement to merge only what is worth merging. -## Prerequisites — hard gate +## Judgement first -Before touching ANY code, verify these conditions. If any fail, stop and report why. +Deslop measures structural repetition. It cannot tell whether collapsing two blocks makes the code better or worse. **You decide.** A report with 476 clusters does not mean 476 edits — it means the five or ten that matter. `merge-plan` returns verdict `ai_or_human` for anything non-mechanical: that is the tool handing you the call. -1. Run `make test` — all tests must pass. If tests fail, stop. Do not dedup a broken codebase. -2. Run `make test` — tests are fail-fast AND enforce the coverage threshold from `coverage-thresholds.json`. If anything fails, stop and fix it before deduping. -3. Verify the project uses **static typing**: - - Rust (crates/, tree-sitter-osprey/): typed by default — proceed - - TypeScript (vscode-extension/, webcompiler/, website/): check `tsconfig.json` has `"strict": true` — proceed if yes - - C (compiler/runtime/): typed by default — proceed +**Merge** real copy-pasted logic — a block differing only in a symbol or a literal, 3+ near-identical call sites, one algorithm restated in two modules. -## Steps +**Leave** anything else, especially: -Copy this checklist and track progress: +- **Data, not logic** — constant tables, per-platform SDK/triple/runtime arms, doc rows. Merging buries the values the reader came for. +- **Structural coincidence** — `structural_only` CST walks and `match` shapes: same skeleton, different meaning. +- **Already factored** — only thin wrappers remain over a real helper. +- **Merges needing a new bool/enum parameter** to make one function do two jobs. -``` -Dedup Progress: -- [ ] Step 1: Prerequisites passed (tests green, coverage met, typed) -- [ ] Step 2: Dead code scan complete -- [ ] Step 3: Duplicate code scan complete -- [ ] Step 4: Duplicate test scan complete -- [ ] Step 5: Changes applied -- [ ] Step 6: Verification passed (tests green, coverage stable) -``` - -### Step 1 — Inventory test coverage - -Before deciding what to touch, understand what is tested. - -1. Run `make test` to confirm green baseline. `make test` is fail-fast AND enforces the coverage threshold from `coverage-thresholds.json` (REPO-STANDARDS-SPEC [TEST-RULES], [COVERAGE-THRESHOLDS-JSON]). It exits non-zero on any test failure OR coverage shortfall. -2. Note the current coverage percentage — this is the floor. It must not drop. -3. Identify which files/modules have coverage and which do not. Only files WITH coverage are candidates for dedup. +A wrong merge is worse than a duplicate. -### Step 2 — Scan for dead code +## Tools -Search for code that is never called, never imported, never referenced. +Prefer the MCP — live index, no rescan cost: -1. Look for unused exports, unused functions, unused variables -2. Use language-appropriate tools: - - Rust: `dead_code`/`unused_*` are denied workspace-wide, so `cargo clippy --all-targets` reports unused code as errors - - TypeScript: check for `noUnusedLocals`/`noUnusedParameters` in tsconfig, look for unexported functions with zero references - - C: compiler warnings for unused functions/variables (already caught by `-Wall -Wextra`) -3. For each candidate: **grep the entire codebase** for references (including tests, scripts, configs). Only mark as dead if truly zero references. -4. List all dead code found with file paths and line numbers. Do NOT delete yet. +| Tool | Use | +|---|---| +| `mcp__deslop__duplicates` | **Start here.** Clusters worst-first by `mass`. `{detail:"summary", limit:20}`; `include_per_file:true` for a per-file table, `path_contains` to scope. | +| `mcp__deslop__cluster-by-id` | Every occurrence path + byte range for one `id`. | +| `mcp__deslop__compare-pair` | The **only** pair evidence: two `{path,start_byte,end_byte}` in, `text_identity` and `structural` out. | +| `mcp__deslop__merge-plan` | Mechanical plan for a cluster. `ai_or_human` → hand-edit. | +| `mcp__deslop__find-similar` | Call **before writing new code** (CLAUDE.md mandates it). | +| `mcp__deslop__rescan` | Refresh after edits. | -### Step 3 — Scan for duplicate code +A cluster's `kind` is the *weakest* pair against the canonical — **never assume two members match each other**. `compare-pair` the exact ranges you intend to merge. -Search for code blocks that do the same thing in multiple places. +No MCP? Use the installed CLI — what `make _deslop` runs: -1. Look for functions/methods with identical or near-identical logic -2. Look for copy-pasted blocks (same structure, maybe different variable names) -3. Look for multiple implementations of the same algorithm or pattern -4. Check across module boundaries — duplicates often hide in different packages -5. For each duplicate pair: note both locations, what they do, and how they differ (if at all) -6. List all duplicates found. Do NOT merge yet. - -### Step 4 — Scan for duplicate tests - -Search for tests that verify the same behavior. - -1. Look for test functions with identical assertions against the same code paths -2. Look for test fixtures/helpers that are duplicated across test files -3. Look for integration tests that fully cover what a unit test also covers -4. List all duplicate tests found. Do NOT delete yet. - -### Step 5 — Apply changes (one at a time) +```bash +deslop . --nohtml --nojson --output "$PWD/target/deslop-report" --log-to-console --log-level error --no-color +``` -For each change, follow this cycle: **change → test → verify coverage → continue or revert**. +Exit `3` means over the ceiling in `.deslop.toml`. Check `deslop --version`; install from only if the binary is missing, matching the version pinned in `.github/workflows/ci.yml`. Never upgrade to move a number — the MCP server (`tool_version: 0.0.0-dev`) and the pinned CLI disagree, so **find** with the MCP and **measure** with `make _deslop`. -#### 5a. Remove dead code -- Delete dead code identified in Step 2 -- After each deletion: run `make test` (fail-fast + coverage + threshold all in one) -- If `make test` exits non-zero (test failure OR coverage drop): **revert immediately** and investigate +## The ratchet -#### 5b. Merge duplicate code -- For each duplicate pair: extract the shared logic into a single function/module -- Update all call sites to use the shared version -- After each merge: run `make test` -- If tests fail: **revert immediately** +**CI must never allow duplication to increase.** `max_duplication_percent` is a ratchet, not a budget. -#### 5c. Remove duplicate tests -- Delete the redundant test (keep the more thorough one) -- After each deletion: run `make test` -- If coverage drops below threshold, `make test` exits non-zero — **revert immediately** +- **Never raise it.** Over the ceiling means you added duplication — remove it. The number is not the thing to edit. +- **Lower it after every round** to the fresh `make _deslop` measurement. Slack above the measurement lets the next clone land free. +- **A branch may not measure above `main`** — compare with the *same* CLI version, or the version gap alone will convict or exonerate falsely. +- `.deslop.toml`'s comment block records the ratchet history. Extend it when you lower the ceiling; if that history and the live value disagree, someone raised it — **report a gate violation**. -### Step 6 — Final verification +## Process -1. Run `make lint` — all linters must pass -2. Run `make test` — tests must pass AND coverage must remain ≥ the baseline from Step 1 -3. Report: what was removed, what was merged, final coverage vs baseline +- **Baseline.** `make _deslop` — record the percentage you start from. +- **Gather.** `mcp__deslop__duplicates`, worst first. `cargo clippy --all-targets --all-features` is the whole dead-code scan (`dead_code`/`unused_*` are denied workspace-wide); grep the repo before deleting anything it flags. +- **Triage.** Apply the judgement above. Record each keeper's two locations and intended helper, and each rejection's reason so nobody re-litigates it. `.deslop.toml` scopes the gate *by path*, so inline `#[cfg(test)]` and `#[path = "…"]` modules still inflate the number — an artifact, not a task. +- **Apply.** One merge at a time, smallest diff that removes the duplication. Keep public and `pub(crate)` signatures intact so no caller has to change. +- **Verify.** `make lint`, then `make _deslop`. Report what merged, what you left and why, and duplication vs baseline. ## Rules -- **No test coverage = do not touch.** If a file has no tests covering it, leave it alone entirely. -- **Coverage must not drop.** The coverage floor from Step 1 is sacred. -- **One change at a time.** Make one dedup change, run tests, verify coverage. -- **When in doubt, leave it.** If two code blocks look similar but you're not 100% sure they're functionally identical, leave both. -- **Preserve public API surface.** Do not change function signatures or exported names. -- **Three similar lines is fine.** Only dedup when the shared logic is substantial (>10 lines) or when there are 3+ copies. +- **Three similar lines is fine** — merge at >10 shared lines or 3+ copies. +- **Edit in place.** Never leave a parallel version of anything behind. +- **When in doubt, leave it.** diff --git a/.gitignore b/.gitignore index d36c1751..9439014d 100644 --- a/.gitignore +++ b/.gitignore @@ -141,6 +141,11 @@ benchmarks/cases/**/*.o /tests/regressions/basics/files/test_output.txt /tests/regressions/basics/files/test_stale_reason.txt /tests/regressions/effects/osprey_http_state_levels.db +# The injected disk handler in storage_injection.test.{osp,ospml} writes the +# notebook and its archive. Each flavor owns its own names so the twins cannot +# race when the corpus runs them concurrently from the same directory. +/osprey_storage_injection_*.txt +/tests/effects/injection/osprey_storage_injection_*.txt # Core dumps from a crashed C test binary (a container run leaves them here). core diff --git a/.vscode/settings.json b/.vscode/settings.json index 57449b1a..33efe241 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,7 +30,7 @@ "rust-analyzer.check.allTargets": true, "basilisk.enabled": true, "basilisk.uv.enabled": true, - "deslop.topOffenders.groupBy": "type", + "deslop.topOffenders.groupBy": "kind", "deslop.embedding.provider": "ollama", "deslop.embedding.model": "nomic-embed-text", "deslop.embedding.mode": "auto" diff --git a/CLAUDE.md b/CLAUDE.md index f62b02f0..6ad38eab 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,6 +70,16 @@ Silently-wrong output is worse than a crash: a panic is found in seconds; a sile - If removing an annotation still compiles with identical output, it was redundant — remove it. Applies to every `.osp` you touch: `tests/regressions/`, `benchmarks/`, docs and website snippets. - **No consecutive print calls** — consolidate into one interpolated string. +```ospml + // This is wrong because the signature can be inferred. You must omit this! + escape : string -> string + escape s = + bslash = "\\" + quote = "\"" + step = replace s bslash (bslash + bslash) ?: "" + escapeControls (replace step quote (bslash + quote) ?: "") 1 +``` + ## Rust - **Panics are illegal** outside the broken-code quarantine. Return `Result`. diff --git a/Cargo.toml b/Cargo.toml index 86fa01f5..bdfbabd0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,6 +67,13 @@ unused_variables = "deny" unused_mut = "deny" unused_assignments = "deny" unused_results = "deny" +# A `pub` item not reachable from the crate root is invisible outside the crate, +# so `dead_code` never evaluates it and it can rot forever. Forcing `pub(crate)` +# puts every such item back under the dead-code lint. [LINTS-DEADCODE-REACH] +unreachable_pub = "deny" +unused_lifetimes = "deny" +unused_macro_rules = "deny" +unused_qualifications = "deny" trivial_casts = "deny" trivial_numeric_casts = "deny" elided_lifetimes_in_paths = "deny" diff --git a/Makefile b/Makefile index 4e544dda..db9cf423 100644 --- a/Makefile +++ b/Makefile @@ -279,6 +279,7 @@ lint: _deslop _lint _lint: $(EXT_NODE_DEPS) @echo "==> Linting..." node scripts/verify-node-deps-guard.mjs + node scripts/verify-no-dead-code.mjs cargo fmt --all --check cargo clippy --workspace --all-targets -- -D warnings cd $(EXT_DIR) && npm run lint @@ -288,6 +289,12 @@ _lint: $(EXT_NODE_DEPS) # threshold live in that committed config — the single source of truth. When # the `deslop` binary is absent this target FAILS: a gate that cannot run must # not report success. CI enforces the same ceiling through the official action. +# Version of the deslop CLI `make setup` installs. MUST equal the `version:` the +# Deslop action pins in .github/workflows/ci.yml — deslop measures source text, +# so a different build can report a different percentage for the SAME tree, and +# a local gate that disagrees with the merge gate is worse than no local gate. +DESLOP_VERSION ?= 0.27.0 + _deslop: @echo "==> Duplication gate (deslop)..." @if ! command -v deslop >/dev/null 2>&1; then \ @@ -301,7 +308,14 @@ _deslop: deslop . --nohtml --nojson --output $(CURDIR)/target/deslop-report --log-to-console --log-level error --no-color ## hawk: Dead-code gate (astral-sh/hawk). Fails the build when any `pub` -## declaration is unreachable from the osprey binary (hawk::dead_public). Scoped +## declaration is unreachable from the osprey binary (hawk::dead_public). +## +## hawk counts the workspace's TEST binaries as reachability roots, so an item +## whose only callers are its own `#[cfg(test)]` module passes this gate — that +## is how `osprey_debug::DebugBuild` and `osprey_syntax::dependency_sets` lived +## in the tree. `scripts/verify-no-dead-code.mjs` (run by `_lint`) answers the +## narrower question "does PRODUCT code name this?" and catches that class. +## Neither gate subsumes the other; both run. Scoped ## to dead_public ONLY — unnecessary_public / restricted-visibility findings are ## over-exposure, not dead code, and several are irreducibly public for the ## integration tests under this workspace's `dead_code = "deny"` policy, so they @@ -407,6 +421,7 @@ setup: $(EXT_NODE_DEPS) $(WEBCOMPILER_NODE_DEPS) $(WEBSITE_NODE_DEPS) @echo "==> Setting up development environment..." rustup component add rustfmt clippy llvm-tools-preview command -v cargo-llvm-cov >/dev/null 2>&1 || cargo install cargo-llvm-cov + command -v deslop >/dev/null 2>&1 || DESLOP_VERSION=$(DESLOP_VERSION) bash scripts/install-deslop.sh @echo "==> Setup complete. Run 'make ci' to validate." # --------------------------------------------------------------------------- diff --git a/compiler/runtime/test_cmake_integration.sh b/compiler/runtime/test_cmake_integration.sh deleted file mode 100755 index 8f4052d0..00000000 --- a/compiler/runtime/test_cmake_integration.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -echo "🔧 CMake C Test Integration Verification" -echo "=========================================" -echo "⚠️ This script must be run inside the VS Code Dev Container" -echo " Use Command Palette → 'Dev Containers: Rebuild Container'" -echo "" - -# Navigate to runtime directory -cd "$(dirname "$0")" - -# Clean and create build directory -echo "📁 Setting up build directory..." -rm -rf build -mkdir -p build -cd build - -# Configure with CMake -echo "⚙️ Configuring CMake..." -cmake .. -DCMAKE_BUILD_TYPE=Debug - -if [ $? -ne 0 ]; then - echo "❌ CMake configuration failed!" - exit 1 -fi - -echo "✅ CMake configuration successful!" - -# Build the tests -echo "🔨 Building C runtime tests..." -make -j$(nproc) - -if [ $? -ne 0 ]; then - echo "❌ Build failed!" - exit 1 -fi - -echo "✅ Build successful!" - -# List available tests -echo "📋 Available CTest tests:" -ctest --show-only=json-v1 | jq -r '.tests[].name' 2>/dev/null || ctest -N - -# Run tests with CTest -echo "🧪 Running CTest..." -ctest --verbose - -if [ $? -eq 0 ]; then - echo "✅ All C runtime tests passed!" - echo "" - echo "🎉 VS Code Integration Ready!" - echo " - Open this project in VS Code with Dev Container" - echo " - Go to Test Explorer (flask icon in sidebar)" - echo " - You should see 'SystemRuntimeTests' and 'FiberRuntimeTests'" - echo " - Click the play button to run individual tests" - echo " - Use debug button to debug tests with breakpoints" -else - echo "❌ Some tests failed!" - exit 1 -fi \ No newline at end of file diff --git a/compiler/runtime/test_http_runtime.sh b/compiler/runtime/test_http_runtime.sh deleted file mode 100755 index f50d112f..00000000 --- a/compiler/runtime/test_http_runtime.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash - -# Test script for HTTP runtime -echo "🧪 Compiling and testing HTTP runtime..." - -# Compile all the runtime modules and tests -echo "📦 Compiling runtime modules..." - -# Detect OpenSSL paths cross-platform -OPENSSL_CFLAGS="" -OPENSSL_LDFLAGS="-lssl -lcrypto" - -# Try to find OpenSSL include/lib directories -if [ "$(uname)" = "Darwin" ]; then - # macOS with Homebrew - for path in "/opt/homebrew/opt/openssl@3" "/usr/local/opt/openssl@3" "/opt/homebrew/opt/openssl" "/usr/local/opt/openssl"; do - if [ -d "$path" ]; then - OPENSSL_CFLAGS="-I${path}/include" - OPENSSL_LDFLAGS="-L${path}/lib -lssl -lcrypto" - break - fi - done -elif [ "$(uname)" = "Linux" ]; then - # Linux - usually in standard locations - if pkg-config --exists openssl 2>/dev/null; then - OPENSSL_CFLAGS="$(pkg-config --cflags openssl)" - OPENSSL_LDFLAGS="$(pkg-config --libs openssl)" - fi -fi - -gcc -c http_shared.c -o http_shared.o -pthread $OPENSSL_CFLAGS -gcc -c http_client_runtime.c -o http_client_runtime.o -pthread $OPENSSL_CFLAGS -gcc -c http_server_request.c -o http_server_request.o -pthread $OPENSSL_CFLAGS -gcc -c http_server_response.c -o http_server_response.o -pthread $OPENSSL_CFLAGS -gcc -c http_server_runtime.c -o http_server_runtime.o -pthread $OPENSSL_CFLAGS -gcc -c websocket_client_runtime.c -o websocket_client_runtime.o -pthread $OPENSSL_CFLAGS -gcc -c websocket_server_runtime.c -o websocket_server_runtime.o -pthread $OPENSSL_CFLAGS - -if [ $? -ne 0 ]; then - echo "❌ Runtime compilation failed!" - exit 1 -fi - -echo "🧪 Compiling test suite..." -gcc -o test_http_runtime http_runtime_tests.c \ - http_shared.o \ - http_client_runtime.o \ - http_server_request.o \ - http_server_response.o \ - http_server_runtime.o \ - websocket_client_runtime.o \ - websocket_server_runtime.o \ - -L/usr/local/lib -lfiber_runtime \ - -pthread $OPENSSL_CFLAGS $OPENSSL_LDFLAGS - -if [ $? -ne 0 ]; then - echo "❌ Test compilation failed!" - exit 1 -fi - -echo "✅ Compilation successful!" -echo "" - -# Run the tests -echo "🚀 Running HTTP runtime tests..." -echo "" -./test_http_runtime - -if [ $? -ne 0 ]; then - echo "❌ Tests failed!" - exit 1 -fi - -echo "" -echo "🎉 All tests passed! HTTP runtime is working correctly." - -# Clean up -rm -f *.o test_http_runtime - -echo "✅ Test cleanup complete." diff --git a/crates/osprey-ast/src/doc.rs b/crates/osprey-ast/src/doc.rs index 71add3bb..cdf16816 100644 --- a/crates/osprey-ast/src/doc.rs +++ b/crates/osprey-ast/src/doc.rs @@ -83,13 +83,6 @@ impl DocComment { } } - /// A summary-only outer doc — the common case, and the shape a bare doc - /// comment with no recognised sections lowers to. - #[must_use] - pub fn summary_only(summary: impl Into) -> DocComment { - Self::new(summary, String::new(), DocScope::Outer) - } - /// Render the whole doc comment as the Markdown block a hover shows: the /// summary, the body, then each populated section as a heading. `[Symbol]` /// links are preserved verbatim so the LSP client renders them as links. @@ -170,7 +163,7 @@ mod tests { #[test] fn summary_only_leaves_every_section_empty() { // [DOC-MODEL] a summary-only comment has the canonical empty-field shape. - let doc = DocComment::summary_only("Adds two ints."); + let doc = DocComment::new("Adds two ints.", String::new(), DocScope::Outer); assert_eq!(doc.summary, "Adds two ints."); assert!(doc.body.is_empty()); assert!(doc.params.is_empty() && doc.returns.is_none()); diff --git a/crates/osprey-ast/src/freevars.rs b/crates/osprey-ast/src/freevars.rs index 499cf33b..ebf202f9 100644 --- a/crates/osprey-ast/src/freevars.rs +++ b/crates/osprey-ast/src/freevars.rs @@ -6,7 +6,7 @@ //! parameters, `let`s in blocks, `match`/`select`/handler pattern bindings) //! are subtracted; everything else referenced is free. -use crate::{Expr, InterpolatedPart, MatchArm, Pattern, Stmt}; +use crate::{AstNode, Expr, MatchArm, Pattern, Stmt}; use std::collections::BTreeSet; /// Collect the free identifiers of `e` into `out` (sorted, deduplicated). @@ -36,60 +36,8 @@ fn scoped( fn walk(e: &Expr, bound: &mut Vec, out: &mut BTreeSet) { match e { - Expr::Integer(_) | Expr::Float(_) | Expr::Str(_) | Expr::Bool(_) => {} - Expr::Identifier(n) => note(n, bound, out), + Expr::Identifier(name) => note(name, bound, out), Expr::Path(path) => note(&path.to_string(), bound, out), - Expr::InterpolatedStr(parts) => { - for p in parts { - if let InterpolatedPart::Expr(inner) = p { - walk(inner, bound, out); - } - } - } - Expr::List(xs, _) => walk_slice(xs, bound, out, |x| x), - Expr::Map(entries) => { - for en in entries { - walk(&en.key, bound, out); - walk(&en.value, bound, out); - } - } - Expr::Object(fields) => walk_slice(fields, bound, out, |f| &f.value), - Expr::Binary { left, right, .. } | Expr::Pipe { left, right } => { - walk(left, bound, out); - walk(right, bound, out); - } - Expr::Unary { operand, .. } => walk(operand, bound, out), - e2 => walk_rest(e2, bound, out), - } -} - -/// Continuation of [`walk`] (kept in thirds so each stays small). -fn walk_rest(e: &Expr, bound: &mut Vec, out: &mut BTreeSet) { - match e { - Expr::Call { - function, - arguments, - named_arguments, - } => { - walk(function, bound, out); - walk_slice(arguments, bound, out, |x| x); - walk_slice(named_arguments, bound, out, |n| &n.value); - } - Expr::MethodCall { - target, - arguments, - named_arguments, - .. - } => { - walk(target, bound, out); - walk_slice(arguments, bound, out, |x| x); - walk_slice(named_arguments, bound, out, |n| &n.value); - } - Expr::FieldAccess { target, .. } => walk(target, bound, out), - Expr::Index { target, index } => { - walk(target, bound, out); - walk(index, bound, out); - } Expr::Lambda { parameters, body, .. } => { @@ -100,52 +48,29 @@ fn walk_rest(e: &Expr, bound: &mut Vec, out: &mut BTreeSet) { walk(value, bound, out); walk_arms(arms, bound, out); } - Expr::Block { statements, value } => walk_block(statements, value.as_deref(), bound, out), - // `name { … }` where `name` is a bound local is a record UPDATE that - // reads `name` (`aggregate::gen_constructor` redirects; the parser - // cannot tell the forms apart). Noting a real type name is harmless: - // consumers filter against actual locals (captures via `cg.lookup`, - // liveness against `let`-bound ledger names). - Expr::TypeConstructor { name, fields, .. } => { - note(name, bound, out); - walk_slice(fields, bound, out, |f| &f.value); - } - Expr::Update { record, fields } => { - note(record, bound, out); - walk_slice(fields, bound, out, |f| &f.value); - } - e2 => walk_fiber(e2, bound, out), - } -} - -/// Final third of the walker: fiber/effect forms (and the leaf-handled rest). -fn walk_fiber(e: &Expr, bound: &mut Vec, out: &mut BTreeSet) { - match e { - Expr::Spawn(inner) | Expr::Await(inner) | Expr::Recv(inner) | Expr::Yield(Some(inner)) => { - walk(inner, bound, out); - } - Expr::Send { channel, value } => { - walk(channel, bound, out); - walk(value, bound, out); - } Expr::Select { arms } => walk_arms(arms, bound, out), - Expr::Perform { - arguments, - named_arguments, - .. + Expr::Block { statements, value } => walk_block(statements, value.as_deref(), bound, out), + // A constructor spelling can name a local record update. Consumers + // filter actual type names against locals; an update's base is a read. + Expr::TypeConstructor { name, fields, .. } + | Expr::Update { + record: name, + fields, } => { - walk_slice(arguments, bound, out, |x| x); - walk_slice(named_arguments, bound, out, |n| &n.value); + note(name, bound, out); + walk_slice(fields, bound, out, |field| &field.value); } - Expr::Resume(Some(value)) => walk(value, bound, out), Expr::Handler { arms, body, .. } => { for arm in arms { scoped(bound, arm.params.clone(), out, |b, o| walk(&arm.body, b, o)); } walk(body, bound, out); } - // Every other variant is fully handled by the first two thirds. - _ => {} + _ => AstNode::Expression(e).for_each_child(|child| { + if let AstNode::Expression(expression) = child { + walk(expression, bound, out); + } + }), } } diff --git a/crates/osprey-ast/src/lib.rs b/crates/osprey-ast/src/lib.rs index f086f107..e1c120ac 100644 --- a/crates/osprey-ast/src/lib.rs +++ b/crates/osprey-ast/src/lib.rs @@ -26,7 +26,7 @@ pub use generics::{EffectRef, TypeParam, Variance}; pub use multiplicity::{Multiplicity, OperationTable, REPLAYABLE_KEYWORD}; pub use resume::{contains_resume, resumes_on_one_path}; pub use stage::{Stage, STATIC_STAGE_KEYWORD}; -pub use visit::{walk_each, walk_program, AstVisitor}; +pub use visit::{walk_each, walk_program, AstNode, AstVisitor}; /// The one wording for an entry conflict [MODULES-ENTRYPOINT]. Two phases can /// reach it — the type checker for a plain source, the project assembler for a @@ -217,6 +217,21 @@ pub struct TypeExpr { } impl TypeExpr { + /// A module contract supplies a type without adding a written annotation. + /// Line zero is reserved for compiler-generated source metadata. + #[must_use] + pub fn as_contract_annotation(&self) -> Self { + let mut ty = self.clone(); + ty.position = Some(Position { line: 0, column: 0 }); + ty + } + + /// Whether this annotation was supplied by module-signature elaboration. + #[must_use] + pub fn is_from_contract(&self) -> bool { + self.position.is_some_and(|position| position.line == 0) + } + /// A bare named type like `Int` or `Ptr`. pub fn named(name: impl Into) -> Self { TypeExpr { @@ -765,6 +780,17 @@ pub enum Expr { /// Named arguments. named_arguments: Vec, }, + /// Explicit declaration-binder arguments on a call's callee. + /// Both flavors use this node for [TYPE-GENERICS-APPLY]. Keeping the + /// application on the callee preserves ordinary and curried call nodes. + TypeApply { + /// The named function being instantiated. + function: Box, + /// Written type arguments, in declaration order. + type_args: Vec, + /// Source position of the callee, for application diagnostics. + position: Option, + }, /// `a |> b` pipe. Pipe { /// Piped value. diff --git a/crates/osprey-ast/src/multiplicity.rs b/crates/osprey-ast/src/multiplicity.rs index 62f83faf..3b9a59bc 100644 --- a/crates/osprey-ast/src/multiplicity.rs +++ b/crates/osprey-ast/src/multiplicity.rs @@ -178,17 +178,13 @@ mod tests { statements: vec![ effect( "Choice", - crate::Stage::Dynamic, + Stage::Dynamic, vec![ operation("pick", Some(Multiplicity::Many), false), operation("seed", None, true), ], ), - effect( - "Tile", - crate::Stage::Static, - vec![operation("size", None, false)], - ), + effect("Tile", Stage::Static, vec![operation("size", None, false)]), ], }; let table = OperationTable::collect(&program); diff --git a/crates/osprey-ast/src/mutate.rs b/crates/osprey-ast/src/mutate.rs index be73cec9..5d84bfef 100644 --- a/crates/osprey-ast/src/mutate.rs +++ b/crates/osprey-ast/src/mutate.rs @@ -45,7 +45,10 @@ pub fn children_mut(expression: &mut Expr, visit: &mut impl FnMut(&mut Expr)) { visit(left); visit(right); } - Expr::Unary { operand, .. } + Expr::TypeApply { + function: operand, .. + } + | Expr::Unary { operand, .. } | Expr::Spawn(operand) | Expr::Await(operand) | Expr::Recv(operand) diff --git a/crates/osprey-ast/src/resume.rs b/crates/osprey-ast/src/resume.rs index 4c3cb4ee..3070885c 100644 --- a/crates/osprey-ast/src/resume.rs +++ b/crates/osprey-ast/src/resume.rs @@ -9,7 +9,7 @@ //! which is the affine rule multiplicity enforces. //! Implements [EFFECTS-RESUME], [MULTI-HANDLE-ONCE]. -use crate::{Expr, InterpolatedPart, Stmt}; +use crate::{AstNode, Expr, Stmt}; /// True when `e` contains a `resume` belonging to the ENCLOSING handler arm — /// a nested handler's body owns its own `resume`s, so they don't count. @@ -17,66 +17,19 @@ use crate::{Expr, InterpolatedPart, Stmt}; pub fn contains_resume(e: &Expr) -> bool { match e { Expr::Resume(_) => true, - Expr::InterpolatedStr(parts) => parts - .iter() - .any(|p| matches!(p, crate::InterpolatedPart::Expr(inner) if contains_resume(inner))), - Expr::List(xs, _) => xs.iter().any(contains_resume), - Expr::Map(entries) => entries - .iter() - .any(|entry| contains_resume(&entry.key) || contains_resume(&entry.value)), - Expr::Object(fields) - | Expr::TypeConstructor { fields, .. } - | Expr::Update { fields, .. } => fields.iter().any(|f| contains_resume(&f.value)), - Expr::Binary { left, right, .. } | Expr::Pipe { left, right } => { - contains_resume(left) || contains_resume(right) - } - Expr::Unary { operand, .. } => contains_resume(operand), - Expr::Call { - function, - arguments, - named_arguments, - } => { - contains_resume(function) - || arguments.iter().any(contains_resume) - || named_arguments.iter().any(|n| contains_resume(&n.value)) - } - Expr::MethodCall { - target, - arguments, - named_arguments, - .. - } => { - contains_resume(target) - || arguments.iter().any(contains_resume) - || named_arguments.iter().any(|n| contains_resume(&n.value)) - } - Expr::FieldAccess { target, .. } => contains_resume(target), - Expr::Index { target, index } => contains_resume(target) || contains_resume(index), - Expr::Lambda { body, .. } | Expr::Spawn(body) | Expr::Await(body) | Expr::Recv(body) => { - contains_resume(body) - } - Expr::Yield(Some(value)) => contains_resume(value), - Expr::Send { channel, value } => contains_resume(channel) || contains_resume(value), - Expr::Match { value, arms } => { - contains_resume(value) || arms.iter().any(|arm| contains_resume(&arm.body)) - } - Expr::Block { statements, value } => { - statements.iter().any(stmt_contains_resume) - || value.as_deref().is_some_and(contains_resume) - } - Expr::Select { arms } => arms.iter().any(|arm| contains_resume(&arm.body)), - Expr::Perform { - arguments, - named_arguments, - .. - } => { - arguments.iter().any(contains_resume) - || named_arguments.iter().any(|n| contains_resume(&n.value)) - } - // A nested handler owns its own `resume`; do not mark the outer handler - // as a resuming region because of it. + // Only the handled body belongs to the enclosing arm. Expr::Handler { body, .. } => contains_resume(body), - _ => false, + _ => { + let mut found = false; + AstNode::Expression(e).for_each_child(|child| { + found = found + || match child { + AstNode::Statement(statement) => stmt_contains_resume(statement), + AstNode::Expression(expression) => contains_resume(expression), + }; + }); + found + } } } @@ -133,74 +86,14 @@ pub fn resumes_on_one_path(body: &Expr) -> u32 { /// Sum the path length of every child evaluated on the way through `body`. fn sequential_children(body: &Expr) -> u32 { - let each = |xs: &[Expr]| xs.iter().map(resumes_on_one_path).sum(); - match body { - Expr::InterpolatedStr(parts) => parts - .iter() - .map(|part| match part { - InterpolatedPart::Expr(inner) => resumes_on_one_path(inner), - InterpolatedPart::Text(_) => 0, - }) - .sum(), - Expr::List(values, _) => each(values), - Expr::Map(entries) => entries - .iter() - .map(|entry| resumes_on_one_path(&entry.key) + resumes_on_one_path(&entry.value)) - .sum(), - Expr::Object(fields) - | Expr::TypeConstructor { fields, .. } - | Expr::Update { fields, .. } => fields.iter().map(|f| resumes_on_one_path(&f.value)).sum(), - Expr::Binary { left, right, .. } | Expr::Pipe { left, right } => { - resumes_on_one_path(left) + resumes_on_one_path(right) - } - Expr::Unary { operand, .. } => resumes_on_one_path(operand), - Expr::Call { - function, - arguments, - named_arguments, - } => { - resumes_on_one_path(function) - + each(arguments) - + named_arguments - .iter() - .map(|n| resumes_on_one_path(&n.value)) - .sum::() - } - Expr::MethodCall { - target, - arguments, - named_arguments, - .. - } => { - resumes_on_one_path(target) - + each(arguments) - + named_arguments - .iter() - .map(|n| resumes_on_one_path(&n.value)) - .sum::() - } - Expr::FieldAccess { target, .. } => resumes_on_one_path(target), - Expr::Index { target, index } => resumes_on_one_path(target) + resumes_on_one_path(index), - Expr::Spawn(inner) | Expr::Await(inner) | Expr::Recv(inner) => resumes_on_one_path(inner), - Expr::Yield(value) => value.as_deref().map_or(0, resumes_on_one_path), - Expr::Send { channel, value } => resumes_on_one_path(channel) + resumes_on_one_path(value), - Expr::Block { statements, value } => { - statements.iter().map(statement_resumes).sum::() - + value.as_deref().map_or(0, resumes_on_one_path) - } - Expr::Perform { - arguments, - named_arguments, - .. - } => { - each(arguments) - + named_arguments - .iter() - .map(|n| resumes_on_one_path(&n.value)) - .sum::() - } - _ => 0, - } + let mut total = 0; + AstNode::Expression(body).for_each_child(|child| { + total += match child { + AstNode::Statement(statement) => statement_resumes(statement), + AstNode::Expression(expression) => resumes_on_one_path(expression), + }; + }); + total } fn statement_resumes(stmt: &Stmt) -> u32 { diff --git a/crates/osprey-ast/src/resume_tests.rs b/crates/osprey-ast/src/resume_tests.rs index 216c9a72..2b59237a 100644 --- a/crates/osprey-ast/src/resume_tests.rs +++ b/crates/osprey-ast/src/resume_tests.rs @@ -33,18 +33,18 @@ fn field(value: Expr) -> crate::FieldAssignment { value, } } -fn assert_all_contain(cases: &[Expr]) { - for e in cases { - assert!(contains_resume(e), "resume not found in {e:?}"); - } -} - -#[test] -fn walks_literal_and_data_container_forms() { - assert_all_contain(&[ - Expr::InterpolatedStr(vec![crate::InterpolatedPart::Expr(r())]), +/// Every expression form that holds a sub-expression in a **container** +/// position, each built around exactly one `resume()`. The containment walk and +/// the one-path count must both cross all of them, so the list is stated once +/// here instead of once per test, where the two copies could drift apart. +fn container_forms() -> Vec { + vec![ + Expr::InterpolatedStr(vec![ + InterpolatedPart::Text("t".into()), + InterpolatedPart::Expr(r()), + ]), Expr::List(vec![r()], None), - Expr::Map(vec![crate::MapEntry { + Expr::Map(vec![MapEntry { key: r(), value: Expr::Integer(0), }]), @@ -71,16 +71,23 @@ fn walks_literal_and_data_container_forms() { op: "-".into(), operand: b(r()), }, - ]); + ] } -#[test] -fn walks_call_control_and_concurrency_forms() { - assert_all_contain(&[ +/// The call, field and concurrency forms — still one sequential path each, so +/// they too are crossed exactly once. Positional and named argument lists are +/// both listed, because they are separate positions in the walk. +fn call_forms() -> Vec { + vec![ + Expr::Call { + function: b(Expr::Identifier("f".into())), + arguments: vec![r()], + named_arguments: Vec::new(), + }, Expr::Call { function: b(Expr::Identifier("f".into())), arguments: Vec::new(), - named_arguments: vec![crate::NamedArgument { + named_arguments: vec![NamedArgument { name: "a".into(), value: r(), }], @@ -99,12 +106,6 @@ fn walks_call_control_and_concurrency_forms() { target: b(Expr::Identifier("xs".into())), index: b(r()), }, - Expr::Lambda { - parameters: Vec::new(), - return_type: None, - body: b(r()), - position: None, - }, Expr::Spawn(b(r())), Expr::Await(b(r())), Expr::Recv(b(r())), @@ -113,16 +114,6 @@ fn walks_call_control_and_concurrency_forms() { channel: b(Expr::Integer(0)), value: b(r()), }, - Expr::Match { - value: b(r()), - arms: Vec::new(), - }, - Expr::Select { - arms: vec![crate::MatchArm { - pattern: crate::Pattern::Wildcard, - body: r(), - }], - }, Expr::Perform { effect: "E".into(), operation: "o".into(), @@ -130,7 +121,45 @@ fn walks_call_control_and_concurrency_forms() { named_arguments: Vec::new(), position: None, }, - ]); + ] +} + +/// The forms whose sub-expression is NOT on one sequential path: a lambda body +/// runs later, and `match`/`select` arms are alternatives. The walk still finds +/// a `resume` inside them — the one-path count deliberately does not cross them. +fn branching_forms() -> Vec { + vec![ + Expr::Lambda { + parameters: Vec::new(), + return_type: None, + body: b(r()), + position: None, + }, + Expr::Match { + value: b(r()), + arms: Vec::new(), + }, + Expr::Select { + arms: vec![arm(r())], + }, + ] +} + +fn assert_all_contain(cases: &[Expr]) { + for e in cases { + assert!(contains_resume(e), "resume not found in {e:?}"); + } +} + +#[test] +fn walks_literal_and_data_container_forms() { + assert_all_contain(&container_forms()); +} + +#[test] +fn walks_call_control_and_concurrency_forms() { + assert_all_contain(&call_forms()); + assert_all_contain(&branching_forms()); } #[test] @@ -139,7 +168,7 @@ fn negatives_and_statement_walks() { assert!(!contains_resume(&Expr::Integer(1))); assert!(!contains_resume(&Expr::Yield(None))); let import_only = Expr::Block { - statements: vec![crate::Stmt::Import(crate::ImportDecl { + statements: vec![Stmt::Import(crate::ImportDecl { target: crate::ImportTarget { namespace: crate::NamespaceName::Identifier("m".into()), path: crate::SymbolPath::default(), @@ -153,7 +182,7 @@ fn negatives_and_statement_walks() { assert!(!contains_resume(&import_only)); // Assignment statements inside blocks are walked. let assign = Expr::Block { - statements: vec![crate::Stmt::Assignment { + statements: vec![Stmt::Assignment { name: "x".into(), value: r(), position: None, @@ -180,7 +209,7 @@ fn finds_resume_through_blocks_but_not_nested_handlers() { let nested = Expr::Handler { stage: crate::Stage::Dynamic, effect: "E".into(), - arms: vec![crate::HandlerArm { + arms: vec![HandlerArm { operation: "op".into(), params: Vec::new(), body: Expr::Resume(None), @@ -250,87 +279,10 @@ fn select_branches_and_lambdas_and_nested_handlers() { #[test] fn every_sequential_position_is_crossed() { - let cases = [ - Expr::InterpolatedStr(vec![ - InterpolatedPart::Text("t".into()), - InterpolatedPart::Expr(r()), - ]), - Expr::List(vec![r()], None), - Expr::Map(vec![MapEntry { - key: r(), - value: Expr::Integer(0), - }]), - Expr::Object(vec![field(r())]), - Expr::TypeConstructor { - name: "C".into(), - type_args: Vec::new(), - fields: vec![field(r())], - }, - Expr::Update { - record: "r".into(), - fields: vec![field(r())], - }, - Expr::Binary { - op: "+".into(), - left: b(Expr::Integer(1)), - right: b(r()), - }, - Expr::Pipe { - left: b(r()), - right: b(Expr::Identifier("f".into())), - }, - Expr::Unary { - op: "-".into(), - operand: b(r()), - }, - Expr::Call { - function: b(Expr::Identifier("f".into())), - arguments: vec![r()], - named_arguments: Vec::new(), - }, - Expr::MethodCall { - target: b(r()), - method: "m".into(), - arguments: Vec::new(), - named_arguments: Vec::new(), - }, - Expr::FieldAccess { - target: b(r()), - field: "x".into(), - }, - Expr::Index { - target: b(Expr::Identifier("xs".into())), - index: b(r()), - }, - Expr::Spawn(b(r())), - Expr::Await(b(r())), - Expr::Recv(b(r())), - Expr::Yield(Some(b(r()))), - Expr::Send { - channel: b(Expr::Integer(0)), - value: b(r()), - }, - Expr::Perform { - effect: "E".into(), - operation: "op".into(), - arguments: vec![r()], - named_arguments: Vec::new(), - position: None, - }, - ]; - for case in &cases { + for case in container_forms().iter().chain(&call_forms()) { assert_eq!(resumes_on_one_path(case), 1, "not crossed: {case:?}"); } - // Named arguments are crossed too, and a value-less `yield` crosses nothing. - let named = Expr::Call { - function: b(Expr::Identifier("f".into())), - arguments: Vec::new(), - named_arguments: vec![NamedArgument { - name: "a".into(), - value: r(), - }], - }; - assert_eq!(resumes_on_one_path(&named), 1); + // A value-less `yield` and a bare identifier cross nothing. assert_eq!(resumes_on_one_path(&Expr::Yield(None)), 0); assert_eq!(resumes_on_one_path(&Expr::Identifier("x".into())), 0); } diff --git a/crates/osprey-ast/src/stage.rs b/crates/osprey-ast/src/stage.rs index a3ed12b9..4bf1b7d5 100644 --- a/crates/osprey-ast/src/stage.rs +++ b/crates/osprey-ast/src/stage.rs @@ -297,7 +297,7 @@ fn instantiation_errors( if declared.stage == Stage::Dynamic { return vec![StageError::new( format!( - "`{site} {effect}` names an instantiation of dynamic effect `{base}`; a dynamic handler is keyed by effect name at runtime, so instantiations share one key and cannot be told apart (docs/plans/0024-staged-effects.md). Declare `static effect {base}`, or write `{site} {base}` and let inference instantiate it" + "`{site} {effect}` names an instantiation of dynamic effect `{base}`; a written instantiation is the identity of a `static effect`, while a dynamic effect takes its instantiation from inference (docs/plans/0024-staged-effects.md). Declare `static effect {base}`, or write `{site} {base}` and let inference instantiate it" ), position, )]; diff --git a/crates/osprey-ast/src/visit.rs b/crates/osprey-ast/src/visit.rs index 91f69f74..c22889b4 100644 --- a/crates/osprey-ast/src/visit.rs +++ b/crates/osprey-ast/src/visit.rs @@ -18,11 +18,26 @@ pub trait AstVisitor { fn expression(&mut self, _expression: &Expr) {} } -enum Node<'a> { +/// A borrowed syntax node whose immediate children can be visited in source order. +#[derive(Debug, Clone, Copy)] +pub enum AstNode<'a> { + /// A declaration or executable statement. Statement(&'a Stmt), + /// An expression, including any statements in a block. Expression(&'a Expr), } +impl AstNode<'_> { + /// Visit immediate children only. Callers retain control of recursion, + /// lexical scopes, and branch-specific combination rules. + pub fn for_each_child(self, mut visit: impl FnMut(Self)) { + match self { + Self::Statement(statement) => statement_children(statement, &mut visit), + Self::Expression(expression) => expression_children(expression, &mut visit), + } + } +} + /// Walk every statement and expression in source order without recursive /// visitor boilerplate. Implements the shared traversal required by /// [LSP-HOVER-EFFECT-OPERATIONS] and [LSP-IMPLEMENTATIONS-EFFECT-HANDLERS]. @@ -31,134 +46,134 @@ pub fn walk_program(program: &Program, visitor: &mut impl AstVisitor) { .statements .iter() .rev() - .map(Node::Statement) + .map(AstNode::Statement) .collect(); while let Some(node) = pending.pop() { match node { - Node::Statement(statement) => { - visitor.statement(statement); - push_statement_children(statement, &mut pending); - } - Node::Expression(expression) => { - visitor.expression(expression); - push_expression_children(expression, &mut pending); - } + AstNode::Statement(statement) => visitor.statement(statement), + AstNode::Expression(expression) => visitor.expression(expression), + } + let start = pending.len(); + node.for_each_child(|child| pending.push(child)); + if let Some(children) = pending.get_mut(start..) { + children.reverse(); } } } -fn push_statement_children<'a>(statement: &'a Stmt, pending: &mut Vec>) { +fn statement_children<'a>(statement: &'a Stmt, visit: &mut impl FnMut(AstNode<'a>)) { match statement { Stmt::Namespace { body, .. } => { - pending.extend(body.iter().rev().map(Node::Statement)); + for statement in body { + visit(AstNode::Statement(statement)); + } + } + Stmt::Module { body, .. } => { + for item in body { + visit(AstNode::Statement(&item.declaration)); + } } - Stmt::Module { body, .. } => pending.extend( - body.iter() - .rev() - .map(|item| Node::Statement(item.declaration.as_ref())), - ), Stmt::Let { value, .. } | Stmt::Assignment { value, .. } | Stmt::Expr { value, .. } - | Stmt::Function { body: value, .. } => pending.push(Node::Expression(value)), - Stmt::Type { variants, .. } => push_constraints(variants, pending), - Stmt::Import(_) | Stmt::Extern { .. } | Stmt::Effect { .. } | Stmt::Signature { .. } => {} - } -} - -fn push_constraints<'a>(variants: &'a [crate::TypeVariant], pending: &mut Vec>) { - for variant in variants.iter().rev() { - for field in variant.fields.iter().rev() { - if let Some(constraint) = &field.constraint { - pending.push(Node::Expression(constraint)); + | Stmt::Function { body: value, .. } => visit(AstNode::Expression(value)), + Stmt::Type { variants, .. } => { + for field in variants.iter().flat_map(|variant| &variant.fields) { + if let Some(constraint) = &field.constraint { + visit(AstNode::Expression(constraint)); + } } } + Stmt::Import(_) | Stmt::Extern { .. } | Stmt::Effect { .. } | Stmt::Signature { .. } => {} } } -fn push_expression_children<'a>(expression: &'a Expr, pending: &mut Vec>) { +fn expression_children<'a>(expression: &'a Expr, visit: &mut impl FnMut(AstNode<'a>)) { match expression { Expr::InterpolatedStr(parts) => { - for part in parts.iter().rev() { + for part in parts { if let InterpolatedPart::Expr(value) = part { - pending.push(Node::Expression(value)); + visit(AstNode::Expression(value)); } } } - Expr::List(values, _) => push_each(values, pending, |value| value), + Expr::List(values, _) => visit_each(values, visit, |value| value), Expr::Map(entries) => { - for entry in entries.iter().rev() { - pending.push(Node::Expression(&entry.value)); - pending.push(Node::Expression(&entry.key)); + for entry in entries { + visit(AstNode::Expression(&entry.key)); + visit(AstNode::Expression(&entry.value)); } } Expr::Object(fields) | Expr::TypeConstructor { fields, .. } - | Expr::Update { fields, .. } => push_each(fields, pending, |field| &field.value), + | Expr::Update { fields, .. } => visit_each(fields, visit, |field| &field.value), Expr::Binary { left, right, .. } | Expr::Pipe { left, right } => { - pending.push(Node::Expression(right)); - pending.push(Node::Expression(left)); + visit(AstNode::Expression(left)); + visit(AstNode::Expression(right)); + } + Expr::TypeApply { + function: operand, .. } - Expr::Unary { operand, .. } + | Expr::Unary { operand, .. } | Expr::Spawn(operand) | Expr::Await(operand) - | Expr::Recv(operand) => pending.push(Node::Expression(operand)), + | Expr::Recv(operand) + | Expr::FieldAccess { + target: operand, .. + } + | Expr::Lambda { body: operand, .. } => visit(AstNode::Expression(operand)), Expr::Call { - function, + function: target, arguments, named_arguments, - } => { - push_each(named_arguments, pending, |argument| &argument.value); - push_each(arguments, pending, |argument| argument); - pending.push(Node::Expression(function)); } - Expr::MethodCall { + | Expr::MethodCall { target, arguments, named_arguments, .. } => { - push_each(named_arguments, pending, |argument| &argument.value); - push_each(arguments, pending, |argument| argument); - pending.push(Node::Expression(target)); + visit(AstNode::Expression(target)); + visit_each(arguments, visit, |argument| argument); + visit_each(named_arguments, visit, |argument| &argument.value); } - Expr::FieldAccess { target, .. } => pending.push(Node::Expression(target)), Expr::Index { target, index } => { - pending.push(Node::Expression(index)); - pending.push(Node::Expression(target)); + visit(AstNode::Expression(target)); + visit(AstNode::Expression(index)); } - Expr::Lambda { body, .. } => pending.push(Node::Expression(body)), Expr::Match { value, arms } => { - push_each(arms, pending, |arm| &arm.body); - pending.push(Node::Expression(value)); + visit(AstNode::Expression(value)); + visit_each(arms, visit, |arm| &arm.body); } Expr::Block { statements, value } => { + for statement in statements { + visit(AstNode::Statement(statement)); + } if let Some(value) = value { - pending.push(Node::Expression(value)); + visit(AstNode::Expression(value)); } - pending.extend(statements.iter().rev().map(Node::Statement)); } Expr::Yield(value) | Expr::Resume(value) => { if let Some(value) = value { - pending.push(Node::Expression(value)); + visit(AstNode::Expression(value)); } } Expr::Send { channel, value } => { - pending.push(Node::Expression(value)); - pending.push(Node::Expression(channel)); + visit(AstNode::Expression(channel)); + visit(AstNode::Expression(value)); } - Expr::Select { arms } => push_each(arms, pending, |arm| &arm.body), + Expr::Select { arms } => visit_each(arms, visit, |arm| &arm.body), Expr::Perform { arguments, named_arguments, .. } => { - push_each(named_arguments, pending, |argument| &argument.value); - push_each(arguments, pending, |argument| argument); + visit_each(arguments, visit, |argument| argument); + visit_each(named_arguments, visit, |argument| &argument.value); } Expr::Handler { arms, body, .. } => { - pending.push(Node::Expression(body)); - push_each(arms, pending, |arm| &arm.body); + visit_each(arms, visit, |arm| &arm.body); + visit(AstNode::Expression(body)); } Expr::Integer(_) | Expr::Float(_) @@ -169,17 +184,14 @@ fn push_expression_children<'a>(expression: &'a Expr, pending: &mut Vec } } -fn push_each<'a, T>( +fn visit_each<'a, T>( items: &'a [T], - pending: &mut Vec>, + visit: &mut impl FnMut(AstNode<'a>), expression: impl Fn(&'a T) -> &'a Expr, ) { - pending.extend( - items - .iter() - .rev() - .map(|item| Node::Expression(expression(item))), - ); + for item in items { + visit(AstNode::Expression(expression(item))); + } } /// Recurse into every element of `items`, projecting each to its diff --git a/crates/osprey-cli/src/android.rs b/crates/osprey-cli/src/android.rs index 4263e985..eb2b95dd 100644 --- a/crates/osprey-cli/src/android.rs +++ b/crates/osprey-cli/src/android.rs @@ -43,18 +43,11 @@ impl Target { /// Unsupported options fail even when only checking a program. [ANDROID-TARGET-OPTIONS] pub(crate) fn validate(cli: &Cli) -> Result<(), ExitCode> { - if let Some(code) = crate::reject_debug_cross_target(cli) { - return Err(code); - } - if cli.memory != "default" { - return Err(fail( - "Android supports --memory=default; other runtime archives are not available", - )); - } - if cli.mode == "--run" { - return Err(fail("Android produces an app-logic library; use --compile and call it from an Android host (see examples/mobile/android/)")); - } - Ok(()) + crate::reject_cross_target_options( + cli, + "Android", + Some("an Android host (see examples/mobile/android/)"), + ) } pub(crate) fn source( @@ -73,11 +66,7 @@ pub(crate) fn build( out: &Path, target: Target, ) -> Result<(), ExitCode> { - if out.extension().and_then(|e| e.to_str()) != Some("a") { - return Err(fail( - "Android output must end in .a; a matching .h is generated beside it", - )); - } + crate::toolchain::validate_archive_output(out, "Android").map_err(|e| fail(&e))?; let (ir, header) = source(program, path, target).map_err(|e| fail(&e))?; let bin = ndk_bin().map_err(|e| fail(&e))?; let runtime = find_runtime_lib(target.runtime()).ok_or_else(|| { diff --git a/crates/osprey-cli/src/docs.rs b/crates/osprey-cli/src/docs.rs index 0af80b43..66f07800 100644 --- a/crates/osprey-cli/src/docs.rs +++ b/crates/osprey-cli/src/docs.rs @@ -16,7 +16,7 @@ use std::path::{Path, PathBuf}; use std::process::ExitCode; /// Entry point for the `--docs` mode. Reads `--docs-dir ` from `args`. -pub fn run(args: &[String]) -> ExitCode { +pub(crate) fn run(args: &[String]) -> ExitCode { let dir = if let Some(dir) = docs_dir(args) { PathBuf::from(dir) } else { diff --git a/crates/osprey-cli/src/fmt.rs b/crates/osprey-cli/src/fmt.rs index b4aae630..eeb52568 100644 --- a/crates/osprey-cli/src/fmt.rs +++ b/crates/osprey-cli/src/fmt.rs @@ -35,7 +35,7 @@ struct Tally { } /// Entry point for `osprey fmt`; `args` excludes the `fmt` subcommand word. -pub fn run(args: &[String]) -> ExitCode { +pub(crate) fn run(args: &[String]) -> ExitCode { let parsed = match parse(args) { Ok(parsed) => parsed, Err(message) => { diff --git a/crates/osprey-cli/src/ios.rs b/crates/osprey-cli/src/ios.rs index 415fef4f..be3c2370 100644 --- a/crates/osprey-cli/src/ios.rs +++ b/crates/osprey-cli/src/ios.rs @@ -60,18 +60,7 @@ impl Target { /// Refuse native-only settings before invoking the cross compiler. /// Implements [IOS-TARGET-OPTIONS]. pub(crate) fn validate(cli: &Cli) -> Result<(), ExitCode> { - if let Some(code) = crate::reject_debug_cross_target(cli) { - return Err(code); - } - if cli.memory != "default" { - return Err(fail( - "iOS supports --memory=default; other runtime archives are not available", - )); - } - if cli.mode == "--run" { - return Err(fail("iOS produces an app-logic library; use --compile and call it from a Swift host (see examples/ios/)")); - } - Ok(()) + crate::reject_cross_target_options(cli, "iOS", Some("a Swift host (see examples/ios/)")) } /// Emit the app's C ABI and LLVM implementation before any toolchain work. @@ -116,10 +105,7 @@ pub(crate) fn build( } fn validate_output(out: &Path) -> Result<(), String> { - if out.extension().and_then(|e| e.to_str()) != Some("a") { - return Err("iOS output must end in .a; a matching .h is generated beside it".to_string()); - } - Ok(()) + crate::toolchain::validate_archive_output(out, "iOS") } fn sdk_path(target: Target) -> Result { diff --git a/crates/osprey-cli/src/ios_abi_tests.rs b/crates/osprey-cli/src/ios_abi_tests.rs index c314fdf2..e1e8cb05 100644 --- a/crates/osprey-cli/src/ios_abi_tests.rs +++ b/crates/osprey-cli/src/ios_abi_tests.rs @@ -1,4 +1,5 @@ use super::*; +use crate::testkit::shows; use std::path::{Path, PathBuf}; const SOURCE: &str = "extern fn host_log(message: string) -> int\n\ @@ -67,13 +68,23 @@ fn thunks_rename_the_entry_and_forward_with_the_c_bool_convention() { let out = with_host_abi(&ir, &abi).expect("thunked"); assert!(out.contains("define i32 @osprey_main() "), "entry renamed"); assert!(!out.contains("@main("), "no `main` symbol survives"); - assert!(out.contains("define zeroext i1 @osprey_flag(i1 zeroext %p0) {")); - assert!(out.contains(" %r = call i1 @flag(i1 %p0)\n ret i1 %r")); + shows( + &out, + &[ + "define zeroext i1 @osprey_flag(i1 zeroext %p0) {", + " %r = call i1 @flag(i1 %p0)\n ret i1 %r", + ], + ); assert!(out .contains("define void @osprey_shout(i8* %p0) {\n call i64 @shout(i8* %p0)\n ret void")); - assert!(out.contains("define i8* @osprey_greet(i8* %p0) {")); - assert!(out.contains("define double @osprey_scaled(i64 %p0) {")); - assert!(out.contains("define i64 @osprey_total(i64 %p0, i64 %p1) {")); + shows( + &out, + &[ + "define i8* @osprey_greet(i8* %p0) {", + "define double @osprey_scaled(i64 %p0) {", + "define i64 @osprey_total(i64 %p0, i64 %p1) {", + ], + ); assert!(with_host_abi("; no entry here", &abi).is_err()); } @@ -277,8 +288,10 @@ fn unsupported_extern_signatures_report_the_c_boundary_restriction() { fn renaming_imports_preserves_strings_and_similarly_prefixed_symbols() { let (abi, ir) = abi_of("extern fn host_flag(b: bool) -> bool\nfn host_flag_more(b) = host_flag(b)\nfn text() = \"@host_flag( @main(\"\n"); let out = with_host_abi(&ir, &abi).expect("adapted"); - assert!(out.contains("c\"@host_flag( @main(\\00\""), "{out}"); - assert!(out.contains("define i1 @host_flag_more("), "{out}"); + shows( + &out, + &["c\"@host_flag( @main(\\00\"", "define i1 @host_flag_more("], + ); } #[test] diff --git a/crates/osprey-cli/src/main.rs b/crates/osprey-cli/src/main.rs index 31f09be7..2ca136a5 100644 --- a/crates/osprey-cli/src/main.rs +++ b/crates/osprey-cli/src/main.rs @@ -29,7 +29,11 @@ mod target_capabilities; mod test_cmd; mod test_coverage; mod test_skips; +#[cfg(test)] +#[path = "../../testkit.rs"] +mod testkit; mod toolchain; +mod warnings; mod wasm; use osprey_syntax::Flavor; @@ -381,7 +385,7 @@ pub(crate) fn load_input(cli: &Cli) -> Result { eprintln!("error: --flavor applies to single files; projects select flavor per source"); return Err(ExitCode::from(2)); } - return project::CompilationInput::load_project(path).map_err(|errors| { + return CompilationInput::load_project(path).map_err(|errors| { print_project_errors(&errors, path); ExitCode::FAILURE }); @@ -464,11 +468,16 @@ fn dispatch(cli: &Cli, input: &CompilationInput) -> ExitCode { /// Type-check `program`, print every error in `file:line:col: message` form, /// and return how many there were. The shared gate for every compiling mode. +/// +/// Warnings print alongside the errors and are deliberately not counted: a +/// redundant annotation is a defect to delete, never a reason to fail a build +/// ([TYPE-ANNOTATION-REDUNDANT]). pub(crate) fn report_type_errors(input: &CompilationInput) -> usize { let errors = osprey_types::check_program(input.program()); for e in &errors { eprintln!("{}", input.diagnostic(e.position, &e.message)); } + warnings::report(input, &osprey_types::redundant_annotations(input.program())); errors.len() } @@ -494,34 +503,37 @@ fn target_error(cli: &Cli, input: &CompilationInput) -> Option { return Some(ExitCode::FAILURE); } if cli.target == "wasm32" { - if let Some(code) = reject_debug_cross_target(cli) { + if let Err(code) = reject_cross_target_options(cli, "wasm32", None) { return Some(code); } - if cli.memory != "default" { - return Some(toolchain::fail( - "wasm32 supports --memory=default; other runtime archives are not available", - )); - } } if let Some(target) = android::Target::parse(&cli.target) { - if let Err(code) = android::validate(cli) { - return Some(code); - } - if cli.mode == "--check" { - return android::source(input.program(), input.debug_path(), target) - .err() - .map(|error| toolchain::fail(&error)); - } + return app_target_error(&cli.mode, android::validate(cli), || { + android::source(input.program(), input.debug_path(), target) + }); } if let Some(target) = ios::Target::parse(&cli.target) { - if let Err(code) = ios::validate(cli) { - return Some(code); - } - if cli.mode == "--check" { - return ios::source(input.program(), input.debug_path(), target) - .err() - .map(|error| toolchain::fail(&error)); - } + return app_target_error(&cli.mode, ios::validate(cli), || { + ios::source(input.program(), input.debug_path(), target) + }); + } + None +} + +/// The app-library targets (iOS, Android) share one order: reject the +/// unsupported options, then — for `--check` alone — generate the C ABI and +/// report its failure as a diagnostic. `source` stays lazy so no other mode +/// pays for ABI generation, and so option errors always win the race. +fn app_target_error( + mode: &str, + validation: Result<(), ExitCode>, + source: impl FnOnce() -> Result<(String, String), String>, +) -> Option { + if let Err(code) = validation { + return Some(code); + } + if mode == "--check" { + return source().err().map(|error| toolchain::fail(&error)); } None } @@ -551,17 +563,43 @@ fn reject_debug_cross_target(cli: &Cli) -> Option { None } +/// Every cross target refuses the native-only build flags and the non-default +/// runtime archives. A target that produces a LIBRARY rather than a runnable +/// image also refuses `--run`, and names the host that calls it in `host_hint`; +/// `None` marks a target with a `--run` form of its own. +/// Implements [IOS-TARGET-OPTIONS] and [ANDROID-TARGET-OPTIONS]. +fn reject_cross_target_options( + cli: &Cli, + platform: &str, + host_hint: Option<&str>, +) -> Result<(), ExitCode> { + if let Some(code) = reject_debug_cross_target(cli) { + return Err(code); + } + if cli.memory != "default" { + return Err(toolchain::fail(&format!( + "{platform} supports --memory=default; other runtime archives are not available" + ))); + } + match host_hint { + Some(hint) if cli.mode == "--run" => Err(toolchain::fail(&format!( + "{platform} produces an app-logic library; use --compile and call it from {hint}" + ))), + _ => Ok(()), + } +} + /// The native build kind this invocation asked for (`--debug` and `--profile` /// are mutually exclusive; `parse_args` enforces that). fn build_kind(cli: &Cli) -> osprey_debug::BuildKind { if cli.debug { - osprey_debug::BuildKind::Debug + osprey_debug::DebugBuild::ON.kind() } else if cli.profile { osprey_debug::BuildKind::Profile } else if std::env::var_os(TEST_COVERAGE_BUILD_ENV).is_some() { osprey_debug::BuildKind::Coverage } else { - osprey_debug::BuildKind::Release + osprey_debug::DebugBuild::OFF.kind() } } diff --git a/crates/osprey-cli/src/project.rs b/crates/osprey-cli/src/project.rs index b101f0d1..0bed56c6 100644 --- a/crates/osprey-cli/src/project.rs +++ b/crates/osprey-cli/src/project.rs @@ -128,24 +128,24 @@ impl CompilationInput { &self.debug_path } + /// Resolve a flattened checker position to the physical file it was + /// written in, with that file's own line number. + pub(crate) fn location(&self, position: Position) -> (String, u32, u32) { + if let CompilationUnit::Project(project) = &self.unit { + if let Some((source, line)) = project.source_at_line(position.line) { + return (source.path.display().to_string(), line, position.column); + } + } + (self.display_path.clone(), position.line, position.column) + } + /// Format a flattened checker location using its physical source file. pub(crate) fn diagnostic(&self, position: Option, message: &str) -> String { let Some(position) = position else { return format!("{}: {message}", self.display_path); }; - if let CompilationUnit::Project(project) = &self.unit { - if let Some((source, line)) = project.source_at_line(position.line) { - return format!( - "{}:{line}:{}: {message}", - source.path.display(), - position.column - ); - } - } - format!( - "{}:{}:{}: {message}", - self.display_path, position.line, position.column - ) + let (path, line, column) = self.location(position); + format!("{path}:{line}:{column}: {message}") } /// Render symbols with source-level qualified names where assembly mangled them. diff --git a/crates/osprey-cli/src/toolchain.rs b/crates/osprey-cli/src/toolchain.rs index 6730cee1..cfbb82c5 100644 --- a/crates/osprey-cli/src/toolchain.rs +++ b/crates/osprey-cli/src/toolchain.rs @@ -26,6 +26,17 @@ pub(crate) fn fail(msg: &str) -> ExitCode { ExitCode::FAILURE } +/// An app-library target publishes a static archive plus a matching C header, +/// so `-o` must name the archive. `platform` opens the diagnostic. +pub(crate) fn validate_archive_output(out: &Path, platform: &str) -> Result<(), String> { + if out.extension().and_then(|e| e.to_str()) != Some("a") { + return Err(format!( + "{platform} output must end in .a; a matching .h is generated beside it" + )); + } + Ok(()) +} + pub(crate) fn write(path: &Path, contents: &str) -> Result<(), ExitCode> { std::fs::write(path, contents) .map_err(|e| fail(&format!("cannot write {}: {e}", path.display()))) diff --git a/crates/osprey-cli/src/warnings.rs b/crates/osprey-cli/src/warnings.rs new file mode 100644 index 00000000..b95b4d33 --- /dev/null +++ b/crates/osprey-cli/src/warnings.rs @@ -0,0 +1,175 @@ +//! Terminal rendering for compiler warnings. +//! +//! A warning is advice, and a hundred of them are only useful if a reader can +//! see the shape of the advice at a glance. Warnings are therefore grouped by +//! the file they were written in, listed under an aligned `line:column` +//! gutter, and closed with the count and the rules that raised them, so the +//! summary answers "how much of this is there, and what turned it on" without +//! scrolling back. +//! +//! Rendering is a pure function over the diagnostics so the exact text is +//! testable; printing is the only side effect. + +use std::collections::{BTreeMap, BTreeSet}; + +use osprey_types::TypeWarning; + +use crate::project::CompilationInput; + +/// One file's warnings: the `line:column` gutter and the message, in order. +type Listing = Vec<(String, String)>; + +/// Print `warnings` to stderr. A clean build prints nothing. +pub(crate) fn report(input: &CompilationInput, warnings: &[TypeWarning]) { + if let Some(text) = render(input, warnings) { + eprintln!("{text}"); + } +} + +/// The whole warning block, or `None` when there is nothing to say. +pub(crate) fn render(input: &CompilationInput, warnings: &[TypeWarning]) -> Option { + if warnings.is_empty() { + return None; + } + let blocks: Vec = group(input, warnings) + .into_iter() + .map(|(file, listing)| block(&file, &listing)) + .collect(); + Some(format!("{}\n{}", blocks.join("\n"), summary(warnings))) +} + +/// One file's heading and its aligned listing. +fn block(file: &str, listing: &Listing) -> String { + let width = listing + .iter() + .map(|(gutter, _)| gutter.len()) + .max() + .unwrap_or_default(); + let lines = listing + .iter() + .map(|(gutter, message)| format!(" {gutter:>width$} warning: {message}")) + .collect::>() + .join("\n"); + format!("\n{file}\n{lines}\n") +} + +/// Group warnings by file, keeping each file's own source order. +fn group(input: &CompilationInput, warnings: &[TypeWarning]) -> BTreeMap { + let mut grouped: BTreeMap = BTreeMap::new(); + for warning in warnings { + let (file, gutter) = locate(input, warning); + grouped + .entry(file) + .or_default() + .push((gutter, warning.message.clone())); + } + grouped +} + +/// A warning's file and `line:column` gutter, falling back to the unit's own +/// label for a warning inference could not anchor to a position. +fn locate(input: &CompilationInput, warning: &TypeWarning) -> (String, String) { + match warning.position { + Some(position) => { + let (file, line, column) = input.location(position); + (file, format!("{line}:{column}")) + } + None => (input.display_path().to_string(), String::from("-")), + } +} + +/// The closing line: how many warnings there are and which rules raised them. +fn summary(warnings: &[TypeWarning]) -> String { + let rules: BTreeSet<&str> = warnings.iter().map(|w| w.rule).collect(); + let plural = if warnings.len() == 1 { "" } else { "s" }; + format!( + "{} warning{plural} ({})", + warnings.len(), + rules.into_iter().collect::>().join(", ") + ) +} + +#[cfg(test)] +mod tests { + use super::render; + use crate::project::CompilationInput; + use osprey_ast::Position; + use osprey_types::{TypeWarning, REDUNDANT_ANNOTATION}; + + /// A single-file unit whose warnings resolve against `main.osp`. + fn unit() -> CompilationInput { + let program = osprey_syntax::parse_program("let answer = 42\n").program; + CompilationInput::script("main.osp", String::new(), program) + } + + fn warning(line: u32, column: u32, message: &str) -> TypeWarning { + TypeWarning { + message: message.to_string(), + position: Some(Position { line, column }), + rule: REDUNDANT_ANNOTATION, + } + } + + #[test] + fn a_clean_program_renders_nothing_at_all() { + assert_eq!(render(&unit(), &[]), None); + } + + #[test] + fn one_warning_renders_its_file_gutter_message_and_singular_summary() { + let raised = [warning(3, 4, "redundant return type annotation on `greet`")]; + assert_eq!( + render(&unit(), &raised), + Some( + "\nmain.osp\n 3:4 warning: redundant return type annotation on `greet`\n\n1 warning (redundant-annotation)" + .to_string() + ) + ); + } + + #[test] + fn gutters_are_right_aligned_so_messages_line_up() { + let raised = [warning(9, 1, "first"), warning(100, 12, "second")]; + assert_eq!( + render(&unit(), &raised), + Some( + "\nmain.osp\n 9:1 warning: first\n 100:12 warning: second\n\n2 warnings (redundant-annotation)" + .to_string() + ) + ); + } + + #[test] + fn a_positionless_warning_still_lists_under_its_unit() { + let raised = [TypeWarning { + message: String::from("nowhere in particular"), + position: None, + rule: REDUNDANT_ANNOTATION, + }]; + assert_eq!( + render(&unit(), &raised), + Some( + "\nmain.osp\n - warning: nowhere in particular\n\n1 warning (redundant-annotation)" + .to_string() + ) + ); + } + + #[test] + fn the_summary_lists_every_rule_that_fired_once_each() { + let raised = [ + warning(1, 0, "a"), + warning(2, 0, "b"), + TypeWarning { + message: String::from("c"), + position: Some(Position { line: 3, column: 0 }), + rule: "some-other-rule", + }, + ]; + let text = render(&unit(), &raised).unwrap_or_default(); + assert!( + text.ends_with("\n3 warnings (redundant-annotation, some-other-rule)"), + "{text}" + ); + } +} diff --git a/crates/osprey-cli/src/wasm.rs b/crates/osprey-cli/src/wasm.rs index d21fc9ad..0eacedbf 100644 --- a/crates/osprey-cli/src/wasm.rs +++ b/crates/osprey-cli/src/wasm.rs @@ -284,6 +284,7 @@ fn run_host(wasm: &Path) -> ExitCode { #[cfg(test)] mod tests { use super::*; + use crate::testkit::shows; /// Serializes tests that read/write process-global toolchain env vars /// (`OSPREY_WASM_*`, `*_SYSROOT`) so they neither race each other nor the @@ -336,9 +337,14 @@ mod tests { fn entry_thunk_wraps_main_for_the_wasi_start_path() { // [WASM-ENTRY] let out = with_entry_thunk("define i32 @main() {\n ret i32 0\n}\n"); - assert!(out.contains("define i32 @main()"), "original main kept"); - assert!(out.contains("define i32 @__main_void()"), "thunk added"); - assert!(out.contains("call i32 @main()"), "thunk calls main"); + shows( + &out, + &[ + "define i32 @main()", + "define i32 @__main_void()", + "call i32 @main()", + ], + ); } #[test] @@ -346,9 +352,14 @@ mod tests { // [WASM-WEB-ABI] let mangled = format!("__osp_3x617070{WEB_DISPATCH_MANGLED_SUFFIX}"); let out = with_web_dispatch_thunk("; module", Some(&mangled)); - assert!(out.contains("define i64 @osprey_web_dispatch(i8* %message)")); - assert!(out.contains(&format!("call i64 @{mangled}(i8* %message)"))); - assert!(out.contains("ret i64 %r")); + shows( + &out, + &[ + "define i64 @osprey_web_dispatch(i8* %message)", + &format!("call i64 @{mangled}(i8* %message)"), + "ret i64 %r", + ], + ); let unchanged = with_web_dispatch_thunk("; module", Some(WEB_DISPATCH)); assert_eq!(unchanged, "; module", "source spelling needs no thunk"); diff --git a/crates/osprey-cli/tests/cli_e2e.rs b/crates/osprey-cli/tests/cli_e2e.rs index 49a88d9f..151c760a 100644 --- a/crates/osprey-cli/tests/cli_e2e.rs +++ b/crates/osprey-cli/tests/cli_e2e.rs @@ -134,16 +134,27 @@ fn run_file_cc(path: &Path, mode: &str, cc: &str) -> Out { finish(cmd) } -/// Type-clean but codegen-rejected: a still-generic lambda used as a bare -/// VALUE has no ABI to fix and no call site to specialise against -/// ([TYPE-GENERICS-FN]). It passes the type gate, so every compiling mode -/// reaches codegen and fails there — exercising the `Err` arms -/// `compile_program` feeds. +/// Type-clean but codegen-rejected: an FFI callback slot is a raw C code +/// pointer, so a capturing lambda has nowhere to carry its environment +/// ([FFI-CALLBACKS]). It passes the type gate, so every compiling mode reaches +/// codegen and fails there — exercising the `Err` arms `compile_program` feeds. /// -/// This used to bind the value first (`let f = mk(1)` then `f(0)`). That shape -/// now COMPILES: the returned lambda is inlined at each call site of the -/// binding, so it no longer reaches a codegen error and could not exercise -/// these arms. +/// `(x + base) ?: 0` discharges the arithmetic `Result`; without it the lambda +/// is `(int) -> Result` and the type gate rejects the call +/// before codegen sees the capture. +const CODEGEN_REJECTED: &str = concat!( + "extern fn registerCallback(cb: fn(int) -> int) -> int\n", + "let base = 10\n", + "let r = registerCallback(fn(x) => (x + base) ?: 0)\n", + "print(\"${r}\")\n", +); + +/// A still-generic lambda used as a bare VALUE: no ABI to fix and no call site +/// to specialise against ([TYPE-GENERICS-FN]). +/// +/// This drove the two codegen-error tests until the checker learned to reject +/// it, which is a strictly better place to catch it. It stays here to pin +/// WHERE it is rejected, so the move cannot happen again unnoticed. const GENERIC_AS_VALUE: &str = "fn mk(x: T) = |y| => x\nprint(\"${mk(1)}\")\n"; /// Explicit effect resume must run the rest of the handled computation and then @@ -727,7 +738,7 @@ fn quiet_suppresses_the_ok_line() { #[test] fn llvm_reports_a_codegen_error() { - let prog = temp_osp("cgllvm", GENERIC_AS_VALUE); + let prog = temp_osp("cgllvm", CODEGEN_REJECTED); let o = run_file(&prog, &["--llvm"]); assert_ne!(o.code, Some(0)); assert!(o.stderr.contains("codegen"), "{}", o.stderr); @@ -735,12 +746,30 @@ fn llvm_reports_a_codegen_error() { #[test] fn run_reports_a_codegen_error() { - let prog = temp_osp("cgrun", GENERIC_AS_VALUE); + let prog = temp_osp("cgrun", CODEGEN_REJECTED); let o = run_file(&prog, &["--run"]); assert_ne!(o.code, Some(0)); assert!(o.stderr.contains("codegen"), "{}", o.stderr); } +#[test] +fn a_generic_closure_value_is_rejected_by_the_type_gate() { + // The two tests above assert a CODEGEN failure, so they go quiet the moment + // their input starts being rejected earlier — which is exactly what happened + // to this program. Pinning the checker's message here means a future move of + // the gate fails a test that names the gate, instead of silently draining + // the codegen arms of coverage. + let prog = temp_osp("genval", GENERIC_AS_VALUE); + let o = run_file(&prog, &["--llvm"]); + assert_ne!(o.code, Some(0)); + assert!( + o.stderr + .contains("a closure value with a still-generic type cannot be interpolated"), + "{}", + o.stderr + ); +} + #[test] fn compile_reports_a_failing_c_compiler() { // `false` runs and exits non-zero -> the "cc failed to compile" branch. @@ -1417,3 +1446,86 @@ fn error_result_assertions_render_the_error() { ); assert!(o.stdout.contains("not ok 1 - div"), "{}", o.stdout); } + +/// The whole call-site type-application pipeline — parse, check, lower, emit, +/// link, run — for the shape that has no other spelling: a binder appearing in +/// no parameter position. [TYPE-GENERICS-APPLY] +#[test] +fn a_written_type_argument_pins_an_instantiation_end_to_end() { + let prog = temp_osp( + "turbofish_run", + "fn identity(x: T) -> T = x\n\ + fn emptyOf() -> List = []\n\ + fn pickOf(first: T, second: U) -> T = first\n\ + let n = identity(5)\n\ + let s = identity(\"os\")\n\ + let nested = length(identity>([1, 2]))\n\ + let empty = length(emptyOf())\n\ + let kept = pickOf(7, \"seven\")\n\ + print(\"n=${n} s=${s} nested=${nested} empty=${empty} kept=${kept}\")\n", + ); + let o = run_file(&prog, &["--run"]); + assert_eq!(o.code, Some(0), "stderr={}", o.stderr); + assert_eq!(o.stdout, "n=5 s=os nested=2 empty=0 kept=7\n"); +} + +/// The ML twin of the same program prints the same bytes ([FLAVOR-IR-EQUIV]). +#[test] +fn the_ml_written_type_argument_prints_the_same_bytes() { + let path = std::env::temp_dir().join("osprey_cli_e2e_turbofish_run_ml.ospml"); + let _ = std::fs::write( + &path, + "identity : T -> T\n\ + identity x = x\n\ + emptyOf : Unit -> List\n\ + emptyOf () = []\n\ + pickOf : (T, U) -> T\n\ + pickOf (first, second) = first\n\ + n = identity 5\n\ + s = identity \"os\"\n\ + nested = length (identity> [1, 2])\n\ + empty = length (emptyOf ())\n\ + kept = pickOf (7, \"seven\")\n\ + print \"n=${n} s=${s} nested=${nested} empty=${empty} kept=${kept}\"\n", + ); + let o = run_file(&path, &["--run"]); + assert_eq!(o.code, Some(0), "stderr={}", o.stderr); + assert_eq!(o.stdout, "n=5 s=os nested=2 empty=0 kept=7\n"); +} + +/// A written list that misses the declared binder count is rejected before +/// anything is emitted, naming both counts. [TYPE-GENERICS-APPLY] +#[test] +fn a_written_type_argument_count_mismatch_is_rejected_by_the_cli() { + let prog = temp_osp( + "turbofish_arity", + "fn identity(x: T) -> T = x\n\ + print(\"${identity(5)}\")\n", + ); + let o = run_file(&prog, &["--check"]); + assert_ne!(o.code, Some(0), "stdout={}", o.stdout); + assert!( + o.stderr + .contains("function `identity` takes 1 type argument(s), got 2"), + "stderr={}", + o.stderr + ); +} + +/// A written argument contradicting the value argument is a type error, not a +/// silently ignored annotation. [TYPE-GENERICS-APPLY] +#[test] +fn a_contradicting_written_type_argument_is_rejected_by_the_cli() { + let prog = temp_osp( + "turbofish_contradiction", + "fn identity(x: T) -> T = x\n\ + print(\"${identity(\\\"text\\\")}\")\n", + ); + let o = run_file(&prog, &["--check"]); + assert_ne!(o.code, Some(0), "stdout={}", o.stdout); + assert!( + o.stderr.contains("cannot unify int with string"), + "stderr={}", + o.stderr + ); +} diff --git a/crates/osprey-cli/tests/common/mod.rs b/crates/osprey-cli/tests/common/mod.rs index 02280424..67ae8c5d 100644 --- a/crates/osprey-cli/tests/common/mod.rs +++ b/crates/osprey-cli/tests/common/mod.rs @@ -12,13 +12,13 @@ use std::path::{Path, PathBuf}; /// /// Left un-canonicalized on purpose: there is no fallible call to unwrap, and /// the `..` components resolve the same way for every consumer here. -pub fn repo_root() -> PathBuf { +pub(crate) fn repo_root() -> PathBuf { Path::new(env!("CARGO_MANIFEST_DIR")).join("..").join("..") } /// Every file with extension `ext` under `dir`, recursively, sorted so a /// failure names the same program on every machine. -pub fn sources(dir: &Path, ext: &str) -> Vec { +pub(crate) fn sources(dir: &Path, ext: &str) -> Vec { let mut out = Vec::new(); collect(dir, ext, &mut out); out.sort(); @@ -47,7 +47,7 @@ fn collect(dir: &Path, ext: &str, out: &mut Vec) { /// an instantiation that was never emitted collapsed onto one that was and the /// gate reported a clean module — the exact dangling reference it exists to /// catch ([`crate::monofn::specialize_callback`]). -pub fn symbol_at(rest: &str) -> Option { +pub(crate) fn symbol_at(rest: &str) -> Option { let name: String = rest .chars() .take_while(|c| c.is_ascii_alphanumeric() || *c == '_' || *c == '.' || *c == '$') @@ -57,7 +57,7 @@ pub fn symbol_at(rest: &str) -> Option { } /// Every `@symbol` the module BINDS — defined, declared or a global. -pub fn bound_symbols(ir: &str) -> BTreeSet { +pub(crate) fn bound_symbols(ir: &str) -> BTreeSet { let mut bound = BTreeSet::new(); for line in ir.lines() { let trimmed = line.trim_start(); @@ -83,7 +83,7 @@ pub fn bound_symbols(ir: &str) -> BTreeSet { /// global initializer is a use like any other (`@table = global i8* @missing`), /// and skipping the whole line let exactly that reference through: the one form /// where a dangling symbol is written on the same line as a definition. -pub fn undefined_symbols(ir: &str) -> BTreeSet { +pub(crate) fn undefined_symbols(ir: &str) -> BTreeSet { let bound = bound_symbols(ir); let mut missing = BTreeSet::new(); for line in ir.lines() { diff --git a/crates/osprey-cli/tests/common/staging.rs b/crates/osprey-cli/tests/common/staging.rs index dc134847..f425a1e8 100644 --- a/crates/osprey-cli/tests/common/staging.rs +++ b/crates/osprey-cli/tests/common/staging.rs @@ -9,7 +9,7 @@ use osprey_syntax::{parse_program_with_flavor, Flavor}; /// Parse — which discharges static handlers at the flavor boundary /// ([STAGE-LOWER-ORDER-PHASE]) — and emit LLVM IR. -pub fn compile_staged(source: &str) -> String { +pub(crate) fn compile_staged(source: &str) -> String { let parsed = parse_program_with_flavor(source, Flavor::Default); assert!( parsed.errors.is_empty(), @@ -22,7 +22,7 @@ pub fn compile_staged(source: &str) -> String { } /// Every diagnostic the frontend produces for `source`, joined for matching. -pub fn diagnostics(source: &str, flavor: Flavor) -> String { +pub(crate) fn diagnostics(source: &str, flavor: Flavor) -> String { let parsed = parse_program_with_flavor(source, flavor); if !parsed.errors.is_empty() { return parsed @@ -42,7 +42,7 @@ pub fn diagnostics(source: &str, flavor: Flavor) -> String { /// Compile `source` for `target` through the real CLI, returning stderr and /// whether it succeeded — the only path that runs the per-target capability /// gate [MULTI-WASM] and [STAGE-WASM] are checked by. -pub fn compile_for_target(source: &str, target: &str) -> (bool, String) { +pub(crate) fn compile_for_target(source: &str, target: &str) -> (bool, String) { let dir = std::env::temp_dir().join(format!( "osprey_staged_{}_{:?}", std::process::id(), diff --git a/crates/osprey-cli/tests/staged_effects.rs b/crates/osprey-cli/tests/staged_effects.rs index b3736d91..615eab91 100644 --- a/crates/osprey-cli/tests/staged_effects.rs +++ b/crates/osprey-cli/tests/staged_effects.rs @@ -11,7 +11,7 @@ #[path = "common/staging.rs"] mod staging; -use osprey_syntax::{dependency_sets, Flavor}; +use osprey_syntax::{dependency_report, Flavor}; use staging::{compile_for_target, compile_staged, diagnostics}; /// The C runtime symbols a dynamic handler region registers and looks up. @@ -75,7 +75,7 @@ fn greeting() = "hello ${perform NameSignal.read()}" fn statusBar() = "${greeting()} | ${counterLabel()}" fn footer() = "osprey" "#; - let deps = dependency_sets(source, Flavor::Default); + let deps = dependency_report(source, Flavor::Default).0; let of = |name: &str| deps.get(name).cloned().unwrap_or_default(); assert_eq!(of("doubled"), vec!["CountSignal.read"]); // Transitive through a call, and only what is actually read. @@ -101,7 +101,7 @@ fn root() = handle static CountSignal read => 7 in label() "#; - let deps = dependency_sets(source, Flavor::Default); + let deps = dependency_report(source, Flavor::Default).0; assert_eq!( deps.get("label").cloned().unwrap_or_default(), vec!["CountSignal.read"] @@ -258,7 +258,7 @@ static effect Signal { read: fn() -> T } fn counterLabel() = "count: ${(perform Signal.read()).value}" fn cursorLabel() = "at: ${(perform Signal.read()).at}" "#; - let deps = dependency_sets(source, Flavor::Default); + let deps = dependency_report(source, Flavor::Default).0; let of = |name: &str| deps.get(name).cloned().unwrap_or_default(); assert_eq!( of("counterLabel"), diff --git a/crates/osprey-codegen/src/aggregate.rs b/crates/osprey-codegen/src/aggregate.rs index e1e76e16..60a18191 100644 --- a/crates/osprey-codegen/src/aggregate.rs +++ b/crates/osprey-codegen/src/aggregate.rs @@ -200,8 +200,7 @@ fn own_struct_handle( obj: &str, owner: impl Into, ) -> Value { - let handle = cg.fresh_reg(); - cg.emit(format!("{handle} = bitcast {struct_ty}* {obj} to i8*")); + let handle = cg.emit_reg(format!("bitcast {struct_ty}* {obj} to i8*")); let v = Value::handle(handle, owner); crate::arc::own(cg, &v); v @@ -249,9 +248,8 @@ fn gen_http_response(cg: &mut Codegen, fields: &[FieldAssignment]) -> Result crate::cast::coerce_to(cg, v, LType::Str)?.operand, }; crate::arc::dup_store(cg, llty, &operand); - let p = cg.fresh_reg(); - cg.emit(format!( - "{p} = getelementptr {HTTP_RESPONSE_STRUCT}, {HTTP_RESPONSE_STRUCT}* {obj}, i32 0, i32 {i}" + let p = cg.emit_reg(format!( + "getelementptr {HTTP_RESPONSE_STRUCT}, {HTTP_RESPONSE_STRUCT}* {obj}, i32 0, i32 {i}" )); cg.emit(format!("store {llty} {operand}, {llty}* {p}")); } @@ -316,11 +314,7 @@ pub(crate) fn gen_update( .ctor_struct_ty(&owner) .ok_or_else(|| CodegenError::unknown(&owner))?; - let src = cg.fresh_reg(); - cg.emit(format!( - "{src} = bitcast i8* {} to {struct_ty}*", - base.operand - )); + let src = cg.emit_reg(format!("bitcast i8* {} to {struct_ty}*", base.operand)); // view.meta comes from the Osprey field types (builder.rs `field_meta`), // which prove more than the erased LTypes visible here: an all-union field // set upgrades to the probe-free KIND_MASK_DIRECT. noinit: the tag and every @@ -347,6 +341,10 @@ pub(crate) fn gen_update( /// load the field. pub(crate) fn gen_field_access(cg: &mut Codegen, target: &Expr, field: &str) -> Result { let tv = gen_expr(cg, target)?; + let inferred = tv + .inferred_type + .as_ref() + .and_then(|ty| cg.prog.field_type(ty, field)); // Use the statically-known owner (a named record or an anonymous object // literal) when it actually declares `field`; otherwise (a generic accessor // whose parameter infers to a type variable) resolve the field by name across @@ -358,6 +356,14 @@ pub(crate) fn gen_field_access(cg: &mut Codegen, target: &Expr, field: &str) -> let owner = known .or_else(|| cg.find_field_owner(field)) .ok_or_else(|| CodegenError::invalid(format!("field `{field}` on a non-record")))?; + // Ordinary records can cross an inlined generic call with only their owner + // tag. Keep a concrete field's complete type, including every returned + // function arrow, so chained calls retain their ABI. [TYPE-FN-HIGHER-ORDER] + let inferred = inferred.or_else(|| { + cg.prog + .field_type(&osprey_types::Type::con(&owner, Vec::new()), field) + .filter(|ty| !osprey_types::has_type_var(ty)) + }); if cg.ctor_field_result_inner(&owner, field).is_some() { return Err(result_field_unsupported()); } @@ -370,24 +376,32 @@ pub(crate) fn gen_field_access(cg: &mut Codegen, target: &Expr, field: &str) -> .find_map(|(i, (f, t))| (f == field).then_some((i, *t))) .ok_or_else(|| CodegenError::invalid(format!("`{owner}` has no field `{field}`")))?; + let fty = inferred.as_ref().map_or(fty, crate::types::ltype_of); // A record that crossed a generic boundary — a list element, an inlined // parameter whose type is still a variable — travels in the uniform machine // word, so restore the handle before reading a slot out of it. let tv = crate::cast::coerce_to(cg, tv, LType::Ptr)?; - let src = cg.fresh_reg(); - cg.emit(format!( - "{src} = bitcast i8* {} to {struct_ty}*", - tv.operand - )); + let src = cg.emit_reg(format!("bitcast i8* {} to {struct_ty}*", tv.operand)); let loaded = load_field(cg, &struct_ty, src.as_str(), idx + 1, fty); // A handle field carries its ELEMENT's ABI, not an owner of its own: the // slot holds a runtime id, and `recv`/`await` on it needs the element type // to unbox with ([CONCURRENCY-CHANNEL]). - if let Some(handle) = cg.ctor_field_handle(&owner, field) { - return Ok(handle.restore(Value::new(loaded, fty))); + if let Some(handle) = inferred + .as_ref() + .and_then(|ty| crate::builder::FiberSig::of(&cg.prog, ty)) + .or_else(|| cg.ctor_field_handle(&owner, field)) + { + let mut value = handle.restore(Value::new(loaded, fty)); + value.inferred_type = inferred; + return Ok(value); } - let owner = cg.ctor_field_owner(&owner, field); - Ok(Value::new(loaded, fty).with_owner(owner)) + let owner = inferred.as_ref().map_or_else( + || cg.ctor_field_owner(&owner, field), + |ty| crate::types::owner_name(&cg.prog, ty), + ); + let mut value = Value::new(loaded, fty).with_owner(owner); + value.inferred_type = inferred; + Ok(value) } /// Aggregate layouts do not yet carry the shape metadata needed to preserve a @@ -418,9 +432,8 @@ pub(crate) fn store_field( if !moved { crate::arc::dup_store(cg, fty.as_str(), val); } - let p = cg.fresh_reg(); - cg.emit(format!( - "{p} = getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 {idx}" + let p = cg.emit_reg(format!( + "getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 {idx}" )); cg.emit(format!("store {fty} {val}, {fty}* {p}")); } @@ -440,11 +453,9 @@ pub(crate) fn load_field( idx: usize, fty: LType, ) -> String { - let p = cg.fresh_reg(); - cg.emit(format!( - "{p} = getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 {idx}" + let p = cg.emit_reg(format!( + "getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 {idx}" )); - let r = cg.fresh_reg(); - cg.emit(format!("{r} = load {fty}, {fty}* {p}")); + let r = cg.emit_reg(format!("load {fty}, {fty}* {p}")); r } diff --git a/crates/osprey-codegen/src/builder.rs b/crates/osprey-codegen/src/builder.rs index b7b9b285..656b1743 100644 --- a/crates/osprey-codegen/src/builder.rs +++ b/crates/osprey-codegen/src/builder.rs @@ -14,7 +14,7 @@ use std::fmt::Write as _; /// Code generation switches that alter the emitted module without changing /// Osprey semantics. #[derive(Debug, Clone, Default)] -pub struct CodegenOptions { +pub(crate) struct CodegenOptions { /// Source file identity used for LLVM/DWARF debug metadata. pub debug_source: Option, /// Instrument coverable lines with hit counters [TESTING-COVERAGE-CODEGEN]. @@ -26,11 +26,7 @@ pub struct CodegenOptions { /// A lambda kept for inline application at its direct call sites: its /// parameters, its body, and the position inference keyed its type by. -pub(crate) type LambdaDef = ( - Vec, - osprey_ast::Expr, - Option, -); +pub(crate) type LambdaDef = (Vec, Expr, Option); /// What the program turned out to CONTAIN — decided while lowering, read once /// by `main`'s epilogue. These belong together because they are answered the @@ -52,7 +48,7 @@ pub(crate) struct Lowered { } /// Accumulates a whole module while lowering one function at a time. -pub struct Codegen { +pub(crate) struct Codegen { /// `declare` lines, de-duplicated and stably ordered. externs: BTreeSet, /// Global constant definitions (string literals). @@ -74,6 +70,9 @@ pub struct Codegen { /// Declared parameter names per function, for named-argument ordering. pub(crate) fn_params: HashMap>, + /// Extern parameter names. Kept separate because `fn_params` also identifies + /// Osprey functions whose callbacks use closure cells rather than C pointers. + pub(crate) extern_params: HashMap>, /// Type names an `extern fn` claims to return (every name in the declared /// return type expression, conservatively). A foreign pointer typed as a /// union would break the `KIND_MASK_DIRECT` all-children-are-ARC-bodies @@ -145,7 +144,7 @@ pub struct Codegen { /// function at each call site so its type variables monomorphize to the /// concrete argument types there (specialisation by inlining rather than by /// emitting a name-mangled copy per instantiation). - pub(crate) fn_defs: HashMap, osprey_ast::Expr)>, + pub(crate) fn_defs: HashMap, Expr)>, /// Generic functions currently being inlined — a re-entry guard so a /// (mutually) recursive generic call falls back to a direct call instead of /// inlining forever. @@ -300,11 +299,12 @@ impl FiberSig { } } -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Debug, PartialEq)] pub(crate) struct ParamSig { pub(crate) ty: LType, pub(crate) result_inner: Option, pub(crate) fiber: Option, + pub(crate) inferred_type: Option, } impl ParamSig { @@ -315,11 +315,13 @@ impl ParamSig { ty: LType::Ptr, result_inner: Some(inner), fiber, + inferred_type: Some(ty.clone()), }, None => Self { ty: ltype_of(ty), result_inner: None, fiber, + inferred_type: Some(ty.clone()), }, } } @@ -605,18 +607,18 @@ impl DebugState { } impl Codegen { - pub fn new() -> Codegen { + pub(crate) fn new() -> Codegen { Codegen::with_types(ProgramTypes::default()) } /// Build with the inferred program types that drive parameter/return/value /// typing. - pub fn with_types(prog: ProgramTypes) -> Codegen { + pub(crate) fn with_types(prog: ProgramTypes) -> Codegen { Codegen::with_options(prog, CodegenOptions::default()) } /// Build with inferred program types and explicit code generation options. - pub fn with_options(prog: ProgramTypes, options: CodegenOptions) -> Codegen { + pub(crate) fn with_options(prog: ProgramTypes, options: CodegenOptions) -> Codegen { Codegen { externs: BTreeSet::new(), globals: Vec::new(), @@ -631,6 +633,7 @@ impl Codegen { scope_ids: Vec::new(), next_scope_id: 0, fn_params: HashMap::new(), + extern_params: HashMap::new(), extern_ret_types: BTreeSet::new(), nullary_singletons: HashMap::new(), prog, @@ -702,6 +705,11 @@ impl Codegen { /// [TYPE-FN-HIGHER-ORDER]. pub(crate) fn callee_fn_type(&self, expr: &Expr) -> Option { match expr { + Expr::TypeApply { + function, position, .. + } => self + .callee_fn_type(function) + .map(|ty| self.prog.application_type(*position, &ty)), Expr::Identifier(name) => self.identifier_fn_type(name), // A call evaluates to its callee's return type — recurse so a chain // peels one arrow per application. @@ -747,13 +755,7 @@ impl Codegen { /// unique field-name match across known layouts. fn field_fn_type(&self, target: &Expr, field: &str) -> Option { let owner = self.callee_field_owner(target, field)?; - self.prog - .ctors - .get(&owner)? - .fields - .iter() - .find(|(f, _)| f == field) - .map(|(_, t)| t.clone()) + self.ctor_field_ty(&owner, field).cloned() } /// Resolve the owner type of `target.field`: prefer a bound identifier's @@ -770,12 +772,21 @@ impl Codegen { self.find_field_owner(field) } - /// Whether `owner`'s layout declares `field`. - fn declares_field(&self, owner: &str, field: &str) -> bool { + /// The declared type of `field` on constructor `owner` — the single field + /// lookup behind [`Self::declares_field`] and every `ctor_field_*` accessor. + fn ctor_field_ty(&self, owner: &str, field: &str) -> Option<&Type> { self.prog .ctors - .get(owner) - .is_some_and(|c| c.fields.iter().any(|(f, _)| f == field)) + .get(owner)? + .fields + .iter() + .find(|(f, _)| f == field) + .map(|(_, t)| t) + } + + /// Whether `owner`'s layout declares `field`. + fn declares_field(&self, owner: &str, field: &str) -> bool { + self.ctor_field_ty(owner, field).is_some() } /// Whether `name` is a user function whose inferred signature still contains @@ -979,7 +990,7 @@ impl Codegen { pub(crate) fn fn_ret_is_unit(&self, name: &str) -> bool { self.prog .return_type(name) - .is_some_and(|t| *t == osprey_types::Type::unit()) + .is_some_and(|t| *t == Type::unit()) } /// The LLVM parameter types of a user function, from inference. @@ -1076,7 +1087,7 @@ impl Codegen { /// smuggle in a foreign pointer and break the proof. Everything else /// (strings can be rodata, records can cross the C ABI, `Ptr` is FFI) /// keeps the probe-tolerant `LType` mapping. [GC-ARC-PERCEUS] - fn field_meta(&self, t: &osprey_types::Type) -> crate::meta::MetaField { + fn field_meta(&self, t: &Type) -> crate::meta::MetaField { let proven = crate::types::proven_heap_name(t).is_some_and(|n| { self.prog.unions.contains_key(n) && !self.extern_ret_types.contains(n) }); @@ -1164,14 +1175,7 @@ impl Codegen { .find(|(f, _, _)| f == field) .and_then(|(_, _, tag)| tag.clone()); } - let ty = self - .prog - .ctors - .get(owner)? - .fields - .iter() - .find(|(f, _)| f == field) - .map(|(_, t)| t.clone())?; + let ty = self.ctor_field_ty(owner, field)?.clone(); let head = crate::types::owner_name(&self.prog, &ty)?; let known = self.prog.ctors.contains_key(&head) || self.prog.unions.contains_key(&head) @@ -1190,30 +1194,16 @@ impl Codegen { /// read the wire word raw and the element came back untyped. /// Implements [CONCURRENCY-CHANNEL]. pub(crate) fn ctor_field_handle(&self, owner: &str, field: &str) -> Option { - let ty = self - .prog - .ctors - .get(owner)? - .fields - .iter() - .find(|(name, _)| name == field) - .map(|(_, ty)| ty)?; - FiberSig::of(&self.prog, ty) + FiberSig::of(&self.prog, self.ctor_field_ty(owner, field)?) } pub(crate) fn ctor_field_result_inner(&self, owner: &str, field: &str) -> Option { - self.prog - .ctors - .get(owner)? - .fields - .iter() - .find(|(name, _)| name == field) - .and_then(|(_, ty)| crate::types::result_inner(ty)) + crate::types::result_inner(self.ctor_field_ty(owner, field)?) } /// The variant constructor names of a union owner, in tag order. pub(crate) fn union_variants(&self, owner: &str) -> Option<&[String]> { - self.prog.unions.get(owner).map(std::vec::Vec::as_slice) + self.prog.unions.get(owner).map(Vec::as_slice) } // ---- SSA + block naming (function-local) ---- @@ -1246,6 +1236,17 @@ impl Codegen { /// Emit `r = {rhs}` to a fresh SSA register and return `r` — the ubiquitous /// "name the result of one instruction" step (`zext …`, `icmp …`, `fneg …`). + /// Open a diamond on `cond`: mint the two arm labels plus the join they + /// both reach, and emit the branch between them. Answers + /// `(true_arm, false_arm, join)`; the caller starts whichever arm it means + /// to fill first. Minting labels apart from the `br` that names them is how + /// a block ends up unterminated, so the two steps are one call. + pub(crate) fn diamond(&mut self, cond: &str) -> (String, String, String) { + let (taken, other, join) = (self.fresh_label(), self.fresh_label(), self.fresh_label()); + self.emit(format!("br i1 {cond}, label %{taken}, label %{other}")); + (taken, other, join) + } + pub(crate) fn emit_reg(&mut self, rhs: impl std::fmt::Display) -> String { let r = self.fresh_reg(); self.emit(format!("{r} = {rhs}")); @@ -1297,8 +1298,7 @@ impl Codegen { }; self.add_extern("declare void @llvm.dbg.declare(metadata, metadata, metadata)"); let ty = value.ty.as_str(); - let slot = self.fresh_reg(); - self.emit(format!("{slot} = alloca {ty}")); + let slot = self.emit_reg(format!("alloca {ty}")); self.emit(format!("store {ty} {}, {ty}* {slot}", value.operand)); self.emit(format!( "call void @llvm.dbg.declare(metadata {ty}* {slot}, metadata !{var_id}, metadata !DIExpression())" @@ -1369,9 +1369,8 @@ impl Codegen { self.globals.push(format!( "{name} = private unnamed_addr constant [{len} x i8] c\"{escaped}\"" )); - let reg = self.fresh_reg(); - self.emit(format!( - "{reg} = getelementptr [{len} x i8], [{len} x i8]* {name}, i64 0, i64 0" + let reg = self.emit_reg(format!( + "getelementptr [{len} x i8], [{len} x i8]* {name}, i64 0, i64 0" )); let _ = self.rodata_regs.insert(reg.clone()); Value::new(reg, LType::Str) @@ -1610,19 +1609,16 @@ impl Codegen { } fn malloc_struct_with(&mut self, struct_ty: &str, meta: i64, noinit: bool) -> String { - let szp = self.fresh_reg(); - self.emit(format!( - "{szp} = getelementptr {struct_ty}, {struct_ty}* null, i64 1" + let szp = self.emit_reg(format!( + "getelementptr {struct_ty}, {struct_ty}* null, i64 1" )); - let sz = self.fresh_reg(); - self.emit(format!("{sz} = ptrtoint {struct_ty}* {szp} to i64")); + let sz = self.emit_reg(format!("ptrtoint {struct_ty}* {szp} to i64")); let raw = if noinit { self.heap_alloc_tagged_noinit(&sz, meta) } else { self.heap_alloc_tagged(&sz, meta) }; - let obj = self.fresh_reg(); - self.emit(format!("{obj} = bitcast i8* {raw} to {struct_ty}*")); + let obj = self.emit_reg(format!("bitcast i8* {raw} to {struct_ty}*")); obj } diff --git a/crates/osprey-codegen/src/call.rs b/crates/osprey-codegen/src/call.rs index 7a4cec0e..457858ab 100644 --- a/crates/osprey-codegen/src/call.rs +++ b/crates/osprey-codegen/src/call.rs @@ -31,8 +31,7 @@ impl Codegen { /// result register `r`. pub(crate) fn call(&mut self, ret: &str, cname: &str, params: &str, args: &[&str]) -> String { let typed = declare_and_args(self, ret, cname, params, args); - let r = self.fresh_reg(); - self.emit(format!("{r} = call {ret} @{cname}({typed})")); + let r = self.emit_reg(format!("call {ret} @{cname}({typed})")); r } diff --git a/crates/osprey-codegen/src/cast.rs b/crates/osprey-codegen/src/cast.rs index dbaafff7..8fb9dcde 100644 --- a/crates/osprey-codegen/src/cast.rs +++ b/crates/osprey-codegen/src/cast.rs @@ -49,8 +49,7 @@ pub(crate) fn coerce_to(cg: &mut Codegen, v: Value, want: LType) -> Result, ) -> Value { + let owner = owner.or_else(|| { + sig.inferred_type + .as_ref() + .and_then(|ty| crate::types::owner_name(&cg.prog, ty)) + }); // A handle parameter's `owner` slot carries its ELEMENT's tag, not its own // — a fiber or channel id is a machine word with nothing to own. let (own_tag, elem_tag) = match sig.fiber { Some(_) => (None, owner), None => (owner, None), }; - let value = if let Some(inner) = sig.result_inner { + let mut value = if let Some(inner) = sig.result_inner { let struct_ty = crate::llty::result_struct_ty(inner); let typed = cg.emit_reg(format!("bitcast i8* {operand} to {struct_ty}*")); Value::result(typed, inner) } else { Value::new(operand, sig.ty).with_owner(own_tag) }; + value.inferred_type = sig.inferred_type; match sig.fiber { Some(fiber) => { let mut restored = fiber.restore(value); - restored.fiber_elem_owner = elem_tag; + restored.fiber_elem_owner = elem_tag.or(restored.fiber_elem_owner); restored } None => value, diff --git a/crates/osprey-codegen/src/closure.rs b/crates/osprey-codegen/src/closure.rs index 1c422b1a..3d8c750f 100644 --- a/crates/osprey-codegen/src/closure.rs +++ b/crates/osprey-codegen/src/closure.rs @@ -54,7 +54,10 @@ pub(crate) fn lambda_value( } let sig = Codegen::fn_value_sig(&cg.prog, ty) .ok_or_else(|| CodegenError::invalid("lambda has no inferred function type"))?; - emit_closure(cg, parameters, body, &sig) + let ty = ty.clone(); + let mut value = emit_closure(cg, parameters, body, &sig)?; + value.inferred_type = Some(ty); + Ok(value) } /// Emit a lambda as a closure value with the given signature (the consuming @@ -130,10 +133,7 @@ pub(crate) fn specialisation_key(target: &str, sig: &FnSig) -> String { let semantic_params = sig .0 .iter() - .map(|param| match param.result_inner { - Some(inner) => format!("Result<{inner}>"), - None => param.ty.to_string(), - }) + .map(|param| format!("{param:?}")) .collect::>() .join(","); format!( @@ -214,6 +214,9 @@ pub(crate) fn bind_params_from( for (i, (p, pty)) in parameters.iter().zip(param_tys).enumerate() { let reg = crate::llty::param_register(first + i); let value = crate::cast::incoming_param(cg, format!("%{reg}"), pty.clone(), None); + if let Some(ty) = &value.inferred_type { + cg.bind_fn_local(&p.name, ty.clone()); + } cg.bind(p.name.clone(), value); out.push((pty.ty, reg)); } @@ -236,6 +239,9 @@ pub(crate) fn reload_captures(cg: &mut Codegen, cell_ty: &str, caps: &[Capture]) let r = cg.emit_reg(format!("load {lty}, {lty}* {p}")); let mut v = c.val.clone(); v.operand = r; + if let Some(ty) = &v.inferred_type { + cg.bind_fn_local(&c.name, ty.clone()); + } cg.bind(c.name.clone(), v); } } @@ -373,7 +379,17 @@ pub(crate) fn cell_call_exprs( for e in exprs { vals.push(gen_expr(cg, e)?); } - let typed = coerce_closure_args(cg, sig, vals)?; + cell_call_values(cg, handle, sig, vals) +} + +/// Call using values already lowered against their semantic parameter types. +pub(crate) fn cell_call_values( + cg: &mut Codegen, + handle: &str, + sig: &FnSig, + values: Vec, +) -> Result { + let typed = coerce_closure_args(cg, sig, values)?; Ok(cell_call(cg, handle, sig, &typed)) } @@ -421,17 +437,37 @@ pub(crate) fn returned(reg: String, sig: &FnSig) -> Value { /// module) a forwarder that drops the env argument and tail-calls the real /// function, plus a constant cell pointing at it. pub(crate) fn named_fn_cell(cg: &mut Codegen, name: &str) -> Result { - if cg.fn_defs.contains_key(name) { - return Err(CodegenError::unsupported( - "a generic function as a function value", - )); + if let Some((parameters, body)) = cg.fn_defs.get(name).cloned() { + return specialized_named_cell(cg, name, ¶meters, &body); } let cell = match cg.fnval_cells.get(name) { Some(g) => g.clone(), None => emit_forwarder(cg, name)?, }; let reg = cg.emit_reg(format!("bitcast {{ i8* }}* {cell} to i8*")); - Ok(Value::new(reg, LType::Ptr)) + let mut value = Value::new(reg, LType::Ptr); + value.inferred_type = cg.callee_fn_type(&Expr::Identifier(name.to_owned())); + Ok(value) +} + +fn specialized_named_cell( + cg: &mut Codegen, + name: &str, + parameters: &[Parameter], + body: &Expr, +) -> Result { + let ty = cg.callee_fn_type(&Expr::Identifier(name.to_owned())); + let Some(ty) = ty.filter(crate::types::fn_value_concrete) else { + return Err(CodegenError::unsupported( + "a generic function as a function value", + )); + }; + let sig = Codegen::fn_value_sig(&cg.prog, &ty) + .ok_or_else(|| CodegenError::invalid("function value has no signature"))?; + let key = format!("{}|{ty:?}", specialisation_key(name, &sig)); + let mut value = emit_closure_keyed(cg, parameters, body, &sig, Some(key))?; + value.inferred_type = Some(ty); + Ok(value) } /// Emit `@__fnval_{name}` (env-dropping forwarder) and its constant cell; diff --git a/crates/osprey-codegen/src/collections.rs b/crates/osprey-codegen/src/collections.rs index 1d6b1c8e..5eb2943e 100644 --- a/crates/osprey-codegen/src/collections.rs +++ b/crates/osprey-codegen/src/collections.rs @@ -168,8 +168,7 @@ pub(crate) fn gen_receiver_directed( }, }; Ok(Some(if name == "isEmpty" { - let r = cg.fresh_reg(); - cg.emit(format!("{r} = icmp eq i64 {}, 0", count.operand)); + let r = cg.emit_reg(format!("icmp eq i64 {}, 0", count.operand)); Value::new(r, LType::I1) } else { count @@ -379,15 +378,13 @@ fn list_contains(cg: &mut Codegen, args: &[Expr]) -> Result { let is_str = needle.ty == LType::Str; let boxed = box_to_i64(cg, needle.clone()); - let res = cg.fresh_reg(); - cg.emit(format!("{res} = alloca i1")); + let res = cg.emit_reg("alloca i1"); cg.emit(format!("store i1 0, i1* {res}")); let lp = open_list_loop(cg, &l.operand); let eq = cg.fresh_reg(); if is_str { - let ep = cg.fresh_reg(); - cg.emit(format!("{ep} = inttoptr i64 {} to i8*", lp.elem)); + let ep = cg.emit_reg(format!("inttoptr i64 {} to i8*", lp.elem)); let c = cg.call("i32", "strcmp", "i8*, i8*", &[&ep, &needle.operand]); cg.emit(format!("{eq} = icmp eq i32 {c}, 0")); } else { @@ -402,8 +399,7 @@ fn list_contains(cg: &mut Codegen, args: &[Expr]) -> Result { cg.start_block(&cont); close_list_loop(cg, &lp); - let out = cg.fresh_reg(); - cg.emit(format!("{out} = load i1, i1* {res}")); + let out = cg.emit_reg(format!("load i1, i1* {res}")); Ok(Value::new(out, LType::I1)) } @@ -453,8 +449,7 @@ fn map_contains(cg: &mut Codegen, args: &[Expr]) -> Result { "i8*, i64", &[&m.operand, &k.operand], ); - let r = cg.fresh_reg(); - cg.emit(format!("{r} = icmp ne i32 {raw}, 0")); + let r = cg.emit_reg(format!("icmp ne i32 {raw}, 0")); Ok(Value::new(r, LType::I1)) } @@ -536,10 +531,8 @@ fn map_to_list(cg: &mut Codegen, args: &[Expr], take_key: bool) -> Result let managed = cg.call("i32", kind, "i8*", &[&m.operand]); let bld = list_builder_new_of(cg, &managed); let iter = cg.call("i8*", "osprey_map_iter_new", "i8*", &[&m.operand]); - let kp = cg.fresh_reg(); - cg.emit(format!("{kp} = alloca i64")); - let vp = cg.fresh_reg(); - cg.emit(format!("{vp} = alloca i64")); + let kp = cg.emit_reg("alloca i64"); + let vp = cg.emit_reg("alloca i64"); let cond = cg.fresh_label(); let body = cg.fresh_label(); @@ -553,14 +546,12 @@ fn map_to_list(cg: &mut Codegen, args: &[Expr], take_key: bool) -> Result "i8*, i64*, i64*", &[&iter, &kp, &vp], ); - let more = cg.fresh_reg(); - cg.emit(format!("{more} = icmp ne i32 {has}, 0")); + let more = cg.emit_reg(format!("icmp ne i32 {has}, 0")); cg.emit(format!("br i1 {more}, label %{body}, label %{endl}")); cg.start_block(&body); let slot = if take_key { &kp } else { &vp }; - let elem = cg.fresh_reg(); - cg.emit(format!("{elem} = load i64, i64* {slot}")); + let elem = cg.emit_reg(format!("load i64, i64* {slot}")); list_builder_push_borrowed(cg, &bld, &elem); cg.emit(format!("br label %{cond}")); diff --git a/crates/osprey-codegen/src/curry.rs b/crates/osprey-codegen/src/curry.rs index 7656b973..9a6e7b07 100644 --- a/crates/osprey-codegen/src/curry.rs +++ b/crates/osprey-codegen/src/curry.rs @@ -12,11 +12,17 @@ use crate::builder::Codegen; use crate::error::Result; use crate::expr::gen_expr; use crate::llty::Value; -use osprey_ast::{Expr, NamedArgument}; +use osprey_ast::{Expr, NamedArgument, Position}; /// One application group of a spine: `f(a, b)(c)` has groups `[a, b]`, `[c]`. pub(crate) type ArgGroup<'a> = (&'a [Expr], &'a [NamedArgument]); +struct Spine<'a> { + head: &'a str, + application: Option, + groups: Vec>, +} + /// Lower `function(arguments)` when `function` is itself an application spine /// headed by a generic user function — `None` when it is anything else, so the /// ordinary call paths keep precedence. @@ -26,7 +32,12 @@ pub(crate) fn try_spine( arguments: &[Expr], named: &[NamedArgument], ) -> Result> { - let Some((head, mut groups)) = spine(function) else { + let Some(Spine { + head, + application, + mut groups, + }) = spine(function) + else { return Ok(None); }; if !cg.fn_defs.contains_key(head) { @@ -36,16 +47,25 @@ pub(crate) fn try_spine( let Some((first, rest)) = groups.split_first() else { return Ok(None); }; - crate::genfn::try_inline(cg, head, first.0, first.1, rest) + crate::expr::with_application(cg, application, |cg| { + crate::genfn::try_inline(cg, head, first.0, first.1, rest) + }) } /// Flatten an application spine into its head identifier and argument groups, /// outermost group last. `None` when the head is not a bare name. -fn spine(expr: &Expr) -> Option<(&str, Vec>)> { +fn spine(expr: &Expr) -> Option> { let mut groups = Vec::new(); let mut node = expr; + let mut application = None; loop { match node { + Expr::TypeApply { + function, position, .. + } => { + application = *position; + node = function; + } Expr::Call { function, arguments, @@ -56,7 +76,11 @@ fn spine(expr: &Expr) -> Option<(&str, Vec>)> { } Expr::Identifier(name) => { groups.reverse(); - return Some((name.as_str(), groups)); + return Some(Spine { + head: name, + application, + groups, + }); } _ => return None, } diff --git a/crates/osprey-codegen/src/effects.rs b/crates/osprey-codegen/src/effects.rs index f4e9d065..800d09e6 100644 --- a/crates/osprey-codegen/src/effects.rs +++ b/crates/osprey-codegen/src/effects.rs @@ -15,7 +15,7 @@ use crate::expr::gen_expr; use crate::llty::{LType, Value}; use crate::types::{ltype_of, result_inner}; use osprey_ast::freevars::free_idents; -use osprey_ast::{contains_resume, Expr, HandlerArm, MatchArm, Stmt}; +use osprey_ast::{contains_resume, AstNode, Expr, HandlerArm, Stmt}; use osprey_types::ProgramTypes; use std::collections::{BTreeSet, HashSet}; @@ -41,6 +41,7 @@ impl OpSig { ty: LType::I64, result_inner: None, fiber: None, + inferred_type: None, } } @@ -236,8 +237,7 @@ fn emit_unhandled_guard(cg: &mut Codegen, raw: &str, lookup_key: &str, operation "br i1 {is_null}, label %{abort_lbl}, label %{ok_lbl}" )); cg.start_block(&abort_lbl); - let p = cg.fresh_reg(); - cg.emit(format!("{p} = call i32 @puts(i8* {})", msg.operand)); + let _ = cg.emit_reg(format!("call i32 @puts(i8* {})", msg.operand)); cg.emit("call void @exit(i32 1)"); cg.emit("unreachable"); cg.start_block(&ok_lbl); @@ -280,133 +280,21 @@ pub(crate) fn captured_mut_vars_in_stmts(stmts: &[&Stmt]) -> HashSet { muts.intersection(&captured).cloned().collect() } -// A purpose-built AST walk (parallel in *shape* to `freevars::walk`, but -// collecting two different sets: every mutable binding and the names handler -// arms reference freely). The handler-arm free idents themselves come from -// `free_idents` so that one definition of "what does this close over" stays in -// `freevars`; only the find-the-handlers/muts traversal lives here. +// Capture rules stay local; structural child enumeration is shared with the +// other AST passes so new expression variants have one traversal table. fn scan_expr(e: &Expr, muts: &mut BTreeSet, captured: &mut BTreeSet) { - match e { - Expr::Handler { arms, body, .. } => { - for arm in arms { - captured.extend(arm_free_idents(arm)); - scan_expr(&arm.body, muts, captured); - } - scan_expr(body, muts, captured); - } - Expr::Block { statements, value } => { - for s in statements { - scan_stmt(s, muts, captured); - } - if let Some(v) = value { - scan_expr(v, muts, captured); - } + if let Expr::Handler { arms, .. } = e { + for arm in arms { + captured.extend(arm_free_idents(arm)); } - Expr::Match { value, arms } => { - scan_expr(value, muts, captured); - scan_arms(arms, muts, captured); - } - Expr::Select { arms } => scan_arms(arms, muts, captured), - _ => scan_children(e, muts, captured), } -} - -fn scan_arms(arms: &[MatchArm], muts: &mut BTreeSet, captured: &mut BTreeSet) { - scan_slice(arms, muts, captured, |arm| &arm.body); -} - -/// Recurse into every child expression of `e` (the variants that are not -/// special-cased in [`scan_expr`]), so a handler/mut nested anywhere is found. -fn scan_children(e: &Expr, muts: &mut BTreeSet, captured: &mut BTreeSet) { - match e { - Expr::InterpolatedStr(parts) => { - for p in parts { - if let osprey_ast::InterpolatedPart::Expr(x) = p { - scan_expr(x, muts, captured); - } - } - } - Expr::List(xs, _) => scan_slice(xs, muts, captured, |x| x), - Expr::Map(es) => { - for en in es { - scan_expr(&en.key, muts, captured); - scan_expr(&en.value, muts, captured); - } - } - Expr::Object(fs) - | Expr::TypeConstructor { fields: fs, .. } - | Expr::Update { fields: fs, .. } => { - scan_slice(fs, muts, captured, |f| &f.value); - } - Expr::Binary { left, right, .. } | Expr::Pipe { left, right } => { - scan_expr(left, muts, captured); - scan_expr(right, muts, captured); - } - Expr::Unary { operand, .. } => scan_expr(operand, muts, captured), - Expr::Call { - function, - arguments, - named_arguments, - } => { - scan_expr(function, muts, captured); - scan_args(arguments, named_arguments, muts, captured); - } - Expr::MethodCall { - target, - arguments, - named_arguments, - .. - } => { - scan_expr(target, muts, captured); - scan_args(arguments, named_arguments, muts, captured); - } - Expr::FieldAccess { target, .. } => scan_expr(target, muts, captured), - Expr::Index { target, index } => { - scan_expr(target, muts, captured); - scan_expr(index, muts, captured); - } - Expr::Lambda { body, .. } | Expr::Spawn(body) | Expr::Await(body) | Expr::Recv(body) => { - scan_expr(body, muts, captured); - } - Expr::Yield(Some(x)) => scan_expr(x, muts, captured), - Expr::Send { channel, value } => { - scan_expr(channel, muts, captured); - scan_expr(value, muts, captured); - } - Expr::Perform { - arguments, - named_arguments, - .. - } => scan_args(arguments, named_arguments, muts, captured), - Expr::Resume(Some(value)) => scan_expr(value, muts, captured), - _ => {} + // Preserve this collector's existing exclusion of specialized operands. + if matches!(e, Expr::TypeApply { .. }) { + return; } -} - -/// Scan a callee-style argument list: positional arguments then the named -/// ones, in source order. Shared by every call-shaped node (call, method call, -/// `perform`) so none of them can forget a half. -fn scan_args( - arguments: &[Expr], - named_arguments: &[osprey_ast::NamedArgument], - muts: &mut BTreeSet, - captured: &mut BTreeSet, -) { - scan_slice(arguments, muts, captured, |x| x); - scan_slice(named_arguments, muts, captured, |n| &n.value); -} - -/// Recurse into each element of `items`, projecting it to its sub-expression -/// with `pick`. The one place the effect scanner fans out over a collection -/// node, threading `muts`/`captured` through [`osprey_ast::walk_each`]. -fn scan_slice( - items: &[T], - muts: &mut BTreeSet, - captured: &mut BTreeSet, - pick: impl Fn(&T) -> &Expr, -) { - osprey_ast::walk_each(items, &mut (muts, captured), pick, |e, (m, c)| { - scan_expr(e, m, c); + AstNode::Expression(e).for_each_child(|child| match child { + AstNode::Statement(statement) => scan_stmt(statement, muts, captured), + AstNode::Expression(expression) => scan_expr(expression, muts, captured), }); } @@ -464,14 +352,9 @@ pub(crate) fn gen_handler( emit_handler_fn(cg, &fn_name, arm, &sig, resolved, &caps, &env_ty)?; let eff_s = cg.string_constant(&key); let op_s = cg.string_constant(&arm.operation); - let fp = cg.fresh_reg(); - cg.emit(format!( - "{fp} = bitcast {} @{fn_name} to i8*", - sig.fn_ptr_ty() - )); - let r = cg.fresh_reg(); - cg.emit(format!( - "{r} = call i32 @__osprey_handler_push(i8* {}, i8* {}, i8* {fp}, i8* {env})", + let fp = cg.emit_reg(format!("bitcast {} @{fn_name} to i8*", sig.fn_ptr_ty())); + let _ = cg.emit_reg(format!( + "call i32 @__osprey_handler_push(i8* {}, i8* {}, i8* {fp}, i8* {env})", eff_s.operand, op_s.operand )); } @@ -479,8 +362,7 @@ pub(crate) fn gen_handler( let result = gen_expr(cg, body)?; for _ in arms { - let r = cg.fresh_reg(); - cg.emit(format!("{r} = call i32 @__osprey_handler_pop()")); + let _ = cg.emit_reg("call i32 @__osprey_handler_pop()"); } // The popped region's env reached its structural end: drop it (its mask // releases the captured values) [GC-ARC-PERCEUS]. @@ -707,23 +589,28 @@ fn coerce_to_op_result( result_inner: Option, ) -> Result { match result_inner { - Some(inner) if value.result_inner.is_some() => { - crate::result::repack_to_inner(cg, value, inner) - } - Some(inner) => crate::result::make_ok(cg, value, inner), + Some(inner) => promote_to_result(cg, value, inner), None => coerce_to(cg, value, ret_ty), } } +/// Carry `value` into a `Result` answer slot: repack one that is +/// already a Result, else apply the language's safe `T -> Success(T)` +/// promotion. Never erases a discriminant. +fn promote_to_result(cg: &mut Codegen, value: Value, inner: LType) -> Result { + if value.result_inner.is_some() { + crate::result::repack_to_inner(cg, value, inner) + } else { + crate::result::make_ok(cg, value, inner) + } +} + /// Coerce an arm answer without ever erasing a Result. The only /// representation-changing coercion allowed here is the language's safe /// `T -> Success(T)` promotion when the handled expression itself is Result. fn coerce_to_answer(cg: &mut Codegen, value: Value, answer: &AnswerShape) -> Result { match answer.result_inner { - Some(inner) if value.result_inner.is_some() => { - crate::result::repack_to_inner(cg, value, inner) - } - Some(inner) => crate::result::make_ok(cg, value, inner), + Some(inner) => promote_to_result(cg, value, inner), // An arm that does not `resume` abandons the continuation, so ITS value // becomes the whole `handle` block's result. Whether it CAN be that // result is settled in inference, where the semantic types still exist @@ -917,9 +804,7 @@ fn emit_resuming_arm_fn(cg: &mut Codegen, arm: &HandlerArm, spec: &ArmFnSpec<'_> (LType::Ptr, String::from("__coro")), ]; bind_arm_params(cg, arm, spec.sig, spec.resolved, &mut params); - let op_ret_ty = spec - .resolved - .map_or(spec.sig.ret, |r| crate::types::ltype_of(&r.ret)); + let op_ret_ty = spec.resolved.map_or(spec.sig.ret, |r| ltype_of(&r.ret)); let op_ret_result_inner = spec .resolved .and_then(|r| result_inner(&r.ret)) @@ -1109,12 +994,7 @@ pub(crate) fn gen_resume(cg: &mut Codegen, value: Option<&Expr>) -> Result Result { + let inferred = match expr { + Expr::Integer(_) => Some(osprey_types::Type::con( + osprey_types::names::INT, + Vec::new(), + )), + Expr::Float(_) => Some(osprey_types::Type::con( + osprey_types::names::FLOAT, + Vec::new(), + )), + Expr::Bool(_) => Some(osprey_types::Type::con( + osprey_types::names::BOOL, + Vec::new(), + )), + Expr::Str(_) | Expr::InterpolatedStr(_) => Some(osprey_types::Type::con( + osprey_types::names::STRING, + Vec::new(), + )), + Expr::Call { function, .. } => cg.callee_fn_type(function).and_then(|ty| match ty { + osprey_types::Type::Fun { ret, .. } => Some(*ret), + _ => None, + }), + Expr::List(_, position) => cg + .prog + .list_elem_type(*position) + .cloned() + .map(|element| osprey_types::Type::con(osprey_types::names::LIST, vec![element])), + Expr::Perform { position, .. } => position + .and_then(|p| cg.prog.performs.get(&(p.line, p.column))) + .map(|site| site.op.ret.clone()), + _ => None, + }; + let mut value = gen_expr_raw(cg, expr)?; + if let Some(ty) = inferred.filter(|ty| !osprey_types::has_type_var(ty)) { + value.inferred_type = Some(ty); + } + Ok(value) +} + +fn gen_expr_raw(cg: &mut Codegen, expr: &Expr) -> Result { match expr { Expr::Integer(n) => Ok(Value::new(n.to_string(), LType::I64)), Expr::Float(f) => Ok(Value::new(fmt_double(*f), LType::Double)), @@ -48,6 +87,9 @@ pub(crate) fn gen_expr(cg: &mut Codegen, expr: &Expr) -> Result { None => Err(CodegenError::unknown(name)), }, }, + Expr::TypeApply { + function, position, .. + } => with_application(cg, *position, |cg| gen_expr(cg, function)), Expr::Binary { op, left, right } => gen_binary(cg, op, left, right), Expr::Unary { op, operand } => gen_unary(cg, op, operand), Expr::Call { @@ -55,6 +97,12 @@ pub(crate) fn gen_expr(cg: &mut Codegen, expr: &Expr) -> Result { arguments, named_arguments, } => gen_call(cg, function, arguments, named_arguments), + Expr::MethodCall { + target, + method, + arguments, + named_arguments, + } => gen_method_call(cg, target, method, arguments, named_arguments), Expr::Match { value, arms } => gen_match(cg, value, arms), Expr::Block { statements, value } => gen_block(cg, statements, value.as_deref()), Expr::TypeConstructor { name, fields, .. } => { @@ -800,12 +848,96 @@ const BUILTIN_DISPATCH: [BuiltinDispatch; 8] = [ crate::extern_call::gen, ]; +pub(crate) fn unapplied(mut expression: &Expr) -> &Expr { + while let Expr::TypeApply { function, .. } = expression { + expression = function; + } + expression +} + +pub(crate) fn with_application( + cg: &mut Codegen, + position: Option, + generate: impl FnOnce(&mut Codegen) -> R, +) -> R { + let bindings = position + .and_then(|p| cg.prog.applications.get(&(p.line, p.column))) + .cloned(); + let original = bindings.map(|b| { + let specialized = cg.prog.specialized(&b); + std::mem::replace(&mut cg.prog, specialized) + }); + let result = generate(cg); + if let Some(original) = original { + cg.prog = original; + } + result +} + +/// Deferred generic dotted calls select against the instantiated receiver. +/// Binding its value before selecting also guarantees exactly one evaluation. +fn gen_method_call( + cg: &mut Codegen, + target: &Expr, + method: &str, + arguments: &[Expr], + named: &[NamedArgument], +) -> Result { + let receiver = gen_expr(cg, target)?; + let source = osprey_ast::symbol::demangle(method).unwrap_or_else(|| method.to_owned()); + let field = source.rsplit("::").next().unwrap_or(&source); + let has_field = receiver + .inferred_type + .as_ref() + .and_then(|ty| cg.prog.field_type(ty, field)) + .is_some() + || receiver + .osp_ty + .as_ref() + .and_then(|owner| cg.prog.ctors.get(owner)) + .is_some_and(|ctor| ctor.fields.iter().any(|(name, _)| name == field)); + let temporary = osprey_ast::generated_name("method_receiver", 0); + if !has_field + && !cg.fn_params.contains_key(method) + && !cg.prog.functions.contains_key(method) + && !cg.call_aliases.contains_key(method) + && !cg.module_globals.contains_key(method) + && cg.lambda_def(method).is_none() + && cg.lookup(method).is_none() + && osprey_types::builtin_signature(method).is_none() + { + return Err(CodegenError::unsupported("method call")); + } + let target = Expr::Identifier(temporary.clone()); + let mut arguments = arguments.to_vec(); + let function = if has_field { + Expr::FieldAccess { + target: Box::new(target), + field: field.to_owned(), + } + } else { + arguments.insert(0, target); + Expr::Identifier(method.to_owned()) + }; + cg.push_scope(); + cg.bind(temporary, receiver); + let result = gen_call(cg, &function, &arguments, named); + cg.pop_scope(); + result +} + fn gen_call( cg: &mut Codegen, function: &Expr, arguments: &[Expr], named: &[NamedArgument], ) -> Result { + if let Expr::TypeApply { + function, position, .. + } = function + { + return with_application(cg, *position, |cg| gen_call(cg, function, arguments, named)); + } // A directly-applied lambda (`x |> fn(y) => …`, `(fn(y) => …)(x)`) is // beta-reduced inline. if let Expr::Lambda { @@ -815,7 +947,8 @@ fn gen_call( .. } = function { - return apply_lambda(cg, parameters, body, *position, arguments); + let slots = arg_exprs(arguments, named); + return apply_lambda(cg, parameters, body, *position, &slots); } // `applyCurried g 3 4` — the callee is an application spine headed by a // GENERIC user function, whose intermediate lambdas exist only inside an @@ -827,36 +960,29 @@ fn gen_call( } // `makeAdder(5)(3)` — the callee is itself a call producing a function // value: evaluate it to a closure handle and call through the cell. - if let Expr::Call { - function: inner, .. - } = function - { - if let Expr::Identifier(f) = &**inner { - let sig = cg - .call_result_fn_type(f) - .as_ref() - .and_then(|t| Codegen::fn_value_sig(&cg.prog, t)); - if let Some(sig) = sig { - return call_fn_value(cg, function, &sig, arguments, named); - } - } + if let Some(sig) = call_result_sig(cg, function) { + return call_fn_value(cg, function, Some(&sig), arguments, named); } let Expr::Identifier(ident) = function else { // A higher-order callee that is an arbitrary expression — a chained // application (`add3(1)(2)(3)`) or a function held in a record field. // Recover its signature from the type table and dispatch through the // closure cell; fail loudly only when the callee is not a function value. - if let Some(sig) = cg + let sig = cg .callee_fn_type(function) .as_ref() - .and_then(|t| Codegen::fn_value_sig(&cg.prog, t)) - { - return call_fn_value(cg, function, &sig, arguments, named); - } - return Err(CodegenError::unsupported("indirect / higher-order call")); + .and_then(|t| Codegen::fn_value_sig(&cg.prog, t)); + return call_fn_value(cg, function, sig.as_ref(), arguments, named); }; // A function-valued parameter (bound while inlining a generic function) // redirects to its real callee, so `f(x)` becomes `toString(x)` / `addOne(x)`. + // The source call still targets a value: preserve its written slots before + // the known declaration's named-argument path can reorder them. + // Implements [CALL-ARGUMENTS]. + let aliased_arguments = alias_slot_arguments(cg, ident, arguments, named); + let (arguments, named) = aliased_arguments + .as_deref() + .map_or((arguments, named), |arguments| (arguments, &[])); let name: String = cg .call_aliases .get(ident) @@ -872,7 +998,8 @@ fn gen_call( } // A let-bound lambda with no materialized cell is inlined at its call site. if let Some((params, body, position)) = cg.lambda_def(name).cloned() { - return apply_bound_lambda(cg, name, ¶ms, &body, position, arguments); + let slots = arg_exprs(arguments, named); + return apply_bound_lambda(cg, name, ¶ms, &body, position, &slots); } match name { "print" => { @@ -902,8 +1029,8 @@ fn gen_call( let arg = first_arg(arguments, named) .ok_or_else(|| CodegenError::invalid("toFloat needs one argument"))?; let v = gen_expr(cg, arg)?; - let n = crate::conv::as_i64(cg, v)?; - crate::conv::as_double(cg, n) + let n = as_i64(cg, v)?; + as_double(cg, n) } // Compatibility names for the same checked integer operations used by // the natural operators. @@ -930,19 +1057,76 @@ fn gen_call( } } +/// Normalize a value call before an inlining alias exposes a declaration's +/// formal parameter names. The implicit UFCS receiver stays before its values. +fn alias_slot_arguments( + cg: &Codegen, + name: &str, + arguments: &[Expr], + named: &[NamedArgument], +) -> Option> { + (!named.is_empty() && cg.call_aliases.contains_key(name)).then(|| { + arguments + .iter() + .chain(named.iter().map(|argument| &argument.value)) + .cloned() + .collect() + }) +} + +fn call_result_sig(cg: &Codegen, function: &Expr) -> Option { + let Expr::Call { + function: inner, .. + } = function + else { + return None; + }; + let Expr::Identifier(name) = &**inner else { + return None; + }; + cg.call_result_fn_type(name) + .as_ref() + .and_then(|ty| Codegen::fn_value_sig(&cg.prog, ty)) +} + /// Call through an evaluated function value: lower the callee expression to a /// closure handle, coerce the arguments to the signature's parameter types, /// and call through the cell. fn call_fn_value( cg: &mut Codegen, callee: &Expr, - sig: &FnSig, + sig: Option<&FnSig>, arguments: &[Expr], named: &[NamedArgument], ) -> Result { let handle = gen_expr(cg, callee)?; + // Generic constructor layouts retain erased field templates. The loaded + // closure carries its instantiated type, including float returns and the + // function types of callback parameters. + let semantic = handle.inferred_type.as_ref(); + let actual = semantic.and_then(|ty| Codegen::fn_value_sig(&cg.prog, ty)); + let sig = actual + .as_ref() + .or(sig) + .ok_or_else(|| CodegenError::unsupported("indirect / higher-order call"))?; + let slots: Vec<_> = match semantic { + Some(osprey_types::Type::Fun { params, .. }) => params + .iter() + .map(|ty| Codegen::fn_value_sig(&cg.prog, ty)) + .collect(), + _ => Vec::new(), + }; let exprs = arg_exprs(arguments, named); - crate::closure::cell_call_exprs(cg, &handle.operand, sig, &exprs) + let values = exprs + .iter() + .enumerate() + .map(|(i, expr)| eval_arg(cg, expr, slots.get(i).and_then(Option::as_ref), false)) + .collect::>>()?; + let mut result = crate::closure::cell_call_values(cg, &handle.operand, sig, values)?; + if let Some(osprey_types::Type::Fun { ret, .. }) = semantic { + result.inferred_type = Some((**ret).clone()); + } + Ok(result) } /// Beta-reduce a lambda at its application site: bind each parameter to its @@ -961,8 +1145,8 @@ fn apply_bound_lambda( name: &str, params: &[Parameter], body: &Expr, - position: Option, - arguments: &[Expr], + position: Option, + arguments: &[&Expr], ) -> Result { let Some((prefix_params, prefix_values)) = cg.lambda_prefix.get(name).cloned() else { return apply_lambda(cg, params, body, position, arguments); @@ -981,8 +1165,8 @@ fn apply_lambda( cg: &mut Codegen, parameters: &[Parameter], body: &Expr, - position: Option, - arguments: &[Expr], + position: Option, + arguments: &[&Expr], ) -> Result { let mut values = Vec::with_capacity(arguments.len()); for a in arguments { @@ -1007,7 +1191,7 @@ fn apply_lambda( /// int slot, and the second call printed a pointer as a number. A generic /// lambda is specialised by its ARGUMENTS at each call site instead, exactly as /// a generic function is ([`crate::genfn`], [TYPE-GENERICS-FN]). -pub(crate) fn inline_sig(cg: &Codegen, position: Option) -> Option { +pub(crate) fn inline_sig(cg: &Codegen, position: Option) -> Option { cg.prog .lambda_type(position) .filter(|t| crate::types::fn_value_concrete(t)) @@ -1022,7 +1206,7 @@ pub(crate) fn apply_lambda_values( body: &Expr, values: Vec, sig: Option<&FnSig>, - position: Option, + position: Option, ) -> Result { reduce_lambda(cg, parameters, body, values, sig, &[], position) } @@ -1038,7 +1222,7 @@ pub(crate) fn reduce_lambda( values: Vec, sig: Option<&FnSig>, rest: &[crate::curry::ArgGroup<'_>], - position: Option, + position: Option, ) -> Result { cg.push_scope(); // `fn_ptr_locals` is per-FUNCTION, not per-scope ([`Codegen::begin_function`]), @@ -1066,7 +1250,7 @@ fn bind_lambda_params( parameters: &[Parameter], values: Vec, sig: Option<&FnSig>, - position: Option, + position: Option, ) -> Result<()> { let declared = cg.prog.lambda_type(position).cloned(); for (index, (p, v)) in parameters.iter().zip(values).enumerate() { @@ -1154,7 +1338,7 @@ fn call_builtin_with_values(cg: &mut Codegen, name: &str, args: &[Value]) -> Opt "toString" => to_string_value(cg, arg()), // [BUILTIN-TOFLOAT] [GPU-CONVERT] the canonical float-pipeline seed // `gpuIota(n) |> gpuMap(toFloat)` lowers through this arm. - "toFloat" => as_i64(cg, arg()).and_then(|n| crate::conv::as_double(cg, n)), + "toFloat" => as_i64(cg, arg()).and_then(|n| as_double(cg, n)), "abs" => gen_unary_propagating(cg, arg(), gen_abs_value), _ => return None, }) @@ -1249,23 +1433,35 @@ fn ordered_args( .unwrap_or_default(); let ffi = !cg.fn_params.contains_key(name) && cg.prog.functions.contains_key(name); if !named.is_empty() { - if let Some(pnames) = cg.fn_params.get(name).cloned() { + if let Some(pnames) = cg + .fn_params + .get(name) + .or_else(|| cg.extern_params.get(name)) + .cloned() + { let mut out = Vec::new(); for (i, pn) in pnames.iter().enumerate() { - if let Some(na) = named.iter().find(|a| &a.name == pn) { + if let Some(argument) = arguments + .get(i) + .or_else(|| named.iter().find(|a| &a.name == pn).map(|a| &a.value)) + { out.push(eval_arg( cg, - &na.value, + argument, sigs.get(i).and_then(Option::as_ref), ffi, )?); } } - if out.len() == named.len() { + if out.len() == arguments.len() + named.len() { return Ok(out); } } - return named.iter().map(|na| gen_expr(cg, &na.value)).collect(); + return arguments + .iter() + .chain(named.iter().map(|na| &na.value)) + .map(|argument| gen_expr(cg, argument)) + .collect(); } arguments .iter() @@ -1281,6 +1477,12 @@ fn ordered_args( /// Everything else goes through `gen_expr` (where a user function name becomes /// its forwarder cell). fn eval_arg(cg: &mut Codegen, expr: &Expr, sig: Option<&FnSig>, ffi: bool) -> Result { + if let Expr::TypeApply { + function, position, .. + } = expr + { + return with_application(cg, *position, |cg| eval_arg(cg, function, sig, ffi)); + } match (expr, sig) { ( Expr::Lambda { diff --git a/crates/osprey-codegen/src/extern_call.rs b/crates/osprey-codegen/src/extern_call.rs index b34abc97..c23875d7 100644 --- a/crates/osprey-codegen/src/extern_call.rs +++ b/crates/osprey-codegen/src/extern_call.rs @@ -141,21 +141,34 @@ fn eval_args( .zip(crate::expr::arg_exprs(args, named)) .enumerate() .map(|(index, (want, e))| { - let v = match e { - Expr::Identifier(n) - if *want == LType::Ptr - && cg.lookup(n).is_none() - && cg.fn_params.contains_key(n) => - { - callback_pointer(cg, n, name, index)? - } - _ => gen_expr(cg, e)?, - }; + let v = argument_value(cg, e, *want, name, index)?; Ok(crate::cast::coerce_to(cg, v, *want)?.operand) }) .collect() } +fn argument_value( + cg: &mut Codegen, + expr: &Expr, + want: LType, + name: &str, + index: usize, +) -> Result { + match expr { + Expr::TypeApply { + function, position, .. + } => crate::expr::with_application(cg, *position, |cg| { + argument_value(cg, function, want, name, index) + }), + Expr::Identifier(n) + if want == LType::Ptr && cg.lookup(n).is_none() && cg.fn_params.contains_key(n) => + { + callback_pointer(cg, n, name, index) + } + _ => gen_expr(cg, expr), + } +} + /// The raw code pointer for a callback argument. A handler whose types are /// INFERRED is generic and has no `@name` symbol of its own, so pointing at one /// emitted IR that references a body codegen never defined — reported as diff --git a/crates/osprey-codegen/src/fiber.rs b/crates/osprey-codegen/src/fiber.rs index 34929cc5..93e1cf02 100644 --- a/crates/osprey-codegen/src/fiber.rs +++ b/crates/osprey-codegen/src/fiber.rs @@ -57,6 +57,9 @@ pub(crate) fn gen_spawn(cg: &mut Codegen, e: &Expr) -> Result { /// can tag the handle for `await` to unbox. fn thunk_body(cg: &mut Codegen, e: &Expr) -> Result { let v = gen_expr(cg, e)?; + // Await restores the runtime list ABI, so materialize an inlined generic + // call's literal result before its pointer crosses the fiber boundary. + let v = crate::listlit::escaping(cg, v); let elem = v.clone(); // The result escapes boxed across the fiber boundary: dup it before the // thunk's owners drop, so the runtime's completed-result slot holds +1 @@ -119,7 +122,7 @@ pub(crate) fn gen_send(cg: &mut Codegen, channel: &Expr, value: &Expr) -> Result let id = as_i64(cg, ch)?; let v = gen_expr(cg, value)?; if v.result_inner.is_some() { - return Err(crate::error::CodegenError::unsupported( + return Err(CodegenError::unsupported( "Result-valued channels are not yet represented losslessly; handle the Result before sending", )); } @@ -238,9 +241,7 @@ pub(crate) fn gen_builtin(cg: &mut Codegen, name: &str, args: &[Expr]) -> Result // [CONCURRENCY-YIELD]. "fiberDone" => { let Some(a) = args.first() else { - return Err(crate::error::CodegenError::invalid( - "fiberDone needs a fiber argument", - )); + return Err(CodegenError::invalid("fiberDone needs a fiber argument")); }; let v = gen_expr(cg, a)?; let id = as_i64(cg, v)?; diff --git a/crates/osprey-codegen/src/genfn.rs b/crates/osprey-codegen/src/genfn.rs index 95eddec1..0f7c0afe 100644 --- a/crates/osprey-codegen/src/genfn.rs +++ b/crates/osprey-codegen/src/genfn.rs @@ -222,11 +222,11 @@ fn pair_args<'a>( } else { params .iter() - .filter_map(|p| { - named - .iter() - .find(|n| n.name == p.name) - .map(|n| (p, &n.value)) + .enumerate() + .filter_map(|(index, p)| { + args.get(index) + .or_else(|| named.iter().find(|n| n.name == p.name).map(|n| &n.value)) + .map(|argument| (p, argument)) }) .collect() } diff --git a/crates/osprey-codegen/src/gpu.rs b/crates/osprey-codegen/src/gpu.rs index 4c434644..b254ac32 100644 --- a/crates/osprey-codegen/src/gpu.rs +++ b/crates/osprey-codegen/src/gpu.rs @@ -186,8 +186,7 @@ fn buffer_literal( /// buffer sized at the *source* length, because the kept count is not known /// until the loop has run. fn kept_counter(cg: &mut Codegen) -> String { - let kept = cg.fresh_reg(); - cg.emit(format!("{kept} = alloca i64")); + let kept = cg.emit_reg("alloca i64"); cg.emit(format!("store i64 0, i64* {kept}")); kept } diff --git a/crates/osprey-codegen/src/gpu_kernel.rs b/crates/osprey-codegen/src/gpu_kernel.rs index 6db048ec..af315636 100644 --- a/crates/osprey-codegen/src/gpu_kernel.rs +++ b/crates/osprey-codegen/src/gpu_kernel.rs @@ -275,6 +275,7 @@ fn param_sigs(parameters: &[Parameter], own: Option<&FnSig>, slots: &[LType]) -> ty: slots.get(i).copied().unwrap_or(LType::I64), result_inner: None, fiber: None, + inferred_type: None, }, }) .collect() @@ -332,6 +333,7 @@ fn bind_uniforms(cg: &mut Codegen, caps: &[crate::closure::Capture]) -> Vec<(LTy ty: c.val.ty, result_inner: None, fiber: None, + inferred_type: c.val.inferred_type.clone(), }; // `incoming_param` registers no ownership: a uniform buffer handle is // BORROWED for the call's duration, exactly as a top-level function's @@ -386,7 +388,7 @@ mod tests { /// The parsed mode, or the rendered error — assertable without requiring /// `PartialEq` on the codegen error type. - fn parsed(value: Option<&str>) -> std::result::Result { + fn parsed(value: Option<&str>) -> Result { mode_of(value).map_err(|e| e.to_string()) } diff --git a/crates/osprey-codegen/src/iter.rs b/crates/osprey-codegen/src/iter.rs index 4e5305be..fad8b62a 100644 --- a/crates/osprey-codegen/src/iter.rs +++ b/crates/osprey-codegen/src/iter.rs @@ -186,8 +186,7 @@ fn branch_on_predicate(cg: &mut Codegen, cb: &Callback, elem: Value) -> Result<( let pred = invoke(cg, cb, vec![elem])?; let pred = crate::cast::coerce_to(cg, pred, LType::I1)?; let pb = as_i64(cg, pred)?; - let nz = cg.fresh_reg(); - cg.emit(format!("{nz} = icmp ne i64 {}, 0", pb.operand)); + let nz = cg.emit_reg(format!("icmp ne i64 {}, 0", pb.operand)); let taken = cg.fresh_label(); let rejected = cg.fresh_label(); cg.emit(format!("br i1 {nz}, label %{taken}, label %{rejected}")); @@ -258,8 +257,7 @@ pub(crate) fn acc_init(cg: &mut Codegen, args: &[Expr]) -> Result<(String, Value crate::arc::escape_retain(cg, &initial); let tmpl = initial.clone(); let boxed = box_to_i64(cg, initial); - let acc = cg.fresh_reg(); - cg.emit(format!("{acc} = alloca i64")); + let acc = cg.emit_reg("alloca i64"); cg.emit(format!("store i64 {}, i64* {acc}", boxed.operand)); Ok((acc, tmpl)) } @@ -409,7 +407,7 @@ fn list_builder(cg: &mut Codegen, args: &[Expr], filter: bool) -> Result } let mapped = invoke(cg, &f, vec![elem])?; if mapped.result_inner.is_some() { - return Err(crate::error::CodegenError::unsupported( + return Err(CodegenError::unsupported( "mapList cannot store an unhandled Result element; handle it in the callback", )); } diff --git a/crates/osprey-codegen/src/lib.rs b/crates/osprey-codegen/src/lib.rs index 0871c1f9..45cb7149 100644 --- a/crates/osprey-codegen/src/lib.rs +++ b/crates/osprey-codegen/src/lib.rs @@ -50,6 +50,9 @@ mod runtime; mod stmt; mod strings; mod testing; +#[cfg(test)] +#[path = "../../testkit.rs"] +mod testkit; mod types; pub use error::{CodegenError, Result}; @@ -98,6 +101,7 @@ fn stmt_idents(s: &osprey_ast::Stmt, out: &mut std::collections::BTreeSet String { @@ -162,10 +166,15 @@ mod tests { #[test] fn emits_main_and_puts_for_hello() { let ir = module("print(\"hello\")\n"); - assert!(ir.contains("define i32 @main() #0")); - assert!(ir.contains("declare i32 @puts(i8*)")); - assert!(ir.contains("call i32 @puts")); - assert!(ir.contains("hello\\00")); + shows( + &ir, + &[ + "define i32 @main() #0", + "declare i32 @puts(i8*)", + "call i32 @puts", + "hello\\00", + ], + ); // Every function keeps frame pointers so the sampling profiler's // FP-chain walk is valid from any pc [PROF-CODEGEN-FP]. assert!(ir.contains("attributes #0 = { \"frame-pointer\"=\"all\" }")); @@ -196,11 +205,16 @@ mod tests { #[test] fn testing_builtins_lower_to_tap_runtime_calls() { let ir = module("test(\"adds\", fn() => expect(1 + 1, 2))\n"); - assert!(ir.contains("call i32 @osp_test_begin(i8*")); - assert!(ir.contains("call void @osp_test_end(i8*")); - assert!(ir.contains("call void @osp_test_assert(i8* null, i32")); - assert!(ir.contains("call i32 @osp_test_finalize()")); - assert!(ir.contains("call i32 @strcmp(i8*")); + shows( + &ir, + &[ + "call i32 @osp_test_begin(i8*", + "call void @osp_test_end(i8*", + "call void @osp_test_assert(i8* null, i32", + "call i32 @osp_test_finalize()", + "call i32 @strcmp(i8*", + ], + ); } #[test] @@ -269,8 +283,10 @@ mod tests { // [TESTING-EQUALITY] a Result operand branches on its discriminant: // Success renders bare, Error renders as Error(). let ir = module("expect(intDiv(1, 0), 2)\n"); - assert!(ir.contains("call void @osp_test_assert(i8* null, i32")); - assert!(ir.contains("Error(%s)")); + shows( + &ir, + &["call void @osp_test_assert(i8* null, i32", "Error(%s)"], + ); // A list/map/record operand has no canonical rendering — loud error. assert!(compile_err("expect([1, 2], [1, 3])\n") .to_string() @@ -308,23 +324,33 @@ mod tests { ); let expected_dwarf_version = if cfg!(target_os = "macos") { 4 } else { 5 }; - assert!(ir.contains("source_filename = \"/tmp/debug.osp\"")); - assert!(ir.contains("!llvm.dbg.cu = !{!")); - assert!(ir.contains("!llvm.module.flags = !{!")); - assert!(ir.contains("!DICompileUnit(")); - assert!(ir.contains("!DIFile(filename: \"debug.osp\", directory: \"/tmp\")")); - assert!(ir.contains(&format!("!\"Dwarf Version\", i32 {expected_dwarf_version}"))); - assert!(ir.contains("!DISubprogram(name: \"add\"")); - assert!(ir.contains("!DISubprogram(name: \"main\"")); - assert!(ir.contains("!DILocalVariable(name: \"x\"")); + shows( + &ir, + &[ + "source_filename = \"/tmp/debug.osp\"", + "!llvm.dbg.cu = !{!", + "!llvm.module.flags = !{!", + "!DICompileUnit(", + "!DIFile(filename: \"debug.osp\", directory: \"/tmp\")", + &format!("!\"Dwarf Version\", i32 {expected_dwarf_version}"), + "!DISubprogram(name: \"add\"", + "!DISubprogram(name: \"main\"", + "!DILocalVariable(name: \"x\"", + ], + ); // Parameters (a, b) use dbg.value — SSA args live for the whole // function. `let` locals (x) use dbg.declare over a stack slot, the // robust -O0 representation that keeps the line table free of stray // line-0 rows. [DEBUGGER-DBG-DECLARE] - assert!(ir.contains("@llvm.dbg.value")); - assert!(ir.contains("call void @llvm.dbg.declare(metadata")); - assert!(ir.contains("!DILocation(line: 2, column: 1")); - assert!(ir.contains(", !dbg !")); + shows( + &ir, + &[ + "@llvm.dbg.value", + "call void @llvm.dbg.declare(metadata", + "!DILocation(line: 2, column: 1", + ", !dbg !", + ], + ); } #[test] @@ -466,9 +492,14 @@ mod tests { let r = apply(value: 10, f: fn(x: int) => (x + 1) ?: x)\n\ print(\"r=${r}\")\n", ); - assert!(ir.contains("define i64 @__closure_fn_0(i8* %__env, i64 %$p0)")); - assert!(ir.contains("@__closure_cell_0 = private unnamed_addr constant { i8* }")); - assert!(ir.contains("call i64 %")); + shows( + &ir, + &[ + "define i64 @__closure_fn_0(i8* %__env, i64 %$p0)", + "@__closure_cell_0 = private unnamed_addr constant { i8* }", + "call i64 %", + ], + ); } #[test] @@ -484,16 +515,20 @@ mod tests { print(\"r=${add5(3)}\")\n\ }\n", ); - assert!(ir.contains("define i8* @makeAdder(i64 %$p0)")); - assert!(ir.contains("bitcast i8* %__env to { i8*, i64 }*")); - assert!(ir.contains("call i8* @osp_alloc")); + shows( + &ir, + &[ + "define i8* @makeAdder(i64 %$p0)", + "bitcast i8* %__env to { i8*, i64 }*", + "call i8* @osp_alloc", + ], + ); } #[test] fn interpolation_uses_sprintf() { let ir = module("let x = 7\nprint(\"x=${x}\")\n"); - assert!(ir.contains("@sprintf")); - assert!(ir.contains("@osp_alloc")); + shows(&ir, &["@sprintf", "@osp_alloc"]); } /// An erasure builds a shape-carrying box, and ownership crosses it in @@ -613,9 +648,7 @@ mod tests { #[test] fn match_lowers_to_phi() { let ir = module("fn pick(a: int, b: int) -> int = match a < b { true => a false => b }\n"); - assert!(ir.contains("icmp")); - assert!(ir.contains("br i1")); - assert!(ir.contains("phi i64")); + shows(&ir, &["icmp", "br i1", "phi i64"]); } #[test] @@ -625,6 +658,15 @@ mod tests { // return type is `{ i64, i8 }*`; what matters here is the argument order. let ir = module("fn sub(a, b) = a - b\nlet r = sub(b: 1, a: 9)\n"); assert!(ir.contains("@sub(i64 9, i64 1)")); + let external = module( + "extern fn takeFirst(first: int, second: int) -> int\n\ + fn namedWitness() -> int = takeFirst(second: 22, first: 11)\n", + ); + assert!( + function_body(&external, "define i64 @namedWitness()") + .contains("@takeFirst(i64 11, i64 22)"), + "extern calls must preserve declaration order and the C ABI:\n{external}" + ); } #[test] @@ -687,9 +729,7 @@ mod tests { print(\"sum=${s}\")\n\ }\n", ); - assert!(ir.contains("@osp_alloc")); - assert!(ir.contains("icmp ne i64")); - assert!(ir.contains("alloca i64")); + shows(&ir, &["@osp_alloc", "icmp ne i64", "alloca i64"]); } #[test] @@ -710,9 +750,14 @@ mod tests { print(\"len=${listLength(m)} f=${listLength(f)} t=${t}\")\n\ }\n", ); - assert!(ir.contains("osprey_list_builder_new")); - assert!(ir.contains("osprey_list_builder_push")); - assert!(ir.contains("osprey_list_builder_seal")); + shows( + &ir, + &[ + "osprey_list_builder_new", + "osprey_list_builder_push", + "osprey_list_builder_seal", + ], + ); } #[test] @@ -756,8 +801,7 @@ mod tests { print(\"r=${g()}\")\n\ }\n", ); - assert!(ir.contains("call i8* @osp_alloc")); - assert!(ir.contains("bitcast i8* %__env")); + shows(&ir, &["call i8* @osp_alloc", "bitcast i8* %__env"]); } #[test] @@ -813,8 +857,7 @@ mod tests { }\n\ fn main() -> Unit = print(\"a=${area(Circle { r: 3 })}\")\n", ); - assert!(ir.contains("load i64, i64*")); - assert!(ir.contains("icmp eq i64")); + shows(&ir, &["load i64, i64*", "icmp eq i64"]); assert_eq!( ir.matches("call { i64, i1 } @llvm.smul.with.overflow.i64") .count(), @@ -921,8 +964,7 @@ mod tests { print(\"r=${first(V { a: 10, b: 20 })}\")\n", ); // The field bind loads slot 1 of the block, reached via the tag compare. - assert!(ir.contains("load i64, i64*")); - assert!(ir.contains("icmp eq i64")); + shows(&ir, &["load i64, i64*", "icmp eq i64"]); } #[test] @@ -942,10 +984,15 @@ mod tests { print(classify(xs))\n\ }\n", ); - assert!(ir.contains("osprey_list_length")); - assert!(ir.contains("osprey_list_get")); - assert!(ir.contains("osprey_list_drop")); - assert!(ir.contains("icmp sge i64")); + shows( + &ir, + &[ + "osprey_list_length", + "osprey_list_get", + "osprey_list_drop", + "icmp sge i64", + ], + ); } #[test] @@ -1012,9 +1059,14 @@ mod tests { let wrapped = choose(7)\n\ print(\"${failed}:${wrapped}\")\n", ); - assert!(closure.contains("define i64 @__closure_fn_")); - assert!(closure.contains("i8* %__env, i8* %$p0")); - assert!(closure.contains("bitcast i8* %$p0 to { i64, i8, i8* }*")); + shows( + &closure, + &[ + "define i64 @__closure_fn_", + "i8* %__env, i8* %$p0", + "bitcast i8* %$p0 to { i64, i8, i8* }*", + ], + ); } /// Matching a bare scalar against `Success`/`Error` arms takes the Success @@ -1106,11 +1158,16 @@ mod tests { print(\"${join(ws, \"-\")} ${listLength(ls)}\")\n\ }\n", ); - assert!(ir.contains("@osp_strlen")); - assert!(ir.contains("osp_string_to_upper")); - assert!(ir.contains("osp_parse_int_strict")); - assert!(ir.contains("osp_string_codepoint_at")); - assert!(ir.contains("osp_string_join")); + shows( + &ir, + &[ + "@osp_strlen", + "osp_string_to_upper", + "osp_parse_int_strict", + "osp_string_codepoint_at", + "osp_string_join", + ], + ); } // ---- collections: map literals, map operations ---- @@ -1131,10 +1188,15 @@ mod tests { match m[\"a\"] { Success { value } => print(\"i=${value}\") Error { message } => print(\"no\") }\n\ }\n", ); - assert!(ir.contains("osprey_map_builder_new")); - assert!(ir.contains("osprey_map_set")); - assert!(ir.contains("osprey_map_remove")); - assert!(ir.contains("osprey_map_iter_new")); + shows( + &ir, + &[ + "osprey_map_builder_new", + "osprey_map_set", + "osprey_map_remove", + "osprey_map_iter_new", + ], + ); } #[test] @@ -1250,8 +1312,7 @@ mod tests { match listGet(xs, 0) { Success { value } => print(\"v=${value}\") Error { message } => print(\"no\") }\n\ }\n", ); - assert!(ir.contains("osprey_list_in_bounds")); - assert!(ir.contains("@strcmp")); + shows(&ir, &["osprey_list_in_bounds", "@strcmp"]); } // ---- algebraic effects: handler-owned state (effects.rs) ---- @@ -1392,8 +1453,13 @@ mod tests { fn main() -> int { mut c = 0\n let r = handle State get => c set v => { c = v } in bump()\n print(\"r=${toString(r)} c=${toString(c)}\")\n 0 }\n", ); // env-carrying handler ABI (push takes a 4th i8* env; perform resolves it) - assert!(ir.contains("declare i32 @__osprey_handler_push(i8*, i8*, i8*, i8*)")); - assert!(ir.contains("@__osprey_handler_lookup_env")); + shows( + &ir, + &[ + "declare i32 @__osprey_handler_push(i8*, i8*, i8*, i8*)", + "@__osprey_handler_lookup_env", + ], + ); // the captured `mut` became a heap cell (malloc'd, stored, loaded) assert!(ir.contains("@osp_alloc")); // each arm is emitted with the hidden leading env parameter @@ -1437,8 +1503,7 @@ mod tests { "fn greet(n: string) -> string = \"hi ${n}\"\n\ fn main() -> Unit = print(await(spawn greet(\"x\")))\n", ); - assert!(ir.contains("fiber_await")); - assert!(ir.contains("inttoptr i64")); + shows(&ir, &["fiber_await", "inttoptr i64"]); assert!( ir.lines() .any(|line| line.contains("@fiber_spawn_env_owned") && line.ends_with(", i64 1)")), @@ -1507,10 +1572,7 @@ mod tests { print(\"${mixed} ${q} ${neg} ${negi} ${lt} ${m}\")\n\ }\n", ); - assert!(ir.contains("sitofp i64")); - assert!(ir.contains("fdiv double")); - assert!(ir.contains("fneg double")); - assert!(ir.contains("fcmp")); + shows(&ir, &["sitofp i64", "fdiv double", "fneg double", "fcmp"]); } #[test] @@ -1526,9 +1588,7 @@ mod tests { print(\"${c} ${d} ${e}\")\n\ }\n", ); - assert!(ir.contains("and i1")); - assert!(ir.contains("or i1")); - assert!(ir.contains("xor i1")); + shows(&ir, &["and i1", "or i1", "xor i1"]); } // ---- records / aggregate (aggregate.rs) ---- @@ -1545,8 +1605,7 @@ mod tests { print(\"${p.x} ${p.y} ${p2.x}\")\n\ }\n", ); - assert!(ir.contains("getelementptr")); - assert!(ir.contains("store i64")); + shows(&ir, &["getelementptr", "store i64"]); } #[test] @@ -1584,10 +1643,15 @@ card doc index selected = print(\"${got} ${y} ${z} ${await(f)} ${fiberDone(f)}\")\n\ }\n", ); - assert!(ir.contains("channel_create")); - assert!(ir.contains("channel_send")); - assert!(ir.contains("channel_recv")); - assert!(ir.contains("fiber_done")); + shows( + &ir, + &[ + "channel_create", + "channel_send", + "channel_recv", + "fiber_done", + ], + ); } #[test] @@ -1639,6 +1703,16 @@ card doc index selected = // from the type table and dispatch through the closure cell. let ir = module( "type Cfg = { keep: (int) -> bool }\n\ + type Dispatch = Dispatch { m: () -> string }\n\ + fn methodField() -> string = \"field\"\n\ + fn m(receiver: T) -> int = 31\n\ + fn dispatch(receiver: T) = receiver.m()\n\ + fn echo(receiver: T) -> T = receiver\n\ + fn deferEcho(receiver: T) = receiver.echo()\n\ + fn explicitWitness() -> int = 5.echo()\n\ + fn deferredWitness() -> int = deferEcho(7)\n\ + fn fallbackWitness() -> int = dispatch(9)\n\ + fn fieldWitness() -> string = dispatch(Dispatch { m: methodField })\n\ fn add3(a: int) -> (int) -> (int) -> int =\n\ fn(b: int) => fn(c: int) => (a + b + c) ?: a\n\ fn makeAdder(n: int) -> (int) -> int = fn(x: int) => (x + n) ?: x\n\ @@ -1647,11 +1721,86 @@ card doc index selected = let chain = add3(1)(2)(3)\n\ let computed = fold(map(range(1, 4), makeAdder(10)), 0, fn(a: int, b: int) => (a + b) ?: a)\n\ let fieldcb = fold(filter(range(1, 5), cfg.keep), 0, fn(a: int, b: int) => (a + b) ?: a)\n\ - print(\"${chain} ${computed} ${fieldcb}\")\n\ + print(\"${chain} ${computed} ${fieldcb} ${explicitWitness()} ${deferredWitness()} ${fallbackWitness()} ${fieldWitness()}\")\n\ }\n", ); // Each higher-order callee loads a function pointer from a closure cell. assert!(ir.contains("to { i8* }*"), "expected a closure cell-call"); + for (name, value) in [ + ("explicitWitness", 5), + ("deferredWitness", 7), + ("fallbackWitness", 31), + ] { + assert!( + function_body(&ir, &format!("define i64 @{name}()")) + .contains(&format!("ret i64 {value}")), + "{name} must return its selected generic function's value:\n{ir}" + ); + } + assert!( + function_body(&ir, "define i8* @fieldWitness()").contains("call i8* %"), + "the callable record field must retain its string-returning ABI:\n{ir}" + ); + + // A field callback returns another callable through two generic helpers. + // The second record also proves named field arguments keep written slots. + let returned = module( + "effect Probe { value: fn() -> int }\n\ + fn fetch() -> int !Probe = perform Probe.value()\n\ + fn pure() -> int = 22\n\ + type Factory = Factory { m: () -> () -> int }\n\ + type NamedFactory = NamedFactory { m: (() -> int, () -> int) -> () -> int }\n\ + fn pureFactory() -> () -> int = pure\n\ + fn effectFactory() -> () -> int = fetch\n\ + fn firstCallback(callback: () -> int, ignored: () -> int) -> () -> int = callback\n\ + fn secondCallback(callback: () -> int, ignored: () -> int) -> () -> int = ignored\n\ + fn m(x: T) -> () -> int = pure\n\ + fn dispatch(x: T) = x.m()\n\ + fn dispatchNamed(x: T) = x.m(ignored: pure, callback: fetch)\n\ + fn forward(dummy: T, cb: () -> () -> int) = dispatch(Factory { m: cb })()\n\ + fn forwardNamed(dummy: T, cb: (() -> int, () -> int) -> () -> int) = dispatchNamed(NamedFactory { m: cb })()\n\ + fn firstSlot(first: int, second: int) -> int = first\n\ + fn throughSlot(dummy: T, callback: (int, int) -> int) = callback(second: 22, first: 11)\n\ + fn genericSlotWitness() -> int = throughSlot(0, firstSlot)\n\ + fn declaredSlotWitness() -> int = firstSlot(second: 22, first: 11)\n\ + fn directLambdaWitness() -> int = (fn(first: int, second: int) => first)(second: 22, first: 11)\n\ + fn throughLambda(unused: T) = (fn(first: int, second: int) => first)(second: 22, first: 11)\n\ + fn genericLambdaWitness() -> int = throughLambda(0)\n\ + fn pureWitness() -> int = forward(0, pureFactory)\n\ + fn namedPureWitness() -> int = forwardNamed(0, firstCallback)\n\ + fn handledWitness() -> int = handle Probe value => 33 in forward(0, effectFactory)\n\ + fn namedHandledWitness() -> int = handle Probe value => 33 in forwardNamed(0, secondCallback)\n\ + print(\"${pureWitness()} ${namedPureWitness()} ${handledWitness()} ${namedHandledWitness()} ${genericSlotWitness()} ${declaredSlotWitness()} ${directLambdaWitness()} ${genericLambdaWitness()}\")\n", + ); + for witness in ["pureWitness", "namedPureWitness"] { + let body = function_body(&returned, &format!("define i64 @{witness}()")); + assert!( + body.contains("call i8* %") && body.contains("call i64 %"), + "{witness} must call the factory and then its returned int callback:\n{returned}" + ); + } + assert!( + returned.contains("@__osprey_handler_push") + && returned.contains("@__osprey_handler_lookup_env"), + "returned effectful callbacks must retain their dynamic handler:\n{returned}" + ); + for (witness, arguments) in [ + ("genericSlotWitness", "i64 22, i64 11"), + ("declaredSlotWitness", "i64 11, i64 22"), + ] { + assert!( + function_body(&returned, &format!("define i64 @{witness}()")) + .contains(&format!("@firstSlot({arguments})")), + "{witness} must preserve its source call site's argument slots:\n{returned}" + ); + } + for witness in ["directLambdaWitness", "genericLambdaWitness"] { + assert!( + function_body(&returned, &format!("define i64 @{witness}()")) + .contains("ret i64 22"), + "{witness} must bind named values in written slots:\n{returned}" + ); + } } #[test] @@ -1784,8 +1933,7 @@ card doc index selected = print(\"${listLength(fs)} ${listLength(bs)}\")\n\ }\n", ); - assert!(ir.contains("bitcast double")); - assert!(ir.contains("zext i1")); + shows(&ir, &["bitcast double", "zext i1"]); } #[test] @@ -1799,8 +1947,7 @@ card doc index selected = print(\"${a == b}\")\n\ }\n", ); - assert!(ir.contains("zext i1")); - assert!(ir.contains("icmp eq i64")); + shows(&ir, &["zext i1", "icmp eq i64"]); } #[test] @@ -1814,8 +1961,7 @@ card doc index selected = print(\"${gt}\")\n\ }\n", ); - assert!(ir.contains("sitofp i64")); - assert!(ir.contains("fcmp")); + shows(&ir, &["sitofp i64", "fcmp"]); } #[test] @@ -1856,8 +2002,8 @@ card doc index selected = fn codegen_constructors_are_callable_directly() { // builder.rs Codegen::new + Default (not used by compile_program, which // takes inferred types) — exercised directly for the public surface. - let _a = crate::builder::Codegen::new(); - let _b = crate::builder::Codegen::default(); + let _a = builder::Codegen::new(); + let _b = builder::Codegen::default(); } // ---- GPU kernel extraction [GPU-KERNEL-EXTRACT] ---- @@ -1904,8 +2050,13 @@ card doc index selected = print(f())\n", ); assert_eq!(ir.matches(KERNEL_PREFIX).count(), 4, "{ir}"); - assert!(ir.contains("define double @__gpu_kernel_0(double %$p0)")); - assert!(ir.contains("define double @__gpu_kernel_1(double %$p0)")); + shows( + &ir, + &[ + "define double @__gpu_kernel_0(double %$p0)", + "define double @__gpu_kernel_1(double %$p0)", + ], + ); } #[test] @@ -1925,8 +2076,7 @@ card doc index selected = let header = "define double @__gpu_kernel_0(double %$p0, double %$p1, double %$p2)"; assert!(ir.contains(header), "{ir}"); let kernel = function_body(&ir, header); - assert!(kernel.contains("fmul double %$p1, %$p2"), "{kernel}"); - assert!(kernel.contains("fadd double"), "{kernel}"); + shows(&kernel, &["fmul double %$p1, %$p2", "fadd double"]); assert!(!kernel.contains("__env"), "{kernel}"); let host = function_body(&ir, "define i64 @f()"); assert!( @@ -1963,8 +2113,7 @@ card doc index selected = let header = "define double @__gpu_kernel_0(double %$p0, double %$p1, double %$p2)"; assert!(ir.contains(header), "{ir}"); let kernel = function_body(&ir, header); - assert!(kernel.contains("fmul double %$p0, %$p2"), "{kernel}"); - assert!(kernel.contains("fadd double %$p1,"), "{kernel}"); + shows(&kernel, &["fmul double %$p0, %$p2", "fadd double %$p1,"]); } /// A handler with one RESUMING arm and one SUBSTITUTING arm continues by diff --git a/crates/osprey-codegen/src/listlit.rs b/crates/osprey-codegen/src/listlit.rs index eaf7f5e2..35f293cc 100644 --- a/crates/osprey-codegen/src/listlit.rs +++ b/crates/osprey-codegen/src/listlit.rs @@ -143,16 +143,14 @@ pub(crate) fn gen_list( let elem_owner = first.osp_ty.clone(); let n = elements.len(); let data = cg.heap_alloc(&(n * 8).to_string()); - let arr = cg.fresh_reg(); - cg.emit(format!("{arr} = bitcast i8* {data} to {}*", elem.as_str())); + let arr = cg.emit_reg(format!("bitcast i8* {data} to {}*", elem.as_str())); for (i, v) in vals.into_iter().enumerate() { let v = coerce_to(cg, v, elem)?; // The header's drop releases pointer elements, so each store is a new // reference [GC-ARC-PERCEUS]. crate::arc::dup_store(cg, elem.as_str(), &v.operand); - let slot = cg.fresh_reg(); - cg.emit(format!( - "{slot} = getelementptr {}, {}* {arr}, i64 {i}", + let slot = cg.emit_reg(format!( + "getelementptr {}, {}* {arr}, i64 {i}", elem.as_str(), elem.as_str() )); @@ -259,7 +257,7 @@ pub(crate) fn gen_index(cg: &mut Codegen, target: &Expr, index: &Expr) -> Result .as_deref() .is_some_and(crate::collections::is_map_owner) { - let key = crate::cast::coerce_to(cg, iv, LType::Str)?; + let key = coerce_to(cg, iv, LType::Str)?; let k = crate::conv::box_to_i64(cg, key); return crate::collections::runtime_map_get(cg, &tv, &k); } @@ -285,36 +283,23 @@ pub(crate) fn gen_index(cg: &mut Codegen, target: &Expr, index: &Expr) -> Result let data = crate::aggregate::load_field(cg, LIST_STRUCT, &tv.operand, 1, LType::Str); // bounds: 0 <= idx < length - let ge0 = cg.fresh_reg(); - cg.emit(format!("{ge0} = icmp sge i64 {}, 0", idx.operand)); - let lt = cg.fresh_reg(); - cg.emit(format!("{lt} = icmp slt i64 {}, {len}", idx.operand)); - let ok = cg.fresh_reg(); - cg.emit(format!("{ok} = and i1 {ge0}, {lt}")); + let ge0 = cg.emit_reg(format!("icmp sge i64 {}, 0", idx.operand)); + let lt = cg.emit_reg(format!("icmp slt i64 {}, {len}", idx.operand)); + let ok = cg.emit_reg(format!("and i1 {ge0}, {lt}")); // Load only on the in-bounds path — the OOB / empty (`data == null`) path // must not dereference. - let load_bb = cg.fresh_label(); - let oob_bb = cg.fresh_label(); - let cont = cg.fresh_label(); - cg.emit(format!("br i1 {ok}, label %{load_bb}, label %{oob_bb}")); + let (load_bb, oob_bb, cont) = cg.diamond(&ok); cg.start_block(&load_bb); - let arr = cg.fresh_reg(); - cg.emit(format!("{arr} = bitcast i8* {data} to {}*", elem.as_str())); - let slot = cg.fresh_reg(); - cg.emit(format!( - "{slot} = getelementptr {}, {}* {arr}, i64 {}", + let arr = cg.emit_reg(format!("bitcast i8* {data} to {}*", elem.as_str())); + let slot = cg.emit_reg(format!( + "getelementptr {}, {}* {arr}, i64 {}", elem.as_str(), elem.as_str(), idx.operand )); - let val = cg.fresh_reg(); - cg.emit(format!( - "{val} = load {}, {}* {slot}", - elem.as_str(), - elem.as_str() - )); + let val = cg.emit_reg(format!("load {}, {}* {slot}", elem.as_str(), elem.as_str())); cg.emit(format!("br label %{cont}")); cg.start_block(&oob_bb); @@ -322,13 +307,11 @@ pub(crate) fn gen_index(cg: &mut Codegen, target: &Expr, index: &Expr) -> Result cg.start_block(&cont); let zero = crate::llty::zero_literal(elem); - let phi = cg.fresh_reg(); - cg.emit(format!( - "{phi} = phi {} [ {val}, %{load_bb} ], [ {zero}, %{oob_bb} ]", + let phi = cg.emit_reg(format!( + "phi {} [ {val}, %{load_bb} ], [ {zero}, %{oob_bb} ]", elem.as_str() )); - let disc = cg.fresh_reg(); - cg.emit(format!("{disc} = select i1 {ok}, i8 0, i8 1")); + let disc = cg.emit_reg(format!("select i1 {ok}, i8 0, i8 1")); // `ok` is the in-bounds flag, so the message is selected on the failing path. let oob = cg.string_constant(crate::collections::INDEX_OOB); let errmsg = cg.emit_reg(format!("select i1 {ok}, i8* null, i8* {}", oob.operand)); diff --git a/crates/osprey-codegen/src/llty.rs b/crates/osprey-codegen/src/llty.rs index 1a903e6e..32811264 100644 --- a/crates/osprey-codegen/src/llty.rs +++ b/crates/osprey-codegen/src/llty.rs @@ -196,7 +196,7 @@ impl fmt::Display for LType { /// (`null` when Success or when the producer set no message). The single source /// of truth for the Result ABI layout — every builder/reader spells it via here. #[must_use] -pub fn result_struct_ty(inner: LType) -> String { +pub(crate) fn result_struct_ty(inner: LType) -> String { format!("{{ {inner}, i8, i8* }}") } @@ -227,6 +227,8 @@ pub struct Value { /// (`Point`, `Shape`, `Result`, …) so field access and `match` can recover /// the heap layout. `None` for scalars and untyped handles. pub(crate) osp_ty: Option, + /// The semantic type survives equal-layout generic record instantiations. + pub(crate) inferred_type: Option, /// When `Some(inner)`, this value is a `Result` carried as a /// pointer to a heap block `{ inner, i8 disc }` (disc 0 = Success). Match, /// `?:`, failure-preserving arithmetic, and Result rendering read this to @@ -264,6 +266,7 @@ impl Value { operand: operand.into(), ty, osp_ty: None, + inferred_type: None, result_inner: None, result_inner_is_placeholder: false, payload_owner: None, @@ -280,6 +283,7 @@ impl Value { operand: operand.into(), ty: LType::Ptr, osp_ty: Some(owner.into()), + inferred_type: None, result_inner: None, result_inner_is_placeholder: false, payload_owner: None, @@ -297,6 +301,7 @@ impl Value { operand: operand.into(), ty: LType::Ptr, osp_ty: Some("Result".to_string()), + inferred_type: None, result_inner: Some(inner), result_inner_is_placeholder: false, payload_owner: None, diff --git a/crates/osprey-codegen/src/loops.rs b/crates/osprey-codegen/src/loops.rs index f131c418..87d288cd 100644 --- a/crates/osprey-codegen/src/loops.rs +++ b/crates/osprey-codegen/src/loops.rs @@ -21,8 +21,7 @@ pub(crate) struct Counter { } fn open_counter(cg: &mut Codegen, start: &str, bound: &str) -> Counter { - let slot = cg.fresh_reg(); - cg.emit(format!("{slot} = alloca i64")); + let slot = cg.emit_reg("alloca i64"); cg.emit(format!("store i64 {start}, i64* {slot}")); let cond = cg.fresh_label(); let body = cg.fresh_label(); @@ -31,10 +30,8 @@ fn open_counter(cg: &mut Codegen, start: &str, bound: &str) -> Counter { cg.emit(format!("br label %{cond}")); cg.start_block(&cond); - let i = cg.fresh_reg(); - cg.emit(format!("{i} = load i64, i64* {slot}")); - let more = cg.fresh_reg(); - cg.emit(format!("{more} = icmp slt i64 {i}, {bound}")); + let i = cg.emit_reg(format!("load i64, i64* {slot}")); + let more = cg.emit_reg(format!("icmp slt i64 {i}, {bound}")); cg.emit(format!("br i1 {more}, label %{body}, label %{endl}")); cg.start_block(&body); diff --git a/crates/osprey-codegen/src/lower.rs b/crates/osprey-codegen/src/lower.rs index 08a2ceda..164fd0f1 100644 --- a/crates/osprey-codegen/src/lower.rs +++ b/crates/osprey-codegen/src/lower.rs @@ -80,7 +80,9 @@ fn compile_program_with_options(program: &Program, options: CodegenOptions) -> R fn compile_module(program: &Program, options: CodegenOptions, library: bool) -> Result { let options = with_kernel_mode(options)?; - let prog = osprey_types::infer_program(program); + let mut prog = osprey_types::infer_program(program); + let elaborated = prog.elaborate_calls(program); + let program = &elaborated; let mut cg = Codegen::with_options(prog, options); // Seed the coverage denominator from the source, not from what lowering // happens to reach [TESTING-COVERAGE-CODEGEN]. @@ -234,9 +236,20 @@ fn record_declarations(cg: &mut Codegen, program: &Program) { // A union an extern claims to return loses its MASK_DIRECT proof // (builder.rs `field_meta`); record those before any layout lands. Stmt::Extern { - return_type: Some(t), + name, + parameters, + return_type, .. - } => cg.poison_extern_ret(t), + } => { + // Implements [CALL-ARGUMENTS] without changing foreign ABI identity. + let _ = cg.extern_params.insert( + name.clone(), + parameters.iter().map(|p| p.name.clone()).collect(), + ); + if let Some(t) = return_type { + cg.poison_extern_ret(t); + } + } _ => {} } } @@ -277,6 +290,7 @@ fn gen_function( ty: LType::I64, result_inner: None, fiber: None, + inferred_type: None, }, None, ); @@ -305,7 +319,12 @@ fn gen_function( let mut params = Vec::new(); for (i, (p, (pty, owner))) in parameters.iter().zip(param_sig.iter()).enumerate() { let reg = crate::llty::param_register(i); - let v = crate::cast::incoming_param(cg, format!("%{reg}"), pty.clone(), owner.clone()); + let mut v = crate::cast::incoming_param(cg, format!("%{reg}"), pty.clone(), owner.clone()); + v.inferred_type = cg + .prog + .param_types(name) + .and_then(|types| types.get(i)) + .cloned(); cg.emit_debug_param(&p.name, &v); cg.bind(p.name.clone(), v); params.push((pty.ty, reg)); diff --git a/crates/osprey-codegen/src/monofn.rs b/crates/osprey-codegen/src/monofn.rs index f31d1bab..bc1db4e0 100644 --- a/crates/osprey-codegen/src/monofn.rs +++ b/crates/osprey-codegen/src/monofn.rs @@ -237,6 +237,7 @@ fn param_of(v: &Value) -> ParamSig { ty: v.ty, result_inner: v.result_inner, fiber: None, + inferred_type: v.inferred_type.clone(), } } @@ -256,6 +257,9 @@ fn bind_params( // the call's duration, exactly as a top-level function's are // [GC-ARC-PERCEUS]. let value = crate::cast::incoming_param(cg, format!("%{reg}"), sig.clone(), owner.clone()); + if let Some(ty) = &value.inferred_type { + cg.bind_fn_local(&p.name, ty.clone()); + } cg.bind(p.name.clone(), value); out.push((sig.ty, reg)); } diff --git a/crates/osprey-codegen/src/pattern.rs b/crates/osprey-codegen/src/pattern.rs index ec633aff..a67b7cf7 100644 --- a/crates/osprey-codegen/src/pattern.rs +++ b/crates/osprey-codegen/src/pattern.rs @@ -380,8 +380,7 @@ fn gen_result_match(cg: &mut Codegen, disc: &Value, arms: &[MatchArm]) -> Result // (cond, success-binding, error-binding) by Result shape. let (cond, succ_val, err_val) = if disc.result_inner.is_some() { let d = crate::result::load_disc(cg, disc); - let c = cg.fresh_reg(); - cg.emit(format!("{c} = icmp eq i8 {d}, 0")); + let c = cg.emit_reg(format!("icmp eq i8 {d}, 0")); // Success binds the value slot; Error binds the errmsg slot (the real // reason), so `Error { message }` sees the message regardless of the // success payload type. Implements [ERR-PAYLOAD]. @@ -420,10 +419,7 @@ fn gen_result_match(cg: &mut Codegen, disc: &Value, arms: &[MatchArm]) -> Result ("true".to_string(), disc.clone(), empty) }; - let sl = cg.fresh_label(); - let el = cg.fresh_label(); - let end = cg.fresh_label(); - cg.emit(format!("br i1 {cond}, label %{sl}, label %{el}")); + let (sl, el, end) = cg.diamond(&cond); let mark = crate::arc::frame_mark(cg); let mut phi_in: Vec<(Value, String)> = Vec::new(); @@ -467,10 +463,8 @@ fn gen_union_match( owner: &str, ) -> Result { // Load the discriminant tag (every variant block starts with `{ i64 tag, … }`). - let tagp = cg.fresh_reg(); - cg.emit(format!("{tagp} = bitcast i8* {} to i64*", disc.operand)); - let tag = cg.fresh_reg(); - cg.emit(format!("{tag} = load i64, i64* {tagp}")); + let tagp = cg.emit_reg(format!("bitcast i8* {} to i64*", disc.operand)); + let tag = cg.emit_reg(format!("load i64, i64* {tagp}")); let end = cg.fresh_label(); let mark = crate::arc::frame_mark(cg); @@ -482,8 +476,7 @@ fn gen_union_match( let name = name.to_string(); let vpos = variants.iter().position(|v| *v == name).unwrap_or(0); let vtag = i64::try_from(vpos).unwrap_or(0); - let cond = cg.fresh_reg(); - cg.emit(format!("{cond} = icmp eq i64 {tag}, {vtag}")); + let cond = cg.emit_reg(format!("icmp eq i64 {tag}, {vtag}")); let next_lbl = open_guarded_arm(cg, &cond); bind_variant_fields(cg, disc, &name, &fields, mode); emit_arm_body(cg, arm, &mut phi_in)?; @@ -555,11 +548,7 @@ fn bind_variant_fields( let Some((view, struct_ty)) = bindable_layout(cg, variant, pat_fields) else { return; }; - let src = cg.fresh_reg(); - cg.emit(format!( - "{src} = bitcast i8* {} to {struct_ty}*", - disc.operand - )); + let src = cg.emit_reg(format!("bitcast i8* {} to {struct_ty}*", disc.operand)); for (column, bind_name) in pat_fields.iter().enumerate() { if bind_name.is_empty() { continue; // an ignored slot binds nothing @@ -709,8 +698,7 @@ fn finish_phi( .map(|(v, blk)| format!("[ {}, %{blk} ]", v.operand)) .collect::>() .join(", "); - let reg = cg.fresh_reg(); - cg.emit(format!("{reg} = phi {llvm_ty} {incoming}")); + let reg = cg.emit_reg(format!("phi {llvm_ty} {incoming}")); let common = |sel: fn(&Value) -> Option| { let first = sel(first_val); incoming_values diff --git a/crates/osprey-codegen/src/result.rs b/crates/osprey-codegen/src/result.rs index a0d2ae75..af14e764 100644 --- a/crates/osprey-codegen/src/result.rs +++ b/crates/osprey-codegen/src/result.rs @@ -39,14 +39,12 @@ pub(crate) fn make_result( ]); let obj = cg.malloc_struct(&struct_ty, meta); crate::aggregate::store_field(cg, &struct_ty, obj.as_str(), 0, inner, &v.operand); - let dp = cg.fresh_reg(); - cg.emit(format!( - "{dp} = getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 1" + let dp = cg.emit_reg(format!( + "getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 1" )); cg.emit(format!("store i8 {disc}, i8* {dp}")); - let mp = cg.fresh_reg(); - cg.emit(format!( - "{mp} = getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 2" + let mp = cg.emit_reg(format!( + "getelementptr {struct_ty}, {struct_ty}* {obj}, i32 0, i32 2" )); // The block's drop mask releases the errmsg word too [GC-ARC-PERCEUS]. crate::arc::dup_store(cg, "i8*", errmsg); @@ -100,8 +98,7 @@ pub(crate) fn make_result_if_err_because( msg: Option<&str>, reason: Option<&str>, ) -> Result { - let disc = cg.fresh_reg(); - cg.emit(format!("{disc} = select i1 {is_err}, i8 1, i8 0")); + let disc = cg.emit_reg(format!("select i1 {is_err}, i8 1, i8 0")); let fallback = match msg { Some(m) => cg.string_constant(m).operand, None => NO_MSG.to_string(), @@ -173,10 +170,7 @@ pub(crate) fn result_from_nullable( pub(crate) fn open_result_branch(cg: &mut Codegen, v: &Value) -> (String, String, String) { let d = load_disc(cg, v); let is_succ = cg.emit_reg(format!("icmp eq i8 {d}, 0")); - let sl = cg.fresh_label(); - let el = cg.fresh_label(); - let end = cg.fresh_label(); - cg.emit(format!("br i1 {is_succ}, label %{sl}, label %{el}")); + let (sl, el, end) = cg.diamond(&is_succ); cg.start_block(&sl); (sl, el, end) } @@ -188,13 +182,11 @@ pub(crate) fn load_disc(cg: &mut Codegen, v: &Value) -> String { let Some(struct_ty) = v.result_struct_ty() else { return "1".to_string(); }; - let dp = cg.fresh_reg(); - cg.emit(format!( - "{dp} = getelementptr {struct_ty}, {struct_ty}* {}, i32 0, i32 1", + let dp = cg.emit_reg(format!( + "getelementptr {struct_ty}, {struct_ty}* {}, i32 0, i32 1", v.operand )); - let d = cg.fresh_reg(); - cg.emit(format!("{d} = load i8, i8* {dp}")); + let d = cg.emit_reg(format!("load i8, i8* {dp}")); d } @@ -217,13 +209,11 @@ pub(crate) fn load_errmsg(cg: &mut Codegen, v: &Value) -> Value { return Value::new(NO_MSG, LType::Str); }; let struct_ty = result_struct_ty(inner); - let mp = cg.fresh_reg(); - cg.emit(format!( - "{mp} = getelementptr {struct_ty}, {struct_ty}* {}, i32 0, i32 2", + let mp = cg.emit_reg(format!( + "getelementptr {struct_ty}, {struct_ty}* {}, i32 0, i32 2", v.operand )); - let raw = cg.fresh_reg(); - cg.emit(format!("{raw} = load i8*, i8** {mp}")); + let raw = cg.emit_reg(format!("load i8*, i8** {mp}")); Value::new(raw, LType::Str) } @@ -256,12 +246,7 @@ pub(crate) fn repack_to_inner(cg: &mut Codegen, v: Value, inner: LType) -> Resul let disc = load_disc(cg, &v); let errmsg = load_errmsg(cg, &v); let is_success = cg.emit_reg(format!("icmp eq i8 {disc}, 0")); - let success = cg.fresh_label(); - let error = cg.fresh_label(); - let end = cg.fresh_label(); - cg.emit(format!( - "br i1 {is_success}, label %{success}, label %{error}" - )); + let (success, error, end) = cg.diamond(&is_success); cg.start_block(&success); let loaded = load_value(cg, &v); diff --git a/crates/osprey-codegen/src/runtime.rs b/crates/osprey-codegen/src/runtime.rs index 0a68d7ba..d18f2778 100644 --- a/crates/osprey-codegen/src/runtime.rs +++ b/crates/osprey-codegen/src/runtime.rs @@ -61,10 +61,7 @@ fn result_string(cg: &mut Codegen, v: &Value, wrap_success: bool) -> Result)`. let msg = crate::result::load_errmsg(cg, v); let isnull = cg.emit_reg(format!("icmp eq i8* {}, null", msg.operand)); - let fl = cg.fresh_label(); - let nl = cg.fresh_label(); - let jl = cg.fresh_label(); - cg.emit(format!("br i1 {isnull}, label %{nl}, label %{fl}")); + let (nl, fl, jl) = cg.diamond(&isnull); cg.start_block(&fl); let with = sprintf_wrap(cg, "Error(%s)", &msg.operand); let fb = cg.cur_block().to_string(); @@ -73,18 +70,14 @@ fn result_string(cg: &mut Codegen, v: &Value, wrap_success: bool) -> Result Valu pub(crate) fn gen_print(cg: &mut Codegen, v: Value) -> Result { let s = to_string_value(cg, v)?; cg.add_extern("declare i32 @puts(i8*)"); - let reg = cg.fresh_reg(); - cg.emit(format!("{reg} = call i32 @puts(i8* {})", s.operand)); + let _ = cg.emit_reg(format!("call i32 @puts(i8* {})", s.operand)); Ok(Value::unit()) } @@ -157,9 +149,8 @@ fn int_to_string(cg: &mut Codegen, v: Value) -> Result { // full i64 on every target; on LP64 (native) it is identical to `%ld`. let fmt = cg.string_constant("%lld"); let buf = cg.heap_alloc(INT_STRING_BYTES); - let tmp = cg.fresh_reg(); - cg.emit(format!( - "{tmp} = call i32 (i8*, i8*, ...) @sprintf(i8* {buf}, i8* {}, i64 {})", + let _ = cg.emit_reg(format!( + "call i32 (i8*, i8*, ...) @sprintf(i8* {buf}, i8* {}, i64 {})", fmt.operand, i.operand )); let v = Value::new(buf, LType::Str); @@ -171,9 +162,8 @@ fn int_to_string(cg: &mut Codegen, v: Value) -> Result { /// that (and NaN/inf) — see `runtime/string_runtime.c`. fn float_to_string(cg: &mut Codegen, v: &Value) -> Value { cg.add_extern("declare i8* @osp_float_to_string(double)"); - let reg = cg.fresh_reg(); - cg.emit(format!( - "{reg} = call i8* @osp_float_to_string(double {})", + let reg = cg.emit_reg(format!( + "call i8* @osp_float_to_string(double {})", v.operand )); let out = Value::new(reg, LType::Str); @@ -184,9 +174,8 @@ fn float_to_string(cg: &mut Codegen, v: &Value) -> Value { fn bool_to_string(cg: &mut Codegen, v: &Value) -> Value { let t = cg.string_constant("true"); let f = cg.string_constant("false"); - let reg = cg.fresh_reg(); - cg.emit(format!( - "{reg} = select i1 {}, i8* {}, i8* {}", + let reg = cg.emit_reg(format!( + "select i1 {}, i8* {}, i8* {}", v.operand, t.operand, f.operand )); Value::new(reg, LType::Str) diff --git a/crates/osprey-codegen/src/stmt.rs b/crates/osprey-codegen/src/stmt.rs index 28044786..a12fa4dd 100644 --- a/crates/osprey-codegen/src/stmt.rs +++ b/crates/osprey-codegen/src/stmt.rs @@ -288,7 +288,14 @@ fn gen_bind(cg: &mut Codegen, name: &str, value: &Expr, position: Option …; f = makeAdder(10)` must // call the new closure, not the old inline body. @@ -362,7 +369,7 @@ fn generic_returned_lambda(cg: &Codegen, value: &Expr) -> Option let Expr::Call { function, .. } = value else { return None; }; - let Expr::Identifier(callee) = &**function else { + let Expr::Identifier(callee) = crate::expr::unapplied(function) else { return None; }; // A CONCRETELY-typed result materializes a real cell on the ordinary path, @@ -401,7 +408,7 @@ fn captures_callee_params(cg: &Codegen, value: &Expr) -> bool { let Some((callee_params, _, body, _)) = generic_returned_lambda(cg, value) else { return false; }; - let mut free = std::collections::BTreeSet::new(); + let mut free = BTreeSet::new(); osprey_ast::freevars::free_idents(&body, &mut free); callee_params.iter().any(|p| free.contains(&p.name)) } @@ -502,6 +509,9 @@ pub(crate) fn binds_no_value(cg: &Codegen, value: &Expr) -> bool { /// uses it to keep inlined function-typed parameters callable. pub(crate) fn fn_result_type(cg: &Codegen, value: &Expr) -> Option { match value { + Expr::TypeApply { .. } => cg + .callee_fn_type(value) + .filter(crate::types::fn_value_concrete), Expr::Lambda { position, .. } => cg .prog .lambda_type(*position) diff --git a/crates/osprey-codegen/src/strings.rs b/crates/osprey-codegen/src/strings.rs index 737cd6b3..79456327 100644 --- a/crates/osprey-codegen/src/strings.rs +++ b/crates/osprey-codegen/src/strings.rs @@ -145,8 +145,7 @@ pub(crate) fn gen_size(cg: &mut Codegen, name: &str, recv: Value) -> Result = ops.iter().map(String::as_str).collect(); let raw = cg.call("i64", cname, ¶ms, &op_refs); - let r = cg.fresh_reg(); - cg.emit(format!("{r} = icmp ne i64 {raw}, 0")); + let r = cg.emit_reg(format!("icmp ne i64 {raw}, 0")); Ok(Value::new(r, LType::I1)) } @@ -242,8 +240,7 @@ fn contains(cg: &mut Codegen, args: &[Expr], _named: &[NamedArgument]) -> Result let s = arg(cg, args, 0, LType::Str)?; let needle = arg(cg, args, 1, LType::Str)?; let hit = cg.call("i8*", "strstr", "i8*, i8*", &[&s.operand, &needle.operand]); - let r = cg.fresh_reg(); - cg.emit(format!("{r} = icmp ne i8* {hit}, null")); + let r = cg.emit_reg(format!("icmp ne i8* {hit}, null")); Ok(Value::new(r, LType::I1)) } @@ -257,10 +254,8 @@ fn index_of(cg: &mut Codegen, args: &[Expr], _named: &[NamedArgument]) -> Result "i8*, i8*", &[&s.operand, &needle.operand], ); - let iserr = cg.fresh_reg(); - cg.emit(format!("{iserr} = icmp slt i64 {idx}, 0")); - let val = cg.fresh_reg(); - cg.emit(format!("{val} = select i1 {iserr}, i64 0, i64 {idx}")); + let iserr = cg.emit_reg(format!("icmp slt i64 {idx}, 0")); + let val = cg.emit_reg(format!("select i1 {iserr}, i64 0, i64 {idx}")); make_result_if_err( cg, Value::new(val, LType::I64), @@ -315,8 +310,7 @@ fn parse_strict( _named: &[NamedArgument], ) -> Result { let s = arg(cg, args, 0, LType::Str)?; - let slot = cg.fresh_reg(); - cg.emit(format!("{slot} = alloca {inner}")); + let slot = cg.emit_reg(format!("alloca {inner}")); let zero = crate::llty::zero_literal(inner); cg.emit(format!("store {inner} {zero}, {inner}* {slot}")); let rc = cg.call( @@ -325,10 +319,8 @@ fn parse_strict( &format!("i8*, {inner}*"), &[&s.operand, &slot], ); - let parsed = cg.fresh_reg(); - cg.emit(format!("{parsed} = load {inner}, {inner}* {slot}")); - let iserr = cg.fresh_reg(); - cg.emit(format!("{iserr} = icmp ne i64 {rc}, 0")); + let parsed = cg.emit_reg(format!("load {inner}, {inner}* {slot}")); + let iserr = cg.emit_reg(format!("icmp ne i64 {rc}, 0")); make_result_if_err(cg, Value::new(parsed, inner), inner, &iserr, Some(errmsg)) } @@ -354,8 +346,7 @@ fn split(cg: &mut Codegen, args: &[Expr]) -> Result { &[&s.operand, &sep.operand], ); crate::arc::own(cg, &Value::new(&ptr, LType::Ptr)); - let iserr = cg.fresh_reg(); - cg.emit(format!("{iserr} = icmp eq i8* {ptr}, null")); + let iserr = cg.emit_reg(format!("icmp eq i8* {ptr}, null")); make_result_if_err( cg, Value::handle(ptr, crate::listlit::STRING_LIST_OWNER), @@ -371,19 +362,15 @@ fn split(cg: &mut Codegen, args: &[Expr]) -> Result { /// errmsg slot. `argtys` lists the leading argument types before the out-slot. fn cursor_int(cg: &mut Codegen, cname: &str, argtys: &[LType], args: &[Expr]) -> Result { let (mut ops, params) = typed_args_for_types(cg, argtys, args)?; - let slot = cg.fresh_reg(); - cg.emit(format!("{slot} = alloca i64")); + let slot = cg.emit_reg("alloca i64"); cg.emit(format!("store i64 0, i64* {slot}")); ops.push(slot.clone()); let full_params = format!("{params}, i64*"); let op_refs: Vec<&str> = ops.iter().map(String::as_str).collect(); let emsg = cg.call("i8*", cname, &full_params, &op_refs); - let parsed = cg.fresh_reg(); - cg.emit(format!("{parsed} = load i64, i64* {slot}")); - let is_err = cg.fresh_reg(); - cg.emit(format!("{is_err} = icmp ne i8* {emsg}, null")); - let disc = cg.fresh_reg(); - cg.emit(format!("{disc} = select i1 {is_err}, i8 1, i8 0")); + let parsed = cg.emit_reg(format!("load i64, i64* {slot}")); + let is_err = cg.emit_reg(format!("icmp ne i8* {emsg}, null")); + let disc = cg.emit_reg(format!("select i1 {is_err}, i8 1, i8 0")); make_result(cg, Value::new(parsed, LType::I64), LType::I64, &disc, &emsg) } diff --git a/crates/osprey-codegen/src/types.rs b/crates/osprey-codegen/src/types.rs index 85832910..318ee071 100644 --- a/crates/osprey-codegen/src/types.rs +++ b/crates/osprey-codegen/src/types.rs @@ -24,7 +24,7 @@ pub(crate) fn elem_tag(prog: &ProgramTypes, elem: Option<&Type>) -> Option LType { +pub(crate) fn ltype_of(ty: &Type) -> LType { match ty { Type::Con { name, args } => ltype_of_con(name, args), // A function reference is a code pointer; values never hold one directly @@ -95,8 +95,22 @@ pub(crate) fn result_payload_owner(prog: &ProgramTypes, ty: &Type) -> Option` ([`crate::gpu::GPU_TAG`]), the same convention flat /// list literals use (`[]double`), so combinator lowering recovers the /// element's `LType` through parameters and returns [GPU-BUFFER-ELEM]. -pub fn owner_name(prog: &ProgramTypes, ty: &Type) -> Option { +pub(crate) fn owner_name(prog: &ProgramTypes, ty: &Type) -> Option { match ty { + Type::Record { name, fields } + if prog + .ctors + .get(name) + .is_some_and(|layout| !layout.type_params.is_empty()) => + { + let layout = prog.ctors.get(name)?; + let shape: Option> = layout + .fields + .iter() + .map(|(field, _)| fields.get(field).map(|ty| ltype_of(ty).as_str())) + .collect(); + shape.map(|shape| format!("{name}#{}", shape.join(","))) + } Type::Record { name, .. } | Type::Union { name, .. } => Some(name.clone()), Type::Con { name, args } => match name.as_str() { names::INT @@ -180,7 +194,7 @@ fn substituted(ty: &Type, args: &[Type]) -> Type { /// "every value of this type is a constructor-built ARC body or NULL" true. /// A `Result` is its own discriminated block and therefore does not prove /// that the outer value is a heap value of `T`. -pub fn proven_heap_name(ty: &Type) -> Option<&str> { +pub(crate) fn proven_heap_name(ty: &Type) -> Option<&str> { match ty { Type::Con { name, .. } if name == names::RESULT => None, // A declared union or any other named constructor: the name IS the proof. @@ -191,7 +205,7 @@ pub fn proven_heap_name(ty: &Type) -> Option<&str> { /// When `ty` is `Result`, the inner success type `T` as an [`LType`]. /// Used to carry the `{ T, i8 }*` Result block across call/return boundaries. -pub fn result_inner(ty: &Type) -> Option { +pub(crate) fn result_inner(ty: &Type) -> Option { match ty { Type::Con { name, args } if name == names::RESULT => args.first().map(ltype_of), _ => None, @@ -200,7 +214,7 @@ pub fn result_inner(ty: &Type) -> Option { /// Whether a function type yields a concrete closure ABI: every parameter and /// return are variable-free. Result returns keep their wrapper in the ABI. -pub fn fn_value_concrete(ty: &Type) -> bool { +pub(crate) fn fn_value_concrete(ty: &Type) -> bool { match ty { Type::Fun { params, ret } => { !params.iter().any(osprey_types::has_type_var) && !osprey_types::has_type_var(ret) diff --git a/crates/osprey-lsp/src/analysis.rs b/crates/osprey-lsp/src/analysis.rs index e9600dde..c9295025 100644 --- a/crates/osprey-lsp/src/analysis.rs +++ b/crates/osprey-lsp/src/analysis.rs @@ -5,10 +5,9 @@ //! into editor symbols — both the language server and the `osprey --symbols` / //! `osprey --hover` CLI modes render from here. -use osprey_ast::{ - walk_each, Expr, ExternParameter, InterpolatedPart, NamedArgument, Parameter, Position, - Program, Stmt, TypeExpr, -}; +#[cfg(test)] +use osprey_ast::InterpolatedPart; +use osprey_ast::{AstNode, Expr, ExternParameter, Parameter, Position, Program, Stmt, TypeExpr}; use std::fmt::Write as _; /// What kind of declaration a [`SymbolInfo`] describes. @@ -227,139 +226,22 @@ fn walk_stmt_body(stmt: &Stmt, prefix: &[String], out: &mut Vec) { } } -/// Descend an expression collecting nested `let` bindings (first third). +/// Descend expressions while preserving block-local symbol collection. fn walk_expr(e: &Expr, prefix: &[String], out: &mut Vec) { match e { - Expr::InterpolatedStr(parts) => parts.iter().for_each(|p| { - if let InterpolatedPart::Expr(x) = p { - walk_expr(x, prefix, out); - } - }), - Expr::List(xs, _) => walk_each(xs, out, |x| x, |x, out| walk_expr(x, prefix, out)), - Expr::Map(entries) => entries.iter().for_each(|en| { - walk_expr(&en.key, prefix, out); - walk_expr(&en.value, prefix, out); - }), - Expr::Object(fields) => walk_each( - fields, - out, - |f| &f.value, - |x, out| { - walk_expr(x, prefix, out); - }, - ), - Expr::Binary { left, right, .. } | Expr::Pipe { left, right } => { - walk_expr(left, prefix, out); - walk_expr(right, prefix, out); - } - Expr::Unary { operand, .. } => walk_expr(operand, prefix, out), - other => walk_expr_rest(other, prefix, out), - } -} - -/// Continuation of [`walk_expr`] — call/navigation/block forms (second third). -fn walk_expr_rest(e: &Expr, prefix: &[String], out: &mut Vec) { - match e { - Expr::Call { - function, - arguments, - named_arguments, - } => { - walk_expr(function, prefix, out); - walk_arguments(arguments, named_arguments, prefix, out); - } - Expr::MethodCall { - target, - arguments, - named_arguments, - .. - } => { - walk_expr(target, prefix, out); - walk_arguments(arguments, named_arguments, prefix, out); - } - Expr::FieldAccess { target, .. } => walk_expr(target, prefix, out), - Expr::Index { target, index } => { - walk_expr(target, prefix, out); - walk_expr(index, prefix, out); - } - Expr::Lambda { body, .. } => walk_expr(body, prefix, out), - Expr::Match { value, arms } => { - walk_expr(value, prefix, out); - walk_each( - arms, - out, - |arm| &arm.body, - |x, out| { - walk_expr(x, prefix, out); - }, - ); - } Expr::Block { statements, value } => { walk_stmts(statements, prefix, Bodies::Descend, out); - if let Some(v) = value { - walk_expr(v, prefix, out); + if let Some(value) = value { + walk_expr(value, prefix, out); } } - Expr::TypeConstructor { fields, .. } | Expr::Update { fields, .. } => { - walk_each( - fields, - out, - |f| &f.value, - |x, out| { - walk_expr(x, prefix, out); - }, - ); - } - other => walk_expr_fiber(other, prefix, out), - } -} - -/// Final third of [`walk_expr`]: fiber/effect forms; leaves fall through. -fn walk_expr_fiber(e: &Expr, prefix: &[String], out: &mut Vec) { - match e { - Expr::Spawn(i) | Expr::Await(i) | Expr::Recv(i) | Expr::Yield(Some(i)) => { - walk_expr(i, prefix, out); - } - Expr::Send { channel, value } => { - walk_expr(channel, prefix, out); - walk_expr(value, prefix, out); - } - Expr::Select { arms } => walk_each( - arms, - out, - |arm| &arm.body, - |x, out| { - walk_expr(x, prefix, out); - }, - ), - Expr::Perform { - arguments, - named_arguments, - .. - } => { - walk_arguments(arguments, named_arguments, prefix, out); - } - Expr::Handler { arms, body, .. } => { - for arm in arms { - walk_expr(&arm.body, prefix, out); + // Resume operands were not part of this symbol collector's traversal. + Expr::Resume(_) => {} + _ => AstNode::Expression(e).for_each_child(|child| { + if let AstNode::Expression(expression) = child { + walk_expr(expression, prefix, out); } - walk_expr(body, prefix, out); - } - _ => {} - } -} - -fn walk_arguments( - arguments: &[Expr], - named_arguments: &[NamedArgument], - prefix: &[String], - out: &mut Vec, -) { - for argument in arguments { - walk_expr(argument, prefix, out); - } - for argument in named_arguments { - walk_expr(&argument.value, prefix, out); + }), } } @@ -752,6 +634,18 @@ pub(crate) fn json_str(s: &str) -> String { #[cfg(test)] mod tests { use super::*; + /// Assert the symbol named `name` carries a doc comment mentioning `needle` + /// — the find-then-unwrap chain these cases otherwise repeat per symbol. + fn assert_doc(syms: &[SymbolInfo], name: &str, needle: &str) { + let doc = syms + .iter() + .find(|s| s.name == name) + .and_then(|s| s.doc.clone()); + assert!( + doc.is_some_and(|d| d.contains(needle)), + "no doc mentioning {needle:?} on {name}" + ); + } #[test] fn outline_covers_every_declaration_form() { @@ -1005,22 +899,8 @@ print(describeAny(42) + "!") let parsed = osprey_syntax::parse_program_with_flavor(src, osprey_syntax::Flavor::Ml); assert!(parsed.errors.is_empty(), "{:?}", parsed.errors); let syms = collect_all_symbols(&parsed.program); - let doc = syms - .iter() - .find(|s| s.name == "double") - .and_then(|s| s.doc.clone()); - assert!( - doc.is_some_and(|d| d.contains("Doubles the input.")), - "ml fn doc" - ); - let tdoc = syms - .iter() - .find(|s| s.name == "Tier") - .and_then(|s| s.doc.clone()); - assert!( - tdoc.is_some_and(|d| d.contains("A performance tier.")), - "ml type doc" - ); + assert_doc(&syms, "double", "Doubles the input."); + assert_doc(&syms, "Tier", "A performance tier."); } #[test] @@ -1129,7 +1009,7 @@ print(describeAny(42) + "!") clippy::too_many_lines, reason = "exhaustive fixture: one arm per AST container variant is the point" )] - fn every_container_with_a_nested_let() -> Vec { + fn every_container_with_a_nested_let() -> Vec { use osprey_ast::{ Expr, FieldAssignment, HandlerArm, MapEntry, MatchArm, NamedArgument, Pattern, }; diff --git a/crates/osprey-lsp/src/diagnostics.rs b/crates/osprey-lsp/src/diagnostics.rs index 599e1b27..2d3a6cea 100644 --- a/crates/osprey-lsp/src/diagnostics.rs +++ b/crates/osprey-lsp/src/diagnostics.rs @@ -110,13 +110,29 @@ fn type_diagnostics( program: &Program, encoding: PositionEncoding, ) -> Vec { - osprey_types::check_program(program) + let mut diagnostics: Vec<_> = osprey_types::check_program(program) .iter() .map(|e| { let pos = e.position.unwrap_or(Position { line: 1, column: 0 }); diagnostic(source, pos, &e.message, "type-error", encoding) }) - .collect() + .collect(); + if diagnostics.is_empty() { + diagnostics.extend( + osprey_types::redundant_annotations(program) + .into_iter() + .map(|raised| { + warning( + source, + raised.position.unwrap_or(Position { line: 1, column: 0 }), + &raised.message, + raised.rule, + encoding, + ) + }), + ); + } + diagnostics } /// Single-source assembly for a module-bearing file that no project claims — @@ -194,7 +210,8 @@ fn assembled_type_errors( project: &AssembledProject, encoding: PositionEncoding, ) -> Vec { - osprey_types::check_program(&project.program) + let errors = osprey_types::check_program(&project.program); + let mut diagnostics: Vec<_> = errors .iter() .filter_map(|error| { let position = if let Some(global) = error.position { @@ -217,7 +234,34 @@ fn assembled_type_errors( encoding, )) }) - .collect() + .collect(); + if errors.is_empty() { + diagnostics.extend( + osprey_types::redundant_annotations_where(&project.program, |position| { + position + .and_then(|p| project.source_at_line(p.line)) + .is_some_and(|(owner, _)| same_path(&owner.path, file)) + }) + .into_iter() + .filter_map(|raised| { + let global = raised.position?; + let (owner, line) = project.source_at_line(global.line)?; + same_path(&owner.path, file).then(|| { + warning( + source, + Position { + line, + column: global.column, + }, + &raised.message, + raised.rule, + encoding, + ) + }) + }), + ); + } + diagnostics } fn project_errors( @@ -310,6 +354,21 @@ fn byte_col_to_encoding(line: Option<&str>, byte_col: u32, encoding: PositionEnc .map_or(byte_col, |prefix| crate::text::measure(prefix, encoding)) } +#[cfg(test)] +pub(crate) fn assert_redundant_annotations( + actual: &[Diagnostic], + expected: &[(&str, crate::model::Span)], +) { + assert_eq!(actual.len(), expected.len(), "{actual:?}"); + for (diagnostic, (message, range)) in actual.iter().zip(expected) { + assert_eq!(diagnostic.severity, Severity::Warning, "{diagnostic:?}"); + assert_eq!(diagnostic.code.as_deref(), Some("redundant-annotation")); + assert_eq!(diagnostic.source.as_deref(), Some("osprey")); + assert_eq!(diagnostic.message, *message); + assert_eq!(diagnostic.range, *range, "{diagnostic:?}"); + } +} + #[cfg(test)] mod tests { use super::*; @@ -318,9 +377,16 @@ mod tests { const OSP: &str = "file:///a.osp"; #[test] - fn clean_program_has_no_diagnostics() { + fn inferred_program_is_clean_and_redundant_return_is_a_warning() { + assert!(compute("fn main() = print(\"hi\")\n", OSP, U16).is_empty()); let diags = compute("fn main() -> Unit = print(\"hi\")\n", OSP, U16); - assert!(diags.is_empty(), "{diags:?}"); + assert_redundant_annotations( + &diags, + &[( + "redundant return type annotation on `main`: inference derives `Unit` without it", + (0, 3, 0, 31), + )], + ); } #[test] @@ -330,10 +396,13 @@ mod tests { // cleanly under the ML frontend rather than be flagged as broken Default // syntax. Selecting the flavor by the document path is what fixes it. let ml = "inc : int -> int\ninc x = (x + 1) ?: 0\nmain () =\n print \"v=${toString (inc 41)}\"\n 0\n"; - let clean = compute(ml, "file:///tour.ospml", U16); - assert!( - clean.is_empty(), - "ML file should not syntax-error: {clean:?}" + let diagnostics = compute(ml, "file:///tour.ospml", U16); + assert_redundant_annotations( + &diagnostics, + &[( + "redundant type signature on `inc`: inference derives `(int) -> int` without it", + (0, 0, 0, 16), + )], ); // The same source under a `.osp` path is genuinely not Default syntax, so // the Default frontend still reports errors — proving the path drives the @@ -343,6 +412,13 @@ mod tests { !as_default.is_empty(), "ML source is not valid Default syntax" ); + assert!( + as_default.iter().all(|diagnostic| { + diagnostic.severity == Severity::Error + && diagnostic.code.as_deref() == Some("syntax-error") + }), + "{as_default:?}" + ); } #[test] @@ -522,15 +598,36 @@ mod tests { #[test] fn module_files_use_the_assembled_project_graph() { let root = Path::new(env!("CARGO_MANIFEST_DIR")).join("../.."); - for relative in [ - "examples/projects/modules/src/main.ospml", - "examples/projects/modules/src/web/pages.ospml", + let main_warnings = [ + ( + "redundant type signature on `bank::fetch`: inference derives `(int) -> (string) -> string` without it", + (20, 0, 20, 31), + ), + ( + "redundant type signature on `bank::drive`: inference derives `(int) -> Unit` without it", + (32, 0, 32, 19), + ), + ( + "redundant return type annotation on `bank::hold`: inference derives `int` without it", + (55, 0, 55, 9), + ), + ( + "redundant type signature on `bank::handleRequest`: inference derives `(string, string, string, string) -> HttpResponse` without it", + (113, 0, 113, 68), + ), + ]; + for (relative, expected) in [ + ( + "examples/projects/modules/src/main.ospml", + main_warnings.as_slice(), + ), + ("examples/projects/modules/src/web/pages.ospml", &[]), ] { let path = root.join(relative); let source = std::fs::read_to_string(&path).expect("read module example"); let uri = format!("file://{}", path.display()); let diagnostics = compute(&source, &uri, U16); - assert!(diagnostics.is_empty(), "{relative}: {diagnostics:?}"); + assert_redundant_annotations(&diagnostics, expected); } } @@ -547,7 +644,55 @@ mod tests { let source = std::fs::read_to_string(&path).expect("read module test suite"); let uri = format!("file://{}", path.display()); let diagnostics = compute(&source, &uri, U16); - assert!(diagnostics.is_empty(), "{diagnostics:?}"); + assert_redundant_annotations( + &diagnostics, + &[ + ( + "redundant type signature on `test::Money::pennies`: inference derives `(int) -> string` without it", + (8, 4, 8, 27), + ), + ( + "redundant type signature on `test::Money::triple`: inference derives `(int) -> string` without it", + (15, 4, 15, 26), + ), + ( + "redundant type signature on `test::Money::group`: inference derives `(int) -> string` without it", + (22, 4, 22, 25), + ), + ( + "redundant type signature on `test::Money::show`: inference derives `(int) -> string` without it", + (30, 11, 30, 31), + ), + ( + "redundant type signature on `test::Money::positive`: inference derives `(int) -> bool` without it", + (33, 11, 33, 33), + ), + ( + "redundant type signature on `test::Json::escape`: inference derives `(string) -> string` without it", + (37, 4, 37, 29), + ), + ( + "redundant type signature on `test::Json::quoted`: inference derives `(string) -> string` without it", + (44, 4, 44, 29), + ), + ( + "redundant type signature on `test::Json::strField`: inference derives `(string) -> (string) -> string` without it", + (49, 11, 49, 48), + ), + ( + "redundant type signature on `test::Json::obj`: inference derives `(string) -> string` without it", + (55, 11, 55, 33), + ), + ( + "redundant type signature on `test::Accounts::movable`: inference derives `(int) -> bool` without it", + (73, 11, 73, 32), + ), + ( + "redundant type signature on `test::settle`: inference derives `(test::Outcome) -> string` without it", + (89, 0, 89, 26), + ), + ], + ); } #[cfg(unix)] diff --git a/crates/osprey-lsp/src/engine.rs b/crates/osprey-lsp/src/engine.rs index 2fb67404..833dc257 100644 --- a/crates/osprey-lsp/src/engine.rs +++ b/crates/osprey-lsp/src/engine.rs @@ -282,9 +282,25 @@ mod tests { } other => panic!("expected completion, got {other:?}"), } - // Diagnostics on a clean program are empty. + // [TYPE-ANNOTATION-REDUNDANT] Each written Default annotation warns. match report(Query::Diagnostics(uri.clone())).await { - Report::Diagnostics(diags) => assert!(diags.is_empty(), "{diags:?}"), + Report::Diagnostics(diags) => diagnostics::assert_redundant_annotations( + &diags, + &[ + ( + "redundant type annotation on parameter `a` of `add`: inference derives `int` without it", + (0, 3, 0, 44), + ), + ( + "redundant type annotation on parameter `b` of `add`: inference derives `int` without it", + (0, 3, 0, 44), + ), + ( + "redundant return type annotation on `add`: inference derives `int` without it", + (0, 3, 0, 44), + ), + ], + ), other => panic!("expected diagnostics, got {other:?}"), } // The vfs getter exposes the shared store. diff --git a/crates/osprey-lsp/src/features.rs b/crates/osprey-lsp/src/features.rs index d16e2e68..045031d6 100644 --- a/crates/osprey-lsp/src/features.rs +++ b/crates/osprey-lsp/src/features.rs @@ -391,6 +391,7 @@ fn step_call(c: char, names: &mut Vec, commas: &mut Vec, last: &mut mod tests { use super::*; use crate::hover::hover; + use crate::test_support::col_of; const U16: PositionEncoding = PositionEncoding::Utf16; const SRC: &str = "fn add(a: int, b: int) -> int = (a + b) ?: 0\nlet total = add(1, 2)\n"; @@ -474,14 +475,6 @@ mod tests { assert!(!references.iter().any(|location| location.span.0 == 4)); } - /// The 0-based column just inside the first occurrence of `needle` on - /// 0-based `line` of `src` — a cursor position over that word. - fn col_of(src: &str, line: usize, needle: &str) -> u32 { - let text = src.lines().nth(line).expect("line exists"); - let at = text.find(needle).expect("needle on line"); - u32::try_from(at).expect("column fits") + 1 - } - #[test] fn definition_and_references_return_empty_off_any_identifier() { // A two-space gap guarantees a column that is over neither word. diff --git a/crates/osprey-lsp/src/hover.rs b/crates/osprey-lsp/src/hover.rs index 7ceb4401..795b3456 100644 --- a/crates/osprey-lsp/src/hover.rs +++ b/crates/osprey-lsp/src/hover.rs @@ -254,6 +254,8 @@ fn inferred_parameter(program: &Program, function: &str, index: usize) -> Option #[cfg(test)] mod tests { use super::*; + use crate::test_support::col_of; + use crate::testkit::shows; const U16: PositionEncoding = PositionEncoding::Utf16; const SRC: &str = "fn add(a: int, b: int) -> int = (a + b) ?: 0\nlet total = add(1, 2)\n"; @@ -335,15 +337,13 @@ mod tests { // does not highlight. Re-apply the flavor at the presentation edge. let ml = "inc : int -> int\ninc x = (x + 1) ?: 0\n"; let hov = hover(ml, "file:///tour.ospml", 1, 0, U16).expect("hover"); - assert!(hov.contains("```osprey-ml"), "{hov}"); - assert!(hov.contains("inc : int -> int"), "{hov}"); + shows(&hov, &["```osprey-ml", "inc : int -> int"]); assert!(!hov.contains("fn inc("), "{hov}"); // The identical program under a `.osp` path keeps the Default spelling, // proving the flavor — not the content — drives the rendering. let default_src = "fn inc(x: int) -> int = (x + 1) ?: 0\n"; let plain = hover(default_src, "file:///a.osp", 0, 3, U16).expect("hover"); - assert!(plain.contains("```osprey\n"), "{plain}"); - assert!(plain.contains("fn inc(x: int) -> int"), "{plain}"); + shows(&plain, &["```osprey\n", "fn inc(x: int) -> int"]); } #[test] @@ -362,8 +362,7 @@ mod tests { // Implements [LSP-HOVER-VARIABLES], [LSP-HOVER-DOCS] let src = "fn main() -> int = {\n/// The greeting text.\nlet greeting = \"hi\"\n0\n}\n"; let md = hover(src, "file:///a.osp", 2, 6, U16).expect("hover over the `greeting` binding"); - assert!(md.contains("greeting: string"), "inferred type: {md}"); - assert!(md.contains("The greeting text."), "docs: {md}"); + shows(&md, &["greeting: string", "The greeting text."]); } #[test] @@ -372,8 +371,7 @@ mod tests { // Implements [LSP-HOVER-DOCS] let src = "/// Doubles `x`.\nfn dbl(x: int) -> int = (x * 2) ?: 0\n"; let md = hover(src, "file:///a.osp", 1, 4, U16).expect("hover over `dbl`"); - assert!(md.contains("fn dbl(x: int) -> int"), "signature: {md}"); - assert!(md.contains("Doubles `x`."), "docs: {md}"); + shows(&md, &["fn dbl(x: int) -> int", "Doubles `x`."]); let src = include_str!("../../../tests/effects/resume/resume_outer_handler_bridge.test.osp"); @@ -423,8 +421,10 @@ mod tests { let row = u32::try_from(line).expect("line fits"); let site = hover(src, "file:///trace.ospml", row, col, U16) .unwrap_or_else(|| panic!("hover over effect-operation site on line {line}")); - assert!(site.contains("Trace.mark : string => Unit"), "{site}"); - assert!(site.contains("Records trace markers."), "{site}"); + shows( + &site, + &["Trace.mark : string => Unit", "Records trace markers."], + ); } } @@ -582,8 +582,7 @@ mod tests { // Hovering the `int` in an annotation used to return nothing, because // no source file declares it. Implements [LSP-HOVER-WRITTEN]. let md = hover(SRC, "file:///a.osp", 0, 11, U16).expect("hover over `int`"); - assert!(md.contains("int"), "{md}"); - assert!(md.contains("64-bit integer"), "{md}"); + shows(&md, &["int", "64-bit integer"]); // A declared type still resolves to its declaration, not to this table. let declared = "type Shade = Light | Dark\nfn pick(s: Shade) = s\n"; let hovered = hover(declared, "file:///a.osp", 1, 12, U16).expect("hover over `Shade`"); @@ -630,11 +629,16 @@ test(\"identity\", fn() => expect(add(5, 0), 5)) "; let first = hover(src, "file:///suite.test.osp", 9, 1, U16).expect("hover over `test`"); assert!(first.starts_with("**Test:** commutes"), "{first}"); - assert!(first.contains("Addition is commutative."), "{first}"); - assert!(first.contains("**Parameters**"), "{first}"); - assert!(first.contains("- `left` — the first addend"), "{first}"); - assert!(first.contains("**Since**"), "{first}"); - assert!(first.contains("0.3"), "{first}"); + shows( + &first, + &[ + "Addition is commutative.", + "**Parameters**", + "- `left` — the first addend", + "**Since**", + "0.3", + ], + ); // The SECOND case's hover shows the second case's docs, not the first's. let second = hover(src, "file:///suite.test.osp", 12, 1, U16).expect("hover over `test`"); assert!(second.starts_with("**Test:** identity"), "{second}"); @@ -676,8 +680,7 @@ test(\"identity\", fn() => expect(add(5, 0), 5)) // user-declared `test` binding keeps hovering as itself. let src = "/// A local shadow.\nlet test = 1\nprint(\"${test}\")\n"; let md = hover(src, "file:///a.osp", 1, 5, U16).expect("hover over the binding"); - assert!(md.contains("test: int"), "{md}"); - assert!(md.contains("A local shadow."), "{md}"); + shows(&md, &["test: int", "A local shadow."]); assert!(!md.contains("**Test:**"), "not a test case: {md}"); } @@ -695,12 +698,4 @@ test(\"identity\", fn() => expect(add(5, 0), 5)) let line = u32::try_from(index).expect("line fits"); (line, u32::try_from(at).expect("column fits") + 1) } - - /// The 0-based column just inside the first occurrence of `needle` on - /// 0-based `line` of `src` — a cursor position over that word. - fn col_of(src: &str, line: usize, needle: &str) -> u32 { - let text = src.lines().nth(line).expect("line exists"); - let at = text.find(needle).expect("needle on line"); - u32::try_from(at).expect("column fits") + 1 - } } diff --git a/crates/osprey-lsp/src/inferred_views.rs b/crates/osprey-lsp/src/inferred_views.rs index 8737b0ae..65b56dfa 100644 --- a/crates/osprey-lsp/src/inferred_views.rs +++ b/crates/osprey-lsp/src/inferred_views.rs @@ -15,6 +15,7 @@ #[cfg(test)] mod tests { + use crate::test_support::symbols as symbols_of; use lspkit_vfs::PositionEncoding; const U16: PositionEncoding = PositionEncoding::Utf16; @@ -131,9 +132,7 @@ mod tests { // exercises both hazards at once: the artefact `t5` and the `Unit` // fallback that replaced it. let src = "fn classify(xs) = match xs {\n [] => 0\n [head, ...tail] => listLength(xs)\n}\nlet e = classify([1])\n"; - let parsed = osprey_syntax::parse_program(src); - assert!(parsed.errors.is_empty(), "{:?}", parsed.errors); - let symbols = crate::analysis::symbols_json(&parsed.program); + let symbols = symbols_of(src); let decl = crate::hover::hover(src, "file:///c.osp", 0, 4, U16).expect("hover decl"); // `xs` USED in the body, four lines from where it is bound: the two // views of one parameter that disagreed (`List<_>` vs `List`). @@ -201,9 +200,7 @@ mod tests { // prints it asserts something the compiler rejects. Saying nothing is // the only honest answer once there is nothing to say. let src = "fn id(x) = x\nlet a = id(1)\n"; - let parsed = osprey_syntax::parse_program(src); - assert!(parsed.errors.is_empty(), "{:?}", parsed.errors); - let symbols = crate::analysis::symbols_json(&parsed.program); + let symbols = symbols_of(src); assert!( symbols.contains("\"signature\":\"fn id(x)\""), "an unprovable return drops the arrow entirely: {symbols}" @@ -230,13 +227,11 @@ mod tests { // A hole must not carry a number, or two renderings of one type would // disagree and an edit elsewhere would churn the tooltip. let src = "fn pair(a, b) = [a, b]\nlet p = pair(1, 2)\n"; - let parsed = osprey_syntax::parse_program(src); - assert!(parsed.errors.is_empty(), "{:?}", parsed.errors); - let symbols = crate::analysis::symbols_json(&parsed.program); + let symbols = symbols_of(src); assert!(!regex_like_type_var(&symbols), "{symbols}"); // Rendering the same program twice is byte-identical: nothing in the // spelling depends on inference-run state. - assert_eq!(symbols, crate::analysis::symbols_json(&parsed.program)); + assert_eq!(symbols, symbols_of(src)); } /// Whether `s` mentions an inference name (`t5`, `t42`): a `t` that starts diff --git a/crates/osprey-lsp/src/lib.rs b/crates/osprey-lsp/src/lib.rs index 47c7d77b..2afa8829 100644 --- a/crates/osprey-lsp/src/lib.rs +++ b/crates/osprey-lsp/src/lib.rs @@ -22,7 +22,12 @@ pub(crate) mod mlrender; pub mod model; pub(crate) mod reference_docs; pub mod server; +#[cfg(test)] +mod test_support; pub mod testing; +#[cfg(test)] +#[path = "../../testkit.rs"] +mod testkit; pub mod text; pub(crate) mod wire; pub mod workspace; diff --git a/crates/osprey-lsp/src/server.rs b/crates/osprey-lsp/src/server.rs index 6d63d31d..527e2c03 100644 --- a/crates/osprey-lsp/src/server.rs +++ b/crates/osprey-lsp/src/server.rs @@ -210,37 +210,28 @@ async fn publish(engine: &OspreyEngine, bus: &lspkit_server::DiagnosticsBus, doc /// Implements [LSP-CAPABILITIES]. fn build_dispatcher(engine: &OspreyEngine) -> Dispatcher { let dispatcher = Dispatcher::new(); - register( + positional( &dispatcher, engine, "textDocument/hover", - |e, p, c| async move { - Some(result(hover_value( - answer(&e, Query::Hover(at(&p)?), c).await, - ))) - }, + Query::Hover, + hover_value, ); - register( + positional( &dispatcher, engine, "textDocument/definition", - |e, p, c| async move { - Some(result(locations_value( - answer(&e, Query::Definition(at(&p)?), c).await, - ))) - }, + Query::Definition, + locations_value, ); // Standard implementation-provider routing makes VS Code expose its native // context-menu action. [LSP-IMPLEMENTATIONS-EFFECT-HANDLERS] - register( + positional( &dispatcher, engine, "textDocument/implementation", - |e, p, c| async move { - Some(result(locations_value( - answer(&e, Query::Implementation(at(&p)?), c).await, - ))) - }, + Query::Implementation, + locations_value, ); register( &dispatcher, @@ -254,15 +245,12 @@ fn build_dispatcher(engine: &OspreyEngine) -> Dispatcher { Some(result(locations_value(answer(&e, query, c).await))) }, ); - register( + positional( &dispatcher, engine, "textDocument/signatureHelp", - |e, p, c| async move { - Some(result(signature_value( - answer(&e, Query::SignatureHelp(at(&p)?), c).await, - ))) - }, + Query::SignatureHelp, + signature_value, ); register( &dispatcher, @@ -277,15 +265,12 @@ fn build_dispatcher(engine: &OspreyEngine) -> Dispatcher { ))) }, ); - register( + positional( &dispatcher, engine, "textDocument/completion", - |e, p, c| async move { - Some(result(completion_value( - answer(&e, Query::Completion(at(&p)?), c).await, - ))) - }, + Query::Completion, + completion_value, ); register( &dispatcher, @@ -301,6 +286,21 @@ fn build_dispatcher(engine: &OspreyEngine) -> Dispatcher { dispatcher } +/// Register a request whose whole handling is "read a position, ask the engine +/// one query, render the answer" — the shape every purely positional method +/// shares. The three things that differ are its arguments. +fn positional( + dispatcher: &Dispatcher, + engine: &OspreyEngine, + method: &str, + query: fn(At) -> Query, + render: fn(Option) -> Value, +) { + register(dispatcher, engine, method, move |e, p, c| async move { + Some(result(render(answer(&e, query(at(&p)?), c).await))) + }); +} + /// Register one handler. The closure receives a cloned engine, the params, and /// a cancellation token, and returns the JSON result. fn register(dispatcher: &Dispatcher, engine: &OspreyEngine, method: &str, handler: F) @@ -607,21 +607,38 @@ mod tests { } #[tokio::test] - async fn did_open_publishes_clean_diagnostics_then_errors_on_change() { + async fn did_open_publishes_warnings_then_errors_on_change() { // Document synchronization drives compiler diagnostics. // [LSP-LIFECYCLE], [LSP-DIAGNOSTICS] let mut h = Harness::start(); - let clean = h.open(SRC).await; + let opened = h.open(SRC).await; assert_eq!( - clean.method.as_deref(), + opened.method.as_deref(), Some("textDocument/publishDiagnostics") ); - let params = clean.params.expect("diagnostics params"); + let params = opened.params.expect("diagnostics params"); assert_at(¶ms, "/uri", URI); + let expected: Vec<_> = [ + "redundant type annotation on parameter `a` of `add`: inference derives `int` without it", + "redundant type annotation on parameter `b` of `add`: inference derives `int` without it", + "redundant return type annotation on `add`: inference derives `int` without it", + ] + .into_iter() + .map(|message| json!({ + "code": "redundant-annotation", + "message": message, + "range": { + "start": { "line": 0, "character": 3 }, + "end": { "line": 0, "character": 44 } + }, + "severity": 2, + "source": "osprey" + })) + .collect(); assert_eq!( params.pointer("/diagnostics").and_then(Value::as_array), - Some(&Vec::new()), - "clean program has no diagnostics" + Some(&expected), + "redundant annotations publish precise warnings" ); // The engine now has the open document text. assert_eq!( diff --git a/crates/osprey-lsp/src/test_support.rs b/crates/osprey-lsp/src/test_support.rs new file mode 100644 index 00000000..ca9e3041 --- /dev/null +++ b/crates/osprey-lsp/src/test_support.rs @@ -0,0 +1,30 @@ +//! Test-only helpers shared by the editor-feature unit tests. +//! +//! Every feature test opens the same way: parse a snippet, fail loudly on any +//! syntax error, then ask one editor question about a cursor position. Each +//! `mod tests` used to carry its own copy of that preamble, so the copies +//! drifted apart on their failure messages while asserting the same thing. + +use osprey_ast::Program; + +/// Parse `src`, asserting it is syntactically valid. A snippet the PARSER +/// rejects must never be scored as a passing editor view. +pub(crate) fn parsed(src: &str) -> Program { + let parsed = osprey_syntax::parse_program(src); + assert!(parsed.errors.is_empty(), "{:?}", parsed.errors); + parsed.program +} + +/// The symbol view of a valid snippet — the rendering the inference-view tests +/// inspect. +pub(crate) fn symbols(src: &str) -> String { + crate::analysis::symbols_json(&parsed(src)) +} + +/// The 0-based column just inside the first occurrence of `needle` on 0-based +/// `line` of `src` — a cursor position over that word. +pub(crate) fn col_of(src: &str, line: usize, needle: &str) -> u32 { + let text = src.lines().nth(line).expect("line exists"); + let at = text.find(needle).expect("needle on line"); + u32::try_from(at).expect("column fits") + 1 +} diff --git a/crates/osprey-lsp/src/testing.rs b/crates/osprey-lsp/src/testing.rs index 46aacf36..460170de 100644 --- a/crates/osprey-lsp/src/testing.rs +++ b/crates/osprey-lsp/src/testing.rs @@ -338,6 +338,7 @@ pub(crate) fn test_case_hover(program: &Program, line: u32) -> Option { )] mod tests { use super::*; + use crate::testkit::shows; use osprey_syntax::{parse_program, parse_program_with_flavor, Flavor}; fn program(src: &str) -> Program { @@ -722,8 +723,7 @@ test(\"undocumented\", fn() => expect(add(1, 1), 2)) let program = program(DOCUMENTED); let hov = test_case_hover(&program, 22).expect("hover on the `test(` line"); assert!(hov.starts_with("**Test:** commutes"), "{hov}"); - assert!(hov.contains("Addition is commutative."), "{hov}"); - assert!(hov.contains("**Parameters**"), "full doc, not just summary"); + shows(&hov, &["Addition is commutative.", "**Parameters**"]); // A line with no test case declared on it has no test hover at all. assert_eq!(test_case_hover(&program, 1), None); assert_eq!(test_case_hover(&program, 999), None); diff --git a/crates/osprey-profiler/src/lib.rs b/crates/osprey-profiler/src/lib.rs index 9240fd43..f9c1282b 100644 --- a/crates/osprey-profiler/src/lib.rs +++ b/crates/osprey-profiler/src/lib.rs @@ -17,6 +17,9 @@ mod symbolize; #[cfg(test)] mod e2e; #[cfg(test)] +#[path = "../../testkit.rs"] +mod testkit; +#[cfg(test)] pub(crate) mod testutil; use std::fmt; diff --git a/crates/osprey-profiler/src/report.rs b/crates/osprey-profiler/src/report.rs index 929564cf..92db0c27 100644 --- a/crates/osprey-profiler/src/report.rs +++ b/crates/osprey-profiler/src/report.rs @@ -184,6 +184,7 @@ mod tests { use crate::model::build_model; use crate::raw::Profile; use crate::symbolize::SymFrame; + use crate::testkit::shows; use crate::testutil::{model_of, osp_frame, profile, sample, thread}; /// 200 on-CPU samples on main (no low-sample note): 100 leaf on parse @@ -278,8 +279,7 @@ mod tests { report.contains("\x1b[33m"), "warm row must be yellow: {report}" ); - assert!(report.contains("\x1b[2m"), "cold row must be dim: {report}"); - assert!(report.contains(RESET)); + shows(&report, &["\x1b[2m", RESET]); } #[test] @@ -300,17 +300,19 @@ mod tests { #[test] fn zero_oncpu_samples_report_full_uncertainty() { let report = render_report("fib.osp", "fib", &tiny_model(0), false); - assert!(report.contains("±100.0%"), "{report}"); - assert!(report.contains("0 samples @ 1000Hz · 1 fiber"), "{report}"); + shows(&report, &["±100.0%", "0 samples @ 1000Hz · 1 fiber"]); } #[test] fn footer_names_the_exports_and_viewers() { let report = render(false); - assert!(report.contains("profile: fib.speedscope.json · fib.cpuprofile · fib.folded")); - assert!(report.contains( - "view: https://speedscope.app (drag the file) or open fib.cpuprofile in VS Code" - )); + shows( + &report, + &[ + "profile: fib.speedscope.json · fib.cpuprofile · fib.folded", + "view: https://speedscope.app (drag the file) or open fib.cpuprofile in VS Code", + ], + ); } #[test] diff --git a/crates/osprey-profiler/src/symbolize/mod.rs b/crates/osprey-profiler/src/symbolize/mod.rs index 0aaf5dff..bb3eb05d 100644 --- a/crates/osprey-profiler/src/symbolize/mod.rs +++ b/crates/osprey-profiler/src/symbolize/mod.rs @@ -226,6 +226,20 @@ fn lookup_chain(profile: &Profile, cache: &ChainCache, index: usize, pc: u64) -> #[cfg(test)] mod tests { use super::*; + /// An image loaded at `base` (after `slide`) whose executable range spans + /// `text .. text + text_size`. Every case here varies only these five + /// fields, so the zeroed remainder is written once instead of per literal. + fn image(path: &str, base: u64, slide: u64, text: u64, text_size: u64) -> Image { + Image { + path: path.to_owned(), + base, + slide, + text, + text_size, + arch: String::new(), + } + } + use crate::raw::{Sample, Thread}; use std::cell::RefCell; @@ -281,24 +295,7 @@ mod tests { #[test] fn pcs_fall_back_to_greatest_base_when_no_image_reports_a_text_range() { - let images = vec![ - Image { - path: "/a".to_owned(), - base: 100, - slide: 0, - text: 0, - text_size: 0, - arch: String::new(), - }, - Image { - path: "/b".to_owned(), - base: 500, - slide: 0, - text: 0, - text_size: 0, - arch: String::new(), - }, - ]; + let images = vec![image("/a", 100, 0, 0, 0), image("/b", 500, 0, 0, 0)]; assert_eq!(image_index_for(&images, 499), Some(0)); assert_eq!(image_index_for(&images, 500), Some(1)); assert_eq!(image_index_for(&images, 99), None); @@ -316,22 +313,20 @@ mod tests { #[test] fn a_shared_cache_pc_is_owned_by_the_image_whose_text_contains_it() { let images = vec![ - Image { - path: "/usr/lib/system/libsystem_malloc.dylib".to_owned(), - base: 0x1_8000_0000, - slide: 0, - text: 0x1_8030_0000, - text_size: 0x2_0000, - arch: String::new(), - }, - Image { - path: "/usr/lib/system/libsystem_kernel.dylib".to_owned(), - base: 0x1_8010_0000, - slide: 0, - text: 0x1_8040_0000, - text_size: 0x2_0000, - arch: String::new(), - }, + image( + "/usr/lib/system/libsystem_malloc.dylib", + 0x1_8000_0000, + 0, + 0x1_8030_0000, + 0x2_0000, + ), + image( + "/usr/lib/system/libsystem_kernel.dylib", + 0x1_8010_0000, + 0, + 0x1_8040_0000, + 0x2_0000, + ), ]; // The observed leaf: inside libsystem_malloc's __TEXT, but BELOW the // kernel image's header, which is what the old rule keyed on. @@ -346,14 +341,7 @@ mod tests { /// the end is not. #[test] fn a_reported_text_range_is_half_open() { - let image = Image { - path: "/bin/app".to_owned(), - base: 0, - slide: 0, - text: 0x4000, - text_size: 0x1000, - arch: String::new(), - }; + let image = image("/bin/app", 0, 0, 0x4000, 0x1000); assert!(image.text_contains(0x4000)); assert!(image.text_contains(0x4FFF)); assert!(!image.text_contains(0x5000)); @@ -381,22 +369,8 @@ mod tests { rate_hz: 997, dropped: 0, images: vec![ - Image { - path: "/bin/app".to_owned(), - base: 1000, - slide: 100, - text: 0, - text_size: 0, - arch: String::new(), - }, - Image { - path: "/usr/lib/sys".to_owned(), - base: 9000, - slide: 0, - text: 0, - text_size: 0, - arch: String::new(), - }, + image("/bin/app", 1000, 100, 0, 0), + image("/usr/lib/sys", 9000, 0, 0, 0), ], threads: vec![Thread { fiber: 0, diff --git a/crates/osprey-project/src/annotation.rs b/crates/osprey-project/src/annotation.rs index 3e02f25a..793679a4 100644 --- a/crates/osprey-project/src/annotation.rs +++ b/crates/osprey-project/src/annotation.rs @@ -23,7 +23,7 @@ impl Resolver<'_> { ) { match (statement, annotation) { (Stmt::Let { ty, .. }, SignatureItem::Value { ty: contract, .. }) if ty.is_none() => { - *ty = Some(contract.clone()); + *ty = Some(contract.as_contract_annotation()); } ( Stmt::Function { @@ -49,11 +49,11 @@ impl Resolver<'_> { } for (parameter, contract) in parameters.iter_mut().zip(contracts) { if parameter.ty.is_none() { - parameter.ty = Some(contract.clone()); + parameter.ty = Some(contract.as_contract_annotation()); } } if return_type.is_none() { - *return_type = Some(contract_return.clone()); + *return_type = Some(contract_return.as_contract_annotation()); } if effects.is_empty() { effects.clone_from(contract_effects); diff --git a/crates/osprey-project/src/imports.rs b/crates/osprey-project/src/imports.rs index f2d9ba04..14e7aec3 100644 --- a/crates/osprey-project/src/imports.rs +++ b/crates/osprey-project/src/imports.rs @@ -15,19 +15,19 @@ pub(crate) struct ImportScope { } impl ImportScope { - pub fn alias(&self, name: &str) -> Option<&SymbolKey> { + pub(crate) fn alias(&self, name: &str) -> Option<&SymbolKey> { self.aliases.get(name) } - pub fn member(&self, name: &str) -> Option<&SymbolKey> { + pub(crate) fn member(&self, name: &str) -> Option<&SymbolKey> { self.members.get(name) } - pub fn is_ambiguous(&self, name: &str) -> bool { + pub(crate) fn is_ambiguous(&self, name: &str) -> bool { self.ambiguous.contains(name) } - pub fn aliases_for(&self, target: &SymbolKey) -> Vec { + pub(crate) fn aliases_for(&self, target: &SymbolKey) -> Vec { self.aliases .iter() .filter(|(_, candidate)| *candidate == target) diff --git a/crates/osprey-project/src/model.rs b/crates/osprey-project/src/model.rs index 8f102957..d6c27b0b 100644 --- a/crates/osprey-project/src/model.rs +++ b/crates/osprey-project/src/model.rs @@ -13,26 +13,26 @@ pub(crate) struct SymbolKey { } impl SymbolKey { - pub fn new(namespace: impl Into, path: Vec) -> Self { + pub(crate) fn new(namespace: impl Into, path: Vec) -> Self { Self { namespace: namespace.into(), path, } } - pub fn child(&self, name: impl Into) -> Self { + pub(crate) fn child(&self, name: impl Into) -> Self { let mut path = self.path.clone(); path.push(name.into()); Self::new(self.namespace.clone(), path) } - pub fn parent_path(&self) -> &[String] { + pub(crate) fn parent_path(&self) -> &[String] { self.path .get(..self.path.len().saturating_sub(1)) .unwrap_or_default() } - pub fn source_name(&self) -> String { + pub(crate) fn source_name(&self) -> String { std::iter::once(self.namespace.as_str()) .chain(self.path.iter().map(String::as_str)) .filter(|segment| !segment.is_empty()) @@ -40,7 +40,7 @@ impl SymbolKey { .join("::") } - pub fn mangled(&self) -> String { + pub(crate) fn mangled(&self) -> String { osprey_ast::symbol::mangle( std::iter::once(self.namespace.as_str()).chain(self.path.iter().map(String::as_str)), ) @@ -70,7 +70,7 @@ pub(crate) struct DeclInfo { } impl DeclInfo { - pub fn visible_from(&self, same_namespace: bool, module: &[String]) -> bool { + pub(crate) fn visible_from(&self, same_namespace: bool, module: &[String]) -> bool { self.visibility == Visibility::Exported || (same_namespace && module.starts_with(&self.owner)) } diff --git a/crates/osprey-project/src/name_resolve.rs b/crates/osprey-project/src/name_resolve.rs index 9b7d5db8..389fc810 100644 --- a/crates/osprey-project/src/name_resolve.rs +++ b/crates/osprey-project/src/name_resolve.rs @@ -6,7 +6,7 @@ use crate::resolve::{Context, Resolver}; use osprey_ast::Position; impl Resolver<'_> { - pub fn resolve_bare( + pub(crate) fn resolve_bare( &mut self, name: &str, context: &Context, @@ -32,7 +32,7 @@ impl Resolver<'_> { scope.and_then(|scope| scope.member(name)).cloned() } - pub fn resolve_path( + pub(crate) fn resolve_path( &mut self, segments: &[String], context: &Context, @@ -72,7 +72,12 @@ impl Resolver<'_> { None } - pub fn rewrite_value_name(&mut self, name: &mut String, context: &Context, required: bool) { + pub(crate) fn rewrite_value_name( + &mut self, + name: &mut String, + context: &Context, + required: bool, + ) { let key = if name.contains("::") { let segments = name.split("::").map(str::to_string).collect::>(); self.resolve_path(&segments, context, None) diff --git a/crates/osprey-project/src/resolve.rs b/crates/osprey-project/src/resolve.rs index ec4cd3f5..90720b0c 100644 --- a/crates/osprey-project/src/resolve.rs +++ b/crates/osprey-project/src/resolve.rs @@ -356,7 +356,7 @@ impl Resolver<'_> { self.entry_locals = locals; } - pub fn link_name(&mut self, key: &SymbolKey, entry_main: bool) -> String { + pub(crate) fn link_name(&mut self, key: &SymbolKey, entry_main: bool) -> String { let name = if entry_main { "main".to_string() } else if self @@ -373,7 +373,12 @@ impl Resolver<'_> { name } - pub fn error(&mut self, source: usize, position: Option, message: impl Into) { + pub(crate) fn error( + &mut self, + source: usize, + position: Option, + message: impl Into, + ) { self.errors .push(source_error(self.sources, source, position, message)); } diff --git a/crates/osprey-project/src/rewrite.rs b/crates/osprey-project/src/rewrite.rs index 4bfd0fc1..ca109cdf 100644 --- a/crates/osprey-project/src/rewrite.rs +++ b/crates/osprey-project/src/rewrite.rs @@ -18,7 +18,7 @@ fn locals_with_type_parameters(type_params: &[TypeParam]) -> Locals { impl Resolver<'_> { /// Resolves a constant initializer and rejects active-path recursion. /// Implements the constant half of [MODULES-CYCLES]. - pub fn constant_value(&mut self, key: &SymbolKey) -> Option { + pub(crate) fn constant_value(&mut self, key: &SymbolKey) -> Option { if let Some(value) = self.constant_cache.get(key) { return Some(value.clone()); } @@ -72,7 +72,7 @@ impl Resolver<'_> { clippy::too_many_lines, reason = "declaration rewriting is an exhaustive canonical AST match" )] - pub fn rewrite_declaration( + pub(crate) fn rewrite_declaration( &mut self, statement: &mut Stmt, context: &Context, @@ -202,7 +202,7 @@ impl Resolver<'_> { } } - pub fn rewrite_local_statement( + pub(crate) fn rewrite_local_statement( &mut self, statement: &mut Stmt, context: &Context, @@ -243,7 +243,12 @@ impl Resolver<'_> { clippy::too_many_lines, reason = "expression rewriting is an exhaustive canonical AST walk" )] - pub fn rewrite_expr(&mut self, expression: &mut Expr, context: &Context, locals: &mut Locals) { + pub(crate) fn rewrite_expr( + &mut self, + expression: &mut Expr, + context: &Context, + locals: &mut Locals, + ) { if let Expr::Identifier(name) = expression { let name = name.clone(); let mut rewritten = Expr::Identifier(name.clone()); @@ -288,6 +293,19 @@ impl Resolver<'_> { self.rewrite_expr(left, context, locals); self.rewrite_expr(right, context, locals); } + Expr::TypeApply { + function, + type_args, + .. + } => { + self.rewrite_expr(function, context, locals); + if let Expr::FieldAccess { field, .. } = function.as_mut() { + self.rewrite_value_name(field, context, false); + } + for argument in type_args { + self.rewrite_type(argument, context, locals); + } + } Expr::Unary { operand, .. } | Expr::Spawn(operand) | Expr::Await(operand) diff --git a/crates/osprey-project/src/span.rs b/crates/osprey-project/src/span.rs index bd842b81..b2f12520 100644 --- a/crates/osprey-project/src/span.rs +++ b/crates/osprey-project/src/span.rs @@ -181,7 +181,9 @@ fn optional_type(ty: &mut Option, offset: u32) { } fn offset_type(ty: &mut TypeExpr, offset: u32) { - shift(&mut ty.position, offset); + if !ty.is_from_contract() { + shift(&mut ty.position, offset); + } for parameter in &mut ty.generic_params { offset_type(parameter, offset); } @@ -232,6 +234,17 @@ fn offset_expr(expr: &mut Expr, offset: u32) { offset_expr(left, offset); offset_expr(right, offset); } + Expr::TypeApply { + function, + type_args, + position, + } => { + shift(position, offset); + for argument in type_args { + offset_type(argument, offset); + } + offset_expr(function, offset); + } Expr::Unary { operand, .. } | Expr::Spawn(operand) | Expr::Await(operand) diff --git a/crates/osprey-project/src/state.rs b/crates/osprey-project/src/state.rs index d78b38b1..8a6d8ab9 100644 --- a/crates/osprey-project/src/state.rs +++ b/crates/osprey-project/src/state.rs @@ -229,7 +229,12 @@ impl<'a> Inspector<'a> { self.expr(left, in_owner_arm, position); self.expr(right, in_owner_arm, position); } - Expr::Unary { operand, .. } | Expr::Await(operand) | Expr::Recv(operand) => { + Expr::TypeApply { + function: operand, .. + } + | Expr::Unary { operand, .. } + | Expr::Await(operand) + | Expr::Recv(operand) => { self.expr(operand, in_owner_arm, position); } Expr::Spawn(operand) => self.escaping(operand, position), diff --git a/crates/osprey-project/src/type_rewrite.rs b/crates/osprey-project/src/type_rewrite.rs index a81b8aa7..2849e0e4 100644 --- a/crates/osprey-project/src/type_rewrite.rs +++ b/crates/osprey-project/src/type_rewrite.rs @@ -6,7 +6,12 @@ use osprey_ast::{EffectRef, TypeExpr}; use std::collections::BTreeMap; impl Resolver<'_> { - pub fn rewrite_type(&mut self, ty: &mut TypeExpr, context: &Context, locals: &mut Locals) { + pub(crate) fn rewrite_type( + &mut self, + ty: &mut TypeExpr, + context: &Context, + locals: &mut Locals, + ) { for parameter in &mut ty.generic_params { self.rewrite_type(parameter, context, locals); } @@ -47,7 +52,7 @@ impl Resolver<'_> { ty.name = self.link_name(&key, false); } - pub fn rewrite_effect_refs( + pub(crate) fn rewrite_effect_refs( &mut self, effects: &mut [EffectRef], context: &Context, @@ -83,7 +88,7 @@ impl Resolver<'_> { } } - pub fn rewrite_type_text( + pub(crate) fn rewrite_type_text( &mut self, text: &str, context: &Context, diff --git a/crates/osprey-syntax/src/default/expr.rs b/crates/osprey-syntax/src/default/expr.rs index 93d6e1c2..1c0e3f6c 100644 --- a/crates/osprey-syntax/src/default/expr.rs +++ b/crates/osprey-syntax/src/default/expr.rs @@ -199,7 +199,7 @@ impl Lowerer<'_> { } fn lower_call(&self, node: Node<'_>) -> Expr { - let callee = self.lower_expr_field(node, "callee"); + let mut callee = self.lower_expr_field(node, "callee"); if let Some(member) = node.child_by_field_name("member") { return Expr::FieldAccess { target: Box::new(callee), @@ -212,20 +212,28 @@ impl Lowerer<'_> { index: Box::new(self.lower_expr(index)), }; } - // function/method call. UFCS [BUILTIN-STRING-UFCS]: `x.f(a, …)` is - // sugar for `f(x, a, …)`, so a - // field-access callee lowers to an ordinary call with the receiver as the - // first positional argument — keeping method calls invisible downstream. - let (mut arguments, named_arguments) = self.lower_arg_list(node); + // Keep an ordinary dotted call until inference can distinguish a + // callable record field from receiver-first sugar [BUILTIN-STRING-UFCS]. + // Written type arguments apply a named function's declared binders. + let (arguments, named_arguments) = self.lower_arg_list(node); + if let Some(args) = node.child_by_field_name("type_arguments") { + callee = Expr::TypeApply { + function: Box::new(callee), + type_args: self + .named_of_kind(args, "type_list") + .into_iter() + .flat_map(|list| self.lower_type_list(list)) + .collect(), + position: Some(self.pos(node)), + }; + } match callee { - Expr::FieldAccess { target, field } => { - arguments.insert(0, *target); - Expr::Call { - function: Box::new(Expr::Identifier(field)), - arguments, - named_arguments, - } - } + Expr::FieldAccess { target, field } => Expr::MethodCall { + target, + method: field, + arguments, + named_arguments, + }, // A saturated call of a positionally-declared constructor is a // construction, not a call ([TYPE-UNION-POSITIONAL]) — the one // call-shaped expression exempt from the named-argument rule, @@ -453,7 +461,10 @@ fn fragment_prefix() -> u32 { } fn parse_fragment(frag: &str) -> Expr { - let parsed = crate::parse_program(&format!("{FRAGMENT_BINDING}{frag}\n")); + let parsed = super::parse(&format!("{FRAGMENT_BINDING}{frag}\n")); + if !parsed.errors.is_empty() { + return Expr::Identifier(frag.trim().to_owned()); + } match parsed.program.statements.into_iter().next() { Some(Stmt::Let { value, .. }) => value, _ => Expr::Identifier(frag.trim().to_string()), @@ -605,18 +616,17 @@ mod tests { Expr::Call { arguments, .. } => assert_eq!(arguments.len(), 2), other => panic!("expected call, got {other:?}"), } - // UFCS field-access call `o.m(1)` -> Call(m, [o, 1]). - match let_value("let r = o.m(1)\n") { - Expr::Call { - function, - arguments, - .. - } => { - assert!(matches!(*function, Expr::Identifier(ref n) if n == "m")); - assert_eq!(arguments.len(), 2); + // [BUILTIN-STRING-UFCS] Preserve the receiver until type checking can + // select its callable field or the free-function fallback. + assert_eq!( + let_value("let r = o.m(1)\n"), + Expr::MethodCall { + target: Box::new(Expr::Identifier("o".into())), + method: "m".into(), + arguments: vec![Expr::Integer(1)], + named_arguments: vec![], } - other => panic!("expected call, got {other:?}"), - } + ); // Plain field access and indexing. assert!(matches!( let_value("let r = o.field\n"), diff --git a/crates/osprey-syntax/src/default/lower.rs b/crates/osprey-syntax/src/default/lower.rs index 6ae8f5f2..d0d804f3 100644 --- a/crates/osprey-syntax/src/default/lower.rs +++ b/crates/osprey-syntax/src/default/lower.rs @@ -26,7 +26,7 @@ fn strip_doc_line(line: &str) -> &str { /// Holds the source bytes so node text can be sliced during lowering. #[derive(Debug)] -pub struct Lowerer<'a> { +pub(crate) struct Lowerer<'a> { src: &'a [u8], } @@ -764,7 +764,7 @@ fn negate_literal(e: Expr) -> Expr { )] mod tests { use crate::parse_tree; - use crate::test_support::{one_stmt, stmts}; + use crate::test_support::{assert_doc_pair, assert_summary, one_stmt, stmt_doc, stmts}; use osprey_ast::{Expr, Pattern, Stmt}; use tree_sitter::Node; @@ -780,16 +780,6 @@ mod tests { // ---------- [TESTING-DOC] expression-statement documentation ---------- - /// The doc comment lowered onto a statement, or `None`. - fn stmt_doc(stmt: &Stmt) -> Option<&osprey_ast::DocComment> { - match stmt { - Stmt::Expr { doc, .. } | Stmt::Let { doc, .. } | Stmt::Function { doc, .. } => { - doc.as_ref() - } - _ => None, - } - } - #[test] fn a_doc_comment_lowers_onto_the_expression_statement_it_precedes() { // A `test(...)` case is an expression statement, not a declaration, so @@ -836,15 +826,9 @@ mod tests { fn each_documented_statement_owns_only_its_own_doc() { let all = stmts("/// First.\ntest(\"a\", 1)\ntest(\"b\", 2)\n/// Third.\ntest(\"c\", 3)\n"); assert_eq!(all.len(), 3); - assert_eq!( - stmt_doc(&all[0]).map(|d| d.summary.as_str()), - Some("First.") - ); - assert_eq!(stmt_doc(&all[1]).map(|d| d.summary.as_str()), None); - assert_eq!( - stmt_doc(&all[2]).map(|d| d.summary.as_str()), - Some("Third.") - ); + assert_summary(&all[0], Some("First.")); + assert_summary(&all[1], None); + assert_summary(&all[2], Some("Third.")); } #[test] @@ -852,13 +836,7 @@ mod tests { // Adding the expression-statement slot must not steal a following // declaration's doc comment. let all = stmts("/// Runs it.\nprint(\"hi\")\n/// Adds.\nfn add(a, b) = a + b\n"); - assert_eq!(all.len(), 2); - assert_eq!( - stmt_doc(&all[0]).map(|d| d.summary.as_str()), - Some("Runs it.") - ); - assert!(matches!(all[1], Stmt::Function { .. })); - assert_eq!(stmt_doc(&all[1]).map(|d| d.summary.as_str()), Some("Adds.")); + assert_doc_pair(&all, "Runs it.", "Adds."); } #[test] @@ -870,10 +848,7 @@ mod tests { let Expr::Block { statements, .. } = body else { panic!("expected a block body, got {body:?}"); }; - assert_eq!( - stmt_doc(&statements[0]).map(|d| d.summary.as_str()), - Some("Inner case.") - ); + assert_summary(&statements[0], Some("Inner case.")); } #[test] diff --git a/crates/osprey-syntax/src/default/mod.rs b/crates/osprey-syntax/src/default/mod.rs index 53b04a2e..3d9d6179 100644 --- a/crates/osprey-syntax/src/default/mod.rs +++ b/crates/osprey-syntax/src/default/mod.rs @@ -67,6 +67,10 @@ pub fn parse_tree(source: &str) -> Option { } fn collect_errors(node: Node<'_>, src: &[u8], out: &mut Vec) { + if let Some(error) = call_variance_error(node, src) { + out.push(error); + return; + } if node.is_error() || node.is_missing() { let p = node.start_position(); out.push(SyntaxError { @@ -113,6 +117,22 @@ fn collect_errors(node: Node<'_>, src: &[u8], out: &mut Vec) { } } +/// Variance declares a binder; it cannot decorate a call's type argument. +fn call_variance_error(node: Node<'_>, src: &[u8]) -> Option { + if node.kind() != "call_expression" { + return None; + } + let args = node.child_by_field_name("type_arguments")?; + let list = args.named_child(0)?; + let marker = list.child_by_field_name("variance")?; + let argument = marker.next_named_sibling()?.utf8_text(src).ok()?; + let callee = node.child_by_field_name("callee")?.utf8_text(src).ok()?; + Some(SyntaxError { + message: format!("variance annotations are only valid on type and effect declarations; remove the marker from `{argument}` at the call to `{callee}`"), + position: position_from_point(node.start_position()), + }) +} + fn is_negative_numeric(node: Node<'_>, src: &[u8]) -> bool { let mut ancestor = node.parent(); while let Some(parent) = ancestor { diff --git a/crates/osprey-syntax/src/lib.rs b/crates/osprey-syntax/src/lib.rs index e3297953..c9a59ff1 100644 --- a/crates/osprey-syntax/src/lib.rs +++ b/crates/osprey-syntax/src/lib.rs @@ -116,23 +116,15 @@ pub fn parse_program_with_flavor(source: &str, flavor: Flavor) -> Parsed { discharge_static_handlers(parsed) } -/// Every function's dependency set: the static-effect operations it requires, -/// transitively, minus what it answers itself. Implements -/// [STAGE-SIGNALS-DIRTY] (docs/specs/0035-StagedEffects.md). +/// Every function's dependency set — the static-effect operations it requires, +/// transitively, minus what it answers itself — paired with the syntax errors +/// found deriving them. Implements [STAGE-SIGNALS-DIRTY] +/// (docs/specs/0035-StagedEffects.md). /// /// Computed on the program **before** static discharge, because discharge is /// what makes those reads free and this is what makes them visible. Every /// other entry point returns a discharged program, in which the dependency set /// no longer exists to be read. -#[must_use] -pub fn dependency_sets( - source: &str, - flavor: Flavor, -) -> std::collections::BTreeMap> { - dependency_report(source, flavor).0 -} - -/// The same dependency sets, paired with the syntax errors found deriving them. /// /// Parsing is best-effort, so a source that did not parse still yields a tree — /// and the dependency sets read off it are silently short. "This view reads no @@ -317,7 +309,7 @@ fn frame() = kernel\n Tile size => 8\nin shade(2)\n"; fn counter(n) = (perform Signal.read()) ?: n\n"; let ml = "static effect Signal T\n read : Unit => T\n\ncounter n = perform Signal.read () ?: n\n"; for (flavor, source) in [(Flavor::Default, default), (Flavor::Ml, ml)] { - let deps = dependency_sets(source, flavor); + let deps = dependency_report(source, flavor).0; assert_eq!( deps.get("counter").cloned().unwrap_or_default(), vec!["Signal.read"], diff --git a/crates/osprey-syntax/src/ml/cst.rs b/crates/osprey-syntax/src/ml/cst.rs index 832c6c09..f90d1248 100644 --- a/crates/osprey-syntax/src/ml/cst.rs +++ b/crates/osprey-syntax/src/ml/cst.rs @@ -475,6 +475,15 @@ pub(crate) enum MlExpr { /// The argument list (two or more), in order. args: Vec, }, + /// Explicit call-site type arguments [FLAVOR-ML-GENERICS]. + TypeApply { + /// Named callee. + func: Box, + /// Written arguments in binder order. + args: Vec, + /// Callee position. + pos: Position, + }, /// Zero-argument application `func ()`. UnitApp { /// The applied expression. diff --git a/crates/osprey-syntax/src/ml/lower.rs b/crates/osprey-syntax/src/ml/lower.rs index 267cd5c3..cd9bf0e1 100644 --- a/crates/osprey-syntax/src/ml/lower.rs +++ b/crates/osprey-syntax/src/ml/lower.rs @@ -310,7 +310,7 @@ impl ItemLower { type_params, ty, effects, - .. + pos, } = item { self.pending = Some(MlSig { @@ -318,6 +318,7 @@ impl ItemLower { type_params, ty, effects, + position: pos, }); } } @@ -495,7 +496,7 @@ impl ItemLower { fn lower_namespace_name(name: MlNamespaceName) -> NamespaceName { match name { MlNamespaceName::Ident(label) => NamespaceName::Identifier(label), - MlNamespaceName::Quoted(label) => NamespaceName::Quoted(crate::strings::unquote(&label)), + MlNamespaceName::Quoted(label) => NamespaceName::Quoted(unquote(&label)), } } @@ -645,9 +646,9 @@ pub(super) fn lower_binding( let body = in_scope(params_scope(¶ms), move || lower_expr(body)); // Split the paired signature into its type params, declared type and // effect row. - let (type_params, ty, effects) = match sig { - Some(s) => (s.type_params, Some(s.ty), s.effects), - None => (Vec::new(), None, Vec::new()), + let (type_params, ty, effects, signature_position) = match sig { + Some(s) => (s.type_params, Some(s.ty), s.effects, Some(s.position)), + None => (Vec::new(), None, Vec::new(), None), }; let ty = ty.as_ref(); if let Some(message) = ty.and_then(|t| signature_mismatch(&name, ¶ms, uncurried, t)) { @@ -668,9 +669,9 @@ pub(super) fn lower_binding( }; } let (parameters, body, return_type) = if uncurried { - build_function_flat(params, body, ty) + build_function_flat(params, body, ty, pos, signature_position) } else { - build_function(params, body, ty, pos) + build_function(params, body, ty, pos, signature_position) }; Stmt::Function { name, @@ -684,6 +685,33 @@ pub(super) fn lower_binding( } } +/// A header and an inline parameter annotation are independent constraints. +/// Check the inline type immediately inside that parameter's binder, before a +/// later curry parameter can shadow its name. +fn inline_param_constraint( + param: Option<&MlParam>, + index: usize, + pos: Position, + signed: bool, + body: Expr, +) -> Expr { + let (true, Some(MlParam::Typed(name, ty))) = (signed, param) else { + return body; + }; + let name = parameter_name(name.clone(), index); + Expr::Block { + statements: vec![Stmt::Let { + value: Expr::Identifier(name.clone()), + name, + mutable: false, + ty: type_expr(ty), + doc: None, + position: Some(pos), + }], + value: Some(Box::new(body)), + } +} + /// A paired signature the lowering cannot honour, as a diagnostic — or `None` /// when every written type survives into the canonical AST. Guards the silent /// drops in [`build_function_flat`]/[`build_function`]: a tuple domain whose @@ -747,6 +775,7 @@ pub(super) struct MlSig { type_params: Vec, ty: MlType, effects: Vec, + position: Position, } impl MlSig { @@ -755,12 +784,14 @@ impl MlSig { type_params: Vec, ty: MlType, effects: Vec, + position: Position, ) -> Self { Self { name, type_params, ty, effects, + position, } } } @@ -802,18 +833,26 @@ fn build_function_flat( params: Vec, body: Expr, sig: Option<&MlType>, + pos: Position, + signature_position: Option, ) -> (Vec, Expr, Option) { let spine = expand_tuple_head(sig.map(arrow_spine).unwrap_or_default(), params.len()); let consumed = params.len(); + let body = params.iter().enumerate().rev().fold(body, |body, (i, p)| { + inline_param_constraint(Some(p), i, curry_position(pos, i), sig.is_some(), body) + }); let parameters = params .into_iter() .enumerate() - .filter_map(|(i, p)| lower_param(p, i, spine.get(i))) + .filter_map(|(i, p)| lower_param(p, i, spine.get(i), signature_position)) .collect(); ( parameters, body, - arrow_of(spine.get(consumed..).unwrap_or(&[])), + signature_annotation( + arrow_of(spine.get(consumed..).unwrap_or(&[])), + signature_position, + ), ) } @@ -891,18 +930,31 @@ fn build_function( body: Expr, sig: Option<&MlType>, pos: Position, + signature_position: Option, ) -> (Vec, Expr, Option) { let spine = sig.map(arrow_spine).unwrap_or_default(); let mut rest = params.into_iter(); let first = rest.next(); // `()` (unit marker) or no parameter binds nothing. let parameters = first - .and_then(|p| lower_param(p, 0, spine.first())) + .clone() + .and_then(|p| lower_param(p, 0, spine.first(), signature_position)) .into_iter() .collect(); let tail_spine = spine.get(1..).unwrap_or(&[]); - let body = curry_params(rest.collect(), body, tail_spine, pos); - (parameters, body, arrow_of(tail_spine)) + let body = curry_params(rest.collect(), body, tail_spine, pos, signature_position); + let body = inline_param_constraint( + first.as_ref(), + 0, + curry_position(pos, 0), + sig.is_some(), + body, + ); + ( + parameters, + body, + signature_annotation(arrow_of(tail_spine), signature_position), + ) } /// Fold a surface parameter list into a right-nested chain of one-parameter @@ -911,21 +963,44 @@ fn build_function( /// positionally; the lambda for the i-th parameter returns the function-typed /// tail `arrow_of(spine[i+1..])`. An empty parameter list returns `body` /// unchanged (the curried tail of a single-parameter function is just its body). -fn curry_params(params: Vec, body: Expr, spine: &[MlType], pos: Position) -> Expr { +fn curry_params( + params: Vec, + body: Expr, + spine: &[MlType], + pos: Position, + signature_position: Option, +) -> Expr { let mut acc = body; for (i, param) in params.into_iter().enumerate().rev() { + let body = inline_param_constraint( + Some(¶m), + i, + curry_position(pos, i.saturating_add(1)), + signature_position.is_some(), + acc, + ); acc = Expr::Lambda { - parameters: curry_parameter(param, i, spine.get(i)), - return_type: arrow_of(spine.get(i + 1..).unwrap_or(&[])), - body: Box::new(acc), + parameters: lower_param(param, i, spine.get(i), signature_position) + .into_iter() + .collect(), + return_type: signature_annotation( + arrow_of(spine.get(i + 1..).unwrap_or(&[])), + signature_position, + ), + body: Box::new(body), position: Some(curry_position(pos, i)), }; } acc } -fn curry_parameter(param: MlParam, index: usize, inferred: Option<&MlType>) -> Vec { - lower_param(param, index, inferred).into_iter().collect() +/// Every lowered fragment of one written signature keeps the same source +/// identity, so diagnostics erase that annotation as one unit. +fn signature_annotation(ty: Option, position: Option) -> Option { + ty.map(|mut ty| { + ty.position = position; + ty + }) } /// The surface spelling of an ignored parameter ([PARAM-WILDCARD]). @@ -936,22 +1011,40 @@ const WILDCARD: &str = "_"; /// name for its slot ([PARAM-WILDCARD]) so repeated `_`s in one head cannot /// collide and none of them is referenceable from the body. This is the single /// definition of the mapping; every head form routes through it. -fn lower_param(param: MlParam, index: usize, inferred: Option<&MlType>) -> Option { +fn lower_param( + param: MlParam, + index: usize, + inferred: Option<&MlType>, + signature_position: Option, +) -> Option { let (name, ty) = match param { - MlParam::Named(name) => (name, inferred.and_then(type_expr)), - MlParam::Typed(name, ty) => (name, type_expr(&ty)), + MlParam::Named(name) => ( + name, + signature_annotation(inferred.and_then(type_expr), signature_position), + ), + MlParam::Typed(name, ty) => ( + name, + inferred.map_or_else( + || type_expr(&ty), + |written| signature_annotation(type_expr(written), signature_position), + ), + ), MlParam::Unit => return None, // [`super::clauses::merge`] rewrites every clause set before lowering, // so a surviving head pattern is one the merge already diagnosed; // bind it to an unreferenceable name and let that error stand. MlParam::Pattern(_) => (osprey_ast::clause_param_name(index), None), }; - let name = if name == WILDCARD { + let name = parameter_name(name, index); + Some(Parameter { name, ty }) +} + +fn parameter_name(name: String, index: usize) -> String { + if name == WILDCARD { osprey_ast::wildcard_param_name(index) } else { name - }; - Some(Parameter { name, ty }) + } } /// Give every synthesized curry lambda its own `ProgramTypes::lambdas` key; @@ -975,7 +1068,7 @@ fn flat_params(params: Vec) -> Vec { params .into_iter() .enumerate() - .filter_map(|(i, p)| lower_param(p, i, None)) + .filter_map(|(i, p)| lower_param(p, i, None, None)) .collect() } @@ -988,7 +1081,7 @@ fn lower_lambda(params: Vec, body: Expr, pos: Position) -> Expr { position: Some(pos), }; } - curry_params(params, body, &[], pos) + curry_params(params, body, &[], pos, None) } /// Flatten the top-level arrow spine of a type: `a -> b -> c` ⇒ `[a, b, c]`, @@ -1079,6 +1172,11 @@ fn lower_expr(expr: MlExpr) -> Expr { segments: path.segments, }), MlExpr::Paren(inner) => lower_expr(*inner), + MlExpr::TypeApply { func, args, pos } => Expr::TypeApply { + function: Box::new(lower_expr(*func)), + type_args: args.iter().filter_map(type_expr).collect(), + position: Some(pos), + }, // `-literal` folds to the literal so both flavors agree that `-1` is an // `int`, not a fallible `Result` ([ARITH-NEG-LITERAL], [FLAVOR-IR-EQUIV]). MlExpr::Unary { op, operand } if op == "-" => Expr::negated(lower_expr(*operand)), @@ -1409,7 +1507,6 @@ fn parse_fragment(frag: &str) -> Expr { _ => Expr::Identifier(frag.trim().to_owned()), } } - #[cfg(test)] #[expect( clippy::indexing_slicing, @@ -1417,21 +1514,11 @@ fn parse_fragment(frag: &str) -> Expr { )] mod tests { use super::super::parse_ml; - use crate::test_support::{ml_one_stmt, ml_stmts}; + use crate::test_support::{assert_doc_pair, assert_summary, ml_one_stmt, ml_stmts, stmt_doc}; use osprey_ast::{Expr, InterpolatedPart, Pattern, Stmt, Variance}; // ---------- [TESTING-DOC] expression-statement documentation ---------- - /// The doc comment lowered onto a statement, or `None`. - fn stmt_doc(stmt: &Stmt) -> Option<&osprey_ast::DocComment> { - match stmt { - Stmt::Expr { doc, .. } | Stmt::Let { doc, .. } | Stmt::Function { doc, .. } => { - doc.as_ref() - } - _ => None, - } - } - #[test] fn an_ml_block_doc_lowers_onto_the_expression_statement_it_precedes() { // `test "name" case` is an application expression, so documenting a @@ -1439,10 +1526,7 @@ mod tests { // ([TESTING-DOC], [DOC-SIGIL-ML]). let s = ml_one_stmt("(** Documents the call. *)\nprintLine \"hi\"\n"); assert!(matches!(s, Stmt::Expr { .. }), "still an expr stmt: {s:?}"); - assert_eq!( - stmt_doc(&s).map(|d| d.summary.as_str()), - Some("Documents the call.") - ); + assert_summary(&s, Some("Documents the call.")); } #[test] @@ -1455,10 +1539,7 @@ mod tests { fn an_ml_doc_is_consumed_by_the_first_statement_and_not_the_next() { let all = ml_stmts("(** First. *)\nprintLine \"a\"\nprintLine \"b\"\n"); assert_eq!(all.len(), 2); - assert_eq!( - stmt_doc(&all[0]).map(|d| d.summary.as_str()), - Some("First.") - ); + assert_summary(&all[0], Some("First.")); assert_eq!( stmt_doc(&all[1]).map(|d| d.summary.as_str()), None, @@ -1469,13 +1550,7 @@ mod tests { #[test] fn an_ml_binding_after_a_documented_statement_keeps_its_own_doc() { let all = ml_stmts("(** Runs it. *)\nprintLine \"hi\"\n(** Adds. *)\nadd a b = a + b\n"); - assert_eq!(all.len(), 2); - assert_eq!( - stmt_doc(&all[0]).map(|d| d.summary.as_str()), - Some("Runs it.") - ); - assert!(matches!(all[1], Stmt::Function { .. })); - assert_eq!(stmt_doc(&all[1]).map(|d| d.summary.as_str()), Some("Adds.")); + assert_doc_pair(&all, "Runs it.", "Adds."); } #[test] diff --git a/crates/osprey-syntax/src/ml/module_lower.rs b/crates/osprey-syntax/src/ml/module_lower.rs index 528ec394..4bab8650 100644 --- a/crates/osprey-syntax/src/ml/module_lower.rs +++ b/crates/osprey-syntax/src/ml/module_lower.rs @@ -39,8 +39,8 @@ impl ModuleLower { type_params, ty, effects, - .. - } => self.pending = Some((MlSig::new(name, type_params, ty, effects), visibility)), + pos, + } => self.pending = Some((MlSig::new(name, type_params, ty, effects, pos), visibility)), MlItem::Binding { mutable, name, diff --git a/crates/osprey-syntax/src/ml/parser.rs b/crates/osprey-syntax/src/ml/parser.rs index be0811fe..58169397 100644 --- a/crates/osprey-syntax/src/ml/parser.rs +++ b/crates/osprey-syntax/src/ml/parser.rs @@ -42,7 +42,7 @@ use super::cst::{ MlVariant, }; use super::lexer::lex; -use super::token::{TokKind, Token}; +use super::token::{keyword_spelling, TokKind, Token}; use crate::SyntaxError; use osprey_ast::{Multiplicity, Position, Stage, REPLAYABLE_KEYWORD, STATIC_STAGE_KEYWORD}; @@ -99,6 +99,14 @@ pub(super) struct Parser<'t> { } impl Parser<'_> { + /// Consume the separator between elements of a comma-separated list, + /// answering whether another element follows. A trailing comma before + /// `close` ends the list rather than demanding an element after it, so + /// `[1, 2,]` reads as two elements. + fn more_in_list(&mut self, close: &TokKind) -> bool { + self.eat(&TokKind::Comma) && self.peek() != close + } + pub(super) fn peek(&self) -> &TokKind { self.toks.get(self.i).map_or(&TokKind::Eof, |t| &t.kind) } @@ -640,24 +648,39 @@ impl Parser<'_> { fn operation_markers(&mut self) -> Option<(Option, bool, String)> { let mut multiplicity = None; let mut replayable = false; - let mut word = self.ident()?; + let mut word = self.operation_ident()?; if let Some(declared) = Multiplicity::from_keyword(&word) { if self.at_operation_name() { multiplicity = Some(declared); - word = self.ident()?; + word = self.operation_ident()?; } } if word == REPLAYABLE_KEYWORD && self.at_operation_name() { replayable = true; - word = self.ident()?; + word = self.operation_ident()?; } Some((multiplicity, replayable, word)) } - /// Whether the cursor sits on an identifier — the token that proves the + /// Whether the cursor sits on an operation name — the token that proves the /// word just read was a marker rather than the operation's own name. fn at_operation_name(&self) -> bool { - matches!(self.peek(), TokKind::Ident(_)) + matches!(self.peek(), TokKind::Ident(_)) || keyword_spelling(self.peek()).is_some() + } + + /// An effect operation's name. Operation names are their own namespace, so + /// a word this flavor reserves elsewhere still names an operation here: + /// `send : T => Unit` declares an operation called `send`, exactly as + /// `abort : string => Unit` declares one called `abort`. The position is + /// unambiguous — an `effect` block's indented lines, the name after + /// `perform Effect.`, and a handler arm's head admit nothing but a name. + /// Implements [FLAVOR-ML-EFFECT-OP-NAME]. + fn operation_ident(&mut self) -> Option { + if let Some(spelling) = keyword_spelling(self.peek()) { + self.advance(); + return Some(spelling.to_owned()); + } + self.ident() } /// Consume a `(** … *)` doc token sitting in front of an operation line. @@ -989,12 +1012,9 @@ impl Parser<'_> { if !matches!(self.peek(), TokKind::RParen) { loop { out.push(self.one_param()); - if !self.eat(&TokKind::Comma) { + if !self.more_in_list(&TokKind::RParen) { break; } - if matches!(self.peek(), TokKind::RParen) { - break; // tolerate a trailing comma - } } } if !self.eat(&TokKind::RParen) { @@ -1153,6 +1173,7 @@ impl Parser<'_> { /// Whitespace application `f a b`, left-associative, recorded as nested /// single-argument [`MlExpr::App`] ([FLAVOR-ML-CALL]). fn application(&mut self) -> MlExpr { + let pos = self.pos(); let mut func = self.postfix(); // `Head(field = v, …)` is an inline record literal, not application: any // identifier immediately followed by `(ident = …`. An UPPERCASE head is @@ -1174,6 +1195,17 @@ impl Parser<'_> { func = self.inline_record(name, type_args); } } + if record_head(&func).is_some() && self.glued() && self.at_type_application() { + let args = match self.ty_generic_args(String::new()) { + MlType::App { args, .. } => args, + _ => Vec::new(), + }; + func = MlExpr::TypeApply { + func: Box::new(func), + args, + pos, + }; + } // `f ()` is a zero-argument application, not application to unit. if matches!(self.peek(), TokKind::LParen) && matches!(self.peek_at(1), TokKind::RParen) { self.advance(); @@ -1237,12 +1269,9 @@ impl Parser<'_> { if !matches!(self.peek(), TokKind::RParen) { loop { args.push(self.expr(0)); - if !self.eat(&TokKind::Comma) { + if !self.more_in_list(&TokKind::RParen) { break; } - if matches!(self.peek(), TokKind::RParen) { - break; // tolerate a trailing comma - } } } if !self.eat(&TokKind::RParen) { @@ -1297,8 +1326,14 @@ impl Parser<'_> { /// Whether the next token can begin an argument atom. fn starts_atom(&self) -> bool { + self.starts_atom_at(0) + } + + /// Whether the token `j` ahead of the cursor could begin an atom. Lookahead + /// needs this to decide a shape before committing to it. + fn starts_atom_at(&self, j: usize) -> bool { matches!( - self.peek(), + self.peek_at(j), TokKind::Int(_) | TokKind::Float(_) | TokKind::Str(_) @@ -1452,12 +1487,9 @@ impl Parser<'_> { if !matches!(self.peek(), TokKind::RBracket) { loop { entries.push(self.map_entry()); - if !self.eat(&TokKind::Comma) { + if !self.more_in_list(&TokKind::RBracket) { break; } - if matches!(self.peek(), TokKind::RBracket) { - break; // tolerate a trailing comma - } } } if !self.eat(&TokKind::RBracket) { @@ -1530,7 +1562,7 @@ impl Parser<'_> { if !self.eat(&TokKind::Dot) { self.error("expected '.' between effect and operation in perform"); } - let operation = self.ident().unwrap_or_default(); + let operation = self.operation_ident().unwrap_or_default(); // `op ()` is a zero-argument performance, not application to unit. if matches!(self.peek(), TokKind::LParen) && matches!(self.peek_at(1), TokKind::RParen) { self.advance(); @@ -1622,7 +1654,7 @@ impl Parser<'_> { /// One `op param* => body` arm of a `handle` expression. pub(super) fn handle_arm(&mut self) -> MlHandleArm { let pos = self.pos(); - let operation = self.ident().unwrap_or_default(); + let operation = self.operation_ident().unwrap_or_default(); let mut params = Vec::new(); while let TokKind::Ident(name) = self.peek() { params.push(name.clone()); @@ -1882,12 +1914,9 @@ impl Parser<'_> { break; // `...rest` is always the final element } elements.push(self.pattern()); - if !self.eat(&TokKind::Comma) { + if !self.more_in_list(&TokKind::RBracket) { break; } - if matches!(self.peek(), TokKind::RBracket) { - break; // tolerate a trailing comma - } } } if !self.eat(&TokKind::RBracket) { @@ -1966,12 +1995,9 @@ impl Parser<'_> { Some(field) => fields.push(field), None => self.recover(), } - if !self.eat(&TokKind::Comma) { + if !self.more_in_list(&TokKind::RParen) { break; } - if matches!(self.peek(), TokKind::RParen) { - break; // tolerate a trailing comma - } } } if !self.eat(&TokKind::RParen) { @@ -2006,9 +2032,29 @@ impl Parser<'_> { /// followed by an inline record (`Ctor(field = v)`): scan a balanced /// `<…>` of type-shaped tokens, then require the `( Ident =` record /// opener — so a `Ctor < x` comparison never misparses. - fn at_generic_record(&self) -> bool { - if !matches!(self.peek(), TokKind::Op(op) if op == "<") { - return false; + /// Whether a glued `<` opens **call-site type arguments** rather than a + /// comparison. `<` alone cannot decide: `x<3` and `x 5` an application and `x bool { + match self.past_angle_run() { + Some(j) => self.starts_atom_at(j), + None => false, + } + } + + /// Scan a `<…>` run that holds only tokens a TYPE can hold, and answer with + /// the offset just past its closing `>`. `None` means the cursor is not on + /// a `<`, or the run holds something no type can (`x<3`), or it never + /// closes — in every one of those the `<` was an operator, and the caller + /// must not commit to a generic form. Nested runs close with `>>`, which + /// this flavor lexes as two `>` tokens, so counting depth is enough. + fn past_angle_run(&self) -> Option { + if !self.at_angle_open() { + return None; } let mut depth = 0usize; let mut j = 0usize; @@ -2018,9 +2064,7 @@ impl Parser<'_> { TokKind::Op(op) if op == ">" => { depth = depth.saturating_sub(1); if depth == 0 { - return matches!(self.peek_at(j + 1), TokKind::LParen) - && matches!(self.peek_at(j + 2), TokKind::Ident(_)) - && matches!(self.peek_at(j + 3), TokKind::Eq); + return Some(j + 1); } } TokKind::Ident(_) @@ -2028,12 +2072,21 @@ impl Parser<'_> { | TokKind::Arrow | TokKind::LParen | TokKind::RParen => {} - _ => return false, + _ => return None, } j += 1; } } + fn at_generic_record(&self) -> bool { + let Some(j) = self.past_angle_run() else { + return false; + }; + matches!(self.peek_at(j), TokKind::LParen) + && matches!(self.peek_at(j + 1), TokKind::Ident(_)) + && matches!(self.peek_at(j + 2), TokKind::Eq) + } + // --- bodies and helpers ---------------------------------------------- /// The body after `=`/`=>`: an inline expression, or an indented layout diff --git a/crates/osprey-syntax/src/ml/token.rs b/crates/osprey-syntax/src/ml/token.rs index 87eb33fe..d584c35e 100644 --- a/crates/osprey-syntax/src/ml/token.rs +++ b/crates/osprey-syntax/src/ml/token.rs @@ -142,36 +142,64 @@ pub(crate) enum TokKind { Eof, } +/// Every keyword spelling paired with the kind it lexes to. This is the ONE +/// list: [`keyword_or_ident`] reads it forwards and [`keyword_spelling`] reads +/// it backwards, so a keyword cannot be added to one direction only. +const KEYWORDS: &[(&str, TokKind)] = &[ + ("mut", TokKind::KwMut), + ("true", TokKind::KwTrue), + ("false", TokKind::KwFalse), + ("match", TokKind::KwMatch), + ("type", TokKind::KwType), + ("extern", TokKind::KwExtern), + ("spawn", TokKind::KwSpawn), + ("effect", TokKind::KwEffect), + ("perform", TokKind::KwPerform), + ("handle", TokKind::KwHandle), + ("resume", TokKind::KwResume), + ("in", TokKind::KwIn), + ("await", TokKind::KwAwait), + ("yield", TokKind::KwYield), + ("send", TokKind::KwSend), + ("recv", TokKind::KwRecv), + ("select", TokKind::KwSelect), + ("import", TokKind::KwImport), + ("namespace", TokKind::KwNamespace), + ("module", TokKind::KwModule), + ("signature", TokKind::KwSignature), + ("export", TokKind::KwExport), + ("opaque", TokKind::KwOpaque), + ("state", TokKind::KwState), + ("as", TokKind::KwAs), +]; + +/// Spellings held back for a future syntax. They lex to [`TokKind::Reserved`], +/// which already carries its own text, so they stay out of [`KEYWORDS`]. +const RESERVED: &[&str] = &["handler", "do"]; + /// Map a bare identifier spelling to its keyword/reserved kind, or treat it as /// an ordinary identifier. pub(crate) fn keyword_or_ident(text: &str) -> TokKind { - match text { - "mut" => TokKind::KwMut, - "true" => TokKind::KwTrue, - "false" => TokKind::KwFalse, - "match" => TokKind::KwMatch, - "type" => TokKind::KwType, - "extern" => TokKind::KwExtern, - "spawn" => TokKind::KwSpawn, - "effect" => TokKind::KwEffect, - "perform" => TokKind::KwPerform, - "handle" => TokKind::KwHandle, - "resume" => TokKind::KwResume, - "in" => TokKind::KwIn, - "await" => TokKind::KwAwait, - "yield" => TokKind::KwYield, - "send" => TokKind::KwSend, - "recv" => TokKind::KwRecv, - "select" => TokKind::KwSelect, - "import" => TokKind::KwImport, - "namespace" => TokKind::KwNamespace, - "module" => TokKind::KwModule, - "signature" => TokKind::KwSignature, - "export" => TokKind::KwExport, - "opaque" => TokKind::KwOpaque, - "state" => TokKind::KwState, - "as" => TokKind::KwAs, - "handler" | "do" => TokKind::Reserved(text.to_owned()), - _ => TokKind::Ident(text.to_owned()), + if RESERVED.contains(&text) { + return TokKind::Reserved(text.to_owned()); + } + match KEYWORDS.iter().find(|(spelling, _)| *spelling == text) { + Some((_, kind)) => kind.clone(), + None => TokKind::Ident(text.to_owned()), } } + +/// The spelling a keyword token was lexed from — the inverse of +/// [`keyword_or_ident`]. +/// +/// A word reserved for one syntactic position is still an ordinary NAME in a +/// position where only a name can appear. Effect operation names are such a +/// position (`effect Chan { send : T => Unit }`), the same contextual rule +/// [`super::parser::Parser::operation_markers`] already applies to `abort` / +/// `once` / `many`. Implements [FLAVOR-ML-EFFECT-OP-NAME]. +pub(crate) fn keyword_spelling(kind: &TokKind) -> Option<&'static str> { + KEYWORDS + .iter() + .find(|(_, candidate)| candidate == kind) + .map(|(spelling, _)| *spelling) +} diff --git a/crates/osprey-syntax/src/strings.rs b/crates/osprey-syntax/src/strings.rs index 50aa8e04..f0abce5d 100644 --- a/crates/osprey-syntax/src/strings.rs +++ b/crates/osprey-syntax/src/strings.rs @@ -143,6 +143,7 @@ fn rebase_slot(slot: &mut Option, rebase: Rebase) { fn rebase_expr(expr: &mut Expr, rebase: Rebase) { match expr { Expr::List(_, position) + | Expr::TypeApply { position, .. } | Expr::Lambda { position, .. } | Expr::Perform { position, .. } | Expr::Handler { position, .. } => rebase_slot(position, rebase), diff --git a/crates/osprey-syntax/src/test_support.rs b/crates/osprey-syntax/src/test_support.rs index 67b0d842..c762bf87 100644 --- a/crates/osprey-syntax/src/test_support.rs +++ b/crates/osprey-syntax/src/test_support.rs @@ -53,3 +53,33 @@ fn only(mut statements: Vec) -> Stmt { // repository-forbidden `unwrap()`. statements.remove(0) } + +/// The doc comment lowered onto a statement, or `None`. Both flavors' tests +/// ask this same question of the same `Stmt`, so it is answered once. +pub(crate) fn stmt_doc(stmt: &Stmt) -> Option<&osprey_ast::DocComment> { + match stmt { + Stmt::Expr { doc, .. } | Stmt::Let { doc, .. } | Stmt::Function { doc, .. } => doc.as_ref(), + _ => None, + } +} + +/// Assert the doc summary lowered onto `stmt` — `None` demanding that no doc +/// was invented for it. Every doc-lowering case asks exactly this. +pub(crate) fn assert_summary(stmt: &Stmt, expected: Option<&str>) { + assert_eq!(stmt_doc(stmt).map(|d| d.summary.as_str()), expected); +} + +/// Assert a documented expression statement is followed by a documented +/// declaration that kept its OWN doc — the shape both flavors pin, differing +/// only in how each spells the source. +pub(crate) fn assert_doc_pair(all: &[Stmt], first: &str, second: &str) { + let [statement, declaration] = all else { + panic!( + "expected exactly two statements, got {}: {all:?}", + all.len() + ); + }; + assert_summary(statement, Some(first)); + assert!(matches!(declaration, Stmt::Function { .. })); + assert_summary(declaration, Some(second)); +} diff --git a/crates/osprey-syntax/tests/ml_elegance.rs b/crates/osprey-syntax/tests/ml_elegance.rs index c4eaf4a4..a270471c 100644 --- a/crates/osprey-syntax/tests/ml_elegance.rs +++ b/crates/osprey-syntax/tests/ml_elegance.rs @@ -428,9 +428,9 @@ fn structural_patterns_parse_closed_and_open() { /// The first match expression's arms anywhere in the program — the shared /// digging for the pattern-shape assertions above. fn find_match_arms(program: &osprey_ast::Program) -> Vec { - fn from_expr(e: &osprey_ast::Expr) -> Option> { + fn from_expr(e: &Expr) -> Option> { match e { - osprey_ast::Expr::Match { arms, .. } => Some(arms.clone()), + Expr::Match { arms, .. } => Some(arms.clone()), _ => None, } } diff --git a/crates/osprey-types/src/applications.rs b/crates/osprey-types/src/applications.rs new file mode 100644 index 00000000..1845dd8f --- /dev/null +++ b/crates/osprey-types/src/applications.rs @@ -0,0 +1,163 @@ +//! Retain inferred call substitutions across backend AST cloning. +//! +//! Implements [TYPE-GENERICS-APPLY] for implicit and explicit applications. +//! Expression ordinals are local to the unchanged source tree; the backend +//! copy carries them in synthetic application positions outside source lines. + +use crate::ctx::InferCtx; +use crate::info::ProgramTypes; +use crate::ty::{Type, VarId}; +use osprey_ast::{walk_program, AstVisitor}; +use osprey_ast::{Expr, Position, Program}; +use std::collections::HashMap; + +type Bindings = HashMap; + +/// Compose origins through let aliases and generic wrapper parameters. +/// A source variable with competing replacements remains unspecialized. +pub(crate) fn expanded(bindings: &Bindings, origins: &HashMap) -> Bindings { + let mut result = bindings.clone(); + loop { + let mut candidates: HashMap> = HashMap::new(); + for origin in origins.values() { + for (var, ty) in origin { + if result.contains_key(var) { + continue; + } + let replacement = crate::env::subst_vars(ty, &result); + if replacement == *ty { + continue; + } + let _ = candidates + .entry(*var) + .and_modify(|candidate| { + if candidate.as_ref() != Some(&replacement) { + *candidate = None; + } + }) + .or_insert(Some(replacement)); + } + } + let before = result.len(); + result.extend( + candidates + .into_iter() + .filter_map(|(var, ty)| ty.map(|ty| (var, ty))), + ); + if before == result.len() { + return result; + } + } +} + +pub(crate) fn collect( + program: &Program, + sites: &HashMap, + ctx: &mut InferCtx, +) -> HashMap { + struct Collector<'a> { + sites: &'a HashMap, + ctx: &'a mut InferCtx, + index: usize, + calls: HashMap, + } + impl AstVisitor for Collector<'_> { + fn expression(&mut self, expression: &Expr) { + let site = match expression { + Expr::Call { function, .. } => Some(function.as_ref()), + Expr::Pipe { right, .. } => Some(right.as_ref()), + Expr::MethodCall { .. } | Expr::Identifier(_) | Expr::Path(_) => Some(expression), + _ => None, + }; + if let Some(bindings) = site + .filter(|e| { + matches!( + e, + Expr::Identifier(_) | Expr::Path(_) | Expr::MethodCall { .. } + ) + }) + .and_then(|e| self.sites.get(&std::ptr::from_ref(e).addr())) + .filter(|b| !b.is_empty()) + { + let bindings: Bindings = bindings + .iter() + .map(|(v, t)| (*v, self.ctx.apply(t))) + .collect(); + let standalone = matches!(expression, Expr::Identifier(_) | Expr::Path(_)); + if !standalone || bindings.values().all(|ty| !crate::has_type_var(ty)) { + let _ = self.calls.insert(self.index, bindings); + } + } + self.index += 1; + } + } + let mut collector = Collector { + sites, + ctx, + index: 0, + calls: HashMap::new(), + }; + walk_program(program, &mut collector); + let origins: HashMap<_, _> = sites + .iter() + .map(|(site, bindings)| { + ( + *site, + bindings + .iter() + .map(|(var, ty)| (*var, collector.ctx.apply(ty))) + .collect(), + ) + }) + .collect(); + collector + .calls + .into_iter() + .map(|(site, bindings)| (site, expanded(&bindings, &origins))) + .collect() +} + +pub(crate) fn elaborate(program: &Program, types: &mut ProgramTypes) -> Program { + let mut result = program.clone(); + let mut index = 0; + for statement in &mut result.statements { + osprey_ast::mutate::statement_children_mut(statement, &mut |e| { + elaborate_expr(e, &mut index, types); + }); + } + result +} + +fn elaborate_expr(expression: &mut Expr, index: &mut usize, types: &mut ProgramTypes) { + let current = *index; + *index += 1; + osprey_ast::mutate::children_mut(expression, &mut |child| elaborate_expr(child, index, types)); + if let Some(target) = types.methods.get(¤t) { + crate::methods::lower(expression, target); + } + let Some(bindings) = types.call_bindings.get(¤t).cloned() else { + return; + }; + let Ok(column) = u32::try_from(current) else { + return; + }; + let function = if matches!(expression, Expr::Identifier(_) | Expr::Path(_)) + || matches!( + types.methods.get(¤t), + Some(crate::methods::Target::Deferred(_)) + ) { + expression + } else { + match expression { + Expr::Call { function, .. } => function.as_mut(), + Expr::Pipe { right, .. } => right.as_mut(), + _ => return, + } + }; + let _ = types.applications.insert((0, column), bindings); + *function = Expr::TypeApply { + function: Box::new(function.clone()), + type_args: Vec::new(), + position: Some(Position { line: 0, column }), + }; +} diff --git a/crates/osprey-types/src/builtin_constraints.rs b/crates/osprey-types/src/builtin_constraints.rs index 72b1ef91..f55b89cf 100644 --- a/crates/osprey-types/src/builtin_constraints.rs +++ b/crates/osprey-types/src/builtin_constraints.rs @@ -31,6 +31,9 @@ pub(crate) fn display_param_type(name: &str, index: usize) -> Option<&'static st /// Validate the receiver/value of a representation-sensitive built-in. pub(crate) fn invalid_use(name: &str, ty: &Type) -> Option { match name { + "interpolation" if matches!(ty, Type::Fun { .. }) && crate::ty::has_type_var(ty) => Some( + "a closure value with a still-generic type cannot be interpolated; apply it or give it a concrete function type".to_owned() + ), "length" | "isEmpty" if !is_sized(ty) => Some(format!( "`{name}` supports only string, List, or Map; got {ty}" )), diff --git a/crates/osprey-types/src/builtin_docs.rs b/crates/osprey-types/src/builtin_docs.rs index f227a4f0..7ea637a6 100644 --- a/crates/osprey-types/src/builtin_docs.rs +++ b/crates/osprey-types/src/builtin_docs.rs @@ -172,6 +172,7 @@ fn append_example(out: &mut String, example: &str) { #[cfg(test)] mod tests { use super::*; + use crate::testkit::shows; use std::collections::BTreeSet; #[test] @@ -204,11 +205,16 @@ mod tests { // `sleep`'s doc historically claimed `-> int`; the scheme says `-> Unit`, // and the rendered hover must follow the scheme, not the stale prose. let md = builtin_hover_markdown("sleep").expect("sleep is documented"); - assert!(md.contains("sleep(milliseconds: int) -> Unit"), "{md}"); - assert!(md.contains("Pauses execution"), "{md}"); - assert!(md.contains("**Parameters**"), "{md}"); - assert!(md.contains("**Returns** `Unit`"), "{md}"); - assert!(md.contains("**Example**"), "{md}"); + shows( + &md, + &[ + "sleep(milliseconds: int) -> Unit", + "Pauses execution", + "**Parameters**", + "**Returns** `Unit`", + "**Example**", + ], + ); assert!(builtin_hover_markdown("notARealBuiltin").is_none()); } diff --git a/crates/osprey-types/src/builtin_docs_lang.rs b/crates/osprey-types/src/builtin_docs_lang.rs index be52614f..c25b829a 100644 --- a/crates/osprey-types/src/builtin_docs_lang.rs +++ b/crates/osprey-types/src/builtin_docs_lang.rs @@ -71,9 +71,9 @@ pub(crate) static CORE: &[BuiltinDoc] = &[ ), builtin_doc!( "intDiv", - "Truncating integer division. Zero returns Error(division by zero); INT64_MIN / -1 returns Error(integer overflow).", + "Returns Result. Truncating integer division; a zero divisor is Error(division by zero) and INT64_MIN / -1 is Error(integer overflow).", ["a" => "The dividend", "b" => "The divisor"], - "fn half(n) -> int = intDiv(n, 2) // half(7) == 3", + "fn half(n) = intDiv(n, 2) ?: 0 // half(7) == 3", ), builtin_doc!( "toFloat", diff --git a/crates/osprey-types/src/builtins.rs b/crates/osprey-types/src/builtins.rs index d238a177..c86a00ba 100644 --- a/crates/osprey-types/src/builtins.rs +++ b/crates/osprey-types/src/builtins.rs @@ -7,7 +7,11 @@ //! runtime's supported alternatives (`print`, `toString`, `length`, //! `isEmpty`); `builtin_constraints` checks their concrete call-site types. //! Result-returning runtime builtins return `Result` — the shape the C -//! runtime actually returns — while arithmetic operators use `MathError`. +//! runtime actually returns — while arithmetic uses `MathError`. The split is +//! by what can fail, not by who implements it: `abs` and `intDiv` are +//! arithmetic and carry `MathError` even though the runtime provides them. +//! `checkedAdd`/`checkedSub`/`checkedMul` keep the generic `Error` channel for +//! compatibility. use crate::env::TypeEnv; use crate::ty::{names, Scheme, Type}; @@ -42,7 +46,7 @@ fn res(ok: Type) -> Type { /// free-in-env and silently blocking let-generalization — e.g. /// `fn identity(x) -> T = x` losing its polymorphism depending on which /// direction a var-var unification happened to bind. [TYPE-GENERICS-FN] -pub const RESERVED_SCHEME_VARS: u32 = 3; +pub(crate) const RESERVED_SCHEME_VARS: u32 = 3; fn mono(env: &mut TypeEnv, name: &str, params: Vec, ret: Type) { env.insert(name, Scheme::mono(Type::fun(params, ret))); @@ -55,7 +59,7 @@ fn poly(env: &mut TypeEnv, name: &str, vars: Vec, params: Vec, ret: T /// Built-ins a user function may redefine: the testing names are common /// identifiers, so a same-named user function shadows the built-in instead of /// erroring. Implements [TESTING-SHADOWING] (docs/specs/0027-TestingFramework.md). -pub const SHADOWABLE_BUILTINS: &[&str] = &[ +pub(crate) const SHADOWABLE_BUILTINS: &[&str] = &[ "test", "expect", "expectAll", @@ -68,7 +72,7 @@ pub const SHADOWABLE_BUILTINS: &[&str] = &[ ]; /// Install every built-in into a base environment. -pub fn base_env() -> TypeEnv { +pub(crate) fn base_env() -> TypeEnv { let mut e = TypeEnv::new(); core(&mut e); testing(&mut e); @@ -167,10 +171,17 @@ fn core(e: &mut TypeEnv) { vec![i()], Type::result(i(), Type::prim(names::MATH_ERROR)), ); - // Truncating integer division, divide-by-zero-checked → Result. - // The `/` operator is float-only (Osprey spec); this is its integer sibling. - // Implements [BUILTIN-INTDIV]. - mono(e, "intDiv", vec![i(), i()], res(i())); + // Truncating integer division, divide-by-zero-checked. The `/` operator is + // float-only (Osprey spec); this is its integer sibling, so its faults are + // MATH faults and it carries the same `MathError` channel as `abs` and as + // the operators — not the runtime's generic `Error`. Implements + // [BUILTIN-INTDIV]. + mono( + e, + "intDiv", + vec![i(), i()], + Type::result(i(), Type::prim(names::MATH_ERROR)), + ); // Widening int → float. Total, so it is bare `float` rather than a Result: // every i64 has a nearest double. Implements [BUILTIN-TOFLOAT] and the GPU // surface's explicit element conversion [GPU-CONVERT]. diff --git a/crates/osprey-types/src/check.rs b/crates/osprey-types/src/check.rs index 31d4d630..0c605075 100644 --- a/crates/osprey-types/src/check.rs +++ b/crates/osprey-types/src/check.rs @@ -103,8 +103,17 @@ impl Discard { } } +/// Generated wildcard binders still name the source `_` in diagnostics. +pub(crate) fn annotation_name(name: &str) -> String { + if name.starts_with("$wild") { + "_".to_owned() + } else { + name.to_owned() + } +} + /// All cross-cutting declaration tables, plus the inference context. -pub struct Checker { +pub(crate) struct Checker { pub(crate) ctx: InferCtx, pub(crate) errors: Vec, pub(crate) ctors: HashMap, @@ -129,10 +138,18 @@ pub struct Checker { /// representation from, so this table is its only source of one. Resolved /// and published by [`infer_program`]. pub(crate) list_tys: Vec<(Position, Type)>, + /// Fresh substitutions at value uses, retained for the effect proof. + pub(crate) instantiations: HashMap>, + /// Dotted call identity: a field name, or receiver-first function dispatch. + pub(crate) methods: crate::methods::Targets, + /// Explicit applications have stable source positions for backend cloning. + pub(crate) application_tys: Vec<(Position, HashMap)>, /// Concrete arguments passed to representation-sensitive built-ins. These /// are validated after inference so a variable constrained later in the /// same body is checked at its final type. pub(crate) builtin_uses: Vec<(String, Type)>, + /// Generalized constraints remain part of each source binding's contract. + scheme_obligations: HashMap>, /// Every discarded value, where it was written, and whether the author said /// so with `let _ =`. Validated after inference for the same reason /// `builtin_uses` is. Implements [BLOCK-DISCARD]. @@ -188,7 +205,11 @@ impl Checker { lambda_tys: Vec::new(), let_tys: Vec::new(), list_tys: Vec::new(), + instantiations: HashMap::new(), + methods: HashMap::new(), + application_tys: Vec::new(), builtin_uses: Vec::new(), + scheme_obligations: HashMap::new(), discards: Vec::new(), builtins: HashSet::new(), resume_ctx: Vec::new(), @@ -329,6 +350,14 @@ impl Checker { /// Pass one: fill the declaration tables and the base environment. fn collect(&mut self, program: &Program, env: &mut TypeEnv) { + self.collect_statements(program.statements.iter(), env); + } + + fn collect_statements<'a>( + &mut self, + statements: impl Iterator + Clone, + env: &mut TypeEnv, + ) { // `env` is exactly the builtin table on entry — snapshot it so // `collect_function` can reject redefinition of a built-in. if self.builtins.is_empty() { @@ -337,7 +366,7 @@ impl Checker { // Register every declared type's variance first, so position // validation sees nested constructors' variance regardless of // declaration order. Implements [TYPE-VARIANCE-DECL]. - for stmt in &program.statements { + for stmt in statements.clone() { if let Stmt::Type { name, type_params, .. } = stmt @@ -348,7 +377,7 @@ impl Checker { ); } } - for stmt in &program.statements { + for stmt in statements { match stmt { Stmt::Type { name, @@ -418,11 +447,15 @@ impl Checker { } let param_names: Vec = type_params.iter().map(|p| p.name.clone()).collect(); for v in variants { - let fields = v + let fields: Vec<(String, String)> = v .fields .iter() .map(|f| (f.name.clone(), f.ty.clone())) .collect(); + if is_record { + self.ctx + .set_record(name.to_owned(), param_names.clone(), fields.clone()); + } let _ = self.ctors.insert( v.name.clone(), CtorInfo { @@ -480,19 +513,32 @@ impl Checker { /// Instantiate an effect at an effect-row entry's declared type arguments /// (`!State`), resolving each argument against the enclosing - /// function's type parameters; missing arguments become fresh variables. + /// function's type parameters. An omitted argument list is inferred; a + /// written list must supply exactly the declared number of arguments. /// Implements [EFFECTS-GENERIC-ROWS]. fn effect_row_scope( &mut self, row: &EffectRef, fn_typarams: &HashMap, + position: Option, ) -> Option { let info = self.effects.get(&row.name)?.clone(); + if !row.type_args.is_empty() && row.type_args.len() != info.type_params.len() { + self.errors.push( + TypeError::new(format!( + "effect `{}` takes {} type argument(s), got {}", + row.name, + info.type_params.len(), + row.type_args.len() + )) + .with_pos(position), + ); + } let mut pmap = HashMap::new(); let mut args = Vec::new(); for (i, p) in info.type_params.iter().enumerate() { let t = match row.type_args.get(i) { - Some(te) => type_expr_to_type(te, fn_typarams), + Some(te) => self.written_type_argument(te, fn_typarams, position), None => self.ctx.fresh(), }; args.push(t.clone()); @@ -599,26 +645,40 @@ impl Checker { let mut typarams = HashMap::new(); for tp in type_params { let v = self.ctx.fresh(); - let _ = typarams.insert(tp.name.clone(), v); + if typarams.insert(tp.name.clone(), v).is_some() { + self.errors.push(TypeError::new(format!( + "duplicate type parameter `{}`", + tp.name + ))); + } } let params: Vec = parameters .iter() .map(|p| match &p.ty { - Some(te) => type_expr_to_type(te, &typarams), + Some(te) => self.annotation_type(te, &typarams, te.position), None => self.ctx.fresh(), }) .collect(); let ret = match return_type { - Some(te) => type_expr_to_type(te, &typarams), + Some(te) => self.annotation_type(te, &typarams, te.position), None => self.ctx.fresh(), }; + let ordered = type_params + .iter() + .filter_map(|p| typarams.get(&p.name).cloned()) + .collect(); let _ = self.fn_typarams.insert(name.to_string(), typarams); self.publish_signature(name, parameters, params, ret, env); + env.declare_type_params(name, ordered); } /// Pass two: infer bodies and run top-level statements. fn check(&mut self, program: &Program, env: &mut TypeEnv) { - for stmt in &program.statements { + self.check_statements(&mut program.statements.iter(), env); + } + + fn check_statements(&mut self, statements: &mut dyn Iterator, env: &mut TypeEnv) { + for stmt in statements { match stmt { Stmt::Function { name, @@ -630,26 +690,23 @@ impl Checker { } => self.check_function(name, parameters, effects, body, env, *position), Stmt::Module { body, .. } => { let mut inner = env.child(); - let prog = Program { - statements: body - .iter() - .map(|item| item.declaration.as_ref().clone()) - .collect(), - }; // Module declarations live in their own lexical scope. Run // both checker passes there: the old implementation only // ran pass two, so module functions were never registered // and their bodies were silently skipped. - self.collect(&prog, &mut inner); - self.check(&prog, &mut inner); + self.collect_statements( + body.iter().map(|item| item.declaration.as_ref()), + &mut inner, + ); + self.check_statements( + &mut body.iter().map(|item| item.declaration.as_ref()), + &mut inner, + ); } Stmt::Namespace { body, .. } => { let mut inner = env.child(); - let prog = Program { - statements: body.clone(), - }; - self.collect(&prog, &mut inner); - self.check(&prog, &mut inner); + self.collect_statements(body.iter(), &mut inner); + self.check_statements(&mut body.iter(), &mut inner); } // `let` / assignment / bare-expr statements infer the same way at // top level and inside a block. @@ -681,7 +738,7 @@ impl Checker { let typarams = self.fn_typarams.get(name).cloned().unwrap_or_default(); let scopes: Vec<_> = effects .iter() - .filter_map(|r| self.effect_row_scope(r, &typarams)) + .filter_map(|r| self.effect_row_scope(r, &typarams, pos)) .collect(); let pushed = scopes.len(); self.handler_scopes.extend(scopes); @@ -697,9 +754,29 @@ impl Checker { // variables would count as "free in the environment" and nothing would // generalize. let fun_ty = Type::fun(params, ret); + let declared = env + .applied(&mut self.ctx, name) + .map(|applied| applied.params) + .unwrap_or_default(); env.remove(name); - let scheme = self.generalize_with_obligations(env, &fun_ty); + let mut scheme = self.generalize_with_obligations(env, &fun_ty); + // Explicit binders are quantified even when the signature never uses + // them. Two applications of a phantom binder are still independent. + let env_vars = env.free_vars(&mut self.ctx); + for param in &declared { + let mut vars = BTreeSet::new(); + self.ctx.free_vars(param, &mut vars); + for var in vars.difference(&env_vars) { + if !scheme.vars.contains(var) { + scheme.vars.push(*var); + } + } + } + let _ = self + .scheme_obligations + .insert(format!("fn {name}"), scheme.obligations.clone()); env.insert(name, scheme); + env.declare_type_params(name, declared); } /// Generalize `ty`, carrying every built-in obligation recorded on a @@ -711,10 +788,12 @@ impl Checker { /// report the wrapper itself, which is not an error, so the obligation /// MOVES into the scheme. fn generalize_with_obligations(&mut self, env: &TypeEnv, ty: &Type) -> Scheme { + self.resolve_field_uses(); let mut scheme = generalize(&mut self.ctx, env, ty); if scheme.vars.is_empty() { return scheme; } + self.generalize_connected_obligations(env, &mut scheme.vars); let (deferred, kept) = self.split_obligations(&scheme.vars); // Quantifying a variable that still carries a pending arithmetic // overload would hand every call site its own fresh copy, so no use @@ -728,6 +807,27 @@ impl Checker { scheme } + /// Field relations can mention callback variables absent from the visible + /// function signature. Quantify their entire connected component together. + fn generalize_connected_obligations(&mut self, env: &TypeEnv, vars: &mut Vec) { + let external = env.free_vars(&mut self.ctx); + let mut connected: BTreeSet<_> = vars.iter().copied().collect(); + loop { + let before = connected.len(); + for (_, ty) in &self.builtin_uses { + let mut free = BTreeSet::new(); + self.ctx.free_vars(ty, &mut free); + if !free.is_disjoint(&connected) { + connected.extend(free.difference(&external)); + } + } + if connected.len() == before { + *vars = connected.into_iter().collect(); + return; + } + } + } + /// Every type variable a pending arithmetic overload rests on. fn arith_operand_vars(&mut self, obligations: &[(String, Type)]) -> BTreeSet { let mut vars = BTreeSet::new(); @@ -792,8 +892,14 @@ impl Checker { self.discards.push(Discard::explicit(value_ty.clone(), pos)); } let binding_ty = if let Some(te) = ty { - let annotated = type_expr_to_type(te, &HashMap::new()); - self.unify_or_err(&annotated, &value_ty, &format!("let `{name}`"), pos); + let binder = self.current_fn_typarams.clone(); + let annotated = self.annotation_type(te, &binder, te.position.or(pos)); + self.unify_or_err( + &annotated, + &value_ty, + &format!("let `{}`", annotation_name(name)), + pos, + ); annotated } else { value_ty.clone() @@ -814,6 +920,9 @@ impl Checker { let mut scheme = self.generalize_with_obligations(env, &binding_ty); let pinned = self.stateful_handle_vars(&binding_ty); scheme.vars.retain(|v| !pinned.contains(v)); + let _ = self + .scheme_obligations + .insert(format!("let {pos:?} {name}"), scheme.obligations.clone()); if mutable { env.insert_mutable(name, scheme); } else { @@ -963,6 +1072,7 @@ impl Checker { self.defer_arith = false; for _ in 0..self.builtin_uses.len().saturating_add(1) { let before = self.ctx.bound_count(); + self.resolve_field_uses(); let uses = self.builtin_uses.clone(); for (name, ty) in &uses { self.resolve_deferred_arith(name, ty); @@ -1042,8 +1152,32 @@ pub fn check_program_exports(program: &Program, exports: &[&str]) -> Vec crate::info::ProgramTypes { - use crate::info::{CtorLayout, ProgramTypes}; - let mut checker = checked_program(program); + publish_program(program, checked_program(program), true) +} + +/// Diagnostics need one checked solve and no backend call elaboration. +pub(crate) fn infer_checked( + program: &Program, +) -> Result> { + let checker = checked_program(program); + if checker.errors.is_empty() { + Ok(publish_program(program, checker, false)) + } else { + Err(checker.errors) + } +} + +fn publish_program( + program: &Program, + mut checker: Checker, + applications: bool, +) -> crate::info::ProgramTypes { + use crate::info::ProgramTypes; + let call_bindings = if applications { + crate::applications::collect(program, &checker.instantiations, &mut checker.ctx) + } else { + HashMap::new() + }; let functions = checker .fn_sigs @@ -1054,30 +1188,7 @@ pub fn infer_program(program: &Program) -> crate::info::ProgramTypes { (name.clone(), (rp, rr)) }) .collect(); - let ctors = checker - .ctors - .iter() - .map(|(name, info)| { - // A declared type parameter resolves to a type variable — the - // backend lowers a variable to its uniform boxed representation, - // which is exactly the generic-payload rule. - let pmap = erased_type_params(&info.type_params); - let fields = info - .fields - .iter() - .map(|(f, written)| (f.clone(), type_name_to_type(written, &pmap))) - .collect(); - ( - name.clone(), - CtorLayout { - owner: info.owner.clone(), - owner_is_record: info.owner_is_record, - type_params: info.type_params.clone(), - fields, - }, - ) - }) - .collect(); + let ctors = publish_ctors(&checker); let unions = checker.union_variants.clone(); // The erased view of every effect: each declared type parameter resolves // to a type variable, which the backend lowers to its uniform boxed @@ -1125,6 +1236,8 @@ pub fn infer_program(program: &Program) -> crate::info::ProgramTypes { ((pos.line, pos.column), site) })); ProgramTypes { + obligations: publish_obligations(&mut checker), + methods: crate::methods::collect(program, &checker.methods), functions, ctors, unions, @@ -1134,9 +1247,79 @@ pub fn infer_program(program: &Program) -> crate::info::ProgramTypes { lists, performs, handler_ops, + call_bindings, + applications: checker + .application_tys + .iter() + .map(|(position, bindings)| { + ( + (position.line, position.column), + bindings + .iter() + .map(|(var, ty)| (*var, checker.ctx.apply(ty))) + .collect(), + ) + }) + .collect(), + declared_params: checker + .fn_typarams + .iter() + .map(|(name, bindings)| { + ( + name.clone(), + bindings + .iter() + .map(|(name, ty)| (name.clone(), checker.ctx.apply(ty))) + .collect(), + ) + }) + .collect(), } } +/// Publish constructor fields using the common erased binder numbering. +fn publish_obligations(checker: &mut Checker) -> HashMap> { + checker + .scheme_obligations + .iter() + .map(|(owner, obligations)| { + let resolved = obligations + .iter() + .map(|(name, ty)| (name.clone(), checker.ctx.apply(ty))) + .collect(); + (owner.clone(), resolved) + }) + .collect() +} + +fn publish_ctors(checker: &Checker) -> HashMap { + use crate::info::CtorLayout; + checker + .ctors + .iter() + .map(|(name, info)| { + // A declared type parameter resolves to a type variable — the + // backend lowers a variable to its uniform boxed representation, + // which is exactly the generic-payload rule. + let pmap = erased_type_params(&info.type_params); + let fields = info + .fields + .iter() + .map(|(f, written)| (f.clone(), type_name_to_type(written, &pmap))) + .collect(); + ( + name.clone(), + CtorLayout { + owner: info.owner.clone(), + owner_is_record: info.owner_is_record, + type_params: info.type_params.clone(), + fields, + }, + ) + }) + .collect() +} + /// Collect declarations and type-check a program before either caller consumes /// diagnostics or publishes inferred backend metadata. fn checked_program(program: &Program) -> Checker { @@ -1149,8 +1332,77 @@ fn checked_program_with_exports(program: &Program, exports: &[&str]) -> Checker checker.collect(program, &mut env); checker.check(program, &mut env); checker.resolve_deferred_arithmetic(); + loop { + checker.resolve_field_uses(); + let instances = effect_instances(&mut checker); + let errors = crate::effect_rows::check(program, &instances, exports); + if !refine_handler_arguments(&mut checker, &instances) { + checker.errors.extend(errors); + break; + } + } checker.validate_builtin_uses(); checker.validate_discards(); + checker.errors.extend(crate::init_order::check(program)); + checker +} + +/// Compose call substitutions through aliases before specializing effects. +fn resolved_instantiations(checker: &mut Checker) -> HashMap> { + let substitutions: HashMap<_, HashMap<_, _>> = checker + .instantiations + .iter() + .map(|(site, bindings)| { + ( + *site, + bindings + .iter() + .map(|(var, ty)| (*var, checker.ctx.apply(ty))) + .collect(), + ) + }) + .collect(); + substitutions + .iter() + .map(|(site, bindings)| { + ( + *site, + crate::applications::expanded(bindings, &substitutions), + ) + }) + .collect() +} + +/// Preserve open as well as closed argument types for handler refinement. +fn resolved_effect_arguments(checker: &mut Checker) -> Vec> { + checker + .perform_tys + .clone() + .into_iter() + .map(|(_, _, args)| { + args.iter() + .map(|arg| checker.ctx.apply(arg)) + .collect::>() + }) + .collect() +} + +/// Publish the current inference solution for the closed-program effect proof. +fn effect_instances(checker: &mut Checker) -> crate::effect_rows::Instances { + let substitutions = resolved_instantiations(checker); + let resolved_arguments = resolved_effect_arguments(checker); + let argument_types = resolved_arguments + .iter() + .cloned() + .chain(substitutions.values().flat_map(|bindings| { + resolved_arguments.iter().map(move |args| { + args.iter() + .map(|arg| crate::env::subst_vars(arg, bindings)) + .collect() + }) + })) + .map(|args| (args.iter().map(ToString::to_string).collect(), args)) + .collect(); let perform_tys = checker.perform_tys.clone(); let perform_actual_tys = checker.perform_actual_tys.clone(); let handler_tys = checker.handler_tys.clone(); @@ -1192,7 +1444,8 @@ fn checked_program_with_exports(program: &Program, exports: &[&str]) -> Checker let _ = performs.insert(key, candidates); } } - let instances = crate::effect_rows::Instances { + crate::effect_rows::Instances { + methods: checker.methods.clone(), performs, handlers: dedupe_sites(handler_tys.into_iter().map(|(position, arguments, _)| { ( @@ -1203,12 +1456,74 @@ fn checked_program_with_exports(program: &Program, exports: &[&str]) -> Checker .collect(), ) })), - }; - checker - .errors - .extend(crate::effect_rows::check(program, &instances, exports)); - checker.errors.extend(crate::init_order::check(program)); - checker + + argument_types, + instantiations: substitutions + .into_iter() + .map(|(site, bindings)| { + ( + site, + bindings + .into_iter() + .map(|(var, ty)| (Type::Var(var).to_string(), ty.to_string())) + .collect(), + ) + }) + .collect(), + binders: checker + .fn_typarams + .iter() + .map(|(name, binders)| { + ( + name.clone(), + binders + .iter() + .map(|(name, ty)| (name.clone(), checker.ctx.apply(ty).to_string())) + .collect(), + ) + }) + .collect(), + ..Default::default() + } +} + +/// A handler whose arms leave its binder open learns that binder from the +/// operations its body requires, including requirements behind function calls. +/// Only one candidate may refine it; incompatible instantiations stay +/// distinct and the ordinary discharge proof rejects the remaining operation. +fn refine_handler_arguments( + checker: &mut Checker, + instances: &crate::effect_rows::Instances, +) -> bool { + let before = checker.ctx.bound_count(); + let candidates = instances.handler_inference.borrow(); + for (position, arguments, _) in checker.handler_tys.clone() { + if arguments + .iter() + .all(|ty| type_is_resolved(&checker.ctx.apply(ty))) + { + continue; + } + let Some(choices) = candidates.get(&(position.line, position.column)) else { + continue; + }; + if choices.len() != 1 { + continue; + } + let Some(choice) = choices.first() else { + continue; + }; + if arguments.len() != choice.len() { + continue; + } + let Some(types) = instances.argument_types.get(choice) else { + continue; + }; + for (argument, concrete) in arguments.iter().zip(types) { + checker.push_unify(argument, concrete); + } + } + checker.ctx.bound_count() != before } /// The code generator's erased view assigns every declared generic parameter @@ -1308,7 +1623,7 @@ mod tests { use super::infer_program; use crate::check::check_program; use crate::error::TypeError; - use crate::testutil::{check, ok}; + use crate::testutil::{bad_with, check, ok}; use osprey_ast::{Expr, Stmt}; use osprey_syntax::parse_program; @@ -1389,28 +1704,26 @@ mod tests { assert!(errs.iter().any(|e| e.message.contains("type mismatch"))); // Module functions must run both declaration collection and body // checking; historically only module lets reached inference. - let errs = check( + bad_with( "module BadFn {\n\ fn broken() -> int = \"not an int\"\n\ }\n", + "type mismatch", ); - assert!(errs.iter().any(|e| e.message.contains("type mismatch"))); } #[test] fn a_discarded_result_statement_is_rejected() { // A bare statement whose value is a `Result` throws the failure away — // the one place the wrapper can vanish without anyone naming it. - let errs = check( + bad_with( "fn risky(n: int) -> Result = n + 1\n\ fn go() -> int = {\n\ risky(1)\n\ 0\n\ }\n", + "cannot be discarded", ); - assert!(errs - .iter() - .any(|e| e.message.contains("cannot be discarded"))); ok("fn risky(n: int) -> Result = n + 1\n\ fn go() -> int = {\n\ let handled = risky(1) ?: 0\n\ @@ -1725,10 +2038,7 @@ mod tests { let r = check(expect(test(1)))\n", ); assert!(errs.is_empty(), "unexpected type errors: {errs:?}"); - let errs = check("fn range(t: int) -> int = t\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("cannot redefine built-in"))); + bad_with("fn range(t: int) -> int = t\n", "cannot redefine built-in"); } #[test] diff --git a/crates/osprey-types/src/convert.rs b/crates/osprey-types/src/convert.rs index f641b621..065fe56c 100644 --- a/crates/osprey-types/src/convert.rs +++ b/crates/osprey-types/src/convert.rs @@ -11,7 +11,7 @@ use std::collections::HashMap; /// Convert a parsed `TypeExpr` into an inference type. `params` maps generic /// parameter names already bound to fresh variables for the enclosing decl. -pub fn type_expr_to_type(te: &TypeExpr, params: &HashMap) -> Type { +pub(crate) fn type_expr_to_type(te: &TypeExpr, params: &HashMap) -> Type { if te.is_function { let ps = te .parameter_types @@ -50,7 +50,7 @@ pub fn type_expr_to_type(te: &TypeExpr, params: &HashMap) -> Type /// `"Result"`, `"(int) -> bool"`) into a type. The shallow /// `Name<...>`, `[elem]` and function-arrow forms are recognised; that covers /// every field type used by the examples. -pub fn type_name_to_type(s: &str, params: &HashMap) -> Type { +pub(crate) fn type_name_to_type(s: &str, params: &HashMap) -> Type { let s = s.trim(); if let Some(var) = params.get(s) { return var.clone(); @@ -94,7 +94,7 @@ fn normalize_named(name: &str) -> Type { /// Parse an effect-operation / lambda type string `fn(p0, p1) -> ret` into /// inference types. Tolerant: a malformed string yields `() -> Unit`. -pub fn parse_fn_sig(s: &str, params: &HashMap) -> (Vec, Type) { +pub(crate) fn parse_fn_sig(s: &str, params: &HashMap) -> (Vec, Type) { let s = s.trim(); let s = s.strip_prefix("fn").map_or(s, str::trim_start).trim(); let Some(open) = s.find('(') else { @@ -145,6 +145,8 @@ fn split_generic_args(s: &str) -> Vec { for (i, ch) in s.char_indices() { match ch { '<' | '(' | '[' => depth += 1, + // The `>` in a function arrow does not close a generic argument. + '>' if s[..i].ends_with('-') => {} '>' | ')' | ']' => depth -= 1, ',' if depth == 0 => { out.push(s[start..i].trim().to_string()); diff --git a/crates/osprey-types/src/ctx.rs b/crates/osprey-types/src/ctx.rs index cc34292f..f59a0c29 100644 --- a/crates/osprey-types/src/ctx.rs +++ b/crates/osprey-types/src/ctx.rs @@ -7,35 +7,73 @@ use crate::ty::{Type, VarId}; use osprey_ast::Variance; use std::collections::{BTreeSet, HashMap}; +type RecordTemplate = (Vec, Vec<(String, String)>); + /// Holds every type variable's binding. Variable ids are indices into `subst`. #[derive(Debug, Default)] -pub struct InferCtx { +pub(crate) struct InferCtx { subst: Vec>, /// Type-constructor name → declared per-parameter variance, consulted by /// assignability so `Source` matches covariantly. Implements /// [TYPE-VARIANCE-ASSIGN]. variances: HashMap>, + /// Nominal record layouts, before instantiating their declaration binders. + records: HashMap, } impl InferCtx { /// Create an empty context with no allocated type variables. - pub fn new() -> InferCtx { + pub(crate) fn new() -> InferCtx { InferCtx::default() } /// Register a type constructor's declared per-parameter variance. - pub fn set_variance(&mut self, name: impl Into, variances: Vec) { + pub(crate) fn set_variance(&mut self, name: impl Into, variances: Vec) { let _ = self.variances.insert(name.into(), variances); } /// The declared per-parameter variance of a type constructor, if any. #[must_use] - pub fn variance_of(&self, name: &str) -> Option<&[Variance]> { + pub(crate) fn variance_of(&self, name: &str) -> Option<&[Variance]> { self.variances.get(name).map(Vec::as_slice) } + /// Register a record's generic field template [TYPE-GENERICS-DECL]. + pub(crate) fn set_record( + &mut self, + name: String, + params: Vec, + fields: Vec<(String, String)>, + ) { + let _ = self.records.insert(name, (params, fields)); + } + + /// Resolve a nominal record application to its instantiated fields. + pub(crate) fn record_fields( + &self, + name: &str, + args: &[Type], + ) -> Option> { + let (params, fields) = self.records.get(name)?; + if params.len() != args.len() { + return None; + } + let binder = params.iter().cloned().zip(args.iter().cloned()).collect(); + Some( + fields + .iter() + .map(|(field, ty)| { + ( + field.clone(), + crate::convert::type_name_to_type(ty, &binder), + ) + }) + .collect(), + ) + } + /// Allocate a fresh, unbound type variable. - pub fn fresh(&mut self) -> Type { + pub(crate) fn fresh(&mut self) -> Type { let id = VarId::try_from(self.subst.len()).unwrap_or(VarId::MAX); self.subst.push(None); Type::Var(id) @@ -44,7 +82,7 @@ impl InferCtx { /// Follow a variable to its representative, compressing the path. Only the /// outermost variable is resolved — nested types are left intact (use /// [`InferCtx::apply`] for a deep walk). - pub fn prune(&mut self, t: &Type) -> Type { + pub(crate) fn prune(&mut self, t: &Type) -> Type { if let Type::Var(id) = t { let idx = usize::try_from(*id).unwrap_or(usize::MAX); if let Some(bound) = self.subst.get(idx).and_then(Option::clone) { @@ -63,12 +101,12 @@ impl InferCtx { /// to learn" without diffing the whole substitution /// ([`crate::check::Checker::resolve_deferred_arithmetic`]). #[must_use] - pub fn bound_count(&self) -> usize { + pub(crate) fn bound_count(&self) -> usize { self.subst.iter().filter(|slot| slot.is_some()).count() } /// Bind a variable to a type. The caller guarantees the occurs-check passed. - pub fn bind(&mut self, id: VarId, t: Type) { + pub(crate) fn bind(&mut self, id: VarId, t: Type) { let idx = usize::try_from(id).unwrap_or(usize::MAX); if let Some(slot) = self.subst.get_mut(idx) { *slot = Some(t); @@ -77,7 +115,7 @@ impl InferCtx { /// The occurs check: does variable `id` appear anywhere in `t`? Prevents /// the construction of infinite types like `t0 ~ List`. - pub fn occurs(&mut self, id: VarId, t: &Type) -> bool { + pub(crate) fn occurs(&mut self, id: VarId, t: &Type) -> bool { let t = self.prune(t); match &t { Type::Var(v) => *v == id, @@ -92,7 +130,7 @@ impl InferCtx { /// Fully resolve `t` against the current substitution. The occurs-check /// keeps the substitution acyclic, so this terminates. - pub fn apply(&mut self, t: &Type) -> Type { + pub(crate) fn apply(&mut self, t: &Type) -> Type { let t = self.prune(t); match &t { Type::Var(_) => t, @@ -119,7 +157,7 @@ impl InferCtx { } /// Collect the free (unbound) variables of `t` into `out`. - pub fn free_vars(&mut self, t: &Type, out: &mut BTreeSet) { + pub(crate) fn free_vars(&mut self, t: &Type, out: &mut BTreeSet) { let t = self.prune(t); match &t { Type::Var(v) => { diff --git a/crates/osprey-types/src/effect_rows.rs b/crates/osprey-types/src/effect_rows.rs index 83378940..cc2f79fd 100644 --- a/crates/osprey-types/src/effect_rows.rs +++ b/crates/osprey-types/src/effect_rows.rs @@ -13,15 +13,26 @@ use osprey_ast::{ Expr, FieldAssignment, HandlerArm, InterpolatedPart, ModuleItem, NamedArgument, Pattern, Position, Program, Stmt, }; +use std::cell::RefCell; use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; +type HandlerCandidates = HashMap<(u32, u32), BTreeSet>>; + #[derive(Default)] pub(crate) struct Instances { + pub(crate) methods: crate::methods::Targets, /// A source position can identify more than one interpolation fragment. /// Preserve every independently inferred candidate instead of letting the /// final fragment overwrite the others. pub(crate) performs: HashMap<(u32, u32), Vec>>, pub(crate) handlers: HashMap<(u32, u32), Vec>, + /// Substituted operation arguments available to refine a handler. + pub(crate) argument_types: HashMap, Vec>, + /// Candidate instantiations required by each handler's body after calls + /// and callbacks have propagated through the closed-program summary. + pub(crate) handler_inference: RefCell, + pub(crate) instantiations: HashMap>, + pub(crate) binders: HashMap>, } #[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] @@ -50,6 +61,7 @@ struct ParameterUse { level: usize, index: usize, projection: Vec, + arguments: CallArguments, excluded: Requirements, } @@ -59,12 +71,44 @@ struct ParameterUse { #[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] enum Projection { Field(String), + Method(Box), + Returned(Box), Element, SuccessValue, FiberValue, } -#[derive(Clone, Debug, Default, Eq, PartialEq)] +/// A method on a symbolic receiver cannot select its UFCS fallback until the +/// receiver is substituted. The fallback is a zero-argument closure so its +/// effects and returned value keep the same lexical scope as the field call. +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +struct MethodProjection { + field: String, + arguments: Vec>, + named: Vec<(String, Option)>, + fallback: Value, +} + +/// Arguments belong to the caller until a symbolic callee is substituted. +/// Keep their provenance so a callback returning an argument or captured value +/// resolves to that value, rather than to the callback itself. +#[derive(Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] +struct CallArguments { + positional: Vec>, + named: Vec<(String, Option)>, +} + +impl CallArguments { + /// Function-value slots have no parameter names. Do this at the call site, + /// before substitution reveals a callback's declaration and its names. + fn in_written_order(mut self) -> Self { + self.positional + .extend(self.named.drain(..).map(|(_, value)| value)); + self + } +} + +#[derive(Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] struct Summary { required: Requirements, parameter_uses: BTreeSet, @@ -127,13 +171,33 @@ impl Summary { } fn widen(&mut self) { + self.widen_at(0); + } + + fn widen_at(&mut self, depth: usize) { let before = self.parameter_uses.len(); self.parameter_uses.retain(|use_| { - use_.level < MAX_PROVENANCE_DEPTH && use_.projection.len() < MAX_PROVENANCE_DEPTH + use_.level < MAX_PROVENANCE_DEPTH + && use_.projection.len() < MAX_PROVENANCE_DEPTH + && (depth < MAX_PROVENANCE_DEPTH + || (use_.arguments.positional.is_empty() + && use_.arguments.named.is_empty() + && !use_.projection.iter().any(|part| { + matches!(part, Projection::Method(_) | Projection::Returned(_)) + }))) }); if self.parameter_uses.len() != before { self.unresolved_dynamic_call = true; } + self.parameter_uses = std::mem::take(&mut self.parameter_uses) + .into_iter() + .map(|mut use_| { + map_parameter_use_values(&mut use_, |value| { + *value = widen_value(value.clone(), depth + 1); + }); + use_ + }) + .collect(); } } @@ -146,19 +210,19 @@ struct DeclaredEffect { } #[derive(Clone)] -struct Function { +struct Function<'a> { name: String, qualified: String, scope: Vec, parameters: Vec, declared_effects: Vec, - body: Expr, + body: &'a Expr, position: Option, } #[derive(Default)] -struct Index { - functions: Vec, +struct Index<'a> { + functions: Vec>, qualified: HashMap, bare: HashMap>, effects: HashMap, @@ -168,14 +232,14 @@ struct Index { externs: HashSet, } -impl Index { - fn collect(program: &Program) -> Self { +impl<'a> Index<'a> { + fn collect(program: &'a Program) -> Self { let mut index = Self::default(); index.collect_stmts(&program.statements, &[]); index } - fn collect_stmts(&mut self, statements: &[Stmt], scope: &[String]) { + fn collect_stmts(&mut self, statements: &'a [Stmt], scope: &[String]) { for statement in statements { match statement { Stmt::Extern { name, .. } => { @@ -215,7 +279,7 @@ impl Index { }), }) .collect(), - body: body.clone(), + body, position: *position, }); let _ = self.qualified.insert(qualified, id); @@ -253,7 +317,7 @@ impl Index { } } - fn collect_module_items(&mut self, items: &[ModuleItem], scope: &[String]) { + fn collect_module_items(&mut self, items: &'a [ModuleItem], scope: &[String]) { for item in items { self.collect_stmts(std::slice::from_ref(item.declaration.as_ref()), scope); } @@ -286,14 +350,14 @@ fn qualify(scope: &[String], name: &str) -> String { } } -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] struct KnownCallable { parameters: Vec, summary: Summary, returned: Option>, } -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] enum Callable { Known(Box), Unknown, @@ -308,9 +372,12 @@ enum Callable { /// lattice instead of an enum: a control-flow join may produce a callable in /// one arm and a record/list in another, and discarding either provenance /// would make an effect escape possible. -#[derive(Clone, Debug, Default, Eq, PartialEq)] +#[derive(Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] struct Value { callable: Option, + /// `Some` proves which fields exist, even when their values have no + /// callable provenance. `None` must never justify choosing a free function. + field_names: Option>, fields: BTreeMap, element: Option>, result_payload: Option>, @@ -322,6 +389,7 @@ struct Value { impl Value { fn from_callable(callable: Callable) -> Self { Self { + field_names: matches!(callable, Callable::Known(_)).then(BTreeSet::new), callable: Some(callable), ..Self::default() } @@ -346,16 +414,24 @@ impl Value { fn channel(site: usize) -> Self { Self { channel_sites: [site].into_iter().collect(), + field_names: Some(BTreeSet::new()), ..Self::default() } } fn union(&mut self, other: Self) { + if self.field_names != other.field_names { + self.field_names = None; + } if let Some(callable) = other.callable { merge_callable(&mut self.callable, callable); } for (name, value) in other.fields { - merge_value(self.fields.entry(name).or_default(), value); + let _ = self + .fields + .entry(name) + .and_modify(|slot| slot.union(value.clone())) + .or_insert(value); } if let Some(element) = other.element { merge_boxed_value(&mut self.element, *element); @@ -376,6 +452,9 @@ struct CallableEnv { values: HashMap, shadowed: HashSet, channel_payloads: BTreeMap, + /// Results supplied by handlers active while this expression evaluates. + /// These are dynamic bindings, never captures of a newly created closure. + handler_returns: BTreeMap, } impl CallableEnv { @@ -392,6 +471,7 @@ impl CallableEnv { fn enter_lambda(&self, parameters: &[String]) -> Self { let mut env = self.clone(); + env.handler_returns.clear(); for value in env.values.values_mut() { shift_value_levels(value, 1, 0); } @@ -404,7 +484,7 @@ impl CallableEnv { } struct Analyzer<'a> { - index: &'a Index, + index: &'a Index<'a>, rows: &'a [Summary], returns: &'a [Option], instances: &'a Instances, @@ -470,17 +550,17 @@ impl Analyzer<'_> { env } - fn function_body(&self, function: &Function) -> Summary { + fn function_body(&self, function: &Function<'_>) -> Summary { self.expression( - &function.body, + function.body, &function.scope, &self.scoped_env(&function.parameters), ) } - fn function_return(&self, function: &Function) -> Option { + fn function_return(&self, function: &Function<'_>) -> Option { let mut env = self.scoped_env(&function.parameters); - self.returned_value(&function.body, &function.scope, &mut env) + self.returned_value(function.body, &function.scope, &mut env) } fn returned_value( @@ -537,11 +617,7 @@ impl Analyzer<'_> { Expr::Object(fields) | Expr::TypeConstructor { fields, .. } | Expr::Update { fields, .. } => { - let mut out = Summary::default(); - for field in fields { - out.union(self.expression(&field.value, scope, env)); - } - out + self.union_over(fields.iter().map(|field| &field.value), scope, env) } Expr::Binary { left, right, .. } => { let mut out = self.expression(left, scope, env); @@ -549,7 +625,7 @@ impl Analyzer<'_> { out } Expr::Pipe { left, right } => self.pipe_call(left, right, scope, env), - Expr::Unary { operand, .. } + Expr::TypeApply { function: operand, .. } | Expr::Unary { operand, .. } | Expr::FieldAccess { target: operand, .. } @@ -572,16 +648,24 @@ impl Analyzer<'_> { function, arguments, named_arguments, - } => self.call(function, arguments, named_arguments, scope, env), + } => match crate::methods::parts(expression) { + Some(parts) => self.method_call(expression, &parts, scope, env), + None => self.call(function, arguments, named_arguments, scope, env), + }, Expr::MethodCall { target, method, arguments, named_arguments, - } => self.call( - &Expr::Identifier(method.clone()), - &receiver_first(target, arguments), - named_arguments, + } => self.method_call( + expression, + &crate::methods::Parts { + target, + method, + arguments, + named: named_arguments, + application: None, + }, scope, env, ), @@ -596,11 +680,7 @@ impl Analyzer<'_> { out } Expr::Select { arms } => { - let mut out = Summary::default(); - for arm in arms { - out.union(self.expression(&arm.body, scope, env)); - } - out + self.union_over(arms.iter().map(|arm| &arm.body), scope, env) } Expr::Block { statements, value } => { let mut local = env.clone(); @@ -646,7 +726,17 @@ impl Analyzer<'_> { &self.instances.handlers, "handler", ); - let mut out = self.expression(body, scope, env).without_operations( + let local = self.handler_body_env(effect, arms, body, *position, scope, env); + let body_summary = self.expression(body, scope, &local); + if let Some(position) = position { + let candidates = body_summary.required.iter().filter(|requirement| { + requirement.effect == *effect && handled.contains(&requirement.operation) + && self.instances.argument_types.contains_key(&requirement.arguments) + }).map(|requirement| requirement.arguments.clone()); + self.instances.handler_inference.borrow_mut() + .entry((position.line, position.column)).or_default().extend(candidates); + } + let mut out = body_summary.without_operations( effect, &effect_arguments, &handled, @@ -671,16 +761,30 @@ impl Analyzer<'_> { let mut out = self.expression(function, scope, env); out.union(self.expressions(arguments, scope, env)); out.union(self.named_expressions(named_arguments, scope, env)); + out.union(self.call_effects(function, arguments, named_arguments, scope, env)); + out + } + fn call_effects( + &self, + function: &Expr, + arguments: &[Expr], + named_arguments: &[NamedArgument], + scope: &[String], + env: &CallableEnv, + ) -> Summary { + let mut out = Summary::default(); if let Some(callee) = self.callable(function, scope, env) { - out.union(self.invoke(callee, arguments, named_arguments, scope, env)); + let arguments = + self.callsite_arguments(function, arguments, named_arguments, scope, env); + out.union(self.invoke_with_arguments(callee, arguments)); } else if !statically_named_callee(function, env, self.index) { // A computed value that successfully type-checks as a function must // carry effect provenance. If an unsupported transport erased that // provenance, fail closed instead of assuming the call is pure. out.unresolved_dynamic_call = true; } - if let Some(name) = expression_name(function) { + if let Some(name) = self.builtin_callee(function, scope, env) { if iterator_consumer(name) { if let Some(iterator) = arguments .first() @@ -692,7 +796,7 @@ impl Analyzer<'_> { for index in eager_callback_slots(name) { if let Some(argument) = arguments.get(*index) { if let Some(callback) = self.callable(argument, scope, env) { - out.union(self.invoke(callback, &[], &[], scope, env)); + out.union(self.invoke_with_values(callback, &[])); } } } @@ -700,26 +804,220 @@ impl Analyzer<'_> { out } - fn invoke( + fn method_call( &self, - callee: Callable, - arguments: &[Expr], - named_arguments: &[NamedArgument], + expression: &Expr, + parts: &crate::methods::Parts<'_>, scope: &[String], env: &CallableEnv, ) -> Summary { - let parameters: &[String] = match &callee { - Callable::Known(known) => &known.parameters, - Callable::Parameter { .. } | Callable::Unknown => &[], + let site = std::ptr::from_ref(expression).addr(); + let mut out = match self.instances.methods.get(&site) { + Some(crate::methods::Target::Field(field)) => { + let mut out = self.expression(parts.target, scope, env); + out.union(self.expressions(parts.arguments, scope, env)); + out.union(self.named_expressions(parts.named, scope, env)); + let callee = self + .value(parts.target, scope, env) + .and_then(|value| project_field(value, field)) + .and_then(|value| value.callable); + if let Some(callee) = callee { + let arguments = self + .call_arguments(parts.arguments, parts.named, scope, env) + .in_written_order(); + out.union(self.invoke_with_arguments(callee, arguments)); + } else { + out.unresolved_dynamic_call = true; + } + out + } + Some(crate::methods::Target::Deferred(field)) => { + let mut out = self.expression(parts.target, scope, env); + out.union(self.expressions(parts.arguments, scope, env)); + out.union(self.named_expressions(parts.named, scope, env)); + let callee = self + .deferred_method(parts, field, scope, env) + .and_then(|value| value.callable); + if let Some(callee) = callee { + out.union(self.invoke_with_values(callee, &[])); + } else { + out.unresolved_dynamic_call = true; + } + out + } + Some(crate::methods::Target::Function) | None => self.call( + &Expr::Identifier(parts.method.to_owned()), + &receiver_first(parts.target, parts.arguments), + parts.named, + scope, + env, + ), }; - let values = self.argument_values(parameters, arguments, named_arguments, scope, env); - self.invoke_with_values(callee, &values) + if let Some(bindings) = self.instances.instantiations.get(&site) { + specialize_summary(&mut out, bindings); + } + out + } + + fn deferred_method( + &self, + parts: &crate::methods::Parts<'_>, + field: &str, + scope: &[String], + env: &CallableEnv, + ) -> Option { + let function = Expr::Identifier(parts.method.to_owned()); + let arguments = receiver_first(parts.target, parts.arguments); + let fallback = method_thunk( + self.call_effects(&function, &arguments, parts.named, scope, env), + self.call_value(&function, &arguments, parts.named, scope, env), + ); + let method = MethodProjection { + field: field.to_owned(), + arguments: parts + .arguments + .iter() + .map(|argument| self.value(argument, scope, env)) + .collect(), + named: parts + .named + .iter() + .map(|argument| { + ( + argument.name.clone(), + self.value(&argument.value, scope, env), + ) + }) + .collect(), + fallback, + }; + self.value(parts.target, scope, env) + .and_then(|value| self.project_method(value, method)) + } + + fn project_method(&self, mut receiver: Value, method: MethodProjection) -> Option { + let mut projected = if let Some(value) = receiver.fields.remove(&method.field) { + value.callable.map(|callee| { + let arguments = CallArguments { + positional: method.arguments.clone(), + named: method.named.clone(), + } + .in_written_order(); + // A field can hold a caller's symbolic callback. Retain its + // returned-value projection until that callback is supplied. + method_thunk( + self.invoke_with_arguments(callee.clone(), arguments.clone()), + self.project_call_return(Value::from_callable(callee), arguments), + ) + }) + } else if receiver + .field_names + .as_ref() + .is_some_and(|fields| !fields.contains(&method.field)) + { + Some(method.fallback.clone()) + } else { + None + }; + if receiver.field_names.is_none() { + project_callable( + receiver.callable, + Projection::Method(Box::new(method)), + &mut projected, + ); + } + projected + } + + fn method_value( + &self, + expression: &Expr, + parts: &crate::methods::Parts<'_>, + scope: &[String], + env: &CallableEnv, + ) -> Option { + match self + .instances + .methods + .get(&std::ptr::from_ref(expression).addr()) + { + Some(crate::methods::Target::Field(field)) => { + let callee = self + .value(parts.target, scope, env) + .and_then(|value| project_field(value, field)) + .and_then(|value| value.callable); + let arguments = self + .call_arguments(parts.arguments, parts.named, scope, env) + .in_written_order(); + self.called_value(callee, arguments) + } + Some(crate::methods::Target::Deferred(field)) => self + .deferred_method(parts, field, scope, env) + .and_then(|value| self.project_returned(value)), + Some(crate::methods::Target::Function) | None => self.call_value( + &Expr::Identifier(parts.method.to_owned()), + &receiver_first(parts.target, parts.arguments), + parts.named, + scope, + env, + ), + } + } + + fn project_path(&self, mut value: Value, path: &[Projection]) -> Option { + for projection in path { + value = match projection { + Projection::Field(field) => project_field(value, field), + Projection::Method(method) => self.project_method(value, *method.clone()), + Projection::Returned(arguments) => { + self.project_call_return(value, *arguments.clone()) + } + Projection::Element => project_element(value), + Projection::SuccessValue => project_success_value(value), + Projection::FiberValue => project_fiber_value(value), + }?; + } + Some(value) + } + + fn project_returned(&self, value: Value) -> Option { + self.project_call_return(value, CallArguments::default()) + } + + fn project_call_return(&self, mut value: Value, arguments: CallArguments) -> Option { + if let Some(Callable::Known(known)) = &mut value.callable { + let values = ordered_values(&known.parameters, &arguments.positional, &arguments.named); + return known + .returned + .take() + .map(|returned| self.substitute_value_at(*returned, 0, &values)) + .or_else(|| Some(Value::default())); + } + let mut projected = None; + project_callable( + value.callable, + Projection::Returned(Box::new(arguments)), + &mut projected, + ); + projected } fn invoke_with_values(&self, callee: Callable, arguments: &[Option]) -> Summary { + self.invoke_with_arguments( + callee, + CallArguments { + positional: arguments.to_vec(), + named: Vec::new(), + }, + ) + } + + fn invoke_with_arguments(&self, callee: Callable, arguments: CallArguments) -> Summary { match callee { Callable::Known(known) => { - self.substitute_summary_at(known.summary.clone(), 0, arguments) + let values = + ordered_values(&known.parameters, &arguments.positional, &arguments.named); + self.substitute_summary_at(known.summary.clone(), 0, &values) } Callable::Unknown => Summary { unresolved_dynamic_call: true, @@ -735,6 +1033,7 @@ impl Analyzer<'_> { level, index, projection, + arguments, excluded: Requirements::new(), }] .into_iter() @@ -744,30 +1043,6 @@ impl Analyzer<'_> { } } - fn argument_values( - &self, - parameters: &[String], - arguments: &[Expr], - named_arguments: &[NamedArgument], - scope: &[String], - env: &CallableEnv, - ) -> Vec> { - let mut values = vec![None; parameters.len().max(arguments.len())]; - for (index, argument) in arguments.iter().enumerate() { - if let Some(slot) = values.get_mut(index) { - *slot = self.value(argument, scope, env); - } - } - for argument in named_arguments { - if let Some(index) = parameters.iter().position(|name| name == &argument.name) { - if let Some(slot) = values.get_mut(index) { - *slot = self.value(&argument.value, scope, env); - } - } - } - values - } - fn call_value( &self, function: &Expr, @@ -776,22 +1051,35 @@ impl Analyzer<'_> { scope: &[String], env: &CallableEnv, ) -> Option { - if let Some(name) = expression_name(function) { + if let Some(name) = self.builtin_callee(function, scope, env) { if let Some(value) = self.builtin_call_value(name, arguments, scope, env) { return Some(value); } } - // A PARTIAL application of a parameter is still that parameter being - // invoked: `f a b` curries to `Call(Call(f, [a]), [b])` - // ([FLAVOR-ML-CURRY]), and the effect requirement belongs to `f` - // whichever spelling reaches here. Dropping the callable at the inner - // call left the outer one with a `Call` head, which no rule can name, - // so the whole entry was reported unprovable. + // Preserve each application in a curried spine: its result can be a + // returned closure or aggregate with different effects from its maker. let resolved = self.callable(function, scope, env); - if let Some(parameter @ Callable::Parameter { .. }) = resolved { - return Some(Value::from_callable(parameter)); - } - let Some(Callable::Known(known)) = resolved else { + let arguments = self.callsite_arguments(function, arguments, named_arguments, scope, env); + self.called_value(resolved, arguments) + } + + /// Builtin behavior belongs to the resolved binding, not its spelling. + /// Local values and user functions may shadow callable builtin names. + fn builtin_callee<'b>( + &self, + function: &'b Expr, + scope: &[String], + env: &CallableEnv, + ) -> Option<&'b str> { + let name = expression_name(function)?; + (!env.shadowed.contains(name) + && !env.values.contains_key(name) + && self.index.resolve(scope, name).is_none()) + .then_some(name) + } + + fn called_value(&self, resolved: Option, arguments: CallArguments) -> Option { + let Some(callee @ (Callable::Known(_) | Callable::Parameter { .. })) = resolved else { // The RESULT of a call we cannot resolve is not thereby a callable. // This branch catches every builtin without a modelled value // (`print`, `listAppend`, …), whose result is plain data; calling @@ -801,22 +1089,47 @@ impl Analyzer<'_> { // `statically_named_callee` and is reported at that call. return Some(Value::default()); }; - let arguments = - self.argument_values(&known.parameters, arguments, named_arguments, scope, env); - known - .returned - .as_deref() - .cloned() - .map(|returned| self.substitute_value_at(returned, 0, &arguments)) - // A known callee with no recorded return provenance says nothing - // about whether its RESULT is callable — most such results are - // ordinary data, and `returned` is also what the depth cutoff drops - // first. Yielding a provenance-free value keeps that distinction: - // it stays fail-closed, because invoking a value with no callable - // still fails `statically_named_callee` at the call and is reported - // there, while an `int` that is merely returned no longer poisons - // every merge it flows into with an unresolved-callable verdict. - .or_else(|| Some(Value::default())) + self.project_call_return(Value::from_callable(callee), arguments) + } + + fn callsite_arguments( + &self, + function: &Expr, + arguments: &[Expr], + named: &[NamedArgument], + scope: &[String], + env: &CallableEnv, + ) -> CallArguments { + let arguments = self.call_arguments(arguments, named, scope, env); + if source_named_callee(function, scope, env, self.index) { + arguments + } else { + arguments.in_written_order() + } + } + + fn call_arguments( + &self, + arguments: &[Expr], + named: &[NamedArgument], + scope: &[String], + env: &CallableEnv, + ) -> CallArguments { + CallArguments { + positional: arguments + .iter() + .map(|argument| self.value(argument, scope, env)) + .collect(), + named: named + .iter() + .map(|argument| { + ( + argument.name.clone(), + self.value(&argument.value, scope, env), + ) + }) + .collect(), + } } fn builtin_call_value( @@ -834,10 +1147,14 @@ impl Analyzer<'_> { }; let aggregate = |element: Option| Value { element: element.map(Box::new), + field_names: Some(BTreeSet::new()), ..Value::default() }; Some(match name { - "range" | "List" | "Map" => Value::default(), + "range" | "List" | "Map" => Value { + field_names: Some(BTreeSet::new()), + ..Value::default() + }, "map" | "filter" => self.lazy_iterator_value(name, arguments, scope, env), "mapList" | "filterList" => { let mut value = self.lazy_iterator_value(name, arguments, scope, env); @@ -880,7 +1197,7 @@ impl Analyzer<'_> { aggregate(merged) } "mapValues" => aggregate(element(0)), - _ => return None, + _ => return builtin_return_shape(name), }) } @@ -919,6 +1236,7 @@ impl Analyzer<'_> { Value { element: element.map(Box::new), deferred, + field_names: Some(BTreeSet::new()), ..Value::default() } } @@ -978,12 +1296,33 @@ impl Analyzer<'_> { payload } + fn value(&self, expression: &Expr, scope: &[String], env: &CallableEnv) -> Option { + let mut value = self.raw_value(expression, scope, env)?; + if let Some(bindings) = self + .instances + .instantiations + .get(&std::ptr::from_ref(expression).addr()) + { + specialize_value(&mut value, bindings); + } + Some(value) + } + #[expect( clippy::too_many_lines, reason = "value provenance mirrors the exhaustive expression fold" )] - fn value(&self, expression: &Expr, scope: &[String], env: &CallableEnv) -> Option { + fn raw_value(&self, expression: &Expr, scope: &[String], env: &CallableEnv) -> Option { match expression { + Expr::Integer(_) + | Expr::Float(_) + | Expr::Str(_) + | Expr::Bool(_) + | Expr::InterpolatedStr(_) => Some(Value { + field_names: Some(BTreeSet::new()), + ..Value::default() + }), + Expr::TypeApply { function, .. } => self.value(function, scope, env), Expr::Identifier(name) => { if let Some(value) = env.values.get(name) { return Some(value.clone()); @@ -1024,8 +1363,9 @@ impl Analyzer<'_> { merge_optional_value(&mut element, value); } } - element.map(|element| Value { - element: Some(Box::new(element)), + Some(Value { + element: element.map(Box::new), + field_names: Some(BTreeSet::new()), ..Value::default() }) } @@ -1036,8 +1376,9 @@ impl Analyzer<'_> { merge_optional_value(&mut element, value); } } - element.map(|element| Value { - element: Some(Box::new(element)), + Some(Value { + element: element.map(Box::new), + field_names: Some(BTreeSet::new()), ..Value::default() }) } @@ -1059,7 +1400,7 @@ impl Analyzer<'_> { // Ordered after the shadowed-constructor guard above: a shadowed // name is a record update, not a fresh record. Expr::Object(fields) | Expr::TypeConstructor { fields, .. } => { - self.record_value(fields, scope, env) + Some(self.record_value(fields, scope, env)) } Expr::Update { record, fields } => { let mut updated = self @@ -1083,6 +1424,7 @@ impl Analyzer<'_> { ..Value::default() }), Expr::Spawn(value) => Some(Value { + field_names: Some(BTreeSet::new()), fiber_payload: Some(Box::new( self.value(value, scope, env) .unwrap_or_else(Value::unknown_callable), @@ -1112,20 +1454,51 @@ impl Analyzer<'_> { function, arguments, named_arguments, - } => self.call_value(function, arguments, named_arguments, scope, env), + } => match crate::methods::parts(expression) { + Some(parts) => self.method_value(expression, &parts, scope, env), + None => self.call_value(function, arguments, named_arguments, scope, env), + }, Expr::MethodCall { target, method, arguments, named_arguments, - } => self.call_value( - &Expr::Identifier(method.clone()), - &receiver_first(target, arguments), - named_arguments, + } => self.method_value( + expression, + &crate::methods::Parts { + target, + method, + arguments, + named: named_arguments, + application: None, + }, scope, env, ), Expr::Pipe { left, right } => self.pipe_value(left, right, scope, env), + Expr::Perform { + effect, + operation, + position, + .. + } => { + let mut merged = None; + for arguments in self.perform_instance_arguments(effect, *position) { + let requirement = Requirement { + effect: effect.clone(), + operation: operation.clone(), + arguments, + }; + if let Some(value) = env.handler_returns.get(&requirement) { + merge_optional_value(&mut merged, value.clone()); + } else { + // A missing candidate cannot be supplied by a different + // generic instance of this operation. + merge_optional_value(&mut merged, Value::unknown_callable()); + } + } + merged + } Expr::Match { value, arms } => { let matched = self.value(value, scope, env); let mut merged = None; @@ -1141,9 +1514,14 @@ impl Analyzer<'_> { // A handler governs evaluation of its body, not later use of a // value produced by that body or one of its operation arms. Expr::Handler { - effect, arms, body, .. + effect, + arms, + body, + position, + .. } => { - let mut merged = self.value(body, scope, env); + let local = self.handler_body_env(effect, arms, body, *position, scope, env); + let mut merged = self.value(body, scope, &local); for arm in arms { let local = self.handler_arm_env(effect, arm, body, scope, env); if let Some(value) = self.value(&arm.body, scope, &local) { @@ -1173,16 +1551,15 @@ impl Analyzer<'_> { } } - /// Record-shaped literals — an object literal and a type constructor — - /// carry the same value information: only the fields whose value is itself - /// inferable. A record with nothing inferable tells the pass nothing, so it - /// yields `None` rather than an empty record that would mask a callable. + /// Keep the complete field set independently of callable provenance: an + /// opaque field is not evidence that a same-named free function should run. fn record_value( &self, fields: &[FieldAssignment], scope: &[String], env: &CallableEnv, - ) -> Option { + ) -> Value { + let field_names = Some(fields.iter().map(|field| field.name.clone()).collect()); let fields: BTreeMap<_, _> = fields .iter() .filter_map(|field| { @@ -1190,10 +1567,11 @@ impl Analyzer<'_> { .map(|value| (field.name.clone(), value)) }) .collect(); - (!fields.is_empty()).then_some(Value { + Value { + field_names, fields, ..Value::default() - }) + } } fn function_value(&self, id: usize) -> Value { @@ -1286,16 +1664,19 @@ impl Analyzer<'_> { ) -> Summary { let uses = std::mem::take(&mut summary.parameter_uses); for mut use_ in uses { + map_parameter_use_values(&mut use_, |value| { + *value = self.substitute_value_at(value.clone(), target_level, arguments); + }); if use_.level == target_level { let callback = arguments .get(use_.index) .and_then(Option::as_ref) .cloned() - .and_then(|value| project_path(value, &use_.projection)) + .and_then(|value| self.project_path(value, &use_.projection)) .and_then(|value| value.callable); if let Some(callback) = callback { let mut invoked = self - .invoke_with_values(callback, &[]) + .invoke_with_arguments(callback, use_.arguments) .excluding(&use_.excluded); shift_summary_levels(&mut invoked, target_level); summary.union(invoked); @@ -1334,10 +1715,26 @@ impl Analyzer<'_> { target_level: usize, arguments: &[Option], ) -> Value { + // Substitute the callee's children before inserting caller provenance. + // A replacement already belongs to the caller: walking it again can + // replace its parameter with itself indefinitely for nested records, + // and can also attribute a callback to the wrong lexical binder. + for nested in value.fields.values_mut() { + *nested = self.substitute_value_at(nested.clone(), target_level, arguments); + } + self.substitute_payload_at(&mut value.element, target_level, arguments); + self.substitute_payload_at(&mut value.result_payload, target_level, arguments); + self.substitute_payload_at(&mut value.fiber_payload, target_level, arguments); + value.deferred = self.substitute_summary_at(value.deferred, target_level, arguments); + if let Some(Callable::Parameter { projection, .. }) = &mut value.callable { + map_projection_values(projection, |value| { + *value = self.substitute_value_at(value.clone(), target_level, arguments); + }); + } if let Some(callable) = value.callable.take() { match callable { Callable::Parameter { - mut level, + level, index, projection, } if level == target_level => { @@ -1345,17 +1742,22 @@ impl Analyzer<'_> { .get(index) .and_then(Option::as_ref) .cloned() - .and_then(|argument| project_path(argument, &projection)) + .and_then(|argument| self.project_path(argument, &projection)) { shift_value_levels(&mut replacement, target_level, 0); + value.field_names.clone_from(&replacement.field_names); value.union(replacement); - } else { - level = target_level.saturating_sub(1); + } else if index >= arguments.len() { + // Only an absent argument keeps the original binder. + // A supplied opaque value or failed projection must + // never be resolved through an unrelated caller slot. value.callable = Some(Callable::Parameter { level, index, projection, }); + } else { + value.callable = Some(Callable::Unknown); } } Callable::Parameter { @@ -1383,13 +1785,6 @@ impl Analyzer<'_> { Callable::Unknown => value.callable = Some(Callable::Unknown), } } - for nested in value.fields.values_mut() { - *nested = self.substitute_value_at(nested.clone(), target_level, arguments); - } - self.substitute_payload_at(&mut value.element, target_level, arguments); - self.substitute_payload_at(&mut value.result_payload, target_level, arguments); - self.substitute_payload_at(&mut value.fiber_payload, target_level, arguments); - value.deferred = self.substitute_summary_at(value.deferred, target_level, arguments); value } @@ -1441,6 +1836,37 @@ impl Analyzer<'_> { local } + fn handler_body_env( + &self, + effect: &str, + arms: &[HandlerArm], + body: &Expr, + position: Option, + scope: &[String], + env: &CallableEnv, + ) -> CallableEnv { + let arguments = + self.instance_arguments(effect, position, &self.instances.handlers, "handler"); + let mut local = env.clone(); + for arm in arms { + // Arms execute outside this handler, so resolve their returned + // values using only the outer handler environment. + let mut arm_env = self.handler_arm_env(effect, arm, body, scope, env); + let value = self + .returned_value(&arm.body, scope, &mut arm_env) + .unwrap_or_else(Value::unknown_callable); + let _ = local.handler_returns.insert( + Requirement { + effect: effect.to_owned(), + operation: arm.operation.clone(), + arguments: arguments.clone(), + }, + value, + ); + } + local + } + #[expect( clippy::too_many_arguments, reason = "operation payload provenance needs the lexical effect, arm, and value environment" @@ -1490,55 +1916,67 @@ impl Analyzer<'_> { fn statements(&self, statements: &[Stmt], scope: &[String], env: &mut CallableEnv) -> Summary { let mut out = Summary::default(); for statement in statements { - match statement { - Stmt::Let { name, value, .. } => { - out.union(self.expression(value, scope, env)); - self.flow_callable_assignments(value, scope, env); - let _ = env.shadowed.insert(name.clone()); - if let Some(provenance) = self.value(value, scope, env) { - let _ = env.values.insert(name.clone(), provenance); - } else { - let _ = env.values.remove(name); - } - } - Stmt::Assignment { name, value, .. } => { - out.union(self.expression(value, scope, env)); - self.flow_callable_assignments(value, scope, env); - if let Some(provenance) = self.value(value, scope, env) { - let _ = env.values.insert(name.clone(), provenance); - } else { - let _ = env.values.remove(name); - } + // `let`, assignment and a bare expression all analyse their value + // and flow its callable assignments; only the two binding forms go + // on to re-point the name. The shadow mark lands AFTER the value is + // analysed, so `let x = f(x)` still sees the outer `x`. + let (name, value) = match statement { + Stmt::Let { name, value, .. } | Stmt::Assignment { name, value, .. } => { + (Some(name), value) } - Stmt::Expr { value, .. } => { - out.union(self.expression(value, scope, env)); - self.flow_callable_assignments(value, scope, env); - } - _ => {} + Stmt::Expr { value, .. } => (None, value), + _ => continue, + }; + out.union(self.expression(value, scope, env)); + self.flow_callable_assignments(value, scope, env); + if let Stmt::Let { name, .. } = statement { + let _ = env.shadowed.insert(name.clone()); + } + if let Some(name) = name { + self.rebind_value(name, value, scope, env); } } out } - fn expressions(&self, expressions: &[Expr], scope: &[String], env: &CallableEnv) -> Summary { + /// Re-point `name` at the provenance of its new `value`, forgetting the old + /// binding when the value carries none — the rebind `let` and assignment + /// share. + fn rebind_value(&self, name: &str, value: &Expr, scope: &[String], env: &mut CallableEnv) { + if let Some(provenance) = self.value(value, scope, env) { + let _ = env.values.insert(name.to_owned(), provenance); + } else { + let _ = env.values.remove(name); + } + } + + /// The union of the rows every expression in `exprs` contributes. Every + /// aggregate form performs this same fold — they differ only in what they + /// hold their expressions in, so each passes its own projection. + fn union_over<'e>( + &self, + exprs: impl IntoIterator, + scope: &[String], + env: &CallableEnv, + ) -> Summary { let mut out = Summary::default(); - for expression in expressions { - out.union(self.expression(expression, scope, env)); + for expr in exprs { + out.union(self.expression(expr, scope, env)); } out } + fn expressions(&self, expressions: &[Expr], scope: &[String], env: &CallableEnv) -> Summary { + self.union_over(expressions, scope, env) + } + fn named_expressions( &self, arguments: &[NamedArgument], scope: &[String], env: &CallableEnv, ) -> Summary { - let mut out = Summary::default(); - for argument in arguments { - out.union(self.expression(&argument.value, scope, env)); - } - out + self.union_over(arguments.iter().map(|argument| &argument.value), scope, env) } } @@ -1553,12 +1991,33 @@ fn receiver_first(receiver: &Expr, arguments: &[Expr]) -> Vec { fn expression_name(expression: &Expr) -> Option<&str> { match expression { + Expr::TypeApply { function, .. } => expression_name(function), Expr::Identifier(name) => Some(name), Expr::Path(path) => path.last(), _ => None, } } +/// Only a declaration resolved at this call site supplies parameter names. +/// A tracked callback can be known while still being called through a slot. +fn source_named_callee( + expression: &Expr, + scope: &[String], + env: &CallableEnv, + index: &Index<'_>, +) -> bool { + match expression { + Expr::TypeApply { function, .. } => source_named_callee(function, scope, env, index), + Expr::Identifier(name) => { + !env.shadowed.contains(name) + && !env.values.contains_key(name) + && index.resolve(scope, name).is_some() + } + Expr::Path(path) => index.resolve(scope, &path.to_string()).is_some(), + _ => false, + } +} + /// Whether a callee this pass could not resolve is nonetheless known to be /// effect-free, so the call may be skipped instead of failing closed. /// @@ -1569,8 +2028,9 @@ fn expression_name(expression: &Expr) -> Option<&str> { /// Trusting every unshadowed name let `let siren = ring` / `fn relay() = /// siren()` type-check with `Alarm.ring` never handled, because the call /// contributed nothing at all, not even a provenance failure. -fn statically_named_callee(expression: &Expr, env: &CallableEnv, index: &Index) -> bool { +fn statically_named_callee(expression: &Expr, env: &CallableEnv, index: &Index<'_>) -> bool { match expression { + Expr::TypeApply { function, .. } => statically_named_callee(function, env, index), Expr::Identifier(name) => { !env.shadowed.contains(name) && (crate::builtins::builtin_signature(name).is_some() @@ -1671,16 +2131,112 @@ fn project_callable(callable: Option, next: Projection, projected: &mu merge_optional_value(projected, Value::from_callable(callable)); } -fn project_path(mut value: Value, path: &[Projection]) -> Option { - for projection in path { - value = match projection { - Projection::Field(field) => project_field(value, field), - Projection::Element => project_element(value), - Projection::SuccessValue => project_success_value(value), - Projection::FiberValue => project_fiber_value(value), - }?; +fn method_thunk(mut summary: Summary, mut returned: Option) -> Value { + shift_summary_levels(&mut summary, 1); + if let Some(returned) = &mut returned { + shift_value_levels(returned, 1, 0); } - Some(value) + Value::from_callable(Callable::Known(Box::new(KnownCallable { + parameters: Vec::new(), + summary, + returned: returned.map(Box::new), + }))) +} + +/// Built-in signatures can prove a primitive result has no fields without +/// inventing callable provenance for an otherwise opaque result. +fn builtin_return_shape(name: &str) -> Option { + // Effect summaries revisit calls during fixed-point inference and warning + // comparisons. Their immutable builtin signatures need one shared table. + static BUILTINS: std::sync::LazyLock = + std::sync::LazyLock::new(crate::builtins::base_env); + let crate::ty::Type::Fun { ret, .. } = &BUILTINS.get(name)?.ty else { + return None; + }; + value_shape(ret) +} + +fn value_shape(ty: &crate::ty::Type) -> Option { + use crate::ty::{names, Type}; + match ty { + Type::Con { name, args } if name == names::RESULT => Some(Value { + result_payload: args.first().and_then(value_shape).map(Box::new), + ..Value::default() + }), + Type::Con { name, .. } + if matches!( + name.as_str(), + names::INT + | names::FLOAT + | names::STRING + | names::BOOL + | names::UNIT + | names::LIST + | names::MAP + | names::ITERATOR + | names::FIBER + | names::CHANNEL + | names::PTR + | names::GPU_BUFFER + ) => + { + Some(Value { + field_names: Some(BTreeSet::new()), + ..Value::default() + }) + } + _ => None, + } +} + +fn map_projection_values(projection: &mut [Projection], mut visit: impl FnMut(&mut Value)) { + for part in projection { + let (positional, named) = match part { + Projection::Method(method) => { + visit(&mut method.fallback); + (&mut method.arguments, &mut method.named) + } + Projection::Returned(arguments) => (&mut arguments.positional, &mut arguments.named), + _ => continue, + }; + for value in positional + .iter_mut() + .chain(named.iter_mut().map(|(_, value)| value)) + .flatten() + { + visit(value); + } + } +} + +fn map_parameter_use_values(use_: &mut ParameterUse, mut visit: impl FnMut(&mut Value)) { + map_projection_values(&mut use_.projection, &mut visit); + for value in use_ + .arguments + .positional + .iter_mut() + .chain(use_.arguments.named.iter_mut().map(|(_, value)| value)) + .flatten() + { + visit(value); + } +} + +fn ordered_values( + parameters: &[String], + positional: &[Option], + named: &[(String, Option)], +) -> Vec> { + let mut values = positional.to_vec(); + values.resize(values.len().max(parameters.len()), None); + for (name, value) in named { + if let Some(index) = parameters.iter().position(|parameter| parameter == name) { + if let Some(slot) = values.get_mut(index) { + slot.clone_from(value); + } + } + } + values } fn merge_value(slot: &mut Value, incoming: Value) { @@ -1720,13 +2276,21 @@ fn widen_value(mut value: Value, depth: usize) -> Value { // unresolvable dynamic call, and discarding `deferred.required` would // silently discharge an operation that still needs a handler. let mut deferred = value.deferred; - deferred.widen(); + deferred.widen_at(depth); let callable = match value.callable { Some(Callable::Known(mut known)) => { known.returned = None; - known.summary.widen(); + known.summary.widen_at(depth); Some(Callable::Known(known)) } + Some(Callable::Parameter { ref projection, .. }) + if projection.iter().any(|part| { + matches!(part, Projection::Method(_) | Projection::Returned(_)) + }) => + { + deferred.unresolved_dynamic_call = true; + Some(Callable::Unknown) + } // A value that was never callable must not BECOME one here. // Promoting `None` to `Unknown` would turn "this is an int" into // "this is a callable of unknown provenance", and every merge it @@ -1741,11 +2305,11 @@ fn widen_value(mut value: Value, depth: usize) -> Value { }; } - value.deferred.widen(); + value.deferred.widen_at(depth); if let Some(callable) = value.callable.take() { value.callable = Some(match callable { Callable::Known(mut known) => { - known.summary.widen(); + known.summary.widen_at(depth); known.returned = known .returned .map(|returned| Box::new(widen_value(*returned, depth + 1))); @@ -1754,8 +2318,11 @@ fn widen_value(mut value: Value, depth: usize) -> Value { Callable::Parameter { level, index, - projection, + mut projection, } if level < MAX_PROVENANCE_DEPTH && projection.len() < MAX_PROVENANCE_DEPTH => { + map_projection_values(&mut projection, |value| { + *value = widen_value(value.clone(), depth + 1); + }); Callable::Parameter { level, index, @@ -1794,6 +2361,9 @@ fn shift_summary_from(summary: &mut Summary, amount: usize, minimum_level: usize if use_.level >= minimum_level { use_.level = use_.level.saturating_add(amount); } + map_parameter_use_values(&mut use_, |value| { + shift_value_levels(value, amount, minimum_level); + }); use_ }) .collect(); @@ -1806,10 +2376,15 @@ fn shift_summary_levels(summary: &mut Summary, amount: usize) { fn shift_value_levels(value: &mut Value, amount: usize, minimum_level: usize) { if let Some(callable) = &mut value.callable { match callable { - Callable::Parameter { level, .. } => { + Callable::Parameter { + level, projection, .. + } => { if *level >= minimum_level { *level = level.saturating_add(amount); } + map_projection_values(projection, |value| { + shift_value_levels(value, amount, minimum_level); + }); } Callable::Known(known) => { shift_summary_from(&mut known.summary, amount, minimum_level + 1); @@ -1852,6 +2427,7 @@ fn callable_summary(callable: &Callable) -> Summary { level: *level, index: *index, projection: projection.clone(), + arguments: CallArguments::default(), excluded: Requirements::new(), }] .into_iter() @@ -1891,7 +2467,12 @@ fn merge_callable(slot: &mut Option, incoming: Callable) { }))); } -fn bind_pattern(pattern: &Pattern, value: Option<&Value>, index: &Index, env: &mut CallableEnv) { +fn bind_pattern( + pattern: &Pattern, + value: Option<&Value>, + index: &Index<'_>, + env: &mut CallableEnv, +) { match pattern { Pattern::Binding(name) | Pattern::TypeAnnotated { name, .. } => { let _ = env.shadowed.insert(name.clone()); @@ -1909,7 +2490,12 @@ fn bind_pattern(pattern: &Pattern, value: Option<&Value>, index: &Index, env: &m for field in fields { let _ = env.shadowed.insert(field.clone()); let projected = value.and_then(|value| { - if name == "Success" && field == "value" { + // Elvis binds the same success payload under a reserved + // name; losing it would discard the successful arm's + // callable effects at the fallback join. [PATTERN-RESULT-DEFAULT] + if name == "Success" + && (field == "value" || field == osprey_ast::RESULT_DEFAULT_PAYLOAD) + { project_success_value(value.clone()) } else { value.fields.get(field).cloned() @@ -1963,7 +2549,7 @@ fn bind_pattern(pattern: &Pattern, value: Option<&Value>, index: &Index, env: &m fn advance_function( analyzer: &Analyzer<'_>, id: usize, - function: &Function, + function: &Function<'_>, rows: &mut [Summary], returns: &mut [Option], ) -> bool { @@ -2004,7 +2590,7 @@ fn advance_function( /// that has not been walked yet, so one pass is a complete answer for the rows /// it was given. The enclosing fixed point re-derives it as those rows sharpen. fn file_scope_env( - index: &Index, + index: &Index<'_>, instances: &Instances, statements: &[Stmt], rows: &[Summary], @@ -2025,7 +2611,7 @@ fn file_scope_env( /// Least fixed point over every function's row and return provenance: /// recursive and forward calls only add requirements. fn converge( - index: &Index, + index: &Index<'_>, instances: &Instances, statements: &[Stmt], rows: &mut Vec, @@ -2063,24 +2649,38 @@ fn converge( /// the next sweep can re-derive each verdict from converged provenance. fn clear_verdicts(rows: &mut [Summary], returns: &mut [Option]) { for row in rows.iter_mut() { - row.unresolved_dynamic_call = false; + clear_summary_verdicts(row); } for returned in returns.iter_mut().flatten() { clear_value_verdicts(returned); } } +fn clear_summary_verdicts(summary: &mut Summary) { + summary.unresolved_dynamic_call = false; + summary.parameter_uses = std::mem::take(&mut summary.parameter_uses) + .into_iter() + .map(|mut use_| { + map_parameter_use_values(&mut use_, clear_value_verdicts); + use_ + }) + .collect(); +} + fn clear_value_verdicts(value: &mut Value) { - value.deferred.unresolved_dynamic_call = false; + clear_summary_verdicts(&mut value.deferred); // `Callable::Unknown` is deliberately left in place: it is the SHAPE that // makes an invocation unresolvable, so the next sweep raises the verdict // again wherever the callable is actually called. if let Some(Callable::Known(known)) = &mut value.callable { - known.summary.unresolved_dynamic_call = false; + clear_summary_verdicts(&mut known.summary); if let Some(returned) = &mut known.returned { clear_value_verdicts(returned); } } + if let Some(Callable::Parameter { projection, .. }) = &mut value.callable { + map_projection_values(projection, clear_value_verdicts); + } for nested in value.fields.values_mut() { clear_value_verdicts(nested); } @@ -2096,6 +2696,78 @@ fn clear_value_verdicts(value: &mut Value) { } } +/// Substitute complete type-name tokens, so `t3` never rewrites `t30`. +fn specialize_argument(argument: &str, bindings: &HashMap) -> String { + let mut result = String::new(); + let mut token = String::new(); + for character in argument.chars().chain(std::iter::once('\0')) { + if character.is_alphanumeric() || character == '_' { + token.push(character); + } else { + result.push_str(bindings.get(&token).unwrap_or(&token)); + token.clear(); + if character != '\0' { + result.push(character); + } + } + } + result +} + +fn specialize_requirements(requirements: &mut Requirements, bindings: &HashMap) { + *requirements = std::mem::take(requirements) + .into_iter() + .map(|mut requirement| { + requirement.arguments = requirement + .arguments + .iter() + .map(|arg| specialize_argument(arg, bindings)) + .collect(); + requirement + }) + .collect(); +} + +fn specialize_summary(summary: &mut Summary, bindings: &HashMap) { + specialize_requirements(&mut summary.required, bindings); + summary.parameter_uses = std::mem::take(&mut summary.parameter_uses) + .into_iter() + .map(|mut use_| { + specialize_requirements(&mut use_.excluded, bindings); + map_parameter_use_values(&mut use_, |value| { + specialize_value(value, bindings); + }); + use_ + }) + .collect(); +} + +fn specialize_value(value: &mut Value, bindings: &HashMap) { + specialize_summary(&mut value.deferred, bindings); + if let Some(Callable::Parameter { projection, .. }) = &mut value.callable { + map_projection_values(projection, |value| specialize_value(value, bindings)); + } + if let Some(Callable::Known(known)) = &mut value.callable { + specialize_summary(&mut known.summary, bindings); + if let Some(returned) = &mut known.returned { + specialize_value(returned, bindings); + } + } + for nested in value.fields.values_mut() { + specialize_value(nested, bindings); + } + for nested in [ + value.element.as_mut(), + value.result_payload.as_mut(), + value.fiber_payload.as_mut(), + ] + .into_iter() + .flatten() + { + specialize_value(nested, bindings); + } +} + /// Check inferred rows and entry discharge. Implements /// [EFFECTS-STATIC-DISCHARGE]. #[expect( @@ -2191,10 +2863,18 @@ pub(crate) fn check(program: &Program, instances: &Instances, exports: &[&str]) .filter(|requirement| { !function.declared_effects.iter().any(|declared| { declared.name == requirement.effect - && declared - .arguments - .as_ref() - .is_none_or(|arguments| arguments == &requirement.arguments) + && declared.arguments.as_ref().is_none_or(|arguments| { + let bindings = instances.binders.get(&function.name); + arguments + .iter() + .map(|arg| { + bindings.map_or_else( + || arg.clone(), + |b| specialize_argument(arg, b), + ) + }) + .eq(requirement.arguments.iter().cloned()) + }) }) }) .map(requirement_name) @@ -2213,7 +2893,7 @@ pub(crate) fn check(program: &Program, instances: &Instances, exports: &[&str]) validate_handler_arms( &analyzer, &axis, - &function.body, + function.body, &function.scope, &analyzer.scoped_env(&function.parameters), &mut errors, @@ -2376,7 +3056,7 @@ fn gpu_kernel_verdict( "cannot prove GPU kernel pure; pass a named function or an inline lambda", )); }; - let row = analyzer.invoke(callee, &[], &[], scope, env); + let row = analyzer.invoke_with_values(callee, &[]); if !row.required.is_empty() { let performed: Vec = row.required.iter().map(requirement_name).collect(); return Some(format!( @@ -2503,7 +3183,7 @@ fn fibered_operation( /// happens. Over-reaching costs a rejection the plan already fails closed on; /// under-reaching would miss the fiber boundary this rule exists to find. fn reachable_bodies<'a>( - index: &'a Index, + index: &'a Index<'_>, body: &'a Expr, scope: &'a [String], ) -> Vec<(&'a Expr, &'a [String])> { @@ -2520,7 +3200,7 @@ fn reachable_bodies<'a>( { if visited.insert(id) { if let Some(function) = index.functions.get(id) { - regions.push((&function.body, &function.scope)); + regions.push((function.body, &function.scope)); } } } @@ -2577,7 +3257,10 @@ fn walk_children<'a>(expression: &'a Expr, mut visit: impl FnMut(&'a Expr)) { visit(left); visit(right); } - Expr::Unary { operand, .. } + Expr::TypeApply { + function: operand, .. + } + | Expr::Unary { operand, .. } | Expr::FieldAccess { target: operand, .. } diff --git a/crates/osprey-types/src/effect_rows_transport_tests.rs b/crates/osprey-types/src/effect_rows_transport_tests.rs new file mode 100644 index 00000000..ab94ff5d --- /dev/null +++ b/crates/osprey-types/src/effect_rows_transport_tests.rs @@ -0,0 +1,433 @@ +//! [EFFECTS-STATIC-DISCHARGE] Preserve effects through generic dispatch, +//! higher-order arguments and handler results without capturing authority. + +use crate::effect_rows_tests::{assert_accepted, diagnostics}; +use crate::TypeError; + +const PROBE: &str = "effect Probe { value: fn() -> int }\n\ + fn fetch() -> int !Probe = perform Probe.value()\n\ + fn pure() -> int = 22\n"; +const ACTION: &str = "type Action = Action { m: () -> int }\n"; +const DISPATCH: &str = "fn m(x:T) -> int = 44\nfn dispatch(x:T) = x.m()\n"; +const UNHANDLED: &str = + "unhandled effect operations at program entry: Probe.value; add a matching `handle`"; +const GENERIC_UNHANDLED: &str = + "unhandled effect operations at program entry: Probe.value; add a matching `handle`"; + +fn assert_errors(source: &str, expected: &[&str]) { + assert_eq!( + diagnostics(source), + expected + .iter() + .map(|message| TypeError::new(*message)) + .collect::>(), + "{source}" + ); +} + +fn probe_call(declarations: &str, expression: &str, required: bool) { + let source = format!("{PROBE}{declarations}\nlet answer = {expression}\n"); + assert_errors(&source, if required { &[UNHANDLED] } else { &[] }); + assert_accepted(&format!( + "{PROBE}{declarations}\nlet answer = handle Probe\n value => 33\nin {expression}\n" + )); +} + +#[test] +fn only_the_selected_method_branch_contributes_effects() { + for (field, fallback, field_effectful) in [("fetch", "22", true), ("pure", "fetch()", false)] { + let declarations = format!( + "{ACTION}fn m(x:T) -> int = {fallback}\n\ + fn dispatch(x:T) = x.m()\nlet r = Action{{m:{field}}}\n" + ); + for (call, required) in [ + ("r.m()", field_effectful), + ("dispatch(r)", field_effectful), + ("dispatch(5)", !field_effectful), + ("dispatch(length(\"abc\"))", !field_effectful), + ("dispatch(intDiv(8,2) ?: 0)", !field_effectful), + ] { + probe_call(&declarations, call, required); + } + } +} + +#[test] +fn deferred_method_arguments_keep_positional_and_named_callback_effects() { + for invocation in ["x.m(cb)", "x.m(cb:cb)"] { + let declarations = format!( + "type Action = Action {{m: (() -> int) -> int}}\n\ + fn field(cb: () -> int) -> int = cb()\n\ + fn m(x:T, cb: () -> int) -> int = 22\n\ + fn dispatch(x:T, cb: () -> int) = {invocation}\n" + ); + probe_call(&declarations, "dispatch(Action{m:field},fetch)", true); + probe_call(&declarations, "dispatch(5,fetch)", false); + } +} + +#[test] +fn deferred_methods_preserve_captured_receivers_and_returned_callables() { + let captured = format!("{ACTION}{DISPATCH}fn later(x:T) = fn() -> int => x.m()\n"); + probe_call(&captured, "later(Action{m:fetch})()", true); + probe_call(&captured, "later(5)()", false); + let returned = "type Action = Action {m: () -> () -> int}\n\ + fn field() -> () -> int = fetch\n\ + fn m(x:T) -> () -> int = pure\n\ + fn dispatch(x:T) = x.m()\n"; + for expression in [ + "dispatch(Action{m:field})()", + "Action{m:field}.m()()", + "{let f=dispatch(Action{m:field})\nf()}", + ] { + probe_call(returned, expression, true); + } + probe_call(returned, "dispatch(5)()", false); +} + +#[test] +fn a_handler_inside_a_generic_helper_discharges_only_its_invocation() { + let declarations = format!( + "{ACTION}fn m(x:T) -> int = 22\n\ + fn dispatch(x:T) = handle Probe\n value => 33\nin x.m()\n" + ); + probe_call(&declarations, "dispatch(Action{m:fetch})", false); + probe_call(&declarations, "dispatch(5)", false); + probe_call( + &declarations, + "{let ignored=dispatch(Action{m:fetch})\nfetch()}", + true, + ); +} + +#[test] +fn higher_order_invocation_retains_named_and_curried_arguments() { + for (declarations, invoked, ignored) in [ + ( + "fn call(callback: ()->int) -> int = callback()\n\ + fn ignore(callback: ()->int) -> int = 22\n\ + fn through(f: (()->int)->int, callback: ()->int) -> int = f(callback)\n", + "through(call,fetch)", + "through(ignore,fetch)", + ), + ( + "fn call(callback: ()->int) -> int = callback()\n\ + fn ignore(callback: ()->int) -> int = 22\n\ + fn through(f: (()->int)->int, callback: ()->int) -> int = f(callback:callback)\n", + "through(callback:fetch,f:call)", + "through(callback:fetch,f:ignore)", + ), + ( + "fn call(callback: ()->int) -> (int)->int = fn(x:int) => callback()\n\ + fn ignore(callback: ()->int) -> (int)->int = fn(x:int) => 22\n\ + fn through(f: (()->int)->(int)->int, callback: ()->int) -> int = f(callback)(1)\n", + "through(call,fetch)", + "through(ignore,fetch)", + ), + ] { + probe_call(declarations, invoked, true); + probe_call(declarations, ignored, false); + } +} + +#[test] +fn a_parameter_returning_a_record_keeps_actual_argument_provenance() { + for (maker, forwarding, call, required) in [ + ( + "fn make(cb: ()->int) -> Action = Action{m:cb}", + "fn through(makeFn: (()->int)->Action) = dispatch(makeFn(fetch))", + "through(make)", + true, + ), + ( + "fn identity(x:Action) -> Action = x", + "fn through(makeFn: (Action)->Action) = dispatch(makeFn(Action{m:fetch}))", + "through(identity)", + true, + ), + ( + "fn identity(x:Action) -> Action = x", + "fn through(makeFn: (Action)->Action) = dispatch(makeFn(x:Action{m:fetch}))", + "through(identity)", + true, + ), + ( + "fn make(x:int) -> (int)->Action = fn(y:int) => Action{m:fetch}", + "fn through(makeFn: (int)->(int)->Action) = dispatch(makeFn(1)(2))", + "through(make)", + true, + ), + ( + "fn make(cb: ()->int) -> Action = Action{m:pure}", + "fn through(makeFn: (()->int)->Action) = dispatch(makeFn(fetch))", + "through(make)", + false, + ), + ] { + probe_call( + &format!("{ACTION}{DISPATCH}{maker}\n{forwarding}\n"), + call, + required, + ); + } +} + +#[test] +fn builtin_shadowing_obeys_the_actual_function_local_or_parameter() { + for (declarations, call) in [ + ( + "fn test(x:int) -> Action = Action{m:fetch}", + "dispatch(test(1))", + ), + ("let test = |x| => Action{m:fetch}", "dispatch(test(1))"), + ( + "fn make(x:int) -> Action = Action{m:fetch}\n\ + fn through(test: (int)->Action) = dispatch(test(1))", + "through(make)", + ), + ( + "fn make(x:int) -> Action = Action{m:fetch}\n\ + fn through(makeFn: (int)->Action) = dispatch(makeFn(1))", + "through(make)", + ), + ] { + probe_call(&format!("{ACTION}{DISPATCH}{declarations}\n"), call, true); + } + for (declarations, call) in [ + ( + "fn test(name:string, f:()->int) -> int = 22", + "test(\"ignored\",fetch)", + ), + ("let test = |name,f| => 22", "test(\"ignored\",fetch)"), + ( + "fn ignore(name:string, f:()->int) -> int = 22\n\ + fn through(test: (string,()->int)->int) = test(\"ignored\",fetch)", + "through(ignore)", + ), + ] { + probe_call(declarations, call, false); + } + probe_call( + "fn callback() = print(fetch())\n", + "test(\"eager\",callback)", + true, + ); +} + +const GENERIC_FACTORY: &str = "type Action = Action {m: () -> int}\n\ + effect Probe {value: fn() -> T}\n\ + effect Factory {make: fn() -> T}\n\ + fn fetch() -> int !Probe = perform Probe.value()\n\ + fn pure() -> int = 22\nfn extract(x:T) = x.m\n"; + +#[test] +fn generic_handler_results_cannot_be_rebound_to_an_unrelated_caller_argument() { + for body in [ + "extract(perform Factory.make())", + "{let record=perform Factory.make()\nfn() => extract(record)()}", + ] { + for unrelated in ["pure", "fetch"] { + let declarations = format!( + "{GENERIC_FACTORY}fn get(dummy:Action) = handle Factory\n\ + make => Action{{m:fetch}}\nin {body}\nlet f=get(Action{{m:{unrelated}}})\n" + ); + assert_errors( + &format!("{declarations}let answer=f()\n"), + &[GENERIC_UNHANDLED], + ); + assert_accepted(&format!( + "{declarations}let answer=handle Probe\nvalue=>33\nin f()\n" + )); + assert_errors( + &format!("{declarations}let answer=handle Probe\nvalue=>\"wrong\"\nin f()\n"), + &[GENERIC_UNHANDLED], + ); + } + } +} + +#[test] +fn handler_result_provenance_respects_local_shadowing_and_pure_results() { + for (local, returned) in [("", "pure"), ("let fetch=fn() -> int => 22", "fetch")] { + assert_accepted(&format!( + "{GENERIC_FACTORY}fn get(dummy:Action) = {{\n{local}\n\ + handle Factory\nmake => Action{{m:{returned}}}\nin extract(perform Factory.make())\n\ + }}\nlet f=get(Action{{m:fetch}})\nlet answer=f()\n" + )); + } +} + +#[test] +fn escaped_closures_capture_values_but_never_active_handler_bindings() { + assert_errors( + &format!("{ACTION}{PROBE}effect Factory {{make: fn() -> Action}}\n\ + fn extract(x:T) = x.m\n\ + let f=handle Factory\nmake=>Action{{m:pure}}\n\ + in fn()=>extract(perform Factory.make())()\nlet answer=f()\n"), + &[ + "unhandled effect operations at program entry: Factory.make; add a matching `handle`", + "program entry invokes a dynamic callable whose effect provenance cannot be proven; preserve the callable through a statically tracked value path", + ], + ); +} + +#[test] +fn merging_results_and_fibers_keeps_every_callback_requirement() { + for callback in ["fetch", "pure"] { + for (declarations, expression) in [ + ( + format!( + "fn choose(flag) -> Result<()->int, Error> = match flag {{\n\ + true => Success{{value:{callback}}}\nfalse => Success{{value:pure}}\n}}\n" + ), + "(choose(true) ?: pure)()", + ), + ( + format!( + "fn choose(flag) = match flag {{\n\ + true => spawn {callback}\nfalse => spawn pure\n}}\n\ + fn unpack(fiber: Fiber) -> T = await(fiber)\n" + ), + "unpack(choose(true))()", + ), + ] { + probe_call(&declarations, expression, callback == "fetch"); + } + } +} + +#[test] +fn computed_builtin_containers_select_the_generic_free_function() { + for expression in [ + "dispatch(mapKeys(mapSet(Map(),\"x\",1)))", + "dispatch(toGpu([1,2]))", + "dispatch(fromGpu(toGpu([1,2])))", + "dispatch(gpuIota(2))", + ] { + probe_call(DISPATCH, expression, false); + probe_call( + "fn m(x:T) -> int = fetch()\nfn dispatch(x:T) = x.m()\n", + expression, + true, + ); + } +} + +#[test] +fn a_unit_field_update_preserves_other_callable_fields() { + for callback in ["fetch", "pure"] { + probe_call( + &format!( + "type Entry = Entry {{m: ()->int, flag: Unit}}\n\ + let original=Entry{{m:{callback},flag:print(\"\")}}\n\ + let updated=original{{flag:yield}}\n" + ), + "updated.m()", + callback == "fetch", + ); + } +} + +#[test] +fn an_opaque_iterator_element_cannot_select_a_pure_method_fallback() { + let declarations = format!( + "{PROBE}{ACTION}{DISPATCH}\n\ + let items=map(range(0,1),fn(n)=>Action{{m:fetch}})\n" + ); + for invocation in ["item.m()", "dispatch(item)"] { + assert_errors( + &format!("{declarations}forEach(items,fn(item)=>print({invocation}))\n"), + &["program entry invokes a dynamic callable whose effect provenance cannot be proven; preserve the callable through a statically tracked value path"], + ); + } + probe_call( + &format!("{ACTION}{DISPATCH}let items=[Action{{m:fetch}}]\n"), + "dispatch(listGet(items,0) ?: Action{m:pure})", + true, + ); +} + +#[test] +fn a_callback_parameter_field_keeps_its_invocation_effects() { + let declarations = format!( + "{ACTION}{DISPATCH}\n\ + fn forward(dummy:T,cb:()->int)=dispatch(Action{{m:cb}})\n" + ); + probe_call(&declarations, "forward(0,pure)", false); + probe_call(&declarations, "forward(0,fetch)", true); +} + +#[test] +fn a_callback_parameter_field_preserves_its_returned_callable() { + for declarations in [ + "type Factory=Factory{m:()->()->int}\n\ + fn pureFactory()->()->int=pure\nfn effectFactory()->()->int=fetch\n\ + fn m(x:T)->()->int=pure\nfn dispatch(x:T)=x.m()\n\ + fn forward(dummy:T,cb:()->()->int)=dispatch(Factory{m:cb})()\n", + "type Factory=Factory{m:(()->int,()->int)->()->int}\n\ + fn pureFactory(callback:()->int,ignored:()->int)->()->int=callback\n\ + fn effectFactory(callback:()->int,ignored:()->int)->()->int=ignored\n\ + fn m(x:T,callback:()->int,ignored:()->int)->()->int=pure\n\ + fn dispatch(x:T)=x.m(ignored:pure,callback:fetch)\n\ + fn forward(dummy:T,cb:(()->int,()->int)->()->int)=dispatch(Factory{m:cb})()\n", + ] { + probe_call(declarations, "forward(0,pureFactory)", false); + probe_call(declarations, "forward(0,effectFactory)", true); + } +} + +#[test] +fn named_function_value_calls_bind_written_slots_before_callback_substitution() { + let declarations = "fn first(callback:()->int,ignored:()->int)->int=callback()\n\ + fn second(callback:()->int,ignored:()->int)->int=ignored()\n\ + fn through(f:(()->int,()->int)->int)=f(ignored:pure,callback:fetch)\n\ + fn throughGeneric(dummy:T,f:(()->int,()->int)->int)=f(ignored:pure,callback:fetch)\n\ + type Action=Action{m:(()->int,()->int)->int}\n\ + fn m(x:T,callback:()->int,ignored:()->int)->int=callback()\n\ + fn dispatch(x:T)=x.m(ignored:pure,callback:fetch)\n"; + for (expression, required) in [ + ("first(ignored:pure,callback:fetch)", true), + ("second(ignored:pure,callback:fetch)", false), + ("through(first)", false), + ("through(second)", true), + ("throughGeneric(0,first)", false), + ("throughGeneric(0,second)", true), + ("{let f=first\nf(ignored:pure,callback:fetch)}", false), + ("{let f=second\nf(ignored:pure,callback:fetch)}", true), + ("Action{m:first}.m(ignored:pure,callback:fetch)", false), + ("Action{m:second}.m(ignored:pure,callback:fetch)", true), + ("dispatch(Action{m:first})", false), + ("dispatch(Action{m:second})", true), + ("dispatch(0)", true), + ] { + probe_call(declarations, expression, required); + } +} + +#[test] +fn rejected_named_performs_still_report_the_handlers_callback_effects() { + let declarations = "effect Callback {go: fn(()->int)->int}\n"; + let unsupported = "perform `Callback.go` does not support named arguments"; + for (callback, expected) in [ + ("pure", vec![unsupported]), + ("fetch", vec![unsupported, UNHANDLED]), + ] { + let invocation = + format!("handle Callback\n go cb => cb()\nin perform Callback.go(cb:{callback})"); + assert_errors( + &format!("{PROBE}{declarations}let answer={invocation}\n"), + &expected, + ); + assert_errors( + &format!( + "{PROBE}{declarations}let answer=handle Probe\n value => 33\nin {invocation}\n" + ), + &[unsupported], + ); + } + probe_call( + declarations, + "handle Callback\n go cb => cb()\nin perform Callback.go(fetch)", + true, + ); +} diff --git a/crates/osprey-types/src/env.rs b/crates/osprey-types/src/env.rs index 2987250e..da1eeccc 100644 --- a/crates/osprey-types/src/env.rs +++ b/crates/osprey-types/src/env.rs @@ -7,64 +7,105 @@ use crate::ctx::InferCtx; use crate::ty::{Scheme, Type, VarId}; use std::collections::{BTreeSet, HashMap, HashSet}; +/// One call's signature, deferred obligations, and ordered declared binders. +pub(crate) struct AppliedSignature { + pub ty: Type, + pub obligations: Vec<(String, Type)>, + pub params: Vec, + pub bindings: HashMap, +} + /// Maps names to their type schemes. Cloned to form child scopes (lambda /// bodies, match arms) — value semantics, so child bindings never leak out. #[derive(Debug, Clone, Default)] -pub struct TypeEnv { +pub(crate) struct TypeEnv { vars: HashMap, + /// Ordered declaration binders, cleared whenever a value shadows a name. + type_params: HashMap>, /// Names declared `mut` — the only bindings handler-arm assignment may target. mutables: HashSet, } impl TypeEnv { - pub fn new() -> TypeEnv { + pub(crate) fn new() -> TypeEnv { TypeEnv::default() } - pub fn get(&self, name: &str) -> Option<&Scheme> { + pub(crate) fn get(&self, name: &str) -> Option<&Scheme> { self.vars.get(name) } - pub fn insert(&mut self, name: impl Into, scheme: Scheme) { + pub(crate) fn insert(&mut self, name: impl Into, scheme: Scheme) { let name = name.into(); // A fresh binding shadows any outer `mut` of the same name. let _ = self.mutables.remove(&name); + let _ = self.type_params.remove(&name); let _ = self.vars.insert(name, scheme); } /// Bind a `mut` declaration — the one binding form handler arms may assign. - pub fn insert_mutable(&mut self, name: impl Into, scheme: Scheme) { + pub(crate) fn insert_mutable(&mut self, name: impl Into, scheme: Scheme) { let name = name.into(); + let _ = self.type_params.remove(&name); let _ = self.vars.insert(name.clone(), scheme); let _ = self.mutables.insert(name); } - pub fn is_mutable(&self, name: &str) -> bool { + pub(crate) fn is_mutable(&self, name: &str) -> bool { self.mutables.contains(name) } /// The currently bound names. Snapshotted on the freshly built builtin /// environment to detect redefinition of built-in functions. - pub fn bound_names(&self) -> HashSet { + pub(crate) fn bound_names(&self) -> HashSet { self.vars.keys().cloned().collect() } - pub fn remove(&mut self, name: &str) { + pub(crate) fn remove(&mut self, name: &str) { let _ = self.vars.remove(name); + let _ = self.type_params.remove(name); + } + + /// Attach declaration-site binders to this exact lexical binding. + pub(crate) fn declare_type_params(&mut self, name: &str, params: Vec) { + let _ = self.type_params.insert(name.to_owned(), params); + } + + /// Instantiate the signature and its declared binders with one substitution. + pub(crate) fn applied(&self, ctx: &mut InferCtx, name: &str) -> Option { + let scheme = self.get(name)?; + let map = scheme.vars.iter().map(|v| (*v, ctx.fresh())).collect(); + let params = self + .type_params + .get(name) + .into_iter() + .flatten() + .map(|ty| subst_vars(&ctx.apply(ty), &map)) + .collect(); + let obligations = subst_obligations(&scheme.obligations, &map); + Some(AppliedSignature { + ty: subst_vars(&scheme.ty, &map), + obligations, + params, + bindings: map, + }) } /// A fresh child scope (a clone — bindings added to the child don't leak). - pub fn child(&self) -> TypeEnv { + pub(crate) fn child(&self) -> TypeEnv { self.clone() } /// The free variables of the whole environment — the vars `generalize` must /// *not* quantify, because an outer scope may still constrain them. - pub fn free_vars(&self, ctx: &mut InferCtx) -> BTreeSet { + pub(crate) fn free_vars(&self, ctx: &mut InferCtx) -> BTreeSet { let mut out = BTreeSet::new(); for scheme in self.vars.values() { let mut fv = BTreeSet::new(); ctx.free_vars(&scheme.ty, &mut fv); + for (_, obligation) in &scheme.obligations { + ctx.free_vars(obligation, &mut fv); + } for q in &scheme.vars { let _ = fv.remove(q); } @@ -74,8 +115,20 @@ impl TypeEnv { } } +/// A scheme's built-in obligations restated against the substitution `map` — +/// the same rewrite every instantiation site performs on its fresh variables. +fn subst_obligations( + obligations: &[(String, Type)], + map: &HashMap, +) -> Vec<(String, Type)> { + obligations + .iter() + .map(|(name, ty)| (name.clone(), subst_vars(ty, map))) + .collect() +} + /// Instantiate a scheme: replace each quantified variable with a fresh one. -pub fn instantiate(ctx: &mut InferCtx, scheme: &Scheme) -> Type { +pub(crate) fn instantiate(ctx: &mut InferCtx, scheme: &Scheme) -> Type { instantiated(ctx, scheme).0 } @@ -84,21 +137,17 @@ pub fn instantiate(ctx: &mut InferCtx, scheme: &Scheme) -> Type { /// against the concrete types it supplies — a generalized wrapper cannot /// launder an ineligible element type past a constrained built-in /// ([`Scheme::obligations`]). -pub fn instantiated(ctx: &mut InferCtx, scheme: &Scheme) -> (Type, Vec<(String, Type)>) { +pub(crate) fn instantiated(ctx: &mut InferCtx, scheme: &Scheme) -> (Type, Vec<(String, Type)>) { if scheme.vars.is_empty() { return (scheme.ty.clone(), scheme.obligations.clone()); } let map: HashMap = scheme.vars.iter().map(|v| (*v, ctx.fresh())).collect(); - let obligations = scheme - .obligations - .iter() - .map(|(name, ty)| (name.clone(), subst_vars(ty, &map))) - .collect(); + let obligations = subst_obligations(&scheme.obligations, &map); (subst_vars(&scheme.ty, &map), obligations) } /// Generalize a type over the variables free in it but not in the environment. -pub fn generalize(ctx: &mut InferCtx, env: &TypeEnv, ty: &Type) -> Scheme { +pub(crate) fn generalize(ctx: &mut InferCtx, env: &TypeEnv, ty: &Type) -> Scheme { let ty = ctx.apply(ty); let env_fv = env.free_vars(ctx); let mut ty_fv = BTreeSet::new(); @@ -111,7 +160,7 @@ pub fn generalize(ctx: &mut InferCtx, env: &TypeEnv, ty: &Type) -> Scheme { } } -fn subst_vars(t: &Type, map: &HashMap) -> Type { +pub(crate) fn subst_vars(t: &Type, map: &HashMap) -> Type { match t { Type::Var(v) => map.get(v).cloned().unwrap_or_else(|| t.clone()), Type::Con { name, args } => Type::Con { @@ -135,7 +184,6 @@ fn subst_vars(t: &Type, map: &HashMap) -> Type { }, } } - #[cfg(test)] #[expect( clippy::indexing_slicing, diff --git a/crates/osprey-types/src/expr.rs b/crates/osprey-types/src/expr.rs index 631dfd2b..81546735 100644 --- a/crates/osprey-types/src/expr.rs +++ b/crates/osprey-types/src/expr.rs @@ -5,19 +5,7 @@ //! lambdas, match) do real unification. use crate::check::Checker; -use crate::convert::type_expr_to_type; - -/// Builtin types that carry no fields, so `x.field` on one can never resolve. -/// Deliberately excludes `any` (which unifies with everything, including -/// records) and every collection/generic whose element MIGHT be a record. -/// Implements [TYPE-FIELD-ACCESS-NON-RECORD]. -const FIELDLESS_TYPES: &[&str] = &[ - names::INT, - names::FLOAT, - names::STRING, - names::BOOL, - names::UNIT, -]; + use crate::env::TypeEnv; use crate::error::TypeError; use crate::ty::{names, Type}; @@ -37,6 +25,23 @@ fn generic_err() -> Type { Type::prim("Error") } +/// A bound type variable is a type, not a higher-kinded constructor. Check +/// the written form before conversion resolves that name to its variable. +fn applied_type_parameter<'a>( + ty: &'a TypeExpr, + binders: &HashMap, +) -> Option<&'a str> { + if binders.contains_key(&ty.name) && !ty.generic_params.is_empty() { + return Some(&ty.name); + } + ty.generic_params + .iter() + .chain(&ty.parameter_types) + .chain(ty.array_element.as_deref()) + .chain(ty.return_type.as_deref()) + .find_map(|child| applied_type_parameter(child, binders)) +} + impl Checker { pub(crate) fn infer_expr(&mut self, e: &Expr, env: &TypeEnv) -> Type { match e { @@ -49,13 +54,14 @@ impl Checker { if let InterpolatedPart::Expr(inner) = p { // Interpolation preserves a Result as its complete // Success/Error rendering; it never extracts a payload. - let _ = self.infer_expr(inner, env); + let ty = self.infer_expr(inner, env); + self.builtin_uses.push(("interpolation".to_owned(), ty)); } } Type::string() } - Expr::Identifier(name) => self.lookup_ident(name, env), - Expr::Path(path) => self.lookup_ident(&path.to_string(), env), + Expr::Identifier(name) => self.lookup_ident_at(name, env, Some(e)), + Expr::Path(path) => self.lookup_ident_at(&path.to_string(), env, Some(e)), Expr::List(items, position) => { let elem = self.ctx.fresh(); for it in items { @@ -86,19 +92,25 @@ impl Checker { self.infer_negation(&t) } } + Expr::TypeApply { + function, + type_args, + position, + } => { + self.infer_type_application(function, type_args, *position, env) + .1 + } Expr::Call { function, arguments, named_arguments, - } => self.infer_call(function, arguments, named_arguments, env), + } => self.infer_call(e, function, arguments, named_arguments, env), Expr::Pipe { left, right } => self.infer_pipe(left, right, env), Expr::FieldAccess { target, field } => self.infer_field_access(target, field, env), - Expr::MethodCall { - target, - method, - arguments, - named_arguments, - } => self.infer_method_call(target, method, arguments, named_arguments, env), + Expr::MethodCall { .. } => match crate::methods::parts(e) { + Some(parts) => self.infer_method_call(e, parts, env), + None => self.ctx.fresh(), + }, Expr::Index { target, index } => self.infer_index(target, index, env), Expr::Lambda { parameters, @@ -172,46 +184,27 @@ impl Checker { } } - /// Field access yields the record field's declared type, or a fresh var when - /// the target is not a known record (split out of [`Self::infer_expr`]). + /// Field access retains a relation between the receiver and its field even + /// when the receiver is a parameter whose record is fixed at a later call. fn infer_field_access(&mut self, target: &Expr, field: &str, env: &TypeEnv) -> Type { let tt = self.infer_expr(target, env); + self.infer_record_field_type(&tt, field) + } + + pub(crate) fn infer_record_field_type(&mut self, receiver: &Type, field: &str) -> Type { // Reading a field assumes a record layout the erased word cannot // prove it has — the address-as-integer bug reached through `.field` // ([TYPE-FIELD-ACCESS-NON-RECORD], [TYPE-ANY]). - if self.reject_erased_operand(&format!("access field `{field}` on"), &tt) { + if self.reject_erased_operand(&format!("access field `{field}` on"), receiver) { return self.ctx.fresh(); } - let pruned = self.ctx.prune(&tt); - match &pruned { - Type::Record { fields, .. } => fields - .get(field) - .cloned() - .unwrap_or_else(|| self.ctx.fresh()), - other => { - if let Type::Con { name, .. } = other { - if FIELDLESS_TYPES.contains(&name.as_str()) { - self.record_field_access_on_fieldless(field, name); - } - } - self.ctx.fresh() - } - } - } - - /// Reject `x.field` where `x` is a builtin that has no fields at all. - /// - /// This arm used to fall through to a fresh variable, so the program passed - /// the checker and CODEGEN emitted invalid LLVM (`bitcast i8* 42 to - /// { i64, i64 }*`) — the "error" then surfaced from clang, naming a - /// temporary `.ll` file rather than the offending source line. Only names - /// that can NEVER be a user record are listed, and an unresolved type - /// variable is deliberately left alone: inference may still resolve it to a - /// record. Implements [TYPE-FIELD-ACCESS-NON-RECORD]. - fn record_field_access_on_fieldless(&mut self, field: &str, ty: &str) { - self.errors.push(TypeError::new(format!( - "cannot access field '{field}' on non-struct type {ty}" - ))); + let result = self.ctx.fresh(); + self.builtin_uses.push(( + crate::fields::obligation_name(field), + Type::fun(vec![receiver.clone()], result.clone()), + )); + self.resolve_field_uses(); + result } /// A channel and its sent value share one element type; the send is `Unit`. @@ -225,21 +218,31 @@ impl Checker { &Type::con(names::CHANNEL, vec![element_ty.clone()]), ); self.push_assign(&element_ty, &value_ty); - if self.ctx.prune(&value_ty).is_named(names::RESULT) { - self.errors.push(TypeError::new( - "Result-valued channels are not supported by this backend; handle the Result before sending", - )); - } + self.reject_result_channel(&value_ty, "handle the Result before sending"); Type::unit() } + /// Reject a `Result`-valued channel element. The wire word carries no + /// discriminant, so a `Result` crossing a channel would be erased rather + /// than delivered — both ends refuse it, differing only in which half of + /// the transfer the advice names. + fn reject_result_channel(&mut self, ty: &Type, detail: &str) { + if self.ctx.prune(ty).is_named(names::RESULT) { + self.errors.push(TypeError::new(format!( + "Result-valued channels are not supported by this backend; {detail}" + ))); + } + } + + /// Record how the dotted call at `site` resolved, keyed by the expression's + /// address — the one place the method-target table is written. + fn record_method_target(&mut self, site: &Expr, target: crate::methods::Target) { + let _ = self.methods.insert(std::ptr::from_ref(site).addr(), target); + } + fn infer_recv(&mut self, channel: &Expr, env: &TypeEnv) -> Type { let elem = self.infer_unwrap_con(channel, names::CHANNEL, env); - if self.ctx.prune(&elem).is_named(names::RESULT) { - self.errors.push(TypeError::new( - "Result-valued channels are not supported by this backend; receiving must never erase the Result wrapper", - )); - } + self.reject_result_channel(&elem, "receiving must never erase the Result wrapper"); elem } @@ -456,9 +459,9 @@ impl Checker { // [EFFECTS-GENERIC-INSTANTIATION]. if osprey_ast::contains_resume(&arm.body) { answering.push((arm.operation.clone(), arm_ty)); - } else if !self.ctx.prune(&op_ret).is_named(crate::ty::names::UNIT) { + } else if !self.ctx.prune(&op_ret).is_named(names::UNIT) { self.push_assign(&op_ret, &arm_ty); - } else if self.ctx.prune(&arm_ty).is_named(crate::ty::names::RESULT) { + } else if self.ctx.prune(&arm_ty).is_named(names::RESULT) { self.errors.push(TypeError::new( "an unhandled `Result` cannot be discarded by a Unit effect operation arm; use `match` or `?:`", )); @@ -508,6 +511,10 @@ impl Checker { } fn lookup_ident(&mut self, name: &str, env: &TypeEnv) -> Type { + self.lookup_ident_at(name, env, None) + } + + fn lookup_ident_at(&mut self, name: &str, env: &TypeEnv, site: Option<&Expr>) -> Type { // A bare nullary constructor (`Red`, `Empty`) is a value of its owner type. if self.ctors.get(name).is_some_and(|i| i.fields.is_empty()) { if let Some((args, _f, owner, is_record)) = self.ctor_instance(name) { @@ -521,14 +528,18 @@ impl Checker { }; } } - if let Some(scheme) = env.get(name).cloned() { + if let Some(applied) = env.applied(&mut self.ctx, name) { // Re-state the scheme's built-in obligations against this site's // fresh variables, so a generalized wrapper's constraint is checked // against the types this call actually supplies // ([`crate::ty::Scheme::obligations`]). - let (ty, obligations) = crate::env::instantiated(&mut self.ctx, &scheme); - self.builtin_uses.extend(obligations); - return ty; + self.builtin_uses.extend(applied.obligations); + if let Some(site) = site { + let _ = self + .instantiations + .insert(std::ptr::from_ref(site).addr(), applied.bindings); + } + return applied.ty; } self.errors .push(TypeError::new(format!("unknown identifier `{name}`"))); @@ -537,11 +548,15 @@ impl Checker { fn infer_call( &mut self, + site: &Expr, function: &Expr, arguments: &[Expr], named: &[NamedArgument], env: &TypeEnv, ) -> Type { + if let Some(parts) = crate::methods::parts(site) { + return self.infer_method_call(site, parts, env); + } let (fname, ft) = self.infer_callee(function, env); let args = self.ordered_arg_types(fname.as_deref(), &ft, arguments, named, env); self.apply_named_fn(fname.as_deref(), &ft, args) @@ -549,34 +564,334 @@ impl Checker { fn infer_callee(&mut self, function: &Expr, env: &TypeEnv) -> (Option, Type) { match function { - Expr::Identifier(name) => (Some(name.clone()), self.lookup_ident(name, env)), + Expr::TypeApply { + function, + type_args, + position, + } => self.infer_type_application(function, type_args, *position, env), + Expr::Identifier(name) => ( + Some(name.clone()), + self.lookup_ident_at(name, env, Some(function)), + ), Expr::Path(path) => { let name = path.to_string(); - let ty = self.lookup_ident(&name, env); + let ty = self.lookup_ident_at(&name, env, Some(function)); (Some(name), ty) } other => (None, self.infer_expr(other, env)), } } + /// Pin declared binders in this call's fresh instantiation [TYPE-GENERICS-APPLY]. + fn infer_type_application( + &mut self, + function: &Expr, + type_args: &[TypeExpr], + position: Option, + env: &TypeEnv, + ) -> (Option, Type) { + let name = match function { + Expr::Identifier(name) => name.clone(), + Expr::Path(path) => path.to_string(), + _ => { + self.errors + .push(TypeError::new("type arguments require a named function")); + return (None, self.infer_expr(function, env)); + } + }; + let Some(applied) = env.applied(&mut self.ctx, &name) else { + return (Some(name.clone()), self.lookup_ident(&name, env)); + }; + let crate::env::AppliedSignature { + ty, + obligations, + params, + bindings, + } = applied; + self.builtin_uses.extend(obligations); + if let Some(position) = position { + self.application_tys.push((position, bindings.clone())); + } + let _ = self + .instantiations + .insert(std::ptr::from_ref(function).addr(), bindings); + if params.len() == type_args.len() { + let binder = self.current_fn_typarams.clone(); + for (param, arg) in params.iter().zip(type_args) { + let written = self.written_type_argument(arg, &binder, position); + self.push_unify(param, &written); + } + } else { + self.errors.push( + TypeError::new(format!( + "function `{name}` takes {} type argument(s), got {}", + params.len(), + type_args.len() + )) + .with_pos(position), + ); + } + (Some(name), ty) + } + + /// Validate written arguments before conversion can discard an invalid + /// application of an enclosing binder [TYPE-GENERICS-APPLY]. + pub(crate) fn written_type_argument( + &mut self, + argument: &TypeExpr, + binder: &HashMap, + position: Option, + ) -> Type { + let written = self.annotation_type(argument, binder, position); + self.validate_type_argument(&written, position); + written + } + + /// Preserve lexical binders in annotations without accepting applications + /// that conversion would otherwise silently drop [TYPE-GENERICS-FN]. + pub(crate) fn annotation_type( + &mut self, + argument: &TypeExpr, + binder: &HashMap, + position: Option, + ) -> Type { + if let Some(name) = applied_type_parameter(argument, binder) { + self.errors.push( + TypeError::new(format!( + "type parameter `{name}` cannot take type arguments" + )) + .with_pos(position), + ); + } + crate::convert::type_expr_to_type(argument, binder) + } + + /// Written arguments name declared types or an enclosing binder, never a + /// new nominal type inferred from a misspelled name [TYPE-GENERICS-APPLY]. + fn validate_type_argument(&mut self, ty: &Type, position: Option) { + match ty { + Type::Con { name, args } => { + let primitive = matches!( + name.as_str(), + names::INT + | names::FLOAT + | names::BOOL + | names::STRING + | names::UNIT + | names::ANY + | names::PTR + | names::MATH_ERROR + | names::CHANNEL + | names::ITERATOR + | names::GPU_BUFFER + ); + if !primitive + && self.ctx.variance_of(name).is_none() + && !self.ctors.values().any(|ctor| ctor.owner == *name) + { + self.errors + .push(TypeError::new(format!("unknown type `{name}`")).with_pos(position)); + } + let arity = self + .ctx + .variance_of(name) + .map(<[_]>::len) + .or_else(|| { + self.ctors + .values() + .find(|ctor| ctor.owner == *name) + .map(|ctor| ctor.type_params.len()) + }) + .or_else(|| { + primitive.then_some(usize::from(matches!( + name.as_str(), + names::CHANNEL | names::ITERATOR | names::GPU_BUFFER + ))) + }); + if let Some(expected) = arity.filter(|expected| *expected != args.len()) { + self.errors.push( + TypeError::new(format!( + "type `{name}` takes {expected} type argument(s), got {}", + args.len() + )) + .with_pos(position), + ); + } + for arg in args { + self.validate_type_argument(arg, position); + } + } + Type::Fun { params, ret } => { + for param in params { + self.validate_type_argument(param, position); + } + self.validate_type_argument(ret, position); + } + _ => {} + } + } + fn infer_method_call( &mut self, - target: &Expr, - method: &str, - arguments: &[Expr], - named: &[NamedArgument], + site: &Expr, + parts: crate::methods::Parts<'_>, + env: &TypeEnv, + ) -> Type { + let receiver = self.infer_expr(parts.target, env); + let field = crate::methods::field_name(parts.method); + if matches!(self.ctx.prune(&receiver), Type::Var(_)) && env.get(parts.method).is_some() { + self.record_method_target(site, crate::methods::Target::Deferred(field.clone())); + return self.infer_deferred_method(site, receiver, &field, &parts, env); + } + let known_field = match self.ctx.prune(&receiver) { + Type::Record { fields, .. } => fields.contains_key(&field), + Type::Con { name, args } => self + .ctx + .record_fields(&name, &args) + .is_some_and(|fields| fields.contains_key(&field)), + Type::Var(_) => env.get(parts.method).is_none(), + _ => false, + }; + if known_field { + self.record_method_target(site, crate::methods::Target::Field(field.clone())); + return self.infer_field_call(&receiver, &field, &parts, env); + } + if env.get(parts.method).is_some() { + self.record_method_target(site, crate::methods::Target::Function); + } + self.infer_ufcs_call(site, &receiver, &parts, env) + } + + fn infer_deferred_method( + &mut self, + site: &Expr, + receiver: Type, + field: &str, + parts: &crate::methods::Parts<'_>, + env: &TypeEnv, + ) -> Type { + let Some(fallback) = env.applied(&mut self.ctx, parts.method) else { + return self.ctx.fresh(); + }; + let _ = self + .instantiations + .insert(std::ptr::from_ref(site).addr(), fallback.bindings.clone()); + let (count, position, written) = match parts.application { + Some((args, position)) => { + if let Some(position) = position { + self.application_tys.push((position, fallback.bindings)); + } + let binder = self.current_fn_typarams.clone(); + let written = args + .iter() + .map(|arg| self.written_type_argument(arg, &binder, position)) + .collect(); + (args.len().to_string(), position, written) + } + None => ("-".to_owned(), None, Vec::new()), + }; + let arguments = parts + .arguments + .iter() + .map(|arg| self.infer_expr(arg, env)) + .collect(); + let named = parts + .named + .iter() + .map(|arg| Type::con(arg.name.clone(), vec![self.infer_expr(&arg.value, env)])) + .collect(); + let result = self.ctx.fresh(); + let relation = Type::con( + "$method-relation", + vec![ + receiver, + fallback.ty, + Type::fun(arguments, result.clone()), + Type::con( + "$obligations", + fallback + .obligations + .into_iter() + .map(|(name, ty)| Type::con(name, vec![ty])) + .collect(), + ), + Type::con("$binders", fallback.params), + Type::con("$written", written), + Type::con("$named", named), + ], + ); + let line = position.map_or(0, |position| position.line); + let column = position.map_or(0, |position| position.column); + self.builtin_uses.push(( + format!( + "{}{count}:{line}:{column}:{field}:{}", + crate::methods::OBLIGATION, + parts.method + ), + relation, + )); + self.resolve_field_uses(); + result + } + + fn infer_field_call( + &mut self, + receiver: &Type, + field: &str, + parts: &crate::methods::Parts<'_>, env: &TypeEnv, ) -> Type { - // UFCS: `t.m(a)` is `m(t, a)`. - let ft = self.lookup_ident(method, env); - let mut args = vec![self.infer_expr(target, env)]; - for a in arguments { - args.push(self.infer_expr(a, env)); + if let Some((args, position)) = parts.application { + self.errors.push( + TypeError::new(format!( + "function `{field}` takes 0 type argument(s), got {}", + args.len() + )) + .with_pos(position), + ); + } + let ft = self.infer_record_field_type(receiver, field); + let args = self.ordered_arg_types(None, &ft, parts.arguments, parts.named, env); + self.apply_named_fn(None, &ft, args) + } + + fn infer_ufcs_call( + &mut self, + site: &Expr, + receiver: &Type, + parts: &crate::methods::Parts<'_>, + env: &TypeEnv, + ) -> Type { + let ft = match parts.application { + Some((arguments, position)) => { + let callee = Expr::Identifier(parts.method.to_owned()); + let (_, ty) = self.infer_type_application(&callee, arguments, position, env); + if let Some(bindings) = self + .instantiations + .remove(&std::ptr::from_ref(&callee).addr()) + { + let _ = self + .instantiations + .insert(std::ptr::from_ref(site).addr(), bindings); + } + ty + } + None => self.lookup_ident_at(parts.method, env, Some(site)), + }; + let tail = match self.ctx.prune(&ft) { + Type::Fun { params, ret } => Type::fun(params.into_iter().skip(1).collect(), *ret), + other => other, + }; + let mut args = vec![receiver.clone()]; + args.extend(self.positional_arg_types(&tail, parts.arguments, env)); + let mut named: Vec<_> = parts.named.iter().collect(); + if let Some(parameters) = self.fn_params.get(parts.method) { + named.sort_by_key(|arg| parameters.iter().position(|name| name == &arg.name)); } for na in named { args.push(self.infer_expr(&na.value, env)); } - self.apply_named_fn(Some(method), &ft, args) + self.apply_named_fn(Some(parts.method), &ft, args) } /// Resolve call arguments to types, reordering named arguments to the @@ -739,7 +1054,12 @@ impl Checker { param.is_named(names::ANY) && (deferred || matches!(self.ctx.prune(argument), Type::Var(_))) } - fn apply_named_fn(&mut self, name: Option<&str>, ft: &Type, args: Vec) -> Type { + pub(crate) fn apply_named_fn( + &mut self, + name: Option<&str>, + ft: &Type, + args: Vec, + ) -> Type { let constrained_builtin = name.is_some_and(|name| { matches!(name, "length" | "isEmpty" | "print" | "toString" | "toGpu") || crate::builtin_constraints::is_gpu_buffer_builtin(name) @@ -865,13 +1185,13 @@ impl Checker { env: &TypeEnv, expected: Option<&Type>, ) -> Type { - let empty = HashMap::new(); + let binder = self.current_fn_typarams.clone(); let mut local = env.child(); let mut ptys = Vec::new(); let wanted = expected_params(expected, parameters.len()); for (i, p) in parameters.iter().enumerate() { let ty = match &p.ty { - Some(te) => type_expr_to_type(te, &empty), + Some(te) => self.annotation_type(te, &binder, te.position.or(position)), None => wanted.get(i).cloned().unwrap_or_else(|| self.ctx.fresh()), }; local.insert(p.name.clone(), crate::ty::Scheme::mono(ty.clone())); @@ -907,7 +1227,7 @@ impl Checker { self.resume_ctx = saved_resume_ctx; let ret = match return_type { Some(te) => { - let r = type_expr_to_type(te, &empty); + let r = self.annotation_type(te, &binder, te.position.or(position)); self.push_assign(&r, &body_ty); r } @@ -936,7 +1256,7 @@ impl Checker { fn infer_constructor( &mut self, name: &str, - type_args: &[osprey_ast::TypeExpr], + type_args: &[TypeExpr], fields: &[FieldAssignment], env: &TypeEnv, ) -> Type { @@ -949,7 +1269,7 @@ impl Checker { if type_args.len() == args.len() { let binder = self.current_fn_typarams.clone(); for (a, te) in args.iter().zip(type_args) { - let written = crate::convert::type_expr_to_type(te, &binder); + let written = self.written_type_argument(te, &binder, te.position); self.push_unify(a, &written); } } else { @@ -1336,11 +1656,10 @@ fn classify(op: &str) -> OpKind { _ => OpKind::Arith, } } - #[cfg(test)] mod tests { use crate::check::check_program; - use crate::testutil::{bad, check, ok}; + use crate::testutil::{bad, bad_with, ok}; use crate::{infer_program, Type}; use osprey_ast::Stmt; use osprey_syntax::parse_program; @@ -1412,23 +1731,23 @@ mod tests { #[test] fn select_is_rejected_until_channel_selection_has_runtime_semantics() { - let errs = bad("fn pick() -> int = select {\n\ + bad_with( + "fn pick() -> int = select {\n\ x => x\n\ _ => 0\n\ - }\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("`select` is not supported"))); + }\n", + "`select` is not supported", + ); } #[test] fn yield_forwards_its_value_type_and_send_checks_the_channel_element() { // Implements [CONCURRENCY-YIELD] and [CONCURRENCY-CHANNEL]. ok("fn hand_off(value: int) -> int = yield value\n"); - let errs = bad("fn wrong(ch: Channel) -> Unit = send(ch, \"wrong\")\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("cannot unify int with string"))); + bad_with( + "fn wrong(ch: Channel) -> Unit = send(ch, \"wrong\")\n", + "cannot unify int with string", + ); let result_channel = bad( "fn sendFailed(ch: Channel>, value: Result) -> Unit = send(ch, value)\n", ); @@ -1524,14 +1843,14 @@ mod tests { // A `Unit` operation discards its arm's value, so a `Result` produced // there would lose its failure with nothing left to observe it. // Implements [EFFECTS-RESUME]. - let errs = bad("effect Sink { drop: fn(int) -> Unit }\n\ + bad_with( + "effect Sink { drop: fn(int) -> Unit }\n\ fn risky(n: int) -> Result = n + 1\n\ fn go() -> int = handle Sink\n\ drop v => risky(v)\n\ - in 0\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("Unit effect operation arm"))); + in 0\n", + "Unit effect operation arm", + ); ok("effect Sink { drop: fn(int) -> Unit }\n\ fn risky(n: int) -> Result = n + 1\n\ fn go() -> int = handle Sink\n\ @@ -1544,20 +1863,20 @@ mod tests { // The handler's own operations are unknown, so the arms cannot be // typed against a signature — but checking must continue rather than // abandon the body, or one typo would hide every later diagnostic. - let errs = bad("fn go() -> int = handle Nowhere\n\ + bad_with( + "fn go() -> int = handle Nowhere\n\ chime => 0\n\ - in 1\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("unknown effect `Nowhere`"))); + in 1\n", + "unknown effect `Nowhere`", + ); } #[test] fn perform_of_an_undeclared_effect_names_the_effect_it_could_not_find() { - let errs = bad("fn ring() -> int = perform Nowhere.chime()\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("unknown effect `Nowhere`"))); + bad_with( + "fn ring() -> int = perform Nowhere.chime()\n", + "unknown effect `Nowhere`", + ); } #[test] @@ -1567,11 +1886,11 @@ mod tests { // a silently ignored annotation. ok("type Box = { v: T }\n\ let good = Box { v: 1 }\n"); - let errs = bad("type Box = { v: T }\n\ - let wrong = Box { v: 1 }\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("takes 1 type argument(s), got 2"))); + bad_with( + "type Box = { v: T }\n\ + let wrong = Box { v: 1 }\n", + "takes 1 type argument(s), got 2", + ); } #[test] @@ -1581,12 +1900,12 @@ mod tests { // graph to bind the qualified name, so the diagnostic must name the // full path — naming only `twice` would send the reader to the wrong // declaration. - let errs = bad("namespace tools;\n\ + bad_with( + "namespace tools;\n\ fn twice(n: int) -> int = (n * 2) ?: 0\n\ - let doubled = tools::twice(21)\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("unknown identifier `tools::twice`"))); + let doubled = tools::twice(21)\n", + "unknown identifier `tools::twice`", + ); } #[test] @@ -1984,11 +2303,11 @@ mod tests { // Codegen has no named-operation argument mapping; reject this source // form instead of silently dropping its value. // [EFFECTS-OP-TYPING] - let errs = bad("effect Logger { log: fn(string) -> Unit }\n\ - fn run() -> Unit !Logger = perform Logger.log(msg: \"hi\")\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("does not support named arguments"))); + bad_with( + "effect Logger { log: fn(string) -> Unit }\n\ + fn run() -> Unit !Logger = perform Logger.log(msg: \"hi\")\n", + "does not support named arguments", + ); } #[test] @@ -2036,10 +2355,10 @@ mod tests { #[test] fn unknown_constructor_with_fields_is_an_error() { - let errs = check("let r = Nonexistent { field: 1 }\n"); - assert!(errs - .iter() - .any(|e| e.message.contains("unknown constructor `Nonexistent`"))); + bad_with( + "let r = Nonexistent { field: 1 }\n", + "unknown constructor `Nonexistent`", + ); } #[test] @@ -2059,8 +2378,7 @@ mod tests { // bare identifier, so `infer_call` takes the `other` branch. ok("let r = (fn(x) => x + 1)(41)\n"); // Calling a non-function value is an error (`apply_fn` non-function arm). - let errs = check("let x = 5\nlet r = x(1)\n"); - assert!(errs.iter().any(|e| e.message.contains("cannot call"))); + bad_with("let x = 5\nlet r = x(1)\n", "cannot call"); } #[test] diff --git a/crates/osprey-types/src/fields.rs b/crates/osprey-types/src/fields.rs new file mode 100644 index 00000000..742bfb4e --- /dev/null +++ b/crates/osprey-types/src/fields.rs @@ -0,0 +1,77 @@ +//! Field constraints carried through ordinary HM schemes. +//! +//! Implements [TYPE-GENERICS-FN] and [TYPE-FIELD-ACCESS-NON-RECORD]: a generic +//! accessor's result must remain related to the record supplied at each call. + +use crate::check::Checker; +use crate::error::TypeError; +use crate::ty::Type; + +const FIELD_OBLIGATION: &str = "$field:"; + +pub(crate) fn obligation_name(field: &str) -> String { + format!("{FIELD_OBLIGATION}{field}") +} + +impl Checker { + /// Resolve instantiated relations until no type or pending work changes. + /// Unresolved receivers remain in the scheme-obligation pipeline. + pub(crate) fn resolve_field_uses(&mut self) { + loop { + let before = self.ctx.bound_count(); + let uses = std::mem::take(&mut self.builtin_uses); + let mut progressed = false; + for (name, ty) in uses { + let solved = self.resolve_method_use(&name, &ty) + || name + .strip_prefix(FIELD_OBLIGATION) + .is_some_and(|field| self.resolve_field_use(field, &ty)); + progressed |= solved; + if !solved { + self.builtin_uses.push((name, ty)); + } + } + if !progressed && self.ctx.bound_count() == before { + return; + } + } + } + + fn resolve_field_use(&mut self, field: &str, relation: &Type) -> bool { + let Type::Fun { params, ret } = relation else { + return false; + }; + let [receiver] = params.as_slice() else { + return false; + }; + let receiver = self.ctx.apply(receiver); + if matches!(receiver, Type::Var(_)) { + return false; + } + match self.resolved_record_field(&receiver, field) { + Ok(actual) => self.push_unify(ret, &actual), + Err(error) => self.errors.push(error), + } + true + } + + pub(crate) fn resolved_record_field( + &self, + receiver: &Type, + field: &str, + ) -> Result { + let fields = match receiver { + Type::Record { fields, .. } => Some(fields.clone()), + Type::Con { name, args } => self.ctx.record_fields(name, args), + _ => None, + } + .ok_or_else(|| { + TypeError::new(format!( + "cannot access field '{field}' on non-struct type {receiver}" + )) + })?; + fields.get(field).cloned().ok_or_else(|| { + TypeError::new(format!("record type `{receiver}` has no field `{field}`")) + }) + } +} diff --git a/crates/osprey-types/src/generic_effects_tests.rs b/crates/osprey-types/src/generic_effects_tests.rs new file mode 100644 index 00000000..b4a55c6e --- /dev/null +++ b/crates/osprey-types/src/generic_effects_tests.rs @@ -0,0 +1,333 @@ +//! Spec-driven assertions for **generic effects** ([EFFECTS-GENERIC-DECL], +//! [EFFECTS-GENERIC-INSTANTIATION], [EFFECTS-GENERIC-RUNTIME], +//! [EFFECTS-GENERIC-ROWS], docs/specs/0017-AlgebraicEffects.md). +//! +//! Discharge across instantiations is already exercised by +//! `effect_rows_tests.rs`; this module states the parts of the generic-effect +//! surface that module does not touch — the DECLARATION's variance positions, +//! the instantiation surface (inferred at `handle`/`perform`, WRITTEN only on +//! an effect row), rows with several generic entries, and the ML twins of each. +//! +//! One boundary is easy to get wrong and is pinned below: a written +//! instantiation is legal on a ROW (`!Stash`) and rejected on a dynamic +//! effect's `handle`/`perform` ([STAGE-SIGNALS-EXACT], spec 0035) — that +//! spelling is reserved for `static effect`, where the instantiation IS the +//! identity. + +use crate::testutil::{spec_cases, variance_position_message}; +use osprey_syntax::{parse_program_with_flavor, Flavor}; + +/// The position diagnostic for an effect declaration's OPERATION. +fn op_position_message(param: &str, marker: &str, position: &str, op: &str, owner: &str) -> String { + variance_position_message(param, marker, position, "operation", op, owner) +} + +/// A generic effect whose instantiation is INFERRED from the handler arm — the +/// only spelling a dynamic effect accepts, since a written instantiation is +/// rejected by [STAGE-SIGNALS-EXACT] (see +/// `a_written_instantiation_on_a_dynamic_effect_is_rejected`). +fn stash_program(answer: &str) -> String { + format!( + r#"effect Stash {{ + take: fn() -> T +}} +fn main() -> Unit = {{ + let held = handle Stash + take => {answer} + in perform Stash.take() + print("${{held}}") +}}"# + ) +} + +// --------------------------------------------------------------------------- +// [EFFECTS-GENERIC-DECL] — operation parameters are inputs, results outputs +// --------------------------------------------------------------------------- + +spec_cases! { + /// "An effect may declare type parameters, including `in` and `out` variance." + a_generic_effect_declares_type_parameters: accepts(Default, r#"effect Stash { + put: fn(T) -> Unit + take: fn() -> T +} +print("declared")"#); + + /// An operation RESULT is an output position: `out T` belongs there. + out_is_legal_in_an_operation_result: accepts(Default, r#"effect Source { + next: fn() -> T +} +print("declared")"#); + + /// An operation PARAMETER is an input position: `out T` is rejected. + out_in_an_operation_parameter_is_rejected: rejects_with(Default, r#"effect Bad { + send: fn(T) -> Unit +} +print("declared")"#, op_position_message("T", "out", "input", "send", "Bad")); + + /// The contravariant mirror: `in T` belongs in an operation parameter. + in_is_legal_in_an_operation_parameter: accepts(Default, r#"effect Sink { + send: fn(T) -> Unit +} +print("declared")"#); + + /// …and is rejected in an operation result. + in_in_an_operation_result_is_rejected: rejects_with(Default, r#"effect Bad { + next: fn() -> T +} +print("declared")"#, op_position_message("T", "in", "output", "next", "Bad")); + + /// An invariant parameter sits in either position. + an_invariant_effect_parameter_is_legal_in_both_positions: accepts(Default, r#"effect Stash { + put: fn(T) -> Unit + take: fn() -> T +} +print("declared")"#); + + /// Two binders on one effect are independent. + an_effect_may_declare_two_binders: accepts(Default, r#"effect Table { + get: fn(K) -> V +} +print("declared")"#); +} + +// --------------------------------------------------------------------------- +// [EFFECTS-GENERIC-INSTANTIATION] — the written instantiation +// --------------------------------------------------------------------------- + +spec_cases! { + /// "Each handler site instantiates a generic effect independently." + a_written_instantiation_is_accepted_on_handle_and_perform: accepts(Default, stash_program("9")); + + /// The same program at a different instantiation. + a_written_string_instantiation_is_accepted: accepts(Default, stash_program("\"ready\"")); + + /// A handler answering `string` cannot discharge the independently inferred + /// `Stash.take` requirement of a helper ([EFFECTS-GENERIC-RUNTIME]). + a_handler_arm_disagreeing_with_the_body_is_rejected: rejects_with(Default, r#"effect Stash { + take: fn() -> T +} +fn doubled() -> int = (perform Stash.take()) * 2 ?: 0 +fn main() -> Unit = { + let held = handle Stash + take => "ready" + in doubled() + print("${held}") +}"#, "unhandled effect operations at program entry: Stash.take"); + + /// The instantiation may also be left to inference at both sites. + an_inferred_instantiation_is_accepted: accepts(Default, stash_program("9")); +} + +/// A written instantiation on a DYNAMIC effect's `perform` is rejected outright +/// — the spelling belongs to `static effect`, whose identity IS the +/// instantiation ([STAGE-SIGNALS-EXACT], pinned end-to-end by +/// `examples/failscompilation/stage_signal_instantiated_dynamic_effect.ospo`). +#[test] +fn a_written_instantiation_on_a_dynamic_perform_is_rejected() { + let parsed = parse_program_with_flavor( + r#"effect Stash { + take: fn() -> T +} +fn main() -> Unit = { + let held = handle Stash + take => 9 + in perform Stash.take() + print("${held}") +}"#, + Flavor::Default, + ); + assert_eq!(parsed.errors.len(), 1, "{:?}", parsed.errors); + assert!( + parsed.errors.iter().any(|error| error + .message + .starts_with("`perform Stash` names an instantiation of dynamic effect `Stash`")), + "{:?}", + parsed.errors + ); +} + +spec_cases! { + /// The same restriction at the `handle` site. + a_written_instantiation_on_a_dynamic_handle_is_rejected: rejected_somehow(Default, r#"effect Stash { + take: fn() -> T +} +fn main() -> Unit = { + let held = handle Stash + take => 9 + in perform Stash.take() + print("${held}") +}"#); + + /// A handler discharges only the instantiation it was INFERRED at: a handler + /// answering `int` does not serve a `Stash.put`. + an_inferred_handler_instantiation_discharges_only_its_own_operations: rejected_somehow(Default, r#"effect Stash { + put: fn(T) -> Unit +} +fn store() = perform Stash.put("text") +fn main() -> Unit = { + let done = handle Stash + put v => print("stored ${v + 1 ?: 0}") + in store() + print("${done}") +}"#); + + /// Two handlers at two instantiations coexist in ONE program: "Each handler + /// site instantiates a generic effect independently", and each infers its own. + two_instantiations_of_one_effect_coexist: accepts(Default, r#"effect Stash { + take: fn() -> T +} +fn main() -> Unit = { + let n = handle Stash + take => 1 + in perform Stash.take() + let s = handle Stash + take => "one" + in perform Stash.take() + print("${n}${s}") +}"#); + + /// A row's written instantiation IS checked for arity — the row is the surface + /// that keeps the angle spelling, so the count contract lives there. + an_effect_row_instantiation_arity_is_checked: rejected_somehow(Default, r#"effect Stash { + put: fn(T) -> Unit +} +fn store() -> Unit !Stash = perform Stash.put(42) +fn main() -> Unit = { + let done = handle Stash + put v => print("stored") + in store() + print("${done}") +}"#); +} + +// --------------------------------------------------------------------------- +// [EFFECTS-GENERIC-ROWS] — a row entry pins an instantiation +// --------------------------------------------------------------------------- + +spec_cases! { + /// "A row entry such as `!Stash` pins the generic effect instantiation + /// used by performs in that function body." + a_row_entry_pins_the_instantiation: accepts(Default, r#"effect Stash { + put: fn(T) -> Unit +} +fn store() -> Unit !Stash = perform Stash.put(42) +fn main() -> Unit = { + let done = handle Stash + put v => print("stored ${v}") + in store() + print("${done}") +}"#); + + /// A body contradicting its own pinned row is rejected, naming the row. + a_body_contradicting_its_pinned_row_is_rejected: rejects_with(Default, r#"effect Stash { + put: fn(T) -> Unit +} +fn store() -> Unit !Stash = perform Stash.put("text") +fn main() -> Unit = { + let done = handle Stash + put v => print("stored") + in store() + print("${done}") +}"#, "outside its declared row"); + + /// "A bare generic entry leaves its arguments to inference." + a_bare_generic_row_entry_leaves_its_arguments_to_inference: accepts(Default, r#"effect Stash { + put: fn(T) -> Unit +} +fn store() -> Unit !Stash = perform Stash.put(42) +fn main() -> Unit = { + let done = handle Stash + put v => print("stored ${v}") + in store() + print("${done}") +}"#); + + /// A bracketed row may carry SEVERAL generic entries, each at its own + /// instantiation ([EFFECTS-GENERIC-ROWS], `effectSet`). + a_bracketed_row_carries_several_generic_entries: accepts(Default, r#"effect Read { + get: fn() -> T +} +effect Write { + put: fn(T) -> Unit +} +fn copy() -> Unit ![Read, Write] = perform Write.put("${perform Read.get()}") +fn main() -> Unit = { + let done = handle Read + get => 7 + in handle Write + put v => print("wrote ${v}") + in copy() + print("${done}") +}"#); +} + +// --------------------------------------------------------------------------- +// [EFFECTS-GENERIC-RUNTIME] — the checker-visible half of the erased ABI +// --------------------------------------------------------------------------- + +spec_cases! { + /// "Static discharge distinguishes resolved instantiations" — an undischarged + /// operation is named AT its instantiation at program entry, which is what the + /// runtime's mangled key (`Stash$string`) mirrors. + an_unhandled_generic_operation_is_named_at_its_instantiation: rejects_with(Default, r#"effect Stash { + put: fn(T) -> Unit +} +fn store() = perform Stash.put("text") +fn main() -> Unit = store()"#, "Stash.put"); +} + +// --------------------------------------------------------------------------- +// [FLAVOR-ML-GENERICS] — the ML spellings of the same effect surface +// --------------------------------------------------------------------------- + +spec_cases! { + /// "Effects use the same binder form: `effect Stash T`." ML operation arrows + /// are effectful (`=>`), as the corpus writes them. + ml_effect_binders_are_juxtaposed: accepts(Ml, "effect Stash T\n take : Unit => T\nprint \"declared\"\n"); + + /// "Effect rows apply arguments with angles: `! Stash`." + ml_rows_apply_arguments_with_angles: accepts(Ml, "effect Stash T\n put : T => Unit\n\ + store : Unit -> Unit ! Stash\n\ + store () = perform Stash.put 42\n\ + main () =\n\ + \x20 done = handle Stash\n\ + \x20 put v => print \"stored\"\n\ + \x20 in store ()\n\ + \x20 print \"${done}\"\n"); + + /// A bracketed ML row carries several generic entries: `! [Read, Write]`. + ml_a_bracketed_row_carries_several_generic_entries: accepts(Ml, "effect Read T\n get : Unit => T\n\ + effect Write T\n put : T => Unit\n\ + copy : Unit -> Unit ! [Read, Write]\n\ + copy () = perform Write.put \"${perform Read.get ()}\"\n"); + + /// The ML twin of the operation-position rule. + ml_out_in_an_operation_parameter_is_rejected: rejects_with(Ml, "effect Bad out T\n send : T => Unit\nprint \"declared\"\n", op_position_message("T", "out", "input", "send", "Bad")); + + /// The ML twin of the written-instantiation rules. + ml_a_written_instantiation_is_accepted_on_handle_and_perform: accepts(Ml, "effect Stash T\n take : Unit => T\n\ + main () =\n\ + \x20 held = handle Stash\n\ + \x20 take => 9\n\ + \x20 in perform Stash.take ()\n\ + \x20 print \"${held}\"\n"); +} + +// --------------------------------------------------------------------------- +// Spec-vs-language drift, stated as a test rather than left as prose +// --------------------------------------------------------------------------- + +spec_cases! { + /// [EFFECTS-GENERIC-INSTANTIATION]'s own example writes the handled body after + /// `do`, not `in`. The language accepts only `in` today; the rename is plan + /// 0027 phase 0. One of the two sources is stale, and this test says which. + the_spec_writes_a_handled_body_after_do: accepts(Default, r#"effect Stash { + put: fn(T) -> Unit + take: fn() -> T +} +let word = handle Stash + put value => print(value) + take => "ready" +do perform Stash.take() +print(word)"#); +} diff --git a/crates/osprey-types/src/generics_apply_ml_tests.rs b/crates/osprey-types/src/generics_apply_ml_tests.rs new file mode 100644 index 00000000..8f5f0f82 --- /dev/null +++ b/crates/osprey-types/src/generics_apply_ml_tests.rs @@ -0,0 +1,177 @@ +//! The ML half of **call-site type application** ([TYPE-GENERICS-APPLY], +//! docs/specs/0004-TypeSystem.md; spelling in [FLAVOR-ML-GENERICS], +//! docs/specs/0024-MLFlavorSyntax.md). +//! +//! Both surfaces lower to the same canonical node ([FLAVOR-BOUNDARY]), so every +//! Default assertion in `generics_apply_tests.rs` has a twin here and the two +//! flavors must agree down to the diagnostic sentence. + +use crate::testutil::{fn_arity_message, spec_cases}; + +/// The ML twin of `IDENTITY`: the binder lives on the signature line. +const ML_IDENTITY: &str = "identity : T -> T\nidentity x = x\n"; +/// The ML twin of `PICK`. +const ML_PICK: &str = "pick : (T, U) -> T\npick (first, second) = first\n"; + +spec_cases! { + /// "Call-site type arguments attach to the callee name and precede the + /// juxtaposed argument: `identity 5`." + ml_type_application_pins_a_binder: accepts(Ml, format!( + r#"{ML_IDENTITY}pinned = identity 5 +print "${{pinned}}""# + )); + + /// The ML twin of the no-parameter-position case. + ml_type_application_pins_a_binder_no_argument_mentions: accepts(Ml, r#"empty : Unit -> List +empty () = [] +held = empty () +print "${length held}""#); + + /// Parenthesised ML argument tuples take type arguments too. + ml_type_application_binds_binders_positionally: accepts(Ml, format!( + r#"{ML_PICK}kept = pick (1, "two") +print "${{kept}}""# + )); + + /// The swapped ML twin must be rejected. + ml_swapped_type_arguments_are_rejected: rejects_with(Ml, format!( + r#"{ML_PICK}kept = pick (1, "two") +print "${{kept}}""# + ), "cannot unify"); + + /// The arity contract lives in the shared core, so ML reports the same + /// sentence as Default ([FLAVOR-BOUNDARY]). + ml_type_application_arity_is_checked: rejects_with(Ml, format!( + r#"{ML_IDENTITY}pinned = identity 5 +print "${{pinned}}""# + ), fn_arity_message("identity", 1, 2)); + + /// "A binding without a signature cannot declare function type parameters" — + /// and so cannot be applied at a call site either. + ml_a_binding_without_a_signature_takes_no_type_arguments: rejects_with(Ml, r#"plain x = x +pinned = plain 5 +print "${pinned}""#, fn_arity_message("plain", 0, 1)); + + /// A nested ML type argument closes with `>>` here too. + ml_a_type_argument_may_itself_be_generic: accepts(Ml, format!( + r#"{ML_IDENTITY}held = identity> [1, 2] +print "${{length held}}""# + )); + + /// The ML control: `<` stays comparison under layout juxtaposition. + ml_a_comparison_is_not_type_application: accepts(Ml, r#"lower (a, b) = a < b +flag = lower (1, 2) +print "${toString flag}""#); + + /// The ML gap rule matches Default's: `identity 5` is not application. + ml_a_gap_before_the_angle_is_not_type_application: rejected_somehow(Ml, format!( + r#"{ML_IDENTITY}pinned = identity 5 +print "${{pinned}}""# + )); + + /// ML variance markers are declaration-site only, at the call site as well. + ml_a_variance_marker_at_a_call_site_is_rejected: rejected_somehow(Ml, format!( + r#"{ML_IDENTITY}pinned = identity 5 +print "${{pinned}}""# + )); + + /// Curry-by-default: the written arguments attach to the callee name, so a + /// curried application takes them exactly once, at the front. + ml_type_application_survives_curried_application: accepts(Ml, r#"pick : T -> U -> T +pick first second = first +kept = pick 1 "two" +print "${kept}""#); + + /// The ML twin of the value-argument contradiction. + ml_type_application_contradicting_the_value_argument_is_rejected: rejects_with(Ml, format!( + r#"{ML_IDENTITY}pinned = identity "text" +print "${{pinned}}""# + ), "cannot unify int with string"); + + /// The ML twin of the expected-type contradiction, pinned by a signature. + ml_type_application_contradicting_the_expected_type_is_rejected: rejects_with(Ml, format!( + r#"{ML_IDENTITY}pinned : string +pinned = identity 5 +print "${{pinned}}""# + ), "cannot unify"); + + /// The ML twin of "too few type arguments". + ml_too_few_type_arguments_are_rejected_by_count: rejects_with(Ml, format!( + r#"{ML_PICK}kept = pick (1, "two") +print "${{kept}}""# + ), fn_arity_message("pick", 2, 1)); + + /// The ML twin of the lambda rule: `\x => x` declares no binder. + ml_a_lambda_binding_takes_no_type_arguments: rejects_with(Ml, r#"f = \x => x +pinned = f 5 +print "${pinned}""#, fn_arity_message("f", 0, 1)); + + /// A declared record is a type argument in ML too. + ml_a_declared_record_may_be_a_type_argument: accepts(Ml, format!( + r#"type Box T = + value : T +{ML_IDENTITY}held = identity> (Box(value = 7)) +print "${{held.value}}""# + )); + + /// A function type is a type argument in ML too. + ml_a_function_type_may_be_a_type_argument: accepts(Ml, format!( + r#"{ML_IDENTITY}double n = n * 2 ?: 0 +f = identity<(int) -> int> double +print "${{f 21}}""# + )); + + /// Two written instantiations of one ML binding coexist. + ml_two_written_instantiations_coexist: accepts(Ml, format!( + r#"{ML_IDENTITY}n = identity 5 +s = identity "os" +print "${{n}} ${{s}}""# + )); + + /// Written arguments do not excuse a wrong value argument: applying `Unit` + /// where `int` was pinned still fails. The layer that catches it is not pinned + /// — under curry-by-default this reads as either an arity or a unification + /// failure, and both are truthful rejections. + ml_writing_type_arguments_does_not_excuse_the_value_argument: rejected_somehow(Ml, format!( + r#"{ML_IDENTITY}pinned = identity () +print "${{pinned}}""# + )); + + /// A pipe target has no juxtaposed argument, so it is not an application site. + ml_type_arguments_in_a_pipe_target_are_rejected: rejected_somehow(Ml, format!( + r#"{ML_IDENTITY}pinned = 5 |> identity +print "${{pinned}}""# + )); + + /// An undeclared type name is not a type argument. + ml_an_undeclared_type_argument_is_rejected: rejected_somehow(Ml, format!( + r#"{ML_IDENTITY}pinned = identity 5 +print "${{pinned}}""# + )); + + /// An empty argument list is not a type list in ML either. + ml_an_empty_type_argument_list_is_rejected: rejected_somehow(Ml, format!( + r#"{ML_IDENTITY}pinned = identity<> 5 +print "${{pinned}}""# + )); + + /// Type application inside a lambda body and a match arm. + ml_type_application_works_inside_lambdas_and_match_arms: accepts(Ml, format!( + r#"{ML_IDENTITY}wrap = \n => identity n +chosen = match wrap 1 + 1 => identity "one" + _ => identity "other" +print "${{chosen}}""# + )); + + /// Call-site application coexists with an inferred generic effect in ML too. + ml_type_application_coexists_with_generic_effect_instantiation: accepts(Ml, format!( + r#"effect Stash T + take : Unit => T +{ML_IDENTITY}main () = + held = handle Stash + take => identity 9 + in perform Stash.take () + print "${{held}}""# + )); +} diff --git a/crates/osprey-types/src/generics_apply_tests.rs b/crates/osprey-types/src/generics_apply_tests.rs new file mode 100644 index 00000000..e9c04502 --- /dev/null +++ b/crates/osprey-types/src/generics_apply_tests.rs @@ -0,0 +1,242 @@ +//! Spec-driven assertions for **call-site type application** +//! ([TYPE-GENERICS-APPLY], docs/specs/0004-TypeSystem.md; the ML spelling is +//! [FLAVOR-ML-GENERICS], docs/specs/0024-MLFlavorSyntax.md). +//! +//! Type arguments have three positions in the language: the declaration binder +//! (`fn pick`), the construction site (`Box { … }`) and the call +//! site. Written arguments pin binders directly, including when value +//! arguments provide no constraint. An expected result type can also pin a +//! binder appearing in the return; an unconstrained immutable binding generalizes. +//! Tracked by plan 0015. +//! +//! Each test states one spec sentence and drives the compiler's public surface +//! — parse, then check — so a snippet the PARSER rejects is reported as a +//! syntax failure instead of being mistaken for a checker rejection. + +use crate::testutil::{fn_arity_message, spec_cases}; + +/// `fn identity` — one binder, mentioned by the parameter and the return. +const IDENTITY: &str = "fn identity(x: T) -> T = x\n"; +/// `fn pick` — two binders, so written ORDER is observable. +const PICK: &str = "fn pick(first: T, second: U) -> T = first\n"; +/// A binder absent from parameters: written arguments or result context can pin it. +const EMPTY: &str = "fn empty() -> List = []\n"; + +// --------------------------------------------------------------------------- +// The accepted form — Default flavor +// --------------------------------------------------------------------------- + +spec_cases! { + /// "`identity(5)` pins the callee's declared binders positionally." + type_application_pins_a_binder_at_a_call_site: accepts(Default, format!(r#"{IDENTITY}print("${{identity(5)}}")"#)); + + /// Written arguments pin a binder absent from parameters when nothing else + /// in the program constrains it. + type_application_pins_a_binder_no_argument_mentions: accepts(Default, format!(r#"{EMPTY}print("${{length(empty())}}")"#)); + + /// An immutable binding generalizes an unpinned element type. Reading the + /// list's length does not require a concrete element instantiation. + an_unpinned_binder_generalizes_at_an_immutable_binding: accepts(Default, format!( + r#"{EMPTY}let held = empty() +print("${{length(held)}}")"# + )); + + /// "the written arguments unify with the instantiation the value arguments and + /// the expected type would otherwise infer" — agreement is accepted. + type_application_agreeing_with_the_value_argument_is_accepted: accepts(Default, format!( + r#"{IDENTITY}let n: int = identity(5) +print("${{n}}")"# + )); + + /// Binders are pinned LEFT TO RIGHT. + type_application_binds_binders_positionally: accepts(Default, format!( + r#"{PICK}let kept = pick(1, "two") +print("${{kept}}")"# + )); + + /// The swapped twin of the case above must NOT type-check. + swapped_type_arguments_are_rejected: rejects_with(Default, format!( + r#"{PICK}let kept = pick(1, "two") +print("${{kept}}")"# + ), "cannot unify"); + + /// A type argument may itself be generic: the `>>` closing two argument lists + /// must lex as two closers, not as one shift operator. + a_type_argument_may_itself_be_generic: accepts(Default, format!(r#"{IDENTITY}print("${{length(identity>([1, 2]))}}")"#)); + + /// Three closers in a row (`>>>`), and a two-argument constructor inside. + a_type_argument_may_nest_two_levels_deep: accepts(Default, format!( + r#"{IDENTITY}let groups = identity>>({{"a": [1]}}) +print("${{mapLength(groups)}}")"# + )); + + /// A declared record is as good a type argument as a primitive. + a_declared_record_may_be_a_type_argument: accepts(Default, format!( + r#"type Box = {{ value: T }} +{IDENTITY}let boxed = identity>(Box {{ value: 7 }}) +print("${{boxed.value}}")"# + )); + + /// A function type is a type, so it may be written as a type argument. + a_function_type_may_be_a_type_argument: accepts(Default, format!( + r#"{IDENTITY}fn double(n) = n * 2 ?: 0 +let f = identity<(int) -> int>(double) +print("${{f(21)}}")"# + )); + + /// `Result` is a type argument like any other — and writing it does NOT + /// unwrap the failure channel ([TYPE-VARIANCE-ASSIGN]). + a_result_type_may_be_a_type_argument: accepts(Default, format!( + r#"{IDENTITY}let quotient = identity>(20 * 5) +print("${{quotient ?: 0}}")"# + )); + + /// Type application is an expression: it nests inside another call. + type_application_nests_inside_another_call: accepts(Default, format!(r#"{IDENTITY}print("${{identity(identity(5))}}")"#)); + + /// Two written instantiations of ONE binding coexist — monomorphisation is + /// per call site ([TYPE-GENERICS-FN]). + two_written_instantiations_coexist_in_one_program: accepts(Default, format!(r#"{IDENTITY}print("${{identity(5)}} ${{identity("os")}}")"#)); + + /// Named arguments are orthogonal to type arguments. + type_application_composes_with_named_arguments: accepts(Default, format!( + r#"{PICK}let kept = pick(first: 1, second: "two") +print("${{kept}}")"# + )); + + /// Receiver-first (UFCS) dispatch keeps the type arguments on the member name. + type_application_composes_with_receiver_first_dispatch: accepts(Default, r#"fn headOr(items: List, fallback: T) -> T = items.listGet(0) ?: fallback +let first = [1, 2].headOr(0) +print("${first}")"#); + + /// A generic HOF's binder may be pinned while the callback stays inferred. + type_application_pins_a_generic_higher_order_call: accepts(Default, r#"fn also(x: T, f: (T) -> T) -> T = f(x) +fn double(n) = n * 2 ?: 0 +print("${also(21, double)}")"#); + + /// The binder in scope may be applied to a RECURSIVE call inside the generic + /// function's own body. + a_binder_in_scope_may_be_applied_recursively: accepts(Default, r#"fn repeatOf(value: T, times: int) -> T = match times { + 0 => value + _ => repeatOf(value, times - 1 ?: 0) +} +print("${repeatOf(7, 3)}")"#); + + /// Inside a lambda body, and inside a match arm — no statement-level special + /// case. + type_application_works_inside_lambdas_and_match_arms: accepts(Default, format!( + r#"{IDENTITY}let wrap = |n| => identity(n) +let chosen = match wrap(1) {{ + 1 => identity("one") + _ => identity("other") +}} +print("${{chosen}}")"# + )); + + /// Call-site application coexists with a generic effect whose instantiation is + /// INFERRED — a written one is rejected on a dynamic effect ([STAGE-SIGNALS-EXACT]), + /// so the `<` after a callee name must not be read as an effect mention. + type_application_coexists_with_generic_effect_instantiation: accepts(Default, format!( + r#"effect Stash {{ + take: fn() -> T +}} +{IDENTITY}fn main() -> Unit = {{ + let held = handle Stash + take => identity(9) + in perform Stash.take() + print("${{held}}") +}}"# + )); +} + +// --------------------------------------------------------------------------- +// The rejections +// --------------------------------------------------------------------------- + +spec_cases! { + /// "A written argument that contradicts the value arguments … is a type error, + /// not a silently ignored annotation." + type_application_contradicting_the_value_argument_is_rejected: rejects_with(Default, format!(r#"{IDENTITY}print("${{identity("text")}}")"#), "cannot unify int with string"); + + /// A contradiction against the EXPECTED type is caught the same way, even + /// though the value argument agrees with what was written. + type_application_contradicting_the_expected_type_is_rejected: rejects_with(Default, format!( + r"{IDENTITY}let s: string = identity(5) +print(s)" + ), "cannot unify"); + + /// A contradiction one level down: the written `List` disagrees with a + /// `List` value. + a_nested_type_argument_contradiction_is_rejected: rejects_with(Default, format!(r#"{IDENTITY}print("${{length(identity>(["a"]))}}")"#), "cannot unify"); + + /// "The count must equal the callee's declared binder count." + too_many_type_arguments_are_rejected_by_count: rejects_with(Default, format!(r#"{IDENTITY}print("${{identity(5)}}")"#), fn_arity_message("identity", 1, 2)); + + /// The same rule in the other direction: two binders, one written argument. + too_few_type_arguments_are_rejected_by_count: rejects_with(Default, format!( + r#"{PICK}let kept = pick(1, "two") +print("${{kept}}")"# + ), fn_arity_message("pick", 2, 1)); + + /// "A callee that declares no binders … takes no type arguments." An + /// unannotated function is implicitly polymorphic, which is NOT a binder. + a_function_without_a_binder_takes_no_type_arguments: rejects_with(Default, r#"fn plain(x) = x +print("${plain(5)}")"#, fn_arity_message("plain", 0, 1)); + + /// A lambda binding declares no binders either. + a_lambda_binding_takes_no_type_arguments: rejects_with(Default, r#"let f = |x| => x +print("${f(5)}")"#, fn_arity_message("f", 0, 1)); + + /// A parameter holding a function value declares no binders. + a_function_valued_parameter_takes_no_type_arguments: rejects_with(Default, r#"fn apply(f, x) = f(x) +print("${apply(|n| => n, 5)}")"#, fn_arity_message("f", 0, 1)); + + /// Value arity is still checked when type arguments are written: the two + /// argument lists are independent contracts. + writing_type_arguments_does_not_excuse_a_missing_value_argument: rejected_somehow(Default, format!(r#"{IDENTITY}print("${{identity()}}")"#)); + + /// "Variance markers are not permitted, exactly as on the binder itself." + a_covariance_marker_at_a_call_site_is_rejected: rejected_somehow(Default, format!(r#"{IDENTITY}print("${{identity(5)}}")"#)); + + /// The contravariant half of the same rule. + a_contravariance_marker_at_a_call_site_is_rejected: rejected_somehow(Default, format!(r#"{IDENTITY}print("${{identity(5)}}")"#)); + + /// A type argument names a TYPE. An undeclared name is not one. + an_undeclared_type_argument_is_rejected: rejected_somehow(Default, format!(r#"{IDENTITY}print("${{identity(5)}}")"#)); + + /// An empty argument list is not a type list. + an_empty_type_argument_list_is_rejected: rejected_somehow(Default, format!(r#"{IDENTITY}print("${{identity<>(5)}}")"#)); + + /// "the matching `>` immediately precedes the call's argument list" — with no + /// argument list there is no type application, so a bare `identity` value + /// is not the way to specialise a function value. + type_arguments_without_an_argument_list_are_rejected: rejected_somehow(Default, format!( + r#"{IDENTITY}let g = identity +print("${{g(5)}}")"# + )); + + /// "recognised when the `<` immediately follows the callee name" — a gap makes + /// it the comparison operator again, and `identity (5)` is then nonsense. + a_gap_before_the_angle_is_not_type_application: rejected_somehow(Default, format!(r#"{IDENTITY}print("${{identity (5)}}")"#)); +} + +// --------------------------------------------------------------------------- +// Positive controls — `<` stays the comparison operator everywhere else +// --------------------------------------------------------------------------- + +spec_cases! { + /// "Everywhere else `<` is the comparison operator, so `a < b` and + /// `f(a) < g(b)` are unaffected." Green today; must stay green after. + a_comparison_is_not_type_application: accepts(Default, format!( + r#"{IDENTITY}fn lower(a, b) = a < b +print("${{toString(lower(1, 2))}} ${{toString(identity(3) < identity(4))}}")"# + )); + + /// A parenthesised relational chain keeps working ("must parenthesise"). + a_parenthesised_relational_chain_still_checks: accepts(Default, r#"let flag = (1 < 2) == true +print("${toString(flag)}")"#); + + /// Inference without written arguments is untouched: one binder still serves + /// two instantiations ([TYPE-GENERICS-FN]). + omitting_type_arguments_still_infers_each_instantiation: accepts(Default, format!(r#"{IDENTITY}print("${{identity(5)}} ${{identity("os")}}")"#)); +} diff --git a/crates/osprey-types/src/generics_decl_tests.rs b/crates/osprey-types/src/generics_decl_tests.rs new file mode 100644 index 00000000..4a9f03a2 --- /dev/null +++ b/crates/osprey-types/src/generics_decl_tests.rs @@ -0,0 +1,222 @@ +//! Spec-driven assertions for **declared generics**: the binder and the +//! construction site ([TYPE-GENERICS-DECL], [GENERICS-CTOR-ARITY], +//! [TYPE-GENERICS-FN], docs/specs/0004-TypeSystem.md; ML spellings in +//! [FLAVOR-ML-GENERICS], docs/specs/0024-MLFlavorSyntax.md). +//! +//! The call site is stated separately in `generics_apply_tests.rs`; this module +//! covers the two positions that already ship, and the permutations of each +//! sentence the spec writes about them. + +use crate::testutil::{accepts, ctor_arity_message, rejects_with, spec_cases}; +use osprey_syntax::Flavor; + +/// One binder, one field. +const BOX: &str = "type Box = { value: T }\n"; +/// Two binders across two fields — order is observable. +const PAIR: &str = "type Pair = { first: T, second: U }\n"; + +// --------------------------------------------------------------------------- +// [TYPE-GENERICS-DECL] — binders span every variant field +// --------------------------------------------------------------------------- + +spec_cases! { + /// "`type Pair = …` binds `T`/`U` across every variant field." + a_binder_spans_every_variant_field: accepts(Default, r#"type Holder = Full { left: T, right: U } | Half { only: T } | None +fn label(h: Holder) = match h { + Full { left, right } => right + Half { only } => "half" + None => "none" +} +print(label(Full { left: 1, right: "one" }))"#); + + /// One binder used twice in one variant pins both fields to one type. + one_binder_used_twice_pins_both_fields: rejects_with(Default, r#"type Both = { left: T, right: T } +let b = Both { left: 1, right: "two" } +print("${b.left}")"#, "cannot unify"); + + /// "A construction site may apply explicit type arguments … which unify with + /// the instantiation the fields would otherwise infer." + a_construction_site_may_pin_its_instantiation: accepts(Default, format!( + r#"{PAIR}let p = Pair {{ first: 1, second: "a" }} +print("${{p.first}}${{p.second}}")"# + )); + + /// "an argument that contradicts a field is a type error." + a_construction_type_argument_contradicting_a_field_is_rejected: rejects_with(Default, format!( + r#"{BOX}let b = Box {{ value: "text" }} +print("${{b.value}}")"# + ), "cannot unify"); + + /// The contradiction is caught in the second position as well. + a_contradiction_in_the_second_type_argument_is_rejected: rejects_with(Default, format!( + r#"{PAIR}let p = Pair {{ first: 1, second: "a" }} +print("${{p.first}}")"# + ), "cannot unify"); + + /// A nested instantiation is pinned the same way. + a_nested_construction_type_argument_is_checked: accepts(Default, format!( + r#"{BOX}let nested = Box> {{ value: Box {{ value: 7 }} }} +print("${{nested.value.value}}")"# + )); +} + +// --------------------------------------------------------------------------- +// [GENERICS-CTOR-ARITY] — the count is a contract with the declaration +// --------------------------------------------------------------------------- + +spec_cases! { + /// "`Box { v: 1 }` is rejected with `takes 1 type argument(s), got 2`." + too_many_construction_type_arguments_are_rejected: rejects_with(Default, format!( + r#"{BOX}let b = Box {{ value: 1 }} +print("${{b.value}}")"# + ), ctor_arity_message("Box", 1, 2)); + + /// The other direction: two binders, one written argument. + too_few_construction_type_arguments_are_rejected: rejects_with(Default, format!( + r#"{PAIR}let p = Pair {{ first: 1, second: "a" }} +print("${{p.first}}")"# + ), ctor_arity_message("Pair", 2, 1)); + + /// A type that declares NO binders accepts no type arguments. + a_non_generic_type_takes_no_construction_type_arguments: rejects_with(Default, r#"type Plain = { value: int } +let p = Plain { value: 1 } +print("${p.value}")"#, ctor_arity_message("Plain", 0, 1)); + + /// Omitting the arguments entirely stays legal — they are optional, and + /// inference supplies them. + omitting_construction_type_arguments_still_infers: accepts(Default, format!( + r#"{BOX}let n = Box {{ value: 1 }} +let s = Box {{ value: "one" }} +print("${{n.value}}${{s.value}}")"# + )); +} + +// --------------------------------------------------------------------------- +// [TYPE-GENERICS-FN] — what a function binder means +// --------------------------------------------------------------------------- + +/// "A binder makes every use of `T` in the signature the SAME inference +/// variable" — so two arguments at different types are rejected. +#[test] +fn one_function_binder_relates_two_parameters() { + accepts( + Flavor::Default, + r#"fn pick(first: T, second: T) -> T = first +print("${pick(10, 20)} ${pick("left", "right")}")"#, + ); + rejects_with( + Flavor::Default, + r#"fn pick(first: T, second: T) -> T = first +print("${pick(10, "twenty")}")"#, + "cannot unify", + ); +} + +spec_cases! { + /// "without it, `T` in an annotation names a nominal type" — an undeclared + /// nominal name is not a type. + an_unbound_annotation_name_is_nominal_not_a_binder: rejected_somehow(Default, r#"fn nom(a: T) -> T = a +print("${nom(1)}")"#); +} + +/// …and when that nominal name IS declared, it binds nothing: the function is +/// monomorphic in it. +#[test] +fn a_declared_nominal_name_makes_the_function_monomorphic() { + accepts( + Flavor::Default, + r#"type Tag = { id: int } +fn nom(a: Tag) -> Tag = a +print("${nom(Tag { id: 1 }).id}")"#, + ); + rejects_with( + Flavor::Default, + r#"type Tag = { id: int } +fn nom(a: Tag) -> Tag = a +print("${nom(1)}")"#, + "cannot unify", + ); +} + +spec_cases! { + /// "HM inference is unchanged: unannotated functions stay implicitly + /// polymorphic." + an_unannotated_function_stays_implicitly_polymorphic: accepts(Default, r#"fn id(x) = x +print("${id(5)} ${id("os")} ${toString(id(true))}")"#); + + /// Two binders are independent: they may be instantiated at the same type or + /// at different ones. + two_binders_are_independent: accepts(Default, r#"fn pair(first: T, second: U) -> T = first +print("${pair(1, "a")} ${pair(1, 2)}")"#); + + /// A binder list names DISTINCT parameters; a repeat has no meaning. + a_repeated_binder_name_is_rejected: rejected_somehow(Default, r#"fn dup(first: T, second: T) -> T = first +print("${dup(1, 2)}")"#); + + /// An empty binder list is not a binder list. + an_empty_binder_list_is_rejected: rejected_somehow(Default, r#"fn none<>(x) = x +print("${none(1)}")"#); + + /// A binder may appear in the return position only — the shape call-site type + /// application exists to serve ([TYPE-GENERICS-APPLY]). + a_binder_may_appear_in_the_return_position_only: accepts(Default, r#"fn empty() -> List = [] +let held: List = empty() +print("${length(held)}")"#); +} + +// --------------------------------------------------------------------------- +// [TYPE-GENERICS-FN] — a generic function as a VALUE +// --------------------------------------------------------------------------- + +spec_cases! { + /// "specialised wherever its ABI can be fixed: by a consuming slot, by a call + /// alias" — the alias form. + a_generic_function_binds_as_a_call_alias: accepts(Default, r#"fn identity(x: T) -> T = x +let g = identity +print("${g(5)} ${g("os")}")"#); + + /// …and the consuming-slot form: a generic function passed by name to a HOF. + a_generic_function_specialises_into_a_consuming_slot: accepts(Default, r#"fn identity(x: T) -> T = x +fn also(x, f) = f(x) +print("${also(5, identity)} ${also("os", identity)}")"#); + + /// "`fn pick() = |x| => x` followed by `let f = pick()` therefore serves + /// `f(7)`, `f("os")` and `f(2.5)` from one binding." + a_returned_generic_lambda_serves_every_call_site_of_its_binding: accepts(Default, r#"fn mk() = |x| => x +let f = mk() +print("${f(7)} ${f("os")} ${f(2.5)}")"#); + + /// "A lambda so returned may close over the producing call's parameters." + a_returned_lambda_may_close_over_the_producing_call: accepts(Default, r#"fn constly(v) = |x| => v +let always = constly(9) +print("${always(1)} ${always("os")}")"#); + + /// "a still-generic lambda used as a bare value … is rejected rather than + /// guessed", with the compiler's own sentence. + a_still_generic_lambda_as_a_bare_value_is_rejected: rejects_with(Default, r#"fn mk(x) = |y| => x +print("${mk(1)}")"#, "a closure value with a still-generic type"); +} + +// --------------------------------------------------------------------------- +// [FLAVOR-ML-GENERICS] — the ML spellings of the same declarations +// --------------------------------------------------------------------------- + +spec_cases! { + /// "Types use juxtaposed binders: `type Box T`." + ml_type_binders_are_juxtaposed: accepts(Ml, "type Box T =\n value : T\nheld = Box(value = 7)\nprint \"${held.value}\"\n"); + + /// "Construction-site type arguments use `Box(item = 7)`." + ml_construction_type_arguments_use_angles: accepts(Ml, "type Box T =\n value : T\nheld = Box(value = 7)\nprint \"${held.value}\"\n"); + + /// The ML construction site is held to the same arity contract. + ml_construction_type_argument_arity_is_checked: rejects_with(Ml, "type Box T =\n value : T\nheld = Box(value = 7)\nprint \"${held.value}\"\n", ctor_arity_message("Box", 1, 2)); + + /// "Function binders appear on a signature: `pick : (T, T) -> T`." + ml_function_binders_live_on_the_signature: accepts(Ml, "pick : (T, T) -> T\npick (first, second) = first\nkept = pick (10, 20)\nprint \"${kept}\"\n"); + + /// "A binding without a signature cannot declare function type parameters." + ml_a_binding_cannot_declare_type_parameters_without_a_signature: rejected_somehow(Ml, "pick (first, second) = first\nkept = pick (10, 20)\nprint \"${kept}\"\n"); + + /// The ML twin of the one-binder-relates-two-parameters rule. + ml_one_binder_relates_two_parameters: rejects_with(Ml, "pick : (T, T) -> T\npick (first, second) = first\nkept = pick (10, \"twenty\")\nprint \"${kept}\"\n", "cannot unify"); +} diff --git a/crates/osprey-types/src/generics_variance_assign_tests.rs b/crates/osprey-types/src/generics_variance_assign_tests.rs new file mode 100644 index 00000000..bfa13c8f --- /dev/null +++ b/crates/osprey-types/src/generics_variance_assign_tests.rs @@ -0,0 +1,249 @@ +//! Spec-driven assertions for assignment sites under declared variance +//! ([TYPE-VARIANCE-ASSIGN], [TYPE-VARIANCE-COERCION], +//! docs/specs/0004-TypeSystem.md). +//! +//! `generics_variance_tests.rs` states where a marker may be WRITTEN. This +//! module states what writing it does to ASSIGNMENT — and the answer the spec +//! now gives explicitly is: nothing, today. The language's only coercion +//! (`T -> Result`, an implicit `Success`) changes the value's +//! representation, and nothing rebuilds a container's contents, so it is barred +//! from argument positions. With no other subtyping in the language, `out T`, +//! `in T` and an unannotated parameter accept and refuse exactly the same +//! programs. +//! +//! That is a claim worth pinning precisely because it is invisible: the two +//! shipped fixtures (`variance_covariant_result_payload.ospo` and +//! `variance_invariant_arg_mismatch.ospo`) assert the one direction all three +//! markers already agree on, so nothing in the tree separated them, and nothing +//! would have noticed a checker that quietly started coercing through argument +//! positions and silently misread a payload. Every claim is made at ALL THREE +//! sites the spec names, because a rule enforced at one site is not the rule. + +use crate::testutil::{accepts, plain_cases, rejects, spec_cases}; +use osprey_syntax::Flavor; + +/// The three assignment sites [TYPE-VARIANCE-ASSIGN] names, for a value of the +/// type `actual` produces flowing into a slot annotated `expected`. +pub(crate) fn sites(decls: &str, expected: &str, actual: &str) -> [String; 3] { + [ + format!("{decls}fn takes(v: {expected}) = 0\nprint(\"${{takes({actual})}}\")\n"), + format!("{decls}let held: {expected} = {actual}\nprint(\"bound\")\n"), + format!("{decls}fn gives() -> {expected} = {actual}\nprint(\"declared\")\n"), + ] +} + +/// Assert the value flows into the slot at every assignment site. +pub(crate) fn flows(decls: &str, expected: &str, actual: &str) { + for src in sites(decls, expected, actual) { + accepts(Flavor::Default, &src); + } +} + +/// Assert the value is refused at every assignment site. +pub(crate) fn blocked(decls: &str, expected: &str, actual: &str) { + for src in sites(decls, expected, actual) { + rejects(Flavor::Default, &src); + } +} + +/// True when the checker accepts the program outright. +pub(crate) fn accepted(src: &str) -> bool { + crate::testutil::typecheck(Flavor::Default, src).is_empty() +} + +/// A covariant container, plus producers at both instantiations. +const FEED: &str = "type Feed = Feed { supply: T } | Dry\n\ + fn feedInt() -> Feed = Feed { supply: 1 }\n\ + fn feedRes() -> Feed> = Feed { supply: 20 * 5 }\n\ + fn feedText() -> Feed = Feed { supply: \"s\" }\n"; + +/// A contravariant container, same shape. +const GATE: &str = "type Gate = Gate { admit: (T) -> bool } | Open\n\ + fn gateInt() -> Gate = Gate { admit: |x| => true }\n\ + fn gateRes() -> Gate> = Gate { admit: |x| => true }\n\ + fn gateText() -> Gate = Gate { admit: |x| => true }\n"; + +/// An invariant container — the control the other two are measured against. +const CELL: &str = "type Cell = Cell { slot: T }\n\ + fn cellInt() -> Cell = Cell { slot: 1 }\n\ + fn cellRes() -> Cell> = Cell { slot: 20 * 5 }\n\ + fn cellText() -> Cell = Cell { slot: \"s\" }\n"; + +/// The containers nested one level inside each other. +const NESTED: &str = "type Feed = Feed { supply: T } | Dry\n\ + type Gate = Gate { admit: (T) -> bool } | Open\n\ + type Cell = Cell { slot: T }\n\ + fn feedFeedInt() -> Feed> = Feed { supply: Feed { supply: 1 } }\n\ + fn feedGateInt() -> Feed> = Feed { supply: Gate { admit: |x| => true } }\n\ + fn feedGateRes() -> Feed>> = \ + Feed { supply: Gate { admit: |x| => true } }\n\ + fn feedCellInt() -> Feed> = Feed { supply: Cell { slot: 1 } }\n\ + fn gateFeedRes() -> Gate>> = Gate { admit: |x| => true }\n\ + fn gateGateInt() -> Gate> = Gate { admit: |x| => true }\n"; + +/// A covariant container over FUNCTION payloads. +const FNPAYLOAD: &str = "type Feed = Feed { supply: T } | Dry\n\ + fn feedTakesInt() -> Feed<(int) -> bool> = Feed { supply: |x| => true }\n\ + fn feedTakesRes() -> Feed<(Result) -> bool> = \ + Feed { supply: |x| => true }\n\ + fn feedGivesInt() -> Feed<(int) -> int> = Feed { supply: |x| => 1 }\n\ + fn feedGivesRes() -> Feed<(int) -> Result> = Feed { supply: |x| => x * 2 }\n"; + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-COERCION] — the coercion exists, at depth 0 only +// --------------------------------------------------------------------------- + +plain_cases! { + /// "A bare `T` satisfies a `Result` slot (an implicit `Success`)." + the_coercion_holds_at_a_direct_value_site: flows("", "Result", "5"); + + /// "the inverse never holds anywhere." + the_inverse_coercion_never_holds: blocked( "fn half() -> Result = 20 * 5\n", "int", "half()", ); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-COERCION] — and never inside an argument position +// --------------------------------------------------------------------------- + +plain_cases! { + /// "`Feed` does **not** satisfy a `Feed>` slot, + /// under `out T`" — the coercion would have to rebuild the container. + a_covariant_argument_does_not_carry_the_coercion: blocked(FEED, "Feed>", "feedInt()"); + + /// "…under `in T`" — the flipped recursion does not smuggle it in either. + a_contravariant_argument_does_not_carry_the_coercion: blocked(GATE, "Gate", "gateRes()"); + + /// "…or unannotated." + an_invariant_argument_does_not_carry_the_coercion: blocked(CELL, "Cell>", "cellInt()"); + + /// The unwrapping direction is refused under every marker too — the half the + /// shipped fixtures already cover, kept here so both directions sit together. + no_marker_unwraps_a_result_payload: blocked(FEED, "Feed", "feedRes()"), + blocked(GATE, "Gate>", "gateInt()"), + blocked(CELL, "Cell", "cellRes()"); + + /// The identical instantiation is what all three markers DO accept. + every_marker_accepts_the_identical_instantiation: flows(FEED, "Feed", "feedInt()"), + flows(GATE, "Gate", "gateInt()"), + flows(CELL, "Cell", "cellInt()"); + + /// And an unrelated payload is refused under every marker. + every_marker_rejects_an_unrelated_payload: blocked(FEED, "Feed", "feedText()"), + blocked(GATE, "Gate", "gateText()"), + blocked(CELL, "Cell", "cellText()"); +} + +// --------------------------------------------------------------------------- +// Composition — depth does not unlock the coercion +// --------------------------------------------------------------------------- + +plain_cases! { + /// `out` inside `out` recurses, and still bottoms out exact. + covariance_inside_covariance_still_bottoms_out_exact: blocked( NESTED, "Feed>>", "feedFeedInt()", ), + flows(NESTED, "Feed>", "feedFeedInt()"); + + /// `in` inside `out` flips the recursion — and changes no outcome. + contravariance_inside_covariance_still_bottoms_out_exact: blocked(NESTED, "Feed>", "feedGateRes()"), + blocked( NESTED, "Feed>>", "feedGateInt()", ); + + /// `out` inside `in`, the other flip. + covariance_inside_contravariance_still_bottoms_out_exact: blocked(NESTED, "Gate>", "gateFeedRes()"); + + /// Two flips compose back to covariance, which is still exact. + contravariance_inside_contravariance_still_bottoms_out_exact: blocked( NESTED, "Gate>>", "gateGateInt()", ), + flows(NESTED, "Gate>", "gateGateInt()"); + + /// An invariant argument under a covariant one. + an_invariant_argument_under_a_covariant_one_is_exact: blocked( NESTED, "Feed>>", "feedCellInt()", ); +} + +// --------------------------------------------------------------------------- +// Function payloads: exact under a container, assignable when assigned direct +// --------------------------------------------------------------------------- + +plain_cases! { + /// "Function payloads match exactly for the same reason" — the parameter + /// position does not flip inside a container. + a_function_payload_matches_exactly_inside_a_container: blocked(FNPAYLOAD, "Feed<(int) -> bool>", "feedTakesRes()"), + blocked( FNPAYLOAD, "Feed<(Result) -> bool>", "feedTakesInt()", ); + + /// The spec's own counterexample, and its mirror: neither return direction + /// matches under a container. + a_function_payloads_return_matches_exactly_inside_a_container: blocked(FNPAYLOAD, "Feed<(int) -> int>", "feedGivesRes()"), + blocked( FNPAYLOAD, "Feed<(int) -> Result>", "feedGivesInt()", ); + + /// The identical function payload flows, so the refusals above are about the + /// shape and not about function payloads being rejected wholesale. + an_identical_function_payload_flows: flows(FNPAYLOAD, "Feed<(int) -> bool>", "feedTakesInt()"); +} + +// --------------------------------------------------------------------------- +// The agreement test: the consequence, pinned +// --------------------------------------------------------------------------- + +/// "`out T`, `in T` and an unannotated parameter accept and refuse **exactly +/// the same programs** at assignment sites today." +/// +/// This test is the tripwire for that sentence. It goes red the day someone +/// implements a directional relation that actually bites — at which point the +/// spec's consequence paragraph is stale and must be rewritten with it, rather +/// than the language quietly gaining a coercion that reads a payload at the +/// wrong representation. +#[test] +fn the_three_markers_agree_on_every_assignment_outcome() { + let outcomes: Vec<(&str, bool, bool)> = vec![ + ( + "covariant", + accepted(&sites(FEED, "Feed>", "feedInt()")[0]), + accepted(&sites(FEED, "Feed", "feedRes()")[0]), + ), + ( + "contravariant", + accepted(&sites(GATE, "Gate>", "gateInt()")[0]), + accepted(&sites(GATE, "Gate", "gateRes()")[0]), + ), + ( + "invariant", + accepted(&sites(CELL, "Cell>", "cellInt()")[0]), + accepted(&sites(CELL, "Cell", "cellRes()")[0]), + ), + ]; + for (marker, forward, backward) in &outcomes { + assert!( + !forward && !backward, + "{marker}: expected both directions refused ([TYPE-VARIANCE-COERCION]), \ + got forward={forward} backward={backward}" + ); + } +} + +// --------------------------------------------------------------------------- +// The same rules through the ML surface ([FLAVOR-BOUNDARY]) +// --------------------------------------------------------------------------- + +spec_cases! { + /// The ML twin: a covariant ML container refuses the coercion too. + ml_a_covariant_argument_does_not_carry_the_coercion: rejects(Ml, "type Feed out T =\n supply : T\n\ + feedInt : Unit -> Feed\n\ + feedInt () = Feed(supply = 1)\n\ + takes : Feed> -> int\n\ + takes v = 0\n\ + held = takes (feedInt ())\n\ + print \"${held}\"\n"); + + /// The ML twin of the identical-instantiation acceptance, so the refusal above + /// is not an ML parsing accident. + ml_an_identical_instantiation_flows: accepts(Ml, "type Feed out T =\n supply : T\n\ + feedInt : Unit -> Feed\n\ + feedInt () = Feed(supply = 1)\n\ + takes : Feed -> int\n\ + takes v = 0\n\ + held = takes (feedInt ())\n\ + print \"${held}\"\n"); + + /// The ML twin of the direct-site coercion. + ml_the_coercion_holds_at_a_direct_value_site: accepts(Ml, "takes : Result -> int\n\ + takes v = 0\n\ + held = takes 5\n\ + print \"${held}\"\n"); +} diff --git a/crates/osprey-types/src/generics_variance_builtin_tests.rs b/crates/osprey-types/src/generics_variance_builtin_tests.rs new file mode 100644 index 00000000..a0703bac --- /dev/null +++ b/crates/osprey-types/src/generics_variance_builtin_tests.rs @@ -0,0 +1,144 @@ +//! The **built-in variance table** of [TYPE-VARIANCE-ASSIGN], asserted through +//! the assignment sites rather than read off the declaration +//! ([TYPE-VARIANCE-COERCION], docs/specs/0004-TypeSystem.md). +//! +//! "Built-in constructors' declared variance: `Result`, +//! `List`, `Fiber`, `Map` (keys invariant); `Channel` +//! and `Ptr` are invariant. Function types are structurally contravariant in +//! parameters and covariant in returns." +//! +//! The last sentence is the one with teeth: a function value assigned DIRECTLY +//! matches assignably, parameters flipped and return coerced. The constructor +//! entries above it do not bite today, because the only coercion in the language +//! is representation-changing and therefore barred from argument positions — so +//! `List` and the invariant `Channel` accept and refuse the same +//! programs. Both halves are pinned here: the table's entries are a contract for +//! the day that changes, and the function rules are checked as live behaviour. + +use crate::generics_variance_assign_tests::{accepted, blocked, flows, sites}; +use crate::testutil::plain_cases; + +/// Producers for every built-in shape under test, at both instantiations. +const BUILTINS: &str = "fn listInt() -> List = [1]\n\ + fn listRes() -> List> = [20 * 5]\n\ + fn mapInt() -> Map = { \"a\": 1 }\n\ + fn mapRes() -> Map> = { \"a\": 20 * 5 }\n\ + fn resInt() -> Result = 20 * 5\n\ + fn one() = 1\n\ + fn fiberInt() -> Fiber = spawn one()\n\ + fn chanInt() -> Channel = Channel(2)\n\ + fn chanRes() -> Channel> = Channel(2)\n\ + fn takesInt(v: int) = true\n\ + fn takesRes(v: Result) = true\n\ + fn givesInt(v: int) = 1\n\ + fn givesRes(v: int) = v * 2\n"; + +// --------------------------------------------------------------------------- +// The constructor entries: identical instantiations flow, coercions do not +// --------------------------------------------------------------------------- + +plain_cases! { + /// `List` accepts its own element type… + list_accepts_the_identical_element: flows(BUILTINS, "List", "listInt()"); + + /// …refuses the coercion in both directions… + list_refuses_the_coercion_in_both_directions: blocked(BUILTINS, "List>", "listInt()"), + blocked(BUILTINS, "List", "listRes()"); + + /// …and refuses an unrelated element. + list_rejects_an_unrelated_element: blocked(BUILTINS, "List", "listInt()"); + + /// `Result`: neither channel carries the coercion inward. + result_refuses_the_coercion_in_either_channel: blocked( BUILTINS, "Result, MathError>", "resInt()", ), + blocked( BUILTINS, "Result>", "resInt()", ); + + /// The identical `Result` instantiation flows. + result_accepts_the_identical_instantiation: flows(BUILTINS, "Result", "resInt()"); + + /// `Fiber`: same story for a fiber's answer. + fiber_refuses_the_coercion_and_accepts_its_own_answer: blocked(BUILTINS, "Fiber>", "fiberInt()"), + blocked(BUILTINS, "Fiber", "fiberInt()"), + flows(BUILTINS, "Fiber", "fiberInt()"); + + /// `Map`: the value channel refuses the coercion… + map_refuses_the_coercion_in_its_value: blocked(BUILTINS, "Map>", "mapInt()"), + blocked(BUILTINS, "Map", "mapRes()"); + + /// The key channel cannot be exercised for variance at all: the shipped map + /// surface fixes keys to `string` ([BUILTIN-MAP-GET], spec 0012), so + /// `Map` has no producer and `Map`'s "(keys invariant)" + /// describes a parameter no program can instantiate. Recorded as a spec/ + /// implementation conflict in plan 0015 rather than asserted as behaviour; what + /// IS assertable is that a non-string key is refused. + a_non_string_map_key_is_refused: blocked(BUILTINS, "Map", "mapInt()"); + + /// The identical map instantiation flows. + map_accepts_the_identical_instantiation: flows(BUILTINS, "Map", "mapInt()"); + + /// `Channel` is invariant, and behaves exactly as the covariant entries do. + channel_refuses_the_coercion_in_both_directions: blocked(BUILTINS, "Channel>", "chanInt()"), + blocked(BUILTINS, "Channel", "chanRes()"), + flows(BUILTINS, "Channel", "chanInt()"); +} + +/// The table's covariant and invariant entries are indistinguishable today — +/// `List` and `Channel` answer identically. This is the built-in twin +/// of `the_three_markers_agree_on_every_assignment_outcome`, and the tripwire +/// for the same spec sentence. +#[test] +fn the_covariant_and_invariant_builtins_agree() { + let covariant = accepted(&sites(BUILTINS, "List>", "listInt()")[0]); + let invariant = accepted(&sites(BUILTINS, "Channel>", "chanInt()")[0]); + assert!( + !covariant && !invariant, + "[TYPE-VARIANCE-COERCION] says an argument position never coerces: \ + List(out)={covariant}, Channel(invariant)={invariant}" + ); +} + +// --------------------------------------------------------------------------- +// Function types — the half of the table that DOES bite +// --------------------------------------------------------------------------- + +plain_cases! { + /// "structurally contravariant in parameters": a function accepting a `Result` + /// stands where one accepting an `int` is expected, because the parameter + /// recursion applies the coercion at a direct site. + a_function_slot_is_contravariant_in_its_parameter: flows(BUILTINS, "(int) -> bool", "takesRes"); + + /// The widened direction is refused. + a_function_slot_rejects_a_widened_parameter: blocked(BUILTINS, "(Result) -> bool", "takesInt"); + + /// "and covariant in returns": a function returning `int` stands where one + /// returning `Result` is expected. + a_function_slot_is_covariant_in_its_return: flows(BUILTINS, "(int) -> Result", "givesInt"); + + /// The unwrapping direction is refused. + a_function_slot_never_unwraps_its_return: blocked(BUILTINS, "(int) -> int", "givesRes"); + + /// The identical shape flows. + a_function_slot_accepts_the_identical_shape: flows(BUILTINS, "(int) -> bool", "takesInt"); + + /// Arity is checked before any of this. + a_function_slot_rejects_an_arity_mismatch: blocked(BUILTINS, "(int, int) -> bool", "takesInt"); +} + +/// The function rules and the constructor rules are the SAME relation applied +/// at different depths: directly assigned, the parameter coercion works; the +/// identical function wrapped in a `List` argument position does not. +#[test] +fn the_function_rules_stop_at_an_argument_position() { + let direct = accepted(&sites(BUILTINS, "(int) -> bool", "takesRes")[0]); + let wrapped = accepted( + &sites( + &format!("{BUILTINS}fn listTakesRes() -> List<(Result) -> bool> = [takesRes]\n"), + "List<(int) -> bool>", + "listTakesRes()", + )[0], + ); + assert!( + direct && !wrapped, + "the parameter coercion must apply at a direct site and NOT inside a \ + `List` argument: direct={direct}, wrapped={wrapped}" + ); +} diff --git a/crates/osprey-types/src/generics_variance_shape_tests.rs b/crates/osprey-types/src/generics_variance_shape_tests.rs new file mode 100644 index 00000000..8f2616ea --- /dev/null +++ b/crates/osprey-types/src/generics_variance_shape_tests.rs @@ -0,0 +1,115 @@ +//! Variance position checking over the SHAPES a declaration can take +//! ([TYPE-VARIANCE-POSITIONS], docs/specs/0004-TypeSystem.md): positions reached +//! through the built-in constructors, a parameter used in both directions at +//! once, several parameters with mixed markers, and union variants — named and +//! positional. +//! +//! The single-field core matrix is `generics_variance_tests.rs`, whose `decl` +//! and `position_message` helpers this module reuses. + +use crate::generics_variance_tests::{decl, position_message}; +use crate::testutil::{accepts, check, rejected_somehow, spec_cases}; +use osprey_syntax::Flavor; + +spec_cases! { + /// A function type inside a covariant built-in still flips its parameter. + out_in_a_function_parameter_inside_a_list_is_rejected: rejects_with(Default, decl("", "checks", "List<(T) -> int>"), position_message("T", "out", "input", "checks", "Holder")); + + /// The `Result` ERROR channel is an output position too. + out_is_legal_in_the_result_error_channel: accepts(Default, decl("", "failure", "Result")); + + /// …so a contravariant parameter is rejected there. + in_in_the_result_error_channel_is_rejected: rejects_with(Default, decl("", "failure", "Result"), position_message("T", "in", "output", "failure", "Holder")); + + /// `Fiber` is an output position, so `in T` cannot sit there. + in_inside_a_fiber_is_rejected: rejects_with(Default, decl("", "worker", "Fiber"), position_message("T", "in", "output", "worker", "Holder")); + + /// `Map`: a contravariant parameter is rejected in the VALUE channel. + in_in_a_map_value_is_rejected: rejects_with(Default, decl("", "byName", "Map"), position_message("T", "in", "output", "byName", "Holder")); +} + +/// …and in the invariant KEY channel, both markers are refused. +#[test] +fn map_keys_refuse_both_markers() { + rejected_somehow(Flavor::Default, decl("", "byKey", "Map")); + rejected_somehow(Flavor::Default, decl("", "byKey", "Map")); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-POSITIONS] — a parameter used in BOTH positions +// --------------------------------------------------------------------------- + +/// A record that both holds and consumes its parameter demands both +/// directions, so only an invariant parameter fits. +fn both_positions(params: &str) -> String { + format!("type Holder{params} = {{ held: T, consume: (T) -> int }}\nprint(\"declared\")") +} + +spec_cases! { + /// The invariant spelling is accepted. + a_parameter_used_in_both_positions_may_be_invariant: accepts(Default, both_positions("")); + + /// The covariant spelling is rejected on the input half. + a_parameter_used_in_both_positions_may_not_be_covariant: rejects_with(Default, both_positions(""), position_message("T", "out", "input", "consume", "Holder")); + + /// The contravariant spelling is rejected on the output half. + a_parameter_used_in_both_positions_may_not_be_contravariant: rejects_with(Default, both_positions(""), position_message("T", "in", "output", "held", "Holder")); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-DECL] — several parameters, each checked on its own +// --------------------------------------------------------------------------- + +spec_cases! { + /// Mixed markers on one declaration are checked independently. + mixed_markers_are_checked_per_parameter: accepts(Default, "type Two = { give: A, take: (B) -> bool }\nprint(\"declared\")"); +} + +/// Swapping the two markers puts each parameter in the wrong position. +#[test] +fn swapped_markers_are_rejected_per_parameter() { + let errs = check("type Two = { give: A, take: (B) -> bool }\nprint(\"declared\")"); + assert!( + errs.iter().any(|e| e + .message + .contains(&position_message("A", "in", "output", "give", "Two"))), + "expected the `A` violation: {errs:?}" + ); + assert!( + errs.iter().any(|e| e + .message + .contains(&position_message("B", "out", "input", "take", "Two"))), + "expected the `B` violation: {errs:?}" + ); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-POSITIONS] — union variants, including positional payloads +// --------------------------------------------------------------------------- + +spec_cases! { + /// A union variant's payload is an output position. + out_is_legal_in_a_union_variant_payload: accepts(Default, "type Maybe = Some { value: T } | None\nprint(\"declared\")"); + + /// …so a contravariant parameter is rejected there. + in_in_a_union_variant_payload_is_rejected: rejects_with(Default, "type Maybe = Some { value: T } | None\nprint(\"declared\")", position_message("T", "in", "output", "value", "Maybe")); +} + +/// A POSITIONAL payload is the same output position under a different spelling +/// ([TYPE-UNION-POSITIONAL]). +#[test] +fn a_positional_variant_payload_is_an_output_position() { + accepts( + Flavor::Default, + "type Maybe = Some(T) | None\nprint(\"declared\")", + ); + rejected_somehow( + Flavor::Default, + "type Maybe = Some(T) | None\nprint(\"declared\")", + ); +} + +spec_cases! { + /// Every variant is walked, not just the first. + a_violation_in_a_later_variant_is_still_found: rejects_with(Default, "type Split = First { ok: T } | Second { consume: (T) -> int } | Empty\nprint(\"declared\")", position_message("T", "out", "input", "consume", "Split")); +} diff --git a/crates/osprey-types/src/generics_variance_tests.rs b/crates/osprey-types/src/generics_variance_tests.rs new file mode 100644 index 00000000..4a860953 --- /dev/null +++ b/crates/osprey-types/src/generics_variance_tests.rs @@ -0,0 +1,271 @@ +//! Spec-driven assertions for **declaration-site variance** +//! ([TYPE-VARIANCE-DECL], [TYPE-VARIANCE-POSITIONS], [TYPE-VARIANCE-ASSIGN], +//! docs/specs/0004-TypeSystem.md). +//! +//! Position checking is the crisp half: "fields and function results are OUTPUT +//! positions; function parameters flip the polarity (INPUT); a nested +//! constructor's argument composes the position with that constructor's +//! declared variance". Every composition below is one row of that rule, and the +//! built-in variance table (`Result`, `List`, +//! `Fiber`, `Map`, invariant `Channel`) is checked THROUGH +//! it — a wrong entry in that table shows up as a position that should have +//! been rejected and was not. + +use crate::testutil::{ + accepts, rejected_somehow, rejects_with, spec_cases, variance_position_message, +}; +use osprey_syntax::Flavor; + +/// The position diagnostic for a type declaration's FIELD. +pub(crate) fn position_message( + param: &str, + marker: &str, + position: &str, + field: &str, + owner: &str, +) -> String { + variance_position_message(param, marker, position, "field", field, owner) +} + +/// A one-field record declaration, the smallest carrier of a position. +pub(crate) fn decl(params: &str, field: &str, ty: &str) -> String { + format!("type Holder{params} = {{ {field}: {ty} }}\nprint(\"declared\")") +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-POSITIONS] — output positions +// --------------------------------------------------------------------------- + +spec_cases! { + /// A field is an OUTPUT position, so `out T` belongs there. + out_is_legal_in_a_field: accepts(Default, decl("", "supply", "T")); + + /// A function RESULT is an output position, so `out T` belongs there too. + out_is_legal_in_a_function_result: accepts(Default, decl("", "make", "(int) -> T")); + + /// A function PARAMETER flips the polarity to input: `out T` is rejected. + out_in_a_function_parameter_is_rejected: rejects_with(Default, decl("", "consume", "(T) -> int"), position_message("T", "out", "input", "consume", "Holder")); + + /// Two flips compose back to an output position, so `out T` is legal again. + out_under_two_parameter_flips_is_legal: accepts(Default, decl("", "hof", "((T) -> int) -> int")); + + /// An `in` parameter belongs in an input position. + in_is_legal_in_a_function_parameter: accepts(Default, decl("", "admit", "(T) -> bool")); + + /// A field is an output position, so `in T` is rejected there. + in_in_a_field_is_rejected: rejects_with(Default, decl("", "held", "T"), position_message("T", "in", "output", "held", "Holder")); + + /// A function result is an output position, so `in T` is rejected there. + in_in_a_function_result_is_rejected: rejects_with(Default, decl("", "make", "(int) -> T"), position_message("T", "in", "output", "make", "Holder")); + + /// Two flips compose back to output, so `in T` is rejected under them. + in_under_two_parameter_flips_is_rejected: rejects_with(Default, decl("", "hof", "((T) -> int) -> int"), position_message("T", "in", "output", "hof", "Holder")); +} + +/// An unannotated parameter is invariant and sits in EITHER position. +#[test] +fn an_invariant_parameter_is_legal_in_both_positions() { + accepts(Flavor::Default, decl("", "held", "T")); + accepts(Flavor::Default, decl("", "consume", "(T) -> int")); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-POSITIONS] — composition through a nested constructor +// --------------------------------------------------------------------------- + +spec_cases! { + /// A covariant argument of a covariant constructor keeps the position. + out_inside_a_covariant_constructor_argument_is_legal: accepts(Default, format!( + "type Feed = {{ supply: A }}\n{}", + decl("", "nested", "Feed") + )); + + /// A covariant argument of a CONTRAVARIANT constructor flips the position. + out_inside_a_contravariant_constructor_argument_is_rejected: rejects_with(Default, format!( + "type Gate = {{ admit: (A) -> bool }}\n{}", + decl("", "nested", "Gate") + ), position_message("T", "out", "input", "nested", "Holder")); + + /// The mirror composes the other way and is LEGAL: a field is an output + /// position, the contravariant argument flips it to input, and an input + /// position is exactly where `in T` belongs (output x contravariant = input). + in_inside_a_contravariant_constructor_argument_is_legal: accepts(Default, format!( + "type Gate = {{ admit: (A) -> bool }}\n{}", + decl("", "nested", "Gate") + )); + + /// "an invariant argument position demands both directions, so only invariant + /// parameters may sit there" — a covariant parameter may not. + out_inside_an_invariant_constructor_argument_is_rejected: rejected_somehow(Default, format!( + "type Cell = {{ slot: A }}\n{}", + decl("", "nested", "Cell") + )); + + /// …nor may a contravariant one. + in_inside_an_invariant_constructor_argument_is_rejected: rejected_somehow(Default, format!( + "type Cell = {{ slot: A }}\n{}", + decl("", "nested", "Cell") + )); + + /// An invariant parameter is exactly what an invariant argument accepts. + an_invariant_parameter_inside_an_invariant_argument_is_legal: accepts(Default, format!( + "type Cell = {{ slot: A }}\n{}", + decl("", "nested", "Cell") + )); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-ASSIGN] — the built-in variance table, checked by position +// --------------------------------------------------------------------------- + +spec_cases! { + /// `List`: a covariant parameter may sit in its argument. + list_is_covariant_in_its_element: accepts(Default, decl("", "items", "List")); +} + +/// `Result`: both arguments are covariant. +#[test] +fn result_is_covariant_in_both_arguments() { + accepts( + Flavor::Default, + decl("", "value", "Result"), + ); + accepts( + Flavor::Default, + decl("", "failure", "Result"), + ); +} + +spec_cases! { + /// `Fiber`: covariant in its answer. + fiber_is_covariant_in_its_answer: accepts(Default, decl("", "worker", "Fiber")); + + /// `Map`: the VALUE is covariant. + map_is_covariant_in_its_value: accepts(Default, decl("", "byName", "Map")); + + /// `Map`: the KEY is invariant, so a covariant parameter is rejected. + map_keys_are_invariant: rejected_somehow(Default, decl("", "byKey", "Map")); +} + +/// `Channel` is invariant in both directions. +#[test] +fn channel_is_invariant() { + rejected_somehow(Flavor::Default, decl("", "wire", "Channel")); + rejected_somehow(Flavor::Default, decl("", "wire", "Channel")); +} + +spec_cases! { + /// A `List` of a contravariant parameter is an output position. + in_inside_a_list_is_rejected: rejects_with(Default, decl("", "items", "List"), position_message("T", "in", "output", "items", "Holder")); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-ASSIGN] — leaves match exactly, in every container +// --------------------------------------------------------------------------- + +/// A `Result` payload is never extracted under a container, whatever the +/// declared variance: the stored representation differs. +fn feed_payload_program(marker: &str) -> String { + format!( + r#"type Feed<{marker}T> = Feed {{ supply: T }} | Dry +fn firstItem(f: Feed) = match f {{ + Feed {{ supply }} => supply + Dry => 0 +}} +fn mkFeed() -> Feed> = Feed {{ supply: 20 * 5 }} +print("${{firstItem(mkFeed())}}")"# + ) +} + +spec_cases! { + /// Under `out T`. + a_result_payload_does_not_collapse_under_a_covariant_container: rejects_with(Default, feed_payload_program("out "), "cannot unify"); + + /// Under an invariant parameter. + a_result_payload_does_not_collapse_under_an_invariant_container: rejects_with(Default, feed_payload_program(""), "cannot unify"); + + /// "Function returns also match exactly, so a `Feed<(int) -> Result>` + /// does not match a `Feed<(int) -> int>` slot" — the spec's own example. + a_function_payloads_return_channel_matches_exactly: rejects_with(Default, r#"type Feed = Feed { supply: T } | Dry +fn label(f: Feed<(int) -> int>) = match f { + Feed { supply } => "supplied" + Dry => "dry" +} +fn mkFeed() -> Feed<(int) -> Result> = Feed { supply: |n| => n * 2 } +print(label(mkFeed()))"#, "cannot unify"); + + /// The direct value site keeps the one safe promotion `T -> Result`, + /// which is what makes the container rejections above a real restriction rather + /// than a blanket ban. + the_direct_site_promotion_still_holds: accepts(Default, r#"fn keep(n: Result) = n ?: 0 +print("${keep(5)}")"#); +} + +// --------------------------------------------------------------------------- +// [TYPE-VARIANCE-DECL] — where the markers may be written at all +// --------------------------------------------------------------------------- + +spec_cases! { + /// "`out` and `in` are contextual keywords, reserved only inside + /// type-parameter lists" — they stay usable as ordinary names. + out_and_in_stay_legal_identifiers_outside_a_parameter_list: accepts(Default, r#"let out = 1 +let inn = 2 +fn keep(out) = out +print("${keep(out)} ${inn}")"#); +} + +/// Variance is declaration-site on TYPES and EFFECTS only — never on a +/// function binder ([TYPE-GENERICS-FN]). +#[test] +fn a_variance_marker_on_a_function_binder_is_rejected() { + rejects_with( + Flavor::Default, + r#"fn pick(first: T, second: T) -> T = first +print("${pick(1, 2)}")"#, + "variance annotations are only valid on type and effect declarations", + ); + rejects_with( + Flavor::Default, + r#"fn pick(first: T, second: T) -> T = first +print("${pick(1, 2)}")"#, + "variance annotations are only valid on type and effect declarations", + ); +} + +// --------------------------------------------------------------------------- +// [FLAVOR-ML-GENERICS] — the same rules through the ML spellings +// --------------------------------------------------------------------------- + +/// "Types use juxtaposed binders: `type Box T`, `type Feed out T`, +/// `type Sink in T`." +#[test] +fn ml_variance_binders_check_the_same_positions() { + accepts( + Flavor::Ml, + "type Feed out T =\n supply : T\nprint \"declared\"\n", + ); + rejects_with( + Flavor::Ml, + "type Bad out T =\n consume : T -> int\nprint \"declared\"\n", + position_message("T", "out", "input", "consume", "Bad"), + ); +} + +/// The ML twin of the contravariant rules. +#[test] +fn ml_contravariant_binders_check_the_same_positions() { + accepts( + Flavor::Ml, + "type Gate in T =\n admit : T -> bool\nprint \"declared\"\n", + ); + rejects_with( + Flavor::Ml, + "type Bad in T =\n held : T\nprint \"declared\"\n", + position_message("T", "in", "output", "held", "Bad"), + ); +} + +spec_cases! { + /// ML function binders reject variance exactly as Default's do. + ml_a_variance_marker_on_a_function_binder_is_rejected: rejects_with(Ml, "pick : (T, T) -> T\npick (first, second) = first\nkept = pick (1, 2)\nprint \"${kept}\"\n", "variance annotations are only valid on type and effect declarations"); +} diff --git a/crates/osprey-types/src/info.rs b/crates/osprey-types/src/info.rs index 23c3372f..e250cb42 100644 --- a/crates/osprey-types/src/info.rs +++ b/crates/osprey-types/src/info.rs @@ -3,7 +3,7 @@ //! union tags are then frozen into the plain, substitution-free tables below //! so the backend can drive codegen off real types instead of guessing `i64`. -use crate::ty::{names, Type}; +use crate::ty::{names, Type, VarId}; use std::collections::HashMap; /// The declared shape of a record/variant constructor: ordered `(field, type)` @@ -71,6 +71,14 @@ pub struct ProgramTypes { /// handler-arm view of the same instantiation data). Implements /// [EFFECTS-GENERIC-INSTANTIATION]. pub handler_ops: HashMap<(u32, u32), HandlerSite>, + /// Explicit call substitutions, applied while specializing generic bodies. + pub applications: HashMap<(u32, u32), HashMap>, + /// Binder identity is part of the contract even when its spelling is omitted. + pub(crate) declared_params: HashMap>, + pub(crate) call_bindings: HashMap>, + pub(crate) methods: crate::methods::Targets, + /// Generalized source-binding constraints compared by annotation diagnostics. + pub(crate) obligations: HashMap>, } /// One `perform` site's resolved instantiation. @@ -92,6 +100,76 @@ pub struct HandlerSite { } impl ProgramTypes { + /// Instantiate a record field against the actual generic type arguments. + #[must_use] + pub fn field_type(&self, record: &Type, field: &str) -> Option { + match record { + Type::Record { fields, .. } => fields.get(field).cloned(), + Type::Con { name, args } => { + let layout = self.ctors.get(name)?; + let (_, ty) = layout.fields.iter().find(|(name, _)| name == field)?; + let bindings = args + .iter() + .enumerate() + .filter_map(|(i, ty)| u32::try_from(i).ok().map(|i| (i, ty.clone()))) + .collect(); + Some(crate::env::subst_vars(ty, &bindings)) + } + _ => None, + } + } + + /// Resolve a named callee's signature against this application's binders. + #[must_use] + pub fn application_type(&self, position: Option, ty: &Type) -> Type { + position + .and_then(|p| self.applications.get(&(p.line, p.column))) + .map_or_else( + || ty.clone(), + |bindings| crate::env::subst_vars(ty, bindings), + ) + } + + /// Attach inferred applications to a backend copy of the source program. + /// The source AST and its diagnostic positions remain unchanged. + pub fn elaborate_calls(&mut self, program: &osprey_ast::Program) -> osprey_ast::Program { + crate::applications::elaborate(program, self) + } + + /// Specialize inferred body metadata with one call's type substitution. + /// Constructor and effect declarations retain their shared erased ABI. + #[must_use] + pub fn specialized(&self, bindings: &HashMap) -> Self { + let mut result = self.clone(); + let substitute = |ty: &mut Type| *ty = crate::env::subst_vars(ty, bindings); + for (params, ret) in result.functions.values_mut() { + params.iter_mut().for_each(&substitute); + substitute(ret); + } + for table in [&mut result.lambdas, &mut result.lets, &mut result.lists] { + table.values_mut().for_each(&substitute); + } + for site in result.performs.values_mut() { + site.effect_args.iter_mut().for_each(&substitute); + site.op.params.iter_mut().for_each(&substitute); + substitute(&mut site.op.ret); + } + for site in result.handler_ops.values_mut() { + site.effect_args.iter_mut().for_each(&substitute); + for op in site.ops.values_mut() { + op.params.iter_mut().for_each(&substitute); + substitute(&mut op.ret); + } + } + for args in result.applications.values_mut() { + args.values_mut().for_each(&substitute); + } + for args in result.declared_params.values_mut() { + args.values_mut().for_each(&substitute); + } + result + } + /// The resolved return type of a named function, if known. #[must_use] pub fn return_type(&self, name: &str) -> Option<&Type> { diff --git a/crates/osprey-types/src/lib.rs b/crates/osprey-types/src/lib.rs index 0d619d10..e9a917a4 100644 --- a/crates/osprey-types/src/lib.rs +++ b/crates/osprey-types/src/lib.rs @@ -9,8 +9,11 @@ //! [`check::check_program`] driver over the AST. //! //! Public surface: [`check_program`] takes a parsed [`osprey_ast::Program`] and -//! returns the list of [`TypeError`]s (empty ⇒ well-typed). +//! returns the list of [`TypeError`]s (empty ⇒ well-typed); +//! [`redundant_annotations`] returns the [`TypeWarning`]s for annotations the +//! inferrer would have derived on its own ([TYPE-ANNOTATION-REDUNDANT]). +mod applications; mod builtin_constraints; mod builtin_docs; mod builtin_docs_lang; @@ -26,13 +29,40 @@ mod effect_rows_exports_tests; mod effect_rows_expr_tests; #[cfg(test)] mod effect_rows_tests; +#[cfg(test)] +mod effect_rows_transport_tests; mod env; mod error; mod expr; +mod fields; +#[cfg(test)] +mod generic_effects_tests; +#[cfg(test)] +mod generics_apply_ml_tests; +#[cfg(test)] +mod generics_apply_tests; +#[cfg(test)] +mod generics_decl_tests; +#[cfg(test)] +mod generics_variance_assign_tests; +#[cfg(test)] +mod generics_variance_builtin_tests; +#[cfg(test)] +mod generics_variance_shape_tests; +#[cfg(test)] +mod generics_variance_tests; mod info; mod init_order; +mod methods; mod multiplicity; mod pattern; +mod redundant; +mod redundant_sites; +#[cfg(test)] +mod redundant_tests; +#[cfg(test)] +#[path = "../../testkit.rs"] +mod testkit; #[cfg(test)] mod testutil; mod ty; @@ -46,6 +76,9 @@ pub use builtins::{builtin_callback_type, builtin_signature}; pub use check::{check_program, check_program_exports, erased_var, infer_program}; pub use error::TypeError; pub use info::{CtorLayout, HandlerSite, OpType, PerformSite, ProgramTypes}; +pub use redundant::{ + redundant_annotations, redundant_annotations_where, TypeWarning, REDUNDANT_ANNOTATION, +}; pub use ty::{has_type_var, names, render_with_holes, Scheme, Type, VarId, HOLE}; #[cfg(test)] diff --git a/crates/osprey-types/src/methods.rs b/crates/osprey-types/src/methods.rs new file mode 100644 index 00000000..fd7fc681 --- /dev/null +++ b/crates/osprey-types/src/methods.rs @@ -0,0 +1,414 @@ +//! Type-resolved dotted calls become ordinary calls in the backend copy. +//! Implements [BUILTIN-STRING-UFCS]: record fields win before UFCS fallback. + +use osprey_ast::{AstVisitor, Expr, NamedArgument, Position, Program, TypeExpr}; +use std::collections::HashMap; + +pub(crate) type Targets = HashMap; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub(crate) enum Target { + Field(String), + Function, + Deferred(String), +} + +#[derive(Clone, Copy)] +pub(crate) struct Parts<'a> { + pub target: &'a Expr, + pub method: &'a str, + pub arguments: &'a [Expr], + pub named: &'a [NamedArgument], + pub application: Option<(&'a [TypeExpr], Option)>, +} + +/// `function` wrapped in the call site's explicit type application, or left +/// alone when the site wrote no turbofish — the one rule both the deferred +/// method-call rewrite and the ordinary call rewrite apply. +fn applied(function: Expr, application: Option<(&[TypeExpr], Option)>) -> Expr { + match application { + Some((type_args, position)) => Expr::TypeApply { + function: Box::new(function), + type_args: type_args.to_vec(), + position, + }, + None => function, + } +} + +pub(crate) fn parts(expression: &Expr) -> Option> { + match expression { + Expr::MethodCall { + target, + method, + arguments, + named_arguments, + } => Some(Parts { + target, + method, + arguments, + named: named_arguments, + application: None, + }), + Expr::Call { + function, + arguments, + named_arguments, + } => { + let Expr::TypeApply { + function, + type_args, + position, + } = function.as_ref() + else { + return None; + }; + let Expr::FieldAccess { target, field } = function.as_ref() else { + return None; + }; + Some(Parts { + target, + method: field, + arguments, + named: named_arguments, + application: Some((type_args, *position)), + }) + } + _ => None, + } +} + +/// Preserve the source field spelling when assembly qualified a free function. +pub(crate) fn field_name(method: &str) -> String { + let source = osprey_ast::symbol::demangle(method).unwrap_or_else(|| method.to_owned()); + source.rsplit("::").next().unwrap_or(&source).to_owned() +} + +pub(crate) fn collect(program: &Program, sites: &Targets) -> Targets { + struct Collector<'a> { + sites: &'a Targets, + index: usize, + targets: Targets, + } + impl AstVisitor for Collector<'_> { + fn expression(&mut self, expression: &Expr) { + if let Some(field) = self.sites.get(&std::ptr::from_ref(expression).addr()) { + let _ = self.targets.insert(self.index, field.clone()); + } + self.index += 1; + } + } + let mut collector = Collector { + sites, + index: 0, + targets: HashMap::new(), + }; + osprey_ast::walk_program(program, &mut collector); + collector.targets +} + +pub(crate) fn lower(expression: &mut Expr, target: &Target) { + let Some(parts) = parts(expression) else { + return; + }; + if matches!(target, Target::Deferred(_)) { + let call = Expr::MethodCall { + target: Box::new(parts.target.clone()), + method: parts.method.to_owned(), + arguments: parts.arguments.to_vec(), + named_arguments: parts.named.to_vec(), + }; + *expression = applied(call, parts.application); + return; + } + let mut arguments = parts.arguments.to_vec(); + let function = if let Target::Field(field) = target { + Expr::FieldAccess { + target: Box::new(parts.target.clone()), + field: field.to_owned(), + } + } else { + arguments.insert(0, parts.target.clone()); + Expr::Identifier(parts.method.to_owned()) + }; + let function = applied(function, parts.application); + *expression = Expr::Call { + function: Box::new(function), + arguments, + named_arguments: parts.named.to_vec(), + }; +} + +use crate::check::Checker; +use crate::error::TypeError; +use crate::ty::Type; + +pub(crate) const OBLIGATION: &str = "$method:"; + +impl Checker { + /// A generic dotted call keeps both possible callees until its receiver + /// resolves. The relation travels with the ordinary HM scheme, including + /// variables used only by the selected callee's deferred constraints. + pub(crate) fn resolve_method_use(&mut self, name: &str, relation: &Type) -> bool { + let Some(descriptor) = name.strip_prefix(OBLIGATION) else { + return false; + }; + let mut descriptor = descriptor.splitn(5, ':'); + let explicit = descriptor.next().and_then(|n| n.parse::().ok()); + let line = descriptor + .next() + .and_then(|n| n.parse::().ok()) + .unwrap_or(0); + let column = descriptor + .next() + .and_then(|n| n.parse::().ok()) + .unwrap_or(0); + let Some(field) = descriptor.next() else { + return false; + }; + let Some(method) = descriptor.next() else { + return false; + }; + let Type::Con { args: relation, .. } = relation else { + return false; + }; + let [receiver, fallback, call, obligations, binders, written, named] = relation.as_slice() + else { + return false; + }; + let receiver = self.ctx.apply(receiver); + if matches!(receiver, Type::Var(_)) { + return false; + } + let Type::Fun { + params: arguments, + ret, + } = call + else { + return false; + }; + let position = (line != 0).then_some(Position { line, column }); + let selected = self.resolved_record_field(&receiver, field).ok(); + let mut arguments = ordered_arguments( + arguments, + named, + selected + .is_none() + .then(|| self.fn_params.get(method)) + .flatten(), + ); + let result = if let Some(selected) = selected { + if let Some(count) = explicit { + self.errors.push( + TypeError::new(format!( + "function `{field}` takes 0 type argument(s), got {count}" + )) + .with_pos(position), + ); + } + self.apply_named_fn(None, &selected, arguments) + } else { + self.resolve_method_binders(method, explicit, position, binders, written); + self.builtin_uses.extend(unpack_obligations(obligations)); + arguments.insert(0, receiver); + self.apply_named_fn(Some(method), fallback, arguments) + }; + self.push_unify(ret, &result); + true + } + + fn resolve_method_binders( + &mut self, + method: &str, + explicit: Option, + position: Option, + binders: &Type, + written: &Type, + ) { + let (Some(count), Type::Con { args: binders, .. }, Type::Con { args: written, .. }) = + (explicit, binders, written) + else { + return; + }; + if binders.len() == count { + for (binder, written) in binders.iter().zip(written) { + self.push_unify(binder, written); + } + } else { + self.errors.push( + TypeError::new(format!( + "function `{method}` takes {} type argument(s), got {count}", + binders.len() + )) + .with_pos(position), + ); + } + } +} + +fn ordered_arguments( + arguments: &[Type], + named: &Type, + parameters: Option<&Vec>, +) -> Vec { + let mut arguments = arguments.to_vec(); + let Type::Con { args: named, .. } = named else { + return arguments; + }; + let mut supplied: Vec<_> = named + .iter() + .filter_map(|argument| match argument { + Type::Con { name, args } => args.first().map(|ty| (name, ty)), + _ => None, + }) + .collect(); + if let Some(parameters) = parameters { + supplied.sort_by_key(|(name, _)| parameters.iter().position(|p| p == *name)); + } + arguments.extend(supplied.into_iter().map(|(_, ty)| ty.clone())); + arguments +} + +fn unpack_obligations(obligations: &Type) -> Vec<(String, Type)> { + let Type::Con { + args: obligations, .. + } = obligations + else { + return Vec::new(); + }; + obligations + .iter() + .filter_map(|obligation| match obligation { + Type::Con { name, args } => args.first().map(|ty| (name.clone(), ty.clone())), + _ => None, + }) + .collect() +} + +#[cfg(test)] +mod tests { + use crate::testutil::{accepts, rejects_with}; + use osprey_syntax::Flavor; + + #[test] + fn a_generic_receiver_selects_its_field_before_a_same_named_function() { + accepts( + Flavor::Default, + r#"type Action = Action { m: () -> int } +fn field() -> int = 11 +fn m(x: T) -> string = "free" +fn invoke(x: T) = x.m() +fn recordResult() -> int = invoke(Action { m: field }) +fn scalarResult() -> string = invoke(3) +print("${recordResult()} ${scalarResult()}")"#, + ); + } + + #[test] + fn deferred_named_arguments_follow_the_selected_free_functions_parameter_order() { + for application in ["choose", "choose"] { + accepts( + Flavor::Default, + format!( + r#"fn choose(receiver: T, text: string, count: int) = "${{text}} ${{count}}" +fn invoke(receiver: T) = receiver.{application}(count: 7, text: "generic") +fn result() -> string = invoke(4) +print(result())"# + ), + ); + } + } + + #[test] + fn field_dispatch_keeps_only_the_selected_callees_constraints() { + accepts( + Flavor::Default, + r#"type Action = Action { m: () -> bool } +fn field() -> bool = true +fn m(x: T) = length(x) +fn invoke(x: T) = x.m() +fn recordResult() -> bool = invoke(Action { m: field }) +fn stringResult() -> int = invoke("abc") +fn listResult() -> int = invoke([1, 2]) +print("${recordResult()} ${stringResult()} ${listResult()}")"#, + ); + } + + #[test] + fn a_generic_callback_field_keeps_its_argument_and_return_contract() { + let declarations = r"type Sink = Sink { hof: ((int) -> T) -> int } +fn callbackResult(f) = 7 +fn invoke(g) = g.hof(|n| => 3) +"; + accepts( + Flavor::Default, + format!( + "{declarations}fn result() -> int = invoke(Sink {{ hof: callbackResult }})\n" + ), + ); + rejects_with( + Flavor::Default, + format!("{declarations}fn result() -> int = invoke(Sink {{ hof: callbackResult }})\n"), + "cannot unify", + ); + } + + #[test] + fn a_field_cannot_borrow_a_same_named_functions_explicit_binders() { + for invocation in [ + "fn result() = Action { m: field }.m()", + "fn invoke(x: T) = x.m()\nfn result() = invoke(Action { m: field })", + ] { + rejects_with( + Flavor::Default, + format!( + "type Action = Action {{ m: () -> int }}\nfn field() = 11\nfn m(x: T) = 22\n{invocation}\n" + ), + "function `m` takes 0 type argument(s), got 1", + ); + } + } + + #[test] + fn a_deferred_free_function_checks_written_binder_arity_and_value_types() { + for (application, message) in [ + ( + "m", + "function `m` takes 1 type argument(s), got 2", + ), + ("m", "cannot unify"), + ] { + rejects_with( + Flavor::Default, + format!("fn m(x: T) = x\nfn invoke(x: T) = x.{application}()\nfn result() = invoke(3)\n"), + message, + ); + } + } + + #[test] + fn explicit_arguments_validate_nested_types_and_enclosing_binders() { + for (argument, message) in [ + ("T", "type parameter `T` cannot take type arguments"), + ( + "List>", + "type parameter `T` cannot take type arguments", + ), + ("int", "type `int` takes 0 type argument(s), got 1"), + ( + "List", + "type `List` takes 1 type argument(s), got 2", + ), + ("(Unknown) -> int", "unknown type `Unknown`"), + ("(int) -> Unknown", "unknown type `Unknown`"), + ] { + rejects_with( + Flavor::Default, + format!( + "fn empty() -> List = []\nfn invoke(x: T) = empty<{argument}>()\n" + ), + message, + ); + } + } +} diff --git a/crates/osprey-types/src/pattern.rs b/crates/osprey-types/src/pattern.rs index 35a581d5..03feff83 100644 --- a/crates/osprey-types/src/pattern.rs +++ b/crates/osprey-types/src/pattern.rs @@ -141,12 +141,7 @@ impl Checker { // row and an erased one: a repeated field name makes the two halves of // the compiler disagree about the same pattern. if self.reject_duplicate_fields(fields) { - for (_, binder) in fields { - if !binder.is_empty() { - let fv = self.ctx.fresh(); - local.insert(binder.clone(), Scheme::mono(fv)); - } - } + self.bind_fresh(fields, local); return; } let dp = self.ctx.prune(disc); @@ -168,12 +163,7 @@ impl Checker { self.errors.push(TypeError::new(format!( "a structural pattern needs a record or `any` scrutinee{found}" ))); - for (_, binder) in fields { - if !binder.is_empty() { - let fv = self.ctx.fresh(); - local.insert(binder.clone(), Scheme::mono(fv)); - } - } + self.bind_fresh(fields, local); return; }; self.check_row_selects(fields, open, &dp, &row); @@ -227,6 +217,18 @@ impl Checker { /// its source rather than teaching both sides the same wrong rule. /// /// Returns whether an error was reported. + /// Bind every named binder in `fields` to a fresh variable — the recovery + /// taken whenever the scrutinee cannot supply field types, so the arm body + /// still type-checks against the names it wrote instead of cascading. + fn bind_fresh(&mut self, fields: &[(String, String)], local: &mut TypeEnv) { + for (_, binder) in fields { + if !binder.is_empty() { + let fv = self.ctx.fresh(); + local.insert(binder.clone(), Scheme::mono(fv)); + } + } + } + fn reject_duplicate_fields(&mut self, fields: &[(String, String)]) -> bool { let mut seen: BTreeSet<&str> = BTreeSet::new(); let dup = fields @@ -713,7 +715,7 @@ fn nullary_owner_ty(owner: String, args: Vec, is_record: bool) -> Type { #[cfg(test)] mod tests { - use crate::testutil::{check, ok}; + use crate::testutil::{bad_with, check, ok}; #[test] fn structural_pattern_binds_record_fields() { @@ -756,11 +758,7 @@ mod tests { "needs a record or `any` scrutinee", ), ] { - let errs = check(src); - assert!( - errs.iter().any(|e| e.message.contains(want)), - "expected {want:?} for {src:?}, got {errs:?}" - ); + bad_with(src, want); } } @@ -865,15 +863,12 @@ mod tests { { x, .. } => x\n\ }\n"); // Naming a field the row lacks can never select. - let errs = check( + bad_with( "type Point = { x: int, y: int }\n\ fn f(p: Point) -> int = match p {\n\ { z, .. } => z\n\ }\n", - ); - assert!( - errs.iter().any(|e| e.message.contains("has no such field")), - "{errs:?}" + "has no such field", ); } @@ -1018,15 +1013,13 @@ mod tests { #[test] fn unknown_constructor_pattern_is_an_error_but_binds_fields() { - let errs = check( + bad_with( "fn f(v) = match v {\n\ Bogus { a, b } => a\n\ _ => 0\n\ }\n", + "unknown constructor `Bogus`", ); - assert!(errs - .iter() - .any(|e| e.message.contains("unknown constructor `Bogus`"))); } #[test] @@ -1085,21 +1078,20 @@ mod tests { .iter() .any(|e| e.message.contains("Result") && e.message.contains("bool"))); - let errs = check("let x = match true { true => 1 }\n"); - assert!(errs.iter().any(|e| e.message.contains("non-exhaustive"))); + bad_with("let x = match true { true => 1 }\n", "non-exhaustive"); } #[test] fn bare_result_annotation_uses_the_no_args_unwrap_fallback() { // A bare `Result` annotation (no type args) is still a Result; matching a // A literal cannot directly match a Result wrapper. - let errs = check( + bad_with( "fn f(r: Result) -> int = match r {\n\ 0 => 0\n\ _ => 1\n\ }\n", + "Result", ); - assert!(errs.iter().any(|e| e.message.contains("Result"))); } #[test] @@ -1117,32 +1109,26 @@ mod tests { fn misspelled_uppercase_variant_is_not_a_catch_all() { // `Bleu` is not a `Color` variant: it must be reported rather than // silently absorbing the missing variants as a catch-all. - let errs = check( + bad_with( "type Color = Red | Green | Blue\n\ fn name(c: Color) -> string = match c {\n\ Red => \"r\"\n\ Bleu => \"?\"\n\ }\n", - ); - assert!( - errs.iter().any(|e| e.message.contains("Bleu")), - "expected an error naming the unknown variant `Bleu`: {errs:?}" + "Bleu", ); } #[test] fn arm_after_a_catch_all_is_unreachable() { - let errs = check( + bad_with( "type Color = Red | Green | Blue\n\ fn name(c: Color) -> string = match c {\n\ Red => \"r\"\n\ _ => \"?\"\n\ Green => \"g\"\n\ }\n", - ); - assert!( - errs.iter().any(|e| e.message.contains("unreachable")), - "expected an unreachable-arm error: {errs:?}" + "unreachable", ); } diff --git a/crates/osprey-types/src/redundant.rs b/crates/osprey-types/src/redundant.rs new file mode 100644 index 00000000..b1624269 --- /dev/null +++ b/crates/osprey-types/src/redundant.rs @@ -0,0 +1,328 @@ +//! Redundant type-annotation detection. +//! +//! Implements [TYPE-ANNOTATION-REDUNDANT]. An annotation is redundant exactly +//! when erasing it leaves the solved program unchanged, which is a property of +//! inference and not of the annotation's spelling: the same +//! `string -> int -> string` is redundant on one function and load-bearing on +//! the next. The rule is therefore decided by re-running the inferrer over an +//! erased copy of the program and comparing what it published. + +use std::collections::{BTreeMap, HashMap, HashSet}; + +use osprey_ast::{Position, Program}; + +use crate::check::infer_checked; +use crate::redundant_sites::{erase, sites, Site, Slot}; +use crate::ty::{Type, VarId}; + +/// The rule identifier this diagnostic is reported under, and the name a +/// per-rule severity setting will address it by ([TYPE-ANNOTATION-REDUNDANT]). +pub const REDUNDANT_ANNOTATION: &str = "redundant-annotation"; + +/// A diagnostic that is true of the program but is not a reason to reject it. +/// +/// Warnings are reported alongside [`TypeError`](crate::TypeError)s and change +/// no exit code and no generated code. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct TypeWarning { + /// Human-readable text, already naming the offending declaration. + pub message: String, + /// Where the annotated declaration was written, when recorded. + pub position: Option, + /// The rule that raised it. + pub rule: &'static str, +} + +/// Every type the inferrer publishes, under a stable label. +/// +/// Function signatures are keyed by name; bindings, lambdas and list literals +/// are keyed by source position, which an erasure never moves. Comparing the +/// whole map is what makes the rule honest: an annotation that changed only a +/// `let`'s type is still an annotation that changed something. +type Published = BTreeMap; + +/// Equal signatures alone do not prove that dotted calls choose the same +/// implementation. Preserve dispatch choices alongside the inferred types. +struct Snapshot { + types: Published, + methods: crate::methods::Targets, +} + +/// Every redundant annotation in `program`, in source order. +/// +/// An ill-typed program yields none: its inferred types are the checker's +/// best effort at a program that does not typecheck, so no conclusion drawn +/// from comparing them would be trustworthy. +#[must_use] +pub fn redundant_annotations(program: &Program) -> Vec { + redundant_annotations_where(program, |_| true) +} + +/// Select one jointly removable set for the entire program, then report the +/// requested source annotations. Reports for separate files share that set. +#[must_use] +pub fn redundant_annotations_where( + program: &Program, + include: impl Fn(Option) -> bool, +) -> Vec { + let written = sites(program); + if !written.iter().any(|site| include(site.position)) { + return Vec::new(); + } + let Some(baseline) = published(program) else { + return Vec::new(); + }; + let all: Vec = (0..written.len()).collect(); + let removable = if preserves(program, &baseline, &written, &all) { + all + } else { + accumulate(program, &baseline, &written) + }; + removable + .iter() + .filter_map(|index| written.get(*index)) + .filter(|site| include(site.position)) + .map(warn) + .collect() +} + +/// Grow the reported set one annotation at a time, in source order, keeping +/// only those that stay removable alongside everything already kept. +/// +/// A reader acts on the whole list, so the whole list has to be safe. Judging +/// each annotation against the untouched program answers a question nobody +/// asked: mutually-pinning annotations each look removable while the others +/// hold the type down, and a reader who deletes all of them gets a different +/// program. Every set this returns has been solved for as a set. +fn accumulate(program: &Program, baseline: &Snapshot, written: &[Site]) -> Vec { + let mut kept: Vec = Vec::new(); + for index in 0..written.len() { + kept.push(index); + if !preserves(program, baseline, written, &kept) { + let _ = kept.pop(); + } + } + kept +} + +/// Whether erasing every annotation in `chosen` — all of them at once — leaves +/// `program` typechecking and publishing the same types, up to renaming of +/// type variables. +/// +/// One checked solve both validates the candidate and publishes its types. +fn preserves(program: &Program, baseline: &Snapshot, written: &[Site], chosen: &[usize]) -> bool { + let erasing: HashSet = chosen + .iter() + .filter_map(|index| written.get(*index)) + .flat_map(|site| site.members.iter().copied()) + .collect(); + let candidate = erase(program, &mut |slot| !erasing.contains(&slot)); + published(&candidate).is_some_and(|candidate| { + baseline.methods == candidate.methods && same_types(&baseline.types, &candidate.types) + }) +} + +/// Everything the inferrer resolved, labelled so two runs compare entry by +/// entry. +fn published(program: &Program) -> Option { + let types = infer_checked(program).ok()?; + let functions = types.functions.iter().map(|(name, (params, ret))| { + let signature = Type::Fun { + params: params.clone(), + ret: Box::new(ret.clone()), + }; + (format!("fn {name}"), signature) + }); + let mut published: Published = functions + .chain(sited("let", &types.lets)) + .chain(sited("lambda", &types.lambdas)) + .chain(sited("list", &types.lists)) + .collect(); + for (function, binders) in &types.declared_params { + for (name, ty) in binders { + let _ = published.insert(format!("binder {function} {name}"), ty.clone()); + } + } + for (owner, obligations) in &types.obligations { + for (index, (name, ty)) in obligations.iter().enumerate() { + let _ = published.insert(format!("constraint {owner} {index} {name}"), ty.clone()); + } + } + for (position, site) in &types.performs { + publish_operation( + &mut published, + &format!("perform {position:?}"), + &site.op, + &site.effect_args, + ); + } + for (position, site) in &types.handler_ops { + for (operation, op) in &site.ops { + publish_operation( + &mut published, + &format!("handler {position:?} {operation}"), + op, + &site.effect_args, + ); + } + } + Some(Snapshot { + types: published, + methods: types.methods, + }) +} + +fn publish_operation( + published: &mut Published, + label: &str, + operation: &crate::info::OpType, + arguments: &[Type], +) { + let _ = published.insert( + label.to_owned(), + Type::fun(operation.params.clone(), operation.ret.clone()), + ); + for (index, argument) in arguments.iter().enumerate() { + let _ = published.insert(format!("{label} argument {index}"), argument.clone()); + } +} + +/// Label one position-keyed table so its entries join the same flat map. +fn sited<'a>( + kind: &'a str, + table: &'a HashMap<(u32, u32), Type>, +) -> impl Iterator + 'a { + table + .iter() + .map(move |((line, column), ty)| (format!("{kind} {line}:{column}"), ty.clone())) +} + +/// The diagnostic for one redundant annotation. +/// +/// The reported type is the written one: redundancy *means* inference derives +/// exactly that, so printing it tells the reader the deletion is a no-op. +fn warn(site: &Site) -> TypeWarning { + let written = &site.written; + let message = match &site.slot { + Slot::Signature { owner } => format!( + "redundant type signature on `{owner}`: inference derives `{written}` without it" + ), + Slot::Param { + owner, parameter, .. + } => format!( + "redundant type annotation on parameter `{parameter}` of `{owner}`: inference derives `{written}` without it" + ), + Slot::Return { owner } => format!( + "redundant return type annotation on `{owner}`: inference derives `{written}` without it" + ), + Slot::Binding { name } => format!( + "redundant type annotation on `{name}`: inference derives `{written}` without it" + ), + }; + TypeWarning { + message: osprey_ast::symbol::demangle_message(&message).into_owned(), + position: site.position, + rule: REDUNDANT_ANNOTATION, + } +} + +/// Whether two runs published the same types up to a consistent renaming of +/// inference variables. +/// +/// The renaming is global rather than per entry: a shared variable is real +/// sharing between two signatures, and an erasure that breaks it changed the +/// program's types even though each signature alone still looks the same. +fn same_types(left: &Published, right: &Published) -> bool { + let mut renaming = Renaming::default(); + left.len() == right.len() + && left + .iter() + .zip(right.iter()) + .all(|((left_label, left_ty), (right_label, right_ty))| { + left_label == right_label && equivalent(left_ty, right_ty, &mut renaming) + }) +} + +/// A partial bijection between the two runs' inference variables. +#[derive(Default)] +struct Renaming { + /// Left variable → the right variable it was first paired with. + forward: HashMap, + /// Right variable → the left variable it was first paired with. + backward: HashMap, +} + +impl Renaming { + /// Pair `left` with `right`, failing if either is already paired elsewhere. + fn pair(&mut self, left: VarId, right: VarId) -> bool { + matches(&mut self.forward, left, right) && matches(&mut self.backward, right, left) + } +} + +/// Whether `key` already maps to `value` in `map`, recording it if it is new. +fn matches(map: &mut HashMap, key: VarId, value: VarId) -> bool { + match map.insert(key, value) { + Some(existing) => existing == value, + None => true, + } +} + +/// Whether two types are equal up to the variable renaming built so far. +fn equivalent(left: &Type, right: &Type, renaming: &mut Renaming) -> bool { + match (left, right) { + (Type::Var(l), Type::Var(r)) => renaming.pair(*l, *r), + (Type::Con { name: l, args: la }, Type::Con { name: r, args: ra }) + | ( + Type::Union { + name: l, + variants: la, + }, + Type::Union { + name: r, + variants: ra, + }, + ) => l == r && all_equivalent(la, ra, renaming), + ( + Type::Fun { + params: lp, + ret: lr, + }, + Type::Fun { + params: rp, + ret: rr, + }, + ) => all_equivalent(lp, rp, renaming) && equivalent(lr, rr, renaming), + ( + Type::Record { + name: l, + fields: lf, + }, + Type::Record { + name: r, + fields: rf, + }, + ) => l == r && lf.keys().eq(rf.keys()) && all_equivalent_values(lf, rf, renaming), + _ => false, + } +} + +/// Whether two type sequences are pairwise equivalent under one renaming. +fn all_equivalent(left: &[Type], right: &[Type], renaming: &mut Renaming) -> bool { + left.len() == right.len() + && left + .iter() + .zip(right.iter()) + .all(|(l, r)| equivalent(l, r, renaming)) +} + +/// Whether two records' field types are pairwise equivalent. Fields are keyed +/// in a `BTreeMap`, so iteration already aligns them by name. +fn all_equivalent_values( + left: &BTreeMap, + right: &BTreeMap, + renaming: &mut Renaming, +) -> bool { + left.values() + .zip(right.values()) + .all(|(l, r)| equivalent(l, r, renaming)) +} diff --git a/crates/osprey-types/src/redundant_sites.rs b/crates/osprey-types/src/redundant_sites.rs new file mode 100644 index 00000000..9580f718 --- /dev/null +++ b/crates/osprey-types/src/redundant_sites.rs @@ -0,0 +1,314 @@ +//! Locating and erasing written type annotations. +//! +//! Implements [TYPE-ANNOTATION-REDUNDANT]: the rule is decided by re-inferring +//! a program with one annotation replaced by a fresh variable, so the detector +//! needs a way to address each annotation and produce that erased copy. Both +//! needs are one deterministic pre-order walk over the same slots, so this +//! module exposes exactly one traversal and two thin drivers over it. + +use std::collections::{HashMap, HashSet}; + +use osprey_ast::mutate::{children_mut, statement_children_mut}; +use osprey_ast::{walk_program, AstVisitor, Expr, Position, Program, Stmt, TypeExpr}; + +use crate::check::annotation_name; +use crate::convert::type_expr_to_type; + +/// What a written annotation is attached to, for the diagnostic's wording. +#[derive(Debug, Clone, PartialEq, Eq)] +pub(crate) enum Slot { + /// One ML signature, including every lowered curry fragment. + Signature { owner: String }, + /// A named function or lambda parameter. + Param { + /// The enclosing function's name (`` for an anonymous one). + owner: String, + /// The annotated parameter's name. + parameter: String, + /// Its position in the parameter list, which is how a signature — that + /// names types and not parameters — addresses it. + index: usize, + }, + /// A function's or lambda's declared return type. + Return { + /// The enclosing function's name (`` for an anonymous one). + owner: String, + }, + /// A `let` binding's declared type. + Binding { + /// The bound name. + name: String, + }, +} + +/// The name reported for an annotation written on an anonymous function. +const LAMBDA_OWNER: &str = ""; + +/// One written annotation, addressed by its index in the pre-order walk. +#[derive(Debug, Clone, PartialEq, Eq)] +pub(crate) struct Site { + /// Slots derived from this one written annotation. + pub(crate) members: Vec, + /// Source identity shared by fragments of a written signature. + source: Option, + /// What the annotation is attached to. + pub(crate) slot: Slot, + /// The written type, rendered. Redundancy means inference derives exactly + /// this, so it is also the type the diagnostic reports as derived. + pub(crate) written: String, + /// Where the annotated declaration was written, when recorded. + pub(crate) position: Option, +} + +/// The callback every traversal function here threads through the tree: it +/// receives each annotation slot and the annotation itself, by unique +/// reference so a driver can clear it in place. +type Visit<'a> = &'a mut dyn FnMut(Slot, Option, &mut Option); + +/// Every written annotation the rule judges, in walk order. +/// +/// The index of a [`Site`] in this list is its address: [`erase`] clears the +/// annotation the same walk reaches at the same index. +pub(crate) fn sites(program: &Program) -> Vec { + let mut found = Vec::new(); + let mut scratch = program.clone(); + walk(&mut scratch, &mut |slot, position, annotation| { + if let Some(written) = annotation.as_ref().map(render) { + found.push(Site { + members: vec![found.len()], + source: annotation.as_ref().and_then(|ty| ty.position), + slot, + written, + position, + }); + } + }); + group_signatures(found) +} + +/// Group only fragments with the same recorded source identity. Matching +/// types or matching lambda shapes cannot prove common provenance. +fn group_signatures(sites: Vec) -> Vec { + let mut groups: Vec> = Vec::new(); + let mut sources = HashMap::new(); + for site in sites { + let index = site + .source + .map(|p| (p.line, p.column)) + .map_or(groups.len(), |key| { + *sources.entry(key).or_insert(groups.len()) + }); + match groups.get_mut(index) { + Some(group) => group.push(site), + None => groups.push(vec![site]), + } + } + groups + .iter() + .filter_map(|group| signature_site(group)) + .collect() +} + +fn signature_site(group: &[Site]) -> Option { + let mut site = group.first()?.clone(); + if group.len() == 1 { + return Some(site); + } + let (Slot::Param { owner, .. } | Slot::Return { owner }) = &site.slot else { + return Some(site); + }; + // Keep the outer function's return tail intact: a curried function and + // a flat multi-parameter function have different types and call ABIs. + let params: Vec<_> = group + .iter() + .take_while(|s| matches!(s.slot, Slot::Param { .. })) + .map(|s| s.written.as_str()) + .collect(); + let result = group + .iter() + .find(|s| matches!(&s.slot, Slot::Return { owner: name } if name == owner))?; + site.written = format!("({}) -> {}", params.join(", "), result.written); + site.slot = Slot::Signature { + owner: owner.clone(), + }; + site.position = site.source; + site.members = group + .iter() + .flat_map(|s| s.members.iter().copied()) + .collect(); + Some(site) +} + +/// A copy of `program` with the annotations selected by `keep` removed. +/// +/// `keep` is called with each site's walk index and returns `true` to leave the +/// annotation in place, so erasing one site and erasing every site are the same +/// traversal under two predicates. +pub(crate) fn erase(program: &Program, keep: &mut impl FnMut(usize) -> bool) -> Program { + let mut erased = program.clone(); + let mut index = 0usize; + walk(&mut erased, &mut |_, _, annotation| { + if annotation.is_some() { + if !keep(index) { + *annotation = None; + } + index += 1; + } + }); + erased +} + +/// Render a written annotation the way inference renders the type it derives, +/// so a diagnostic's before and after are directly comparable. +fn render(annotation: &TypeExpr) -> String { + type_expr_to_type(annotation, &HashMap::new()).to_string() +} + +/// ML binders and effect rows share the type header. Type-slot erasure cannot +/// prove that deleting those other parts preserves the function's contract. +fn retained_header(statement: &Stmt) -> Option { + let Stmt::Function { + type_params, + effects, + return_type, + position, + .. + } = statement + else { + return None; + }; + let source = return_type.as_ref()?.position?; + ((!type_params.is_empty() || !effects.is_empty()) + && source.line > 0 + && source.line < position.as_ref()?.line) + .then_some(source) +} + +fn retained_headers(program: &Program) -> HashSet<(u32, u32)> { + #[derive(Default)] + struct Headers(HashSet<(u32, u32)>); + impl AstVisitor for Headers { + fn statement(&mut self, statement: &Stmt) { + if let Some(source) = retained_header(statement) { + let _ = self.0.insert((source.line, source.column)); + } + } + } + let mut headers = Headers::default(); + walk_program(program, &mut headers); + headers.0 +} + +/// Visit written annotations, retaining module contracts and non-type headers. +fn walk(program: &mut Program, visit: Visit<'_>) { + let retained = retained_headers(program); + walk_statements( + &mut program.statements, + &mut |slot, position, annotation| { + if !annotation.as_ref().is_some_and(|ty| { + ty.is_from_contract() + || ty + .position + .is_some_and(|p| retained.contains(&(p.line, p.column))) + }) { + visit(slot, position, annotation); + } + }, + ); +} + +/// Walk a statement sequence — a program body, a namespace, or a block. +fn walk_statements(statements: &mut [Stmt], visit: Visit<'_>) { + for statement in statements { + walk_statement(statement, &mut *visit); + } +} + +/// Walk one statement's own annotation slots, then the expressions inside it. +/// +/// A container statement recurses here and returns, because +/// [`statement_children_mut`] would otherwise reach the same nested statements +/// a second time and shift every later site's index. +fn walk_statement(statement: &mut Stmt, visit: Visit<'_>) { + match statement { + Stmt::Namespace { body, .. } => return walk_statements(body, &mut *visit), + Stmt::Module { body, .. } => { + for item in &mut *body { + walk_statement(&mut item.declaration, &mut *visit); + } + return; + } + Stmt::Function { + name, + parameters, + return_type, + position, + .. + } => walk_signature(name, parameters, return_type, *position, &mut *visit), + Stmt::Let { + name, ty, position, .. + } => visit( + Slot::Binding { + name: annotation_name(name), + }, + *position, + ty, + ), + _ => {} + } + statement_children_mut(statement, &mut |expression| { + walk_expr(expression, &mut *visit); + }); +} + +/// Walk the annotation slots reachable through an expression. +/// +/// A block owns statements, which [`children_mut`] reaches only as their child +/// expressions, so a block recurses here instead of through that helper. +fn walk_expr(expression: &mut Expr, visit: Visit<'_>) { + if let Expr::Lambda { + parameters, + return_type, + position, + .. + } = expression + { + walk_signature( + LAMBDA_OWNER, + parameters, + return_type, + *position, + &mut *visit, + ); + } + if let Expr::Block { statements, value } = expression { + walk_statements(statements, &mut *visit); + if let Some(value) = value { + walk_expr(value, &mut *visit); + } + return; + } + children_mut(expression, &mut |child| walk_expr(child, &mut *visit)); +} + +/// Hand a callable's parameter and return annotations to `visit`, in order. +fn walk_signature( + owner: &str, + parameters: &mut [osprey_ast::Parameter], + return_type: &mut Option, + position: Option, + visit: Visit<'_>, +) { + for (index, parameter) in parameters.iter_mut().enumerate() { + let slot = Slot::Param { + owner: owner.to_string(), + parameter: annotation_name(¶meter.name), + index, + }; + visit(slot, position, &mut parameter.ty); + } + let slot = Slot::Return { + owner: owner.to_string(), + }; + visit(slot, position, return_type); +} diff --git a/crates/osprey-types/src/redundant_tests.rs b/crates/osprey-types/src/redundant_tests.rs new file mode 100644 index 00000000..a8c9cc12 --- /dev/null +++ b/crates/osprey-types/src/redundant_tests.rs @@ -0,0 +1,559 @@ +//! Tests for [TYPE-ANNOTATION-REDUNDANT]. +//! +//! Every assertion here pins the exact diagnostic text, not a substring: the +//! message names the declaration and prints the type the reader would get by +//! deleting the annotation, and a message that stops being that precise is a +//! regression even when it still contains the word "redundant". + +use crate::redundant::{redundant_annotations, TypeWarning, REDUNDANT_ANNOTATION}; +use std::fmt::Write as _; + +use osprey_ast::Position; +use osprey_syntax::{parse_program_with_flavor, Flavor}; + +/// Parse under `flavor` and collect the redundancy warnings. A snippet that +/// does not parse fails the test rather than scoring as "no warnings". +fn warnings(flavor: Flavor, src: &str) -> Vec { + let parsed = parse_program_with_flavor(src, flavor); + assert!( + parsed.errors.is_empty(), + "{flavor} flavor rejected the snippet at parse time: {:?}\n{src}", + parsed.errors + ); + redundant_annotations(&parsed.program) +} + +/// The warning messages under `flavor`, in report order. +fn messages(flavor: Flavor, src: &str) -> Vec { + warnings(flavor, src) + .into_iter() + .map(|w| w.message) + .collect() +} + +/// Assert the exact set of messages `flavor` reports for `src`, in order. +fn reports(flavor: Flavor, src: &str, expected: &[&str]) { + assert_eq!(messages(flavor, src), expected, "\n{src}"); +} + +/// Assert `src` is clean under `flavor` — every annotation in it is earning +/// its place, or there are none. +fn silent(flavor: Flavor, src: &str) { + reports(flavor, src, &[]); +} + +const GREET: &str = "fn greet(name: string) -> string = \"hi \" + name\n"; + +#[test] +fn a_redundant_parameter_and_return_are_both_named_exactly() { + reports( + Flavor::Default, + GREET, + &[ + "redundant type annotation on parameter `name` of `greet`: inference derives `string` without it", + "redundant return type annotation on `greet`: inference derives `string` without it", + ], + ); +} + +#[test] +fn an_unannotated_function_reports_nothing() { + silent(Flavor::Default, "fn greet(name) = \"hi \" + name\n"); +} + +#[test] +fn every_warning_carries_the_configurable_rule_identifier() { + let raised = warnings(Flavor::Default, GREET); + assert_eq!(raised.len(), 2, "{raised:?}"); + assert!( + raised.iter().all(|w| w.rule == REDUNDANT_ANNOTATION), + "{raised:?}" + ); + assert_eq!(REDUNDANT_ANNOTATION, "redundant-annotation"); +} + +#[test] +fn a_warning_points_at_the_declaration_it_came_from() { + let raised = warnings(Flavor::Default, &format!("\n\n{GREET}")); + assert_eq!( + raised.first().map(|w| w.position), + Some(Some(Position { line: 3, column: 3 })), + "{raised:?}" + ); +} + +#[test] +fn a_redundant_let_annotation_is_reported_by_name() { + reports( + Flavor::Default, + "let n: int = 42\n", + &["redundant type annotation on `n`: inference derives `int` without it"], + ); +} + +#[test] +fn an_empty_literal_annotation_is_load_bearing_and_kept() { + silent(Flavor::Default, "let xs: List = []\n"); +} + +#[test] +fn a_redundant_lambda_parameter_is_reported_against_the_lambda() { + reports( + Flavor::Default, + "let exclaim = fn(s: string) => s + \"!\"\nlet r = exclaim(\"hi\")\n", + &["redundant type annotation on parameter `s` of ``: inference derives `string` without it"], + ); +} + +#[test] +fn an_extern_declaration_is_never_reported() { + // Implements [TYPE-ANNOTATION-REDUNDANT]: an `extern` has no body to infer + // from, so its types are its declaration and can never be redundant. + silent( + Flavor::Default, + "extern fn osprey_ffi_cell() -> Ptr\nlet c = osprey_ffi_cell()\n", + ); +} + +#[test] +fn record_field_declarations_are_never_reported() { + silent( + Flavor::Default, + "type Point = { x: int, y: int }\nlet p = Point { x: 1, y: 2 }\n", + ); +} + +#[test] +fn an_ill_typed_program_reports_no_redundancy() { + // Inference over a rejected program is a best-effort shape, so no + // comparison against it would be trustworthy. The type errors come first. + silent( + Flavor::Default, + "fn inc(x: int) -> int = x + 1\nlet r = inc(\"not an int\")\n", + ); +} + +#[test] +fn a_redundant_generic_signature_reports_only_what_can_go_together() { + // `-> T` is what keeps the declared binder `T` in use once `x: T` goes, so + // the two cannot both be deleted and only the first is reported. + reports( + Flavor::Default, + "fn identity(x: T) -> T = x\nlet i = identity(42)\n", + &["redundant type annotation on parameter `x` of `identity`: inference derives `T` without it"], + ); +} + +#[test] +fn a_result_returning_annotation_that_matches_inference_is_still_redundant() { + reports( + Flavor::Default, + "fn half(n: int) -> Result = intDiv(n, 2)\n", + &[ + "redundant type annotation on parameter `n` of `half`: inference derives `int` without it", + "redundant return type annotation on `half`: inference derives `Result` without it", + ], + ); +} + +#[test] +fn a_return_annotation_naming_the_wrong_error_type_is_a_type_error_not_a_warning() { + // `intDiv` yields `Result`. Naming `Error` instead is a + // mismatch the checker rejects, and a rejected program raises no warnings. + silent( + Flavor::Default, + "fn half(n: int) -> Result = intDiv(n, 2)\n", + ); +} + +#[test] +fn each_flavor_reports_the_lines_that_flavor_lets_you_delete() { + // Both surfaces agree the annotation is redundant and agree on the type + // inference derives. They differ in how many warnings that is, because + // they differ in how many things there are to delete: Default writes the + // parameter and the return separately and either can go on its own, while + // ML writes one header line that goes as a whole. + reports( + Flavor::Default, + GREET, + &[ + "redundant type annotation on parameter `name` of `greet`: inference derives `string` without it", + "redundant return type annotation on `greet`: inference derives `string` without it", + ], + ); + reports( + Flavor::Ml, + "greet : string -> string\ngreet name = \"hi \" + name\n", + &["redundant type signature on `greet`: inference derives `(string) -> string` without it"], + ); +} + +#[test] +fn an_ml_module_body_repeating_its_signature_is_still_redundant() { + // The `signature` block is the module's contract and is never reported. + // A member that WRITES the same type again is judged like any other + // function: signature elaboration marks the types it supplies + // ([MODULES-SIGNATURE]), so a written duplicate is distinguishable from + // the copy the compiler pushed onto an unannotated member. + reports( + Flavor::Ml, + "signature Api\n shout : string -> string\n\nmodule M : Api\n shout : string -> string\n shout s = s + \"!\"\n", + &["redundant type signature on `shout`: inference derives `(string) -> string` without it"], + ); +} + +#[test] +fn a_module_member_annotation_that_is_not_its_contract_is_still_reported() { + // The carve-out is exactly the contract, not the whole module. A private + // helper the signature never mentions is judged like any other function. + reports( + Flavor::Ml, + "signature Api\n shout : string -> string\n\nmodule M : Api\n louder : string -> string\n louder s = s + \"!!\"\n shout s = louder s\n", + &["redundant type signature on `louder`: inference derives `(string) -> string` without it"], + ); +} + +#[test] +fn a_signature_block_alone_reports_nothing() { + silent( + Flavor::Ml, + "signature Api\n shout : string -> string\n\nmodule M : Api\n shout s = s + \"!\"\n", + ); +} + +#[test] +fn two_redundant_functions_are_reported_in_source_order() { + reports( + Flavor::Default, + "fn first(a: string) -> string = a + \"1\"\nfn second(b: string) -> string = b + \"2\"\n", + &[ + "redundant type annotation on parameter `a` of `first`: inference derives `string` without it", + "redundant return type annotation on `first`: inference derives `string` without it", + "redundant type annotation on parameter `b` of `second`: inference derives `string` without it", + "redundant return type annotation on `second`: inference derives `string` without it", + ], + ); +} + +#[test] +fn a_nested_block_binding_is_reached() { + reports( + Flavor::Default, + "fn run() -> string = {\n let greeting: string = \"hi\"\n greeting\n}\n", + &[ + "redundant return type annotation on `run`: inference derives `string` without it", + "redundant type annotation on `greeting`: inference derives `string` without it", + ], + ); +} + +#[test] +fn only_the_redundant_parameter_of_a_pair_is_reported() { + // `label` is pinned by `+`; `count` only by `toString`, which takes any, + // so its annotation is the thing keeping the signature concrete. + reports( + Flavor::Default, + "fn tag(label: string, count: int) -> string = label + toString(count)\n", + &[ + "redundant type annotation on parameter `label` of `tag`: inference derives `string` without it", + "redundant return type annotation on `tag`: inference derives `string` without it", + ], + ); +} + +#[test] +fn a_nominal_record_parameter_annotation_is_kept_but_its_return_is_not() { + // Erasing `p: Point` leaves a structural row that only needs an `x`, which + // is a MORE GENERAL signature than the one written — so the parameter + // annotation is doing work. The return type is derived either way. + reports( + Flavor::Default, + "type Point = { x: int, y: int }\nfn px(p: Point) -> int = p.x\nlet v = px(Point { x: 1, y: 2 })\n", + &["redundant return type annotation on `px`: inference derives `int` without it"], + ); +} + +#[test] +fn a_union_typed_signature_is_reported_with_its_union_name() { + reports( + Flavor::Default, + "type Color = Red | Green | Blue\nfn name(c: Color) -> string = match c {\n Red => \"red\"\n Green => \"green\"\n Blue => \"blue\"\n}\nlet n = name(Red)\n", + &[ + "redundant type annotation on parameter `c` of `name`: inference derives `Color` without it", + "redundant return type annotation on `name`: inference derives `string` without it", + ], + ); +} + +#[test] +fn a_higher_order_parameter_annotation_is_judged_like_any_other() { + let raised = messages( + Flavor::Default, + "fn twice(f: (int) -> int, x: int) -> int = f(f(x))\nfn inc(n: int) -> int = (n + 1) ?: 0\nlet r = twice(inc, 1)\n", + ); + assert!( + raised.contains( + &"redundant type annotation on parameter `x` of `twice`: inference derives `int` without it" + .to_string() + ), + "{raised:?}" + ); +} + +#[test] +fn a_mutable_binding_annotation_is_reported_like_an_immutable_one() { + reports( + Flavor::Default, + "effect State { set: fn(int) -> Unit }\nfn main() -> Unit = {\n mut cell: int = 0\n handle State\n set value => { cell = value }\n in { perform State.set(1) }\n}\n", + &[ + "redundant return type annotation on `main`: inference derives `Unit` without it", + "redundant type annotation on `cell`: inference derives `int` without it", + ], + ); +} + +#[test] +fn an_ml_lambda_parameter_is_reported_against_the_lambda() { + reports( + Flavor::Ml, + "exclaim = \\(s: string) => s + \"!\"\nr = exclaim \"hi\"\n", + &["redundant type annotation on parameter `s` of ``: inference derives `string` without it"], + ); +} + +#[test] +fn a_namespaced_function_is_reported_by_its_source_name_not_its_symbol() { + reports( + Flavor::Ml, + "namespace tax\n\nrate : string -> string\nrate band = band + \"%\"\n", + &["redundant type signature on `rate`: inference derives `(string) -> string` without it"], + ); +} + +#[test] +fn every_message_names_a_type_and_never_leaks_a_type_variable() { + // `t0`-style inference variables are internal. A warning that printed one + // would be telling the reader to write a type they cannot spell. + let raised = messages(Flavor::Default, GREET); + assert!(!raised.is_empty()); + for message in &raised { + assert!( + message.starts_with("redundant "), + "message does not open with the rule: {message}" + ); + assert!( + message.ends_with(" without it"), + "message does not close with the fix: {message}" + ); + assert!( + !message.contains("`t0`") && !message.contains("`t1`"), + "message leaked an inference variable: {message}" + ); + } +} + +#[test] +fn an_annotation_free_corpus_is_completely_silent() { + silent( + Flavor::Default, + "type Point = { x: int, y: int }\n\ + fn px(p) = p.x\n\ + fn shout(s) = s + \"!\"\n\ + let p = Point { x: 1, y: 2 }\n\ + let out = shout(toString(px(p)))\n", + ); +} + +/// Eight redundantly annotated functions around one whose parameter annotation +/// is doing real work — erasing `p: Point` would widen it to a structural row. +/// This is the shape the group-narrowing search has to get right. +fn mixed_corpus() -> String { + let redundant = (0..8).fold(String::new(), |mut out, i| { + let _ = writeln!(out, "fn f{i}(s: string) -> string = s + \"{i}\""); + out + }); + format!( + "type Point = {{ x: int, y: int }}\n\ + {redundant}\ + fn keeper(p: Point) -> int = p.x\n\ + let v = keeper(Point {{ x: 1, y: 2 }})\n" + ) +} + +#[test] +fn narrowing_does_not_lose_warnings_around_a_load_bearing_annotation() { + // Erasing everything at once fails because of `keeper`, so the search + // splits. Every redundant annotation must still be reported, and + // `keeper`'s load-bearing parameter must not be. + let raised = messages(Flavor::Default, &mixed_corpus()); + assert_eq!(raised.len(), 17, "{raised:?}"); + for index in 0..8 { + assert!( + raised.contains(&format!( + "redundant type annotation on parameter `s` of `f{index}`: inference derives `string` without it" + )), + "lost the parameter of f{index}: {raised:?}" + ); + assert!( + raised.contains(&format!( + "redundant return type annotation on `f{index}`: inference derives `string` without it" + )), + "lost the return type of f{index}: {raised:?}" + ); + } + assert!( + raised.contains( + &"redundant return type annotation on `keeper`: inference derives `int` without it" + .to_string() + ), + "{raised:?}" + ); + assert!( + !raised + .iter() + .any(|m| m.contains("parameter `p` of `keeper`")), + "reported a load-bearing parameter: {raised:?}" + ); +} + +#[test] +fn narrowing_reports_in_source_order_regardless_of_how_it_searched() { + // The search halves the annotation list and so visits it out of order. + // What comes back must still read down the file. + let raised = warnings(Flavor::Default, &mixed_corpus()); + let lines: Vec = raised + .iter() + .filter_map(|w| w.position.map(|p| p.line)) + .collect(); + let mut sorted = lines.clone(); + sorted.sort_unstable(); + assert_eq!(lines, sorted, "warnings came out of order: {raised:?}"); + assert_eq!(lines.len(), raised.len(), "a warning lost its position"); +} + +#[test] +fn the_same_program_reports_the_same_warnings_every_run() { + let source = mixed_corpus(); + let first = messages(Flavor::Default, &source); + let second = messages(Flavor::Default, &source); + assert_eq!(first, second, "detection is not deterministic"); +} + +#[test] +fn an_effect_operation_signature_is_never_reported() { + // An `effect` declares its operations' types; there is no body to infer + // them from, so they are declarations and not constraints. + silent( + Flavor::Default, + "effect Log { line: fn(string) -> Unit }\n\ + fn main() = handle Log\n line message => {}\nin { perform Log.line(\"hi\") }\n", + ); +} + +/// The ML header `smaller : int -> int -> int` with `smaller a b = ...`. +/// One written line; the lowering turns it into a parameter, a curried +/// function-typed return, and a nested lambda carrying the rest. +const CURRIED_ML: &str = "smaller : int -> int -> int\n\ + smaller a b = match a <= b\n true => a\n false => b\n"; + +#[test] +fn a_curried_ml_header_that_monomorphises_a_polymorphic_body_is_kept() { + // `smaller a b = match a <= b ...` generalises to a comparison over any + // one type. The header pins it to `int`, so it is doing real work and no + // part of it is redundant. Judging the lowering's fragments one at a time + // said the opposite — each slot looked derivable because the others were + // still holding the type down — and reported four warnings for a line + // that cannot be deleted. + silent(Flavor::Ml, CURRIED_ML); +} + +#[test] +fn a_curried_ml_header_never_blames_a_lambda_for_a_named_parameter() { + // `b` is a parameter the reader named on the `smaller a b = ...` line. + // Attributing it to `` points at code nobody wrote. + let raised = messages(Flavor::Ml, CURRIED_ML); + assert!( + !raised.iter().any(|m| m.contains("")), + "blamed a lambda for a written parameter: {raised:?}" + ); +} + +#[test] +fn a_genuinely_redundant_curried_header_is_one_warning_naming_the_function() { + // Here the body pins both parameters to `int` on its own, so the header + // really is deletable — and it is ONE line, so it is ONE warning naming + // the function and the whole signature. Reporting `(int) -> int` as the + // "return type" would be the curried remainder, which appears nowhere in + // the source. + reports( + Flavor::Ml, + "combine : int -> int -> int\ncombine a b = intDiv a b ?: 0\n", + &["redundant type signature on `combine`: inference derives `(int) -> (int) -> int` without it"], + ); +} + +#[test] +fn a_default_signature_is_unaffected_by_the_curried_collapse() { + // Nothing curries in Default flavor: each annotation is its own written + // thing and keeps its own warning. The return type stays unreported + // because the body only compares — something has to keep `smaller` at + // `int`, and with both parameters gone that is the return. + reports( + Flavor::Default, + "fn smaller(a: int, b: int) -> int = match a <= b {\n true => a\n false => b\n}\n", + &[ + "redundant type annotation on parameter `a` of `smaller`: inference derives `int` without it", + "redundant type annotation on parameter `b` of `smaller`: inference derives `int` without it", + ], + ); +} + +#[test] +fn a_hand_written_lambda_is_still_reported_against_the_lambda() { + // The collapse is specific to a curry chain the lowering produced. A + // lambda somebody actually wrote still names itself. + reports( + Flavor::Ml, + "exclaim = \\(s: string) => s + \"!\"\nr = exclaim \"hi\"\n", + &["redundant type annotation on parameter `s` of ``: inference derives `string` without it"], + ); +} + +#[test] +fn a_three_argument_curried_header_preserves_every_arrow() { + // The whole written signature is one warning. Its three curried arrows + // remain distinct from a function taking three arguments in one call. + reports( + Flavor::Ml, + "clamp : int -> int -> int -> int\nclamp a b c = intDiv (intDiv a b ?: 0) c ?: 0\n", + &["redundant type signature on `clamp`: inference derives `(int) -> (int) -> (int) -> int` without it"], + ); +} + +#[test] +fn the_reported_set_is_deletable_as_a_whole_not_only_one_at_a_time() { + // `pick` is pinned to `int` by its annotations and nothing else: the body + // only compares. Each annotation alone IS removable, because the other two + // still hold the type down — so judging them one at a time reports all + // three. Delete all three and `pick` generalises, which is a different + // program. A reader acts on the whole list, so the whole list has to be + // safe: the rule reports a set it has verified can go together. + let raised = messages( + Flavor::Default, + "fn pick(a: int, b: int) -> int = match a <= b {\n true => a\n false => b\n}\nlet chosen = pick(1, 2)\n", + ); + assert!( + !raised + .iter() + .any(|m| m.starts_with("redundant return type annotation on `pick`")), + "reported every annotation of a mutually-pinned signature: {raised:?}" + ); + assert_eq!( + raised, + vec![ + "redundant type annotation on parameter `a` of `pick`: inference derives `int` without it", + "redundant type annotation on parameter `b` of `pick`: inference derives `int` without it", + ], + "the set must be one the reader can delete whole" + ); +} diff --git a/crates/osprey-types/src/testutil.rs b/crates/osprey-types/src/testutil.rs index 82c91361..d1a9764c 100644 --- a/crates/osprey-types/src/testutil.rs +++ b/crates/osprey-types/src/testutil.rs @@ -7,24 +7,29 @@ use crate::check::check_program; use crate::error::TypeError; -use osprey_syntax::parse_program; +use osprey_syntax::{parse_program_with_flavor, Flavor}; -/// Parse + type-check a snippet, returning the diagnostics. Panics if the -/// snippet has syntax errors, since those would mask the type-checking intent. -pub(crate) fn check(src: &str) -> Vec { - let parsed = parse_program(src); +/// Parse under `flavor` + type-check, returning the diagnostics. Panics if the +/// snippet has syntax errors, since a program that never reaches the checker +/// must not be scored as "no type errors". +pub(crate) fn typecheck(flavor: Flavor, src: &str) -> Vec { + let parsed = parse_program_with_flavor(src, flavor); assert!( parsed.errors.is_empty(), - "syntax errors: {:?}", + "{flavor} flavor rejected the snippet at parse time: {:?}\n{src}", parsed.errors ); check_program(&parsed.program) } +/// Parse + type-check a Default-flavor snippet, returning the diagnostics. +pub(crate) fn check(src: &str) -> Vec { + typecheck(Flavor::Default, src) +} + /// Parse + type-check, asserting the snippet is well-typed (no diagnostics). pub(crate) fn ok(src: &str) { - let errs = check(src); - assert!(errs.is_empty(), "unexpected type errors: {errs:?}"); + accepts(Flavor::Default, src); } /// Parse + type-check, asserting at least one type error is reported. @@ -33,3 +38,141 @@ pub(crate) fn bad(src: &str) -> Vec { assert!(!errs.is_empty(), "expected a type error, got none"); errs } + +/// Assert `src` is accepted whole under `flavor`: parsed AND well-typed. +pub(crate) fn accepts(flavor: Flavor, src: impl AsRef) { + let src = src.as_ref(); + let errs = typecheck(flavor, src); + assert!( + errs.is_empty(), + "{flavor}: unexpected type errors: {errs:?}\n{src}" + ); +} + +/// Assert the CHECKER rejects `src` with a diagnostic containing `needle`. A +/// rejection for any other reason — a syntax error included — fails the test, +/// so a feature that is merely unparseable can never masquerade as checked. +pub(crate) fn rejects_with(flavor: Flavor, src: impl AsRef, needle: impl AsRef) { + let (src, needle) = (src.as_ref(), needle.as_ref()); + let errs = typecheck(flavor, src); + assert!( + errs.iter().any(|e| e.message.contains(needle)), + "{flavor}: expected a diagnostic containing {needle:?}, got {errs:?}\n{src}" + ); +} + +/// Assert a Default-flavor snippet is rejected with a diagnostic containing +/// `needle` — the `bad(…)` plus `errs.iter().any(…)` pair these modules would +/// otherwise repeat once per case. +pub(crate) fn bad_with(src: &str, needle: &str) { + rejects_with(Flavor::Default, src, needle); +} + +/// Assert the CHECKER rejects `src`, whatever the wording. Used where the claim +/// is that a relation does NOT hold, and pinning one sentence would over-specify +/// which of several true diagnostics must be the one reported. +pub(crate) fn rejects(flavor: Flavor, src: impl AsRef) { + let src = src.as_ref(); + let errs = typecheck(flavor, src); + assert!( + !errs.is_empty(), + "{flavor}: expected a type error, got none\n{src}" + ); +} + +/// Assert `src` is rejected SOMEHOW — by the parser or by the checker. Used +/// where the spec forbids a form without fixing which layer must catch it. +pub(crate) fn rejected_somehow(flavor: Flavor, src: impl AsRef) { + let src = src.as_ref(); + let parsed = parse_program_with_flavor(src, flavor); + let rejected = !parsed.errors.is_empty() || !check_program(&parsed.program).is_empty(); + assert!(rejected, "{flavor}: expected a rejection, got none\n{src}"); +} + +/// The call-site arity contract's exact wording, mirroring +/// [GENERICS-CTOR-ARITY]'s ``constructor `Box` takes 1 type argument(s), got 2``. +pub(crate) fn fn_arity_message(name: &str, declared: usize, written: usize) -> String { + format!("function `{name}` takes {declared} type argument(s), got {written}") +} + +/// The construction-site arity wording ([GENERICS-CTOR-ARITY]). +pub(crate) fn ctor_arity_message(name: &str, declared: usize, written: usize) -> String { + format!("constructor `{name}` takes {declared} type argument(s), got {written}") +} + +/// The declaration-site variance diagnostic, from +/// `examples/failscompilation/variance_out_in_input_position.ospo`. `kind` is +/// `field` for a type declaration and `operation` for an effect declaration +/// ([TYPE-VARIANCE-POSITIONS], [EFFECTS-GENERIC-DECL]). +pub(crate) fn variance_position_message( + param: &str, + marker: &str, + position: &str, + kind: &str, + name: &str, + owner: &str, +) -> String { + format!( + "type parameter `{param}` is declared `{marker} {param}` but appears in \ + {position} position in {kind} `{name}` of `{owner}`" + ) +} + +/// One `#[test]` per spec sentence, without one hand-written wrapper per +/// sentence. Every row keeps its own name, its own doc comment and its own +/// test binary entry — only the `#[test] fn … { verb(Flavor::…, …) }` scaffold +/// is written once here instead of once per case. `verb` is any assertion +/// above, so a row reads as the claim it pins: +/// +/// ```ignore +/// spec_cases! { +/// /// A written argument pins the callee's binder. +/// pins_a_binder: accepts(Default, format!("{IDENTITY}print(\"${{identity(5)}}\")")); +/// /// The swapped twin must not check. +/// swapped_is_rejected: rejects_with(Default, SWAPPED, "cannot unify"); +/// } +/// ``` +macro_rules! spec_cases { + ($( + $(#[$meta:meta])* + $name:ident: $verb:ident($flavor:ident, $($arg:expr),+ $(,)?); + )*) => { + $( + $(#[$meta])* + #[test] + fn $name() { + crate::testutil::$verb(osprey_syntax::Flavor::$flavor, $($arg),+); + } + )* + }; +} +pub(crate) use spec_cases; + +/// The same collapse for assertions that take no flavor — a module's own +/// helpers, say. A row is one or more calls, so a case that pins a claim in +/// both directions keeps both assertions in one test: +/// +/// ```ignore +/// plain_cases! { +/// /// `List` accepts its own element type. +/// list_accepts_the_identical_element: flows(BUILTINS, "List", "listInt()"); +/// /// …and refuses the coercion either way. +/// list_refuses_the_coercion: blocked(B, "List>", "listInt()"), +/// blocked(B, "List", "listRes()"); +/// } +/// ``` +macro_rules! plain_cases { + ($( + $(#[$meta:meta])* + $name:ident: $($verb:ident($($arg:expr),* $(,)?)),+ ; + )*) => { + $( + $(#[$meta])* + #[test] + fn $name() { + $($verb($($arg),*);)+ + } + )* + }; +} +pub(crate) use plain_cases; diff --git a/crates/osprey-types/src/ty.rs b/crates/osprey-types/src/ty.rs index 07498469..83f187d0 100644 --- a/crates/osprey-types/src/ty.rs +++ b/crates/osprey-types/src/ty.rs @@ -125,7 +125,7 @@ macro_rules! applied_types { impl Type { /// A constructor application, e.g. `Type::con("List", vec![Type::int()])`. - pub(crate) fn con(name: impl Into, args: Vec) -> Type { + pub fn con(name: impl Into, args: Vec) -> Type { Type::Con { name: name.into(), args, diff --git a/crates/osprey-types/src/unify.rs b/crates/osprey-types/src/unify.rs index 7d9759a9..11e3871d 100644 --- a/crates/osprey-types/src/unify.rs +++ b/crates/osprey-types/src/unify.rs @@ -17,7 +17,7 @@ use osprey_ast::Variance; /// Unify two types, recording the solution in `ctx`. Errors are structural; a /// failing call may have applied partial bindings, so callers that want to /// "try" a unification should pre-check shapes rather than relying on rollback. -pub fn unify(ctx: &mut InferCtx, a: &Type, b: &Type) -> Result<(), TypeError> { +pub(crate) fn unify(ctx: &mut InferCtx, a: &Type, b: &Type) -> Result<(), TypeError> { let a = ctx.prune(a); let b = ctx.prune(b); match (&a, &b) { @@ -58,6 +58,24 @@ pub fn unify(ctx: &mut InferCtx, a: &Type, b: &Type) -> Result<(), TypeError> { Ok(()) } + ( + Type::Con { name, args }, + Type::Record { + name: actual, + fields, + }, + ) + | ( + Type::Record { + name: actual, + fields, + }, + Type::Con { name, args }, + ) if name == actual => match ctx.record_fields(name, args) { + Some(declared) => unify_record(ctx, &declared, fields, &a, &b), + None => Err(TypeError::mismatch(&a, &b)), + }, + ( Type::Union { name: n1, @@ -81,7 +99,7 @@ pub fn unify(ctx: &mut InferCtx, a: &Type, b: &Type) -> Result<(), TypeError> { /// Directional assignment-site unification: `actual` must be usable where /// `expected` is demanded. Plain [`unify`] stays symmetric — this is the only /// place a one-way rule may live. -pub fn unify_assignable( +pub(crate) fn unify_assignable( ctx: &mut InferCtx, expected: &Type, actual: &Type, diff --git a/crates/run_test_corpus.sh b/crates/run_test_corpus.sh index 51cb5497..20c0aaee 100644 --- a/crates/run_test_corpus.sh +++ b/crates/run_test_corpus.sh @@ -68,18 +68,18 @@ esac # Silence is not success — if coverage ever drops below this floor the harness # FAILS rather than quietly checking less than it used to. # -# Natively all 209 programs are covered by golden files, most shared by a +# Natively all 213 programs are covered by golden files, most shared by a # Default/ML flavor pair. On wasm32 the programs blocked on a capability WASI # does not have are skipped — each named in tests/WASM_UNPORTABLE.txt, and a # resumable one named by the OPERATION it cannot suspend [MULTI-WASM] — leaving -# 144. On the mobile C ABI targets the same accounting leaves 130: the rest are +# 147. On the mobile C ABI targets the same accounting leaves 132: the rest are # rejected for a missing capability or for a boundary the scalar C ABI cannot # express, each pinned in tests/MOBILE_UNPORTABLE.txt. # Ratchet UP as goldens are added; never lower it to turn a red build green. case $TARGET in - wasm32) GOLDEN_MIN=${OSPREY_GOLDEN_MIN:-144} ;; - ios-sim|android*) GOLDEN_MIN=${OSPREY_GOLDEN_MIN:-130} ;; - *) GOLDEN_MIN=${OSPREY_GOLDEN_MIN:-209} ;; + wasm32) GOLDEN_MIN=${OSPREY_GOLDEN_MIN:-147} ;; + ios-sim|android*) GOLDEN_MIN=${OSPREY_GOLDEN_MIN:-132} ;; + *) GOLDEN_MIN=${OSPREY_GOLDEN_MIN:-213} ;; esac # [GPU-KERNEL-EXTRACT] differential. The extracted-kernel lowering and the diff --git a/crates/testkit.rs b/crates/testkit.rs new file mode 100644 index 00000000..a3ae5072 --- /dev/null +++ b/crates/testkit.rs @@ -0,0 +1,17 @@ +//! Assertions shared by every crate's unit tests. +//! +//! Rendered output — LLVM IR, hover markdown, a docs page, an export document — +//! is checked the same way everywhere: does the text contain this, and not +//! that. Each crate used to spell that as one bare +//! `assert!(text.contains(needle))` per needle, which reports only `false` when +//! it trips, and the copies drifted apart on their failure messages while +//! asserting the same thing. Included by path rather than published as a +//! dev-dependency, so it stays one file with one set of wordings. + +/// Assert `text` holds every needle, naming the one that is missing and +/// printing the whole rendering. +pub(crate) fn shows(text: &str, needles: &[&str]) { + for needle in needles { + assert!(text.contains(needle), "missing {needle:?} in:\n{text}"); + } +} diff --git a/docs/messaging.md b/docs/messaging.md index ad546d4a..edec3e0c 100644 --- a/docs/messaging.md +++ b/docs/messaging.md @@ -234,6 +234,15 @@ These constraints materially affect how the language must be described: answered twice stops the program when it runs rather than when it is written. Describe it only as specified behaviour, on the same footing as the other normative targets, and never as something a developer can use now. +- Integer arithmetic returns a `Result`, not a plain `int`. `+`, `-`, `*`, `abs` + and `intDiv` all carry a `MathError` channel that the caller must discharge, + usually with `?:`. That is a real cost to describe honestly: a `?: 0` on an + overflowing expression fabricates a value and the program exits successfully + with a wrong answer ([#230](https://github.com/Nimblesite/osprey/issues/230)). + [Spec 0037](specs/0037-ArithmeticEffects.md) specifies the replacement — plain + `int` with faults dispatched to an `Arith` handler — as a normative target; + **none of it is implemented**. Describe today's arithmetic as checked and + explicit, and the effect form only as specified behaviour. - Tail-call optimisation is not implemented. - Multi-file project modules and cross-flavor imports are implemented. A package manager remains roadmap work; describe further module or generic features according to their individual implementation status. - GPU computation is a typed language surface with a host execution backend: diff --git a/docs/plans/0015-generics-and-variance.md b/docs/plans/0015-generics-and-variance.md index 612acde7..c3d3e752 100644 --- a/docs/plans/0015-generics-and-variance.md +++ b/docs/plans/0015-generics-and-variance.md @@ -2,15 +2,7 @@ **Subsystem:** tree-sitter-osprey, crates/osprey-syntax (both flavors), osprey-ast, osprey-types, osprey-codegen, osprey-lsp -**Status:** The core is implemented and passing tests. Declared type parameters -(fn/type/effect), -declaration-site `in`/`out` variance with position checking and -variance-directed assignability, generic effects with per-site instantiation, -explicit construction-site type arguments, and static proof of the -handler/operation-instantiation seam all work in BOTH flavors. Call-site type -application and the already-documented returned-generic-lambda limitation -remain — see -[§What is left](#what-is-left-detailed). +**Status:** Implemented and audited in both flavors. Callback provenance through Result defaulting, symbolic record fields and indirect named calls, returned-callback metadata, generic alias argument ordering, direct named lambdas and extern-call ordering are verified. All 129 runtime follow-up checks pass across default, GC and ARC. Local CI, mobile, Wasm and browser validation pass; exact osprey-types coverage is 10028/10231 lines (98.0%) against 98%, and pinned Deslop 0.27.0 reports 4.2% against 5%. No known implementation gap remains within this plan's defined scope. Hosted acceptance of the final submitted revision remains open; no gate is waived. **Spec:** 0004 §Generics/§Variance ([TYPE-GENERICS-*], [TYPE-VARIANCE-*]), 0017 §Generic Effects ([EFFECTS-GENERIC-*]), 0003 §typeParamList/§effectSet, 0024 [FLAVOR-ML-GENERICS] @@ -25,18 +17,20 @@ style): `out T` restricts `T` to covariant positions, `in T` to contravariant positions, and use-site subsumption is variance-directed *assignability* — plain HM unification is untouched, so principal types survive. -## What works today (file:line evidence) +## Implemented behavior - `type Box` / ML `type Box T` parse and check end-to-end - (grammar.js:135-146, ml/parser.rs:230, check.rs `collect_type`). + (`grammar.js` `type_declaration`, `ml/parser.rs` `type_decl_after_keyword`, + `check.rs` `collect_type`). - HM let-polymorphism: implicit generalization of top-level fns (check.rs `check_function`, env.rs `generalize`/`instantiate`). - The assignability relation `unify_assignable` models the safe one-way promotion `T -> Result` plus function param-contra/ret-co. The inverse - `Result -> T` is forbidden; declared variance uses this relation. + `Result -> T` is forbidden. Constructor variance has exact leaves; + it never lifts the representation-changing Result promotion through a container. - Codegen specializes generic fns by inlining (genfn.rs), erases `Type::Var` - to `i64` (types.rs:19), and effects run on a name-keyed handler stack - (effects_runtime.c) — fully type-erased. + to `i64` (types.rs), and generic effects use instantiation-mangled runtime + keys. Resolved call substitutions specialize body metadata before lowering. ## Previous gaps @@ -44,7 +38,7 @@ plain HM unification is untouched, so principal types survive. variance keywords (`ERROR` nodes in both flavors). - `Stmt::Function`/`Stmt::Effect` had no `type_params`; effect rows were bare `Vec`; `Expr::TypeConstructor.type_args` was parsed then discarded. -- `infer_perform` (expr.rs:183) never unified arguments against operation +- `infer_perform` (`expr.rs`) never unified arguments against operation parameters and returned the *shared* global op signature — two instantiations of one effect could not coexist. - No variance representation or checking anywhere (grep-verified). @@ -120,30 +114,28 @@ plain HM unification is untouched, so principal types survive. - Float payloads crossing erased effect slots must use bitcast boxing (`box_to_i64`), never `coerce_to`'s numeric `fptosi`. -## What is left (detailed) +## Follow-up implementation and boundaries -The declared-generics + variance + generic-effects core is done. Three -follow-ups are known-incomplete, each with a concrete failing repro today: +The declared-generics, variance, generic-effects, and explicit-application +surfaces are implemented. The following records their final behavior and limits: ### 1. Call-site type application (turbofish) — `identity(5)` -**State:** unsupported. `identity(5)` parses `int` as a *value* -identifier and errors `unknown identifier int`; the spec only ever shows -`identity` in comments, never as callable syntax. Declaration-site -binders (`fn map`) and construction-site args (`Box { … }`) work; -the call-site form does not. - -**Why it matters:** the only way to pin an otherwise-unconstrained -polymorphic return today is an annotated `let` (`let x: int = identity(5)`); -turbofish is the direct spelling the docs imply. - -**Scope:** grammar (`call_expression` needs a `< typeList >` postfix that -does not collide with `<` comparison — the same GLR/lookahead hazard the -construction-site form already solved), a `type_args` field on `Expr::Call`, -lowering in both flavors, and a checker step that unifies the call's -instantiation variables against the written arguments (reuse -`current_fn_typarams` threading from construction sites). ML spelling TBD -(angle-bracket `f(x)` vs a signature-only story). +**State:** implemented. Default writes `identity(5)`; ML writes +`identity 5`. The angle run is recognized only when its full type-shaped +contents close before a valid call argument, preserving comparisons such as +`x<3` and `x`, is rejected before conversion can discard them. + +`applications.rs` carries implicit and explicit call substitutions across the +backend AST copy. Alias origins compose into that substitution, and generic +body metadata for effect operations, handlers, lists, lambdas, and nested +records specializes at each call. Source positions remain available for +compiler diagnostics. An unconstrained immutable `let` can still generalize; +explicit type arguments are a way to pin its type, never a requirement. ### 2. Generic functions as first-class values — ✅ landed (plan 0002) @@ -154,8 +146,8 @@ generic HOFs dispatch indirectly (`fn also(x, f) = f(x)` applied at two instantiations works). The enabling checker fix: builtin scheme binder ids (`Var(0)`/`Var(1)`) no longer collide with live inference variables (`RESERVED_SCHEME_VARS`), which had been silently blocking let-generalization -of `-> T`-annotated functions. Plan 0002 still rejects a generic lambda returned -from a generic function. +of `-> T`-annotated functions. A returned generic lambda can be bound and specialized when called. A still-generic +closure used as a bare value without a concrete consuming slot is rejected. ### 3. Static proof of the handler/operation instantiation seam — ✅ landed @@ -188,6 +180,60 @@ its HM generalization rules remain separate work in concrete use case is specified. - **Higher-kinded type parameters** (`F<_>`): not represented, not planned. +## Conflicts found while pinning the spec (2026-09-09) + +Four disagreements surfaced when the generics surface was written down as +executable assertions. Each is recorded with the evidence that settles it. + +1. **Variance was inert at assignment sites, and the spec implied otherwise.** + `[TYPE-VARIANCE-ASSIGN]` opened with a directional rule and closed with + "bottoms out in exact unification". `unify_variant_arg` + (`crates/osprey-types/src/unify.rs`) recurses only through **same-name** + variance-declared constructors and then calls plain `unify`, so `int` versus + `Result` is an exact mismatch at any depth. The one coercion + in the language (`T -> Result`) is representation-changing and applies + at direct value sites only. **Resolution:** exact leaves win; spec 0004 now + says so in `[TYPE-VARIANCE-COERCION]`, and states the consequence outright — + `out`, `in` and unannotated accept and refuse the same programs today, so a + marker's observable effect is position checking alone. Pinned by + `the_three_markers_agree_on_every_assignment_outcome` and + `the_covariant_and_invariant_builtins_agree`, which go red the day a + representation-preserving subtype relation lands without a spec update. + The two shipped fixtures could not see this: both assert the one direction + all three markers already agree on. + +2. **Map type notation and constructible values are distinct.** The type + system retains `Map` with invariant `K`; shipped constructors, + literals, lookup, and updates constrain `K` to `string` ([TYPE-MAP], + [BUILTIN-MAP-GET]). A type argument can name `Map`, but no shipped + map constructor builds such a value. The invariant key parameter does not + imply support for integer-keyed maps. + +3. **The dynamic-instantiation diagnostic contradicts the runtime it cites.** + `examples/failscompilation/stage_signal_instantiated_dynamic_effect.ospo` + rejects `perform Signal` on a dynamic effect because "a dynamic + handler is keyed by effect name at runtime, so instantiations share one + key" — but `crates/osprey-codegen/src/effects.rs` registers each handler + "under its instantiation-mangled key, so only same-instantiation performs + resolve to it", which is also what spec 0017 `[EFFECTS-GENERIC-RUNTIME]` + promises. The REJECTION is a shipped contract and stands; its stated REASON + is stale and would mislead anyone implementing against it. The surface rule + is now pinned as: `handle`/`perform` infer a dynamic effect's instantiation, + angles are legal on a ROW (`!Stash`), and the written mention belongs + to `static effect`, whose identity IS the instantiation. + + **Replacement diagnostic** (same rule, accurate reason, now asserted by the corrected golden): + + > ``perform Signal`` names an instantiation of dynamic effect + > ``Signal``; a written instantiation is the identity of a ``static effect``, + > while a dynamic effect takes its instantiation from inference + > (docs/plans/0024-staged-effects.md). Declare ``static effect Signal``, or + > write ``perform Signal`` and let inference instantiate it + +4. **Handler body spelling is explicit.** Default accepts `handle ... in` + and the compatibility spelling `handle ... do`. ML accepts `in`. The + `the_spec_writes_a_handled_body_after_do` assertion now passes. + ## TODO Core (done): @@ -205,22 +251,76 @@ Core (done): - [x] LSP symbol/hover rendering of type params - [x] Examples expanded in both flavors + 7 failscompilation cases - [x] Specs 0002/0003/0004/0017/0023/0024 updated -- [x] make ci green - -Remaining: - -- [ ] **Call-site type application** `identity(5)` — grammar + - `Expr::Call.type_args` + both-flavor lowering + checker unification - (§What-is-left 1). +- [x] Complete local CI, coverage, duplication, Mac/Linux native, Wasm, mobile and browser validation — see current validation below +- [ ] Verify every hosted required check on the final submitted revision + +Follow-ups: + +- [x] **Call-site type application** `identity(5)` — grammar + + `Expr::TypeApply` + both-flavor lowering + checker unification + (§Follow-up 1). The contract is + [spec 0004](../specs/0004-TypeSystem.md) `[TYPE-GENERICS-APPLY]` and + [spec 0024](../specs/0024-MLFlavorSyntax.md) `[FLAVOR-ML-GENERICS]`; the + assertions are `crates/osprey-types/src/generics_apply_tests.rs` + (Default), `generics_apply_ml_tests.rs` (ML), four CST cases in + `tree-sitter-osprey/test/corpus/osprey.txt`, and the corpus twins + `tests/regressions/basics/types/type_equality_comprehensive.test.osp{,ml}` + with the golden line `applied int=5 text=os nested=2 empty=0 pair=7`. - [x] **Generic functions as values** — landed via plan 0002, now retired; the shipped contract is [spec 0004](../specs/0004-TypeSystem.md) `[TYPE-GENERICS-FN]`: slot-driven specialization + let-alias + inline fn-typed arg registration; `let g = identity` passed to a HOF compiles and runs - (§What-is-left 2). Only the returned still-generic lambda remains, in - plan 0002. + (§Follow-up 2). Bare generic closure values still require a concrete + consuming slot. - [x] **Static handler/operation seam** — resolved operation summaries make an instantiation mismatch a compile error; explicit rows are contracts, and - the runtime null guard is only a backstop (§What-is-left 3 and + the runtime null guard is only a backstop (§Follow-up 3 and [plan 0016](0016-algebraic-effects-and-handlers.md)). -- [ ] failscompilation case for turbofish once it lands (arity/instantiation - mismatch at the call site). +- [x] Explicit-application rejection checks are implemented. Cases include: `turbofish_type_arg_arity`, `turbofish_type_arg_too_few`, + `turbofish_no_declared_binder`, `turbofish_argument_contradiction`, + `turbofish_variance_marker`, `ml_turbofish_type_arg_arity` and + `ml_turbofish_no_declared_binder` in `examples/failscompilation/`. +- [x] The adjacent declaration and variance surface is implemented and checked: `generics_decl_tests.rs` + ([TYPE-GENERICS-DECL], [GENERICS-CTOR-ARITY], [TYPE-GENERICS-FN]), + `generics_variance_tests.rs` ([TYPE-VARIANCE-*], including the built-in + variance table checked through position composition) and + `generic_effects_tests.rs` ([EFFECTS-GENERIC-*], plus the + accepted Default `handle … do` compatibility spelling). + +## Current validation (2026-09-10) + +Existing assertions were corrected individually where the specification and executable evidence showed the old expectation was wrong. Diagnostic checks now assert exact warnings, messages, ranges and owners; curried signatures retain their curried types. The inbox's `Markdown::smaller` produces no redundant-annotation warning. Parser-stage rejection tests assert the parser's actual rejection. No assertions were removed to obtain a passing test. + +The two former rejection fixtures for a channel inside a generic field and recursive generic specialization now run as positive corpus regressions. Their original programs and outputs are retained, with additional assertions for nested payload contents and specializations. The type-equality twins use matching generic contracts and flavor-correct map literals. Storage twins now use the same tupled contract and filename-generating expression, retaining all seven assertion blocks and independent runtime files. Cross-flavor IR comparison passes. + +The deduplication audit preserves all 201 generics, variance and generic-effect tests, including their assertion expressions and literal expectations. The original `DebugBuild` assertions are retained; the CLI uses its build-kind mapping, and both the debugger and CLI regression tests pass. + +| Check | Completed result | +| --- | --- | +| Local pipeline | `make ci` passes, including native integration, bank browser tests and shared mobile domain tests | +| Instrumented Rust workspace | 1,563 tests pass; osprey-types has 543 tests | +| Exact Rust coverage | All nine configured crate gates pass on Mac and Linux; osprey-types is 10028/10231 lines, above the unchanged 98% threshold | +| Effect transport regressions | All 17 focused tests pass, preserving exact rejection diagnostics and handled controls | +| Callback dispatch and argument order | All 129 runtime checks pass across default, GC and ARC, including direct/bound named lambdas and extern declarations; ARC reports zero live objects | +| Native default, GC and ARC corpus | 213 goldens and 18 alternate GPU checks pass in each allocator on Mac and Linux; zero ARC leaks | +| iOS and mobile iOS | 132 goldens, 18 alternate GPU checks, C ABI imports/exports, global lifetime, 32 domain tests and app smokes pass | +| Android | 132 goldens, 18 alternate GPU checks, C ABI tests, 32 domain tests, fresh/restore persistence smokes and Gradle lint pass | +| Wasm | 147 goldens, 18 alternate GPU checks, all 66 pinned capability rejections, and hello/Studio Node and browser smokes pass | +| Syntax, LSP and codegen | 115, 165 and 124 unit tests pass respectively | +| Tree-sitter corpus | All 18 tests pass | +| C runtime and coverage | All 24 suites and 29 library coverage gates pass on Mac and Linux; C production code is unchanged | +| VS Code extension | 316 tests pass, all four coverage measures exceed 95%, and VSIX packaging passes | +| Website and bank browser tests | 107 website and 17 bank tests pass | +| Native integration and Docker API | Bank, profiler, build-tool and rebuilt Docker API checks pass | +| Lint and dead code | Format, all-target Clippy, extension lint, Hawk and the product-reference dead-code gate pass | +| Installer | Large response, API failure, missing tag and pinned idempotence checks pass | +| Pinned Deslop 0.27.0 | 4.2% duplication against the unchanged 5% ceiling | +| Compiler output comparison | All 1,278 comparisons are identical across 213 corpus programs in native release/debug/profile, Wasm, iOS and Android, including rejection diagnostics | +| Branch protection | Two active rulesets and all 14 required check contexts verified | +| Hosted acceptance | Required checks still need verification on the final submitted revision | + +Coverage uses the Makefile's LCOV `LH`/`LF` totals. Counting unique `DA` source lines gives a different result and is not the gate. Platform results are attached to their compiler revision; an earlier passing run does not establish that later changes passed. + +The settled specification retains exact leaves under constructor variance: representation-changing `T` to `Result` promotion is available only at direct value sites. Expected return context can infer a result-only binder (`let xs: List = empty()`); only a phantom binder absent from both parameters and result needs explicit arguments to select its type. Dynamic handler and operation instantiations come from inference; written generic rows constrain the contract without granting handler authority. + +The local implementation and regression audit is complete. Retire this plan only after every hosted required check passes on the final submitted revision; the local results do not substitute for that acceptance. diff --git a/docs/plans/0024-staged-effects.md b/docs/plans/0024-staged-effects.md index eb251f7c..eee9b526 100644 --- a/docs/plans/0024-staged-effects.md +++ b/docs/plans/0024-staged-effects.md @@ -25,7 +25,7 @@ no consumer can forget to run the pass. That ordering is the whole design: four features that would each need their own machinery instead fall out of one pass. The one thing that must *not* run after it is the dependency query, since -discharge is what erases the dependencies. `osprey_syntax::dependency_sets` +discharge is what erases the dependencies. `osprey_syntax::dependency_report` parses without discharging and is the only supported way to read a row's dependency set. @@ -75,7 +75,7 @@ arm is reported against the substituted code, not the arm as written. and each region specializes the helpers it reaches — so two regions may answer the same effect differently in one program, which `staged_effects.test.osp` pins. -- `osprey --deps` and `osprey_syntax::dependency_sets`, reporting each +- `osprey --deps` and `osprey_syntax::dependency_report`, reporting each function's dependency set from the pre-discharge AST. - `crates/osprey-ast/src/mutate.rs`, the by-unique-reference twin of `visit`, which any future rewriting pass reuses. @@ -318,7 +318,7 @@ replaced it. - `[STAGE-SIGNALS-EXACT]` — signal identity is the generic instantiation, so `Signal` and `Signal` are distinct dependencies. **Delivered.** The instantiation is written at the `perform` and `handle` sites, travels in - the effect mention itself, and `dependency_sets` reports `Signal.read` + the effect mention itself, and `dependency_report` reports `Signal.read` and `Signal.read` as two entries. Identity is representable only at the static stage: a dynamic handler is keyed by effect name at runtime, so an instantiated mention of a dynamic effect is REJECTED naming that reason rather @@ -338,7 +338,7 @@ replaced it. - [x] Region-stack rewrite with per-region helper specialization - [x] `tests/effects/staged/staged_effects.test.osp` + golden - [x] Five must-reject fixtures with `.expectedoutput` -- [x] `osprey --deps` + `osprey_syntax::dependency_sets` +- [x] `osprey --deps` + `osprey_syntax::dependency_report` - [x] Falsification gate run and recorded - [x] `crates/osprey-cli/tests/staged_effects.rs`: residue asserted against the emitted IR, with the dynamic control case that proves it can fail diff --git a/docs/plans/README.md b/docs/plans/README.md index dc72728c..9f28251f 100644 --- a/docs/plans/README.md +++ b/docs/plans/README.md @@ -33,6 +33,7 @@ checklist and records remaining work with concrete repros. | [0028](0028-resumption-multiplicity.md) | Resumption multiplicity: how many times an effect may be answered | syntax/ast/types/runtime | **Phases 0–3 and 6 shipped.** `abort`/`once`/`many` and `replayable` are declared per operation in BOTH flavors (contextual keywords — all five words stay legal identifiers and operation names, pinned by `contextualKeywordCase`). Five checks land: `[MULTI-AXIS-STATIC]`, the branch-aware affine rule `[MULTI-HANDLE-ONCE]` (its positive control — two `resume`s on different `match` branches — stays legal), `[MULTI-HANDLE-ABORT]`, and the three replay rules `[MULTI-REPLAY-CHECK]` / `-STATE` / `-FIBER`, each with a must-reject fixture carrying its exact diagnostic. `[MULTI-WASM]` names the OPERATION that cannot be suspended instead of the `resume` keyword, demangled for module-scoped effects; all 28 manifest reasons re-verified. The `[MULTI-FALSIFY]` gate is recorded in the plan: case 2 is rejected naming `Email.send` **without** control flow finer than the row, so `[MULTI-REPLAY-COARSE]` did not hit its wall; cases 3–4's `many` half **cannot be written** — a `many` handle site is REJECTED, naming plan 0016, because native resume is one suspended stack that cannot be re-entered. `abort` is rejected the same way naming plan 0026, since `[MULTI-HANDLE-ABORT-MODE]` would route arms onto an abandon path that leaks the discarded frames' operands. Two defects fixed on the way: `genfn::alias_target` aliased a promoted `mut` (and a file-scope `let`) as a function name, and the ML flavor silently dropped `static` from `static effect`. Left: phase 4 (`abort` lowering, on [0026](0026-structured-concurrency.md)), phase 5 (`many` runtime, on [0016](0016-algebraic-effects-and-handlers.md)), phase 7 (`[MULTI-TRACE]`) | Medium | | [0029](0029-ios-c-abi.md) | iOS C ABI application logic and Swift host | CLI/types/codegen/runtime/Swift | [Spec 0038](../specs/0038-iOSTarget.md) implemented: device/simulator libraries, generated C headers, explicit iOS/WASM capability errors, and native Swift hosts. Compiler, C ABI, simulator, WASM, original-counter compatibility, and signed physical-iPhone Issue Inbox checks passed. The whole `tests/` corpus now runs through the mobile C ABI on both platforms, and the unchanged duplication gate passes under CI's pinned Deslop 0.27.0 | Implemented; hosted PR checks green | | [0030](0030-reactive-mobile-apps.md) | Shared reactive iOS and Android application | Osprey modules/CLI/runtime/native hosts | [Android target](../specs/0039-AndroidTarget.md) and [shared mobile application](../specs/0040-ReactiveMobileApplications.md) implemented: Osprey UI trees, SQLite, GitHub, search, bookmarks, detail views, notes/priorities. Passed 29 domain assertions, both native workflows, signed iPhone smoke/live data, Android process-restart recovery, C ABI/language checks, renderer regression, lint, Clippy, and formatting. Both Android ABIs execute the whole corpus; the unchanged duplication gate passes under CI's pinned Deslop 0.27.0 | Implemented; hosted PR checks green | +| [0031](0031-handler-values.md) | Handler values: `handler E { arms }` as a first-class function and `with h1, h2 do body` for the composition root | grammar/syntax/ast desugar/fmt/LSP | Proposed. Phase 0 (rewrite every `handle … do process(21)` example to `do main()`) needs no language change; phases 1–2 are pure elaboration onto today's `handle … do`, so no new type rule, codegen or runtime work | Medium | These were surfaced from `CodegenError::unsupported(...)` call sites, the `## Status` sections of the language specs (`docs/specs/`), and runtime `TODO` diff --git a/docs/specs/0003-Syntax.md b/docs/specs/0003-Syntax.md index 73511e7e..6299d5db 100644 --- a/docs/specs/0003-Syntax.md +++ b/docs/specs/0003-Syntax.md @@ -235,6 +235,28 @@ let zero = fn() => 0 The pipe-delimited form requires at least one parameter because `||` is the logical-OR token. +### Call-site type arguments [TYPE-GENERICS-APPLY] + +A call may carry an explicit type-argument list between the callee and its +arguments. The list is recognised only when the `<` immediately follows the +callee name and the matching `>` immediately precedes the argument list, which +is what keeps `<` the comparison operator everywhere else. + +```ebnf +call ::= callee typeArguments? "(" arguments? ")" +typeArguments ::= "<" typeList ">" +``` + +```osprey +fn identity(x: T) -> T = x +print("${identity(5)}") +``` + +The meaning — positional binding against the declaration's binders, the arity +contract, and the rejection of variance markers — is +[TYPE-GENERICS-APPLY](0004-TypeSystem.md#generics-and-variance). The ML spelling +is [FLAVOR-ML-GENERICS](0024-MLFlavorSyntax.md#generics-flavor-ml-generics). + ## Indexing Postfix indexing is available on lists, maps, and strings. It returns @@ -273,6 +295,4 @@ pattern ([PATTERN-STRUCTURAL](0007-PatternMatching.md#structural-patterns--patte ## Evaluation order -Statements and positional call arguments evaluate left to right. `&&` and `||` -short-circuit. A named call is reordered to parameter declaration order before -its argument expressions are lowered. +Statements and positional call arguments evaluate left to right. `&&` and `||` short-circuit. A named call to a function or extern declaration reorders its arguments to that declaration's parameter order before evaluating them. A call through a function value evaluates and binds its arguments in written order, including when they carry labels. A selected callable record field uses the function-value rule; UFCS fallback uses the selected free declaration's order after its receiver. The call-site distinction is defined in [CALL-ARGUMENTS](0005-FunctionCalls.md#argument-forms--call-arguments). diff --git a/docs/specs/0004-TypeSystem.md b/docs/specs/0004-TypeSystem.md index 40dcdb06..f83e1479 100644 --- a/docs/specs/0004-TypeSystem.md +++ b/docs/specs/0004-TypeSystem.md @@ -11,6 +11,7 @@ - [Built-in Error Types](#built-in-error-types) - [The `any` Type](#the-any-type--type-any) - [Type Annotations](#type-annotations--type-annotation-check) +- [Redundant Annotations](#redundant-annotations--type-annotation-redundant) ## Hindley-Milner Inference @@ -46,7 +47,10 @@ compose (f, g) = \x => f (g x) // ((B)->C,(A)->B) -> (A)->C `add` follows [ARITH-CHECKED](0013-ErrorHandling.md#arithmetic--arith-checked): integer `+ - *` return `int`. With a `float` operand, the integer is promoted and the IEEE-754 operation returns plain `float`. Record fields and foreign declarations include types as part of their syntax; -annotations on bindings and functions constrain the inferred type. +annotations on bindings and functions constrain the inferred type. An +annotation that constrains nothing — one inference would have derived anyway — +is a defect the compiler reports +([TYPE-ANNOTATION-REDUNDANT](#redundant-annotations--type-annotation-redundant)). A polymorphic function is monomorphised independently at each call site: @@ -195,6 +199,49 @@ s = pick ("left", "right") In the ML flavor the binder lives on the signature line (`pick : …`); a binding without a signature cannot declare type parameters. +`[TYPE-GENERICS-APPLY]` **A call site may apply type arguments explicitly.** +`identity(5)` pins the callee's declared binders positionally, left to +right, and the written arguments unify with the instantiation the value +arguments and the expected type would otherwise infer. This is the direct +spelling of what an annotated binding (`let x: int = identity(5)`) can only say +indirectly. An expected result type can also pin a binder absent from the +parameters: `let xs: List = empty()` fixes `T` for +`fn empty() -> List = []`. Explicit type arguments are the only spelling +that can pin a phantom binder absent from both parameter and result types. + +```osprey +fn identity(x: T) -> T = x +fn pick(first: T, second: U) -> T = first +print("${identity(5)} ${pick(1, "two")}") +``` + +```osprey-ml +identity : T -> T +identity x = x +print "${identity 5}" +``` + +The form is recognised when the `<` immediately follows the callee name and the +matching `>` immediately precedes the call's argument list — `(` in the Default +flavor, the juxtaposed argument in ML. Everywhere else `<` is the comparison +operator, so `a < b` and `f(a) < g(b)` are unaffected; a relational chain that +would otherwise read as type application must parenthesise. + +Applying type arguments is a contract with the declaration, checked the same way +[GENERICS-CTOR-ARITY] checks a construction site: + +- The count must equal the callee's declared binder count. `identity(5)` + against `fn identity` is rejected with + `function \`identity\` takes 1 type argument(s), got 2`. +- A callee that declares no binders — an unannotated function, a lambda, a + parameter holding a function value — takes no type arguments, and is rejected + with the same diagnostic at count 0. +- A written argument that contradicts the value arguments or the expected type is + a type error, not a silently ignored annotation: `identity("text")` + reports `cannot unify int with string`. +- Variance markers are not permitted, exactly as on the binder itself + ([TYPE-VARIANCE-DECL]): `identity(5)` is rejected. + A generic function used as a VALUE is specialised wherever its ABI can be fixed: by a consuming slot, by a call alias, or — when a generic function returns a lambda — at each call site of the binding, which is inlined and @@ -252,12 +299,29 @@ arguments, annotated bindings, return positions), a variance-declared constructor's arguments are matched directionally: covariant (`out`) arguments recurse expected-accepts-actual, contravariant (`in`) arguments recurse with the roles flipped, invariant arguments unify exactly. The -recursion continues only through variance-declared constructors and bottoms -out in **exact unification**. There is no `Result`-to-`T` coercion at any -depth or direct value site: it would erase a failure and accept a value with -the wrong representation. Function returns also match exactly, so a -`Feed<(int) -> Result>` does not match a -`Feed<(int) -> int>` slot. +recursion continues only through **same-name** variance-declared constructors +and bottoms out in **exact unification**. + +`[TYPE-VARIANCE-COERCION]` **The language's one coercion applies at direct +value sites only, never inside a constructor argument.** A bare `T` satisfies a +`Result` slot (an implicit `Success`); the inverse never holds anywhere. +That coercion changes the value's REPRESENTATION, and nothing rebuilds a +container's contents, so it cannot reach through an argument position: +`Feed` does **not** satisfy a `Feed>` slot, under +`out T`, under `in T`, or unannotated. Function payloads match exactly for the +same reason, so a `Feed<(int) -> Result>` does not match a +`Feed<(int) -> int>` slot — while a *directly* assigned function value still +matches assignably, its parameters flipped and its return coerced +(`(Result) -> bool` satisfies an `(int) -> bool` slot). + +**Consequence, stated so no one has to re-derive it:** because that coercion is +the only subtyping the language has, and it is barred from argument positions, +`out T`, `in T` and an unannotated parameter accept and refuse **exactly the +same programs** at assignment sites today. A variance marker's observable effect +is [TYPE-VARIANCE-POSITIONS] — where the parameter may be written — not which +assignments type-check. The directional recursion above is nonetheless +normative: it is what a future representation-PRESERVING subtype relation would +travel through, and the day one exists the three markers stop agreeing. Built-in constructors' declared variance: `Result`, `List`, `Fiber`, `Map` (keys invariant); `Channel` @@ -319,7 +383,8 @@ createAdder : int -> int -> int createAdder n = \x => x + n ``` -Multi-argument call syntax (named arguments are required for two or more parameters) is in [Function Calls](0005-FunctionCalls.md). +Multi-argument calls accept positional arguments or a fully named argument +list, as specified in [Function Calls](0005-FunctionCalls.md). ### Closures — [TYPE-FN-CLOSURE] @@ -357,6 +422,8 @@ function types match, including iterator callbacks and record fields. A `Result` returned through a function-value call remains a `Result` and must be handled explicitly ([Result Preservation](#result-preservation)). +A function type contains its ordered parameter types and return type. Parameter names are not part of its identity and do not travel with a value assigned to that type. Calls through function values therefore use the argument-slot rule in [CALL-ARGUMENTS](0005-FunctionCalls.md#argument-forms--call-arguments), including calls through record fields. + ### Higher-order calls — [TYPE-FN-HIGHER-ORDER] Any expression with a function type is callable. The callee may be a local, @@ -813,3 +880,146 @@ fn half(n: int) -> Result = intDiv(n, 2) Writing `-> int` for `half` would be a type error; a return annotation cannot erase the body's `Result` ([Result Preservation](#result-preservation)). + +## Redundant Annotations — [TYPE-ANNOTATION-REDUNDANT] + +An annotation the inferrer would have derived on its own carries no +information. It cannot change what the program means — by construction the +solver reaches the same type without it — so it can only go stale, disagree +with the body a later edit produces, and cost a reader a second reading to +confirm it says nothing. Osprey reports every one of them. + +**The rule.** A written type is *redundant* when erasing it leaves the solved +type unchanged. Redundancy is not a syntactic property and cannot be decided by +reading the annotation: `string -> int -> string` is redundant on one function +and load-bearing on the next. It is decided by inference, and only by +inference. + +**The decision procedure.** Replace the annotations under test with fresh type +variables, solve, and generalise. Compare every type the solver publishes to +the types it published for the untouched program, up to renaming of bound type +variables. Equal ⇒ redundant. Different, or no solution ⇒ the annotations were +constraining something and are kept. + +The comparison includes local, lambda, and list types, declared binders, +operation and handler instantiations, and generalized field or callable +constraints. It also preserves each dotted call's selected field, free +function, or deferred selection rule ([BUILTIN-STRING-UFCS]). Matching only +the enclosing function's parameter and return types is insufficient: removing +an annotation must not change a callback's requirements or the implementation +selected by a call with the same result type. + +**Redundancy is a property of a set, not of one annotation.** Annotations pin +each other. In `fn pick(a: int, b: int) -> int = match a <= b { ... }` the body +only compares, so nothing forces `int` except the annotations themselves — and +each one alone is removable, because the other two still hold the type down. +Judged one at a time, all three report; delete all three and `pick` generalises, +which is a different program. A reader acts on the whole list, so the whole list +is what gets solved for: the rule reports a set it has verified can be deleted +together, growing it in source order and dropping any annotation that stops +being removable alongside the ones already reported. What it reports is +therefore always true of the report as a whole — delete every warning it gives +you and the program's types are unchanged. + +The same coupling is why a lowered signature is judged whole. ML writes a +signature as one arrow type, and lowering splits it across a parameter, a +curried function-typed return and a nested lambda holding the rest. Those +fragments hold each other up, so judging them apart reports a header that +cannot be deleted at all — four warnings for one line, one of them blaming a +`` for a parameter the reader named. Fragments of one written type are +one unit: judged together, erased together, and reported once. + +An ML header that also declares generic binders or an effect row is retained. +The current erasure pass removes type constraints, not those declarations, so +it cannot prove that deleting such a header preserves the complete contract. +An inline parameter annotation alongside a standalone header remains a separate +constraint: both are checked, disagreement is rejected, and removing either +annotation leaves the other present. + +```mermaid +flowchart LR + A["written annotations"] --> B["erase the whole set → fresh vars"] + B --> C["infer + generalise"] + C --> D{"solved types, constraints
and dispatch vs baseline"} + D -- "equivalent" --> E["the set is redundant — report it"] + D -- "differs, or no solution" --> F["drop the last one and retry"] + F --> B +``` + +**Where it applies.** Function parameter annotations, function return +annotations, lambda parameter annotations, and binding annotations, in both +surfaces ([FLAVOR-BOUNDARY]). Both use the same type-equivalence rule. An ML +`f : string -> int` header is one source annotation; a Default +`fn f(x: string) -> int` contains two independently removable annotations. +Their diagnostic counts therefore need not match. + +```osprey-ml +(** Both slots are inferred as string from concatenation. *) +decorate : string -> string +decorate text = text + "!" + +(** Kept: the empty literal constrains nothing on its own. *) +seen : List +seen = [] +``` + +**What is never redundant.** Four constructs carry types as part of their +declaration rather than as a constraint on an inferred one, and no annotation +in them is ever reported: + +- a `signature` block's members ([MODULES-SIGNATURE](0025-ModulesAndNamespaces.md#signatures-modules-signature)) — a signature *is* the module's public contract. Elaboration copies a signature's types onto the members that left them off, and it marks every type it supplies, so a member that wrote nothing is never blamed for the copy. A member that *writes* the same type again is judged like any other function: that duplicate is a real line, and deleting it changes nothing; +- record field declarations and union variant payloads, whose types are their definition; +- `extern` and foreign declarations ([Foreign Function Interface](0019-ForeignFunctionInterface.md)), which have no body to infer from; +- an annotation whose erasure changes a type variable's constraints or its relationship to a declared binder. + +Types inserted by module-signature elaboration are compiler-generated constraints and never receive a redundancy warning. A written annotation in a module body is checked normally, even if its spelling equals the module's signature. The compiler records this provenance when it inserts a constraint; matching member names or type spellings is not evidence that an annotation was generated. + +An annotation that would erase a `Result` is not redundant either — it is a +type error ([Result Preservation](#result-preservation)), reported as one. + +**An ill-typed program reports none.** The types inferred for a program that +does not typecheck are the checker's best effort at code it has already +rejected, and no comparison drawn from them would be trustworthy. Type errors +come first; the redundancy pass runs on programs that pass. + +**Severity.** The diagnostic is a **Warning**. It changes no exit code and no +generated code: a program whose only diagnostics are redundant annotations +compiles and runs exactly as it did. Severity is fixed today and becomes +configurable per rule; the rule identifier is `redundant-annotation`, and it is +that identifier a future configuration names. + +**The message** identifies the written annotation and prints the type inference +derives without it. There is one line per written annotation the rule judges: + +``` +redundant type annotation on parameter `key` of `numField`: inference derives `string` without it +redundant return type annotation on `numField`: inference derives `string` without it +redundant type annotation on `seen`: inference derives `List` without it +redundant type signature on `decorate`: inference derives `(string) -> string` without it +redundant type signature on `combine`: inference derives `(int) -> (int) -> int` without it +``` + +The last shape is one whole curried signature. Its nested arrows are preserved: +`int -> int -> int` takes one argument and returns another function, whereas +`(int, int) -> int` takes two arguments in one call. These types have different +call conventions and diagnostics must not flatten one into the other. +ML spells a signature as a single arrow +type on its own line, and lowering splits it across a parameter, a curried +function-typed return and a nested lambda holding the rest. Those fragments are +one written line: they are judged together, erased together, and reported once, +naming the function. Judging them apart is not merely noisier, it is wrong — +each fragment looks derivable while the others still hold the type down, so a +header that cannot be deleted gets reported anyway. + +An annotation written on an anonymous function names `` as its owner; +an implicit curry lambda is not a written anonymous function. A name that +assembly mangled is reported in its source spelling +([MODULES-ABI](0025-ModulesAndNamespaces.md#name-mangling-and-abi-modules-abi)), +so `bank::Api::json` is never shown as its encoded symbol. + +Every front end reports it: `osprey build` and `osprey FILE --check` on stderr, +grouped by source file under an aligned `line:column` gutter and closed by a +count and the rules that raised it; and the language server as a Warning +diagnostic anchored at the containing declaration and spanning the rest of that source line +([LSP-DIAGNOSTICS](0020-LanguageServerAndEditors.md#diagnostics-lsp-diagnostics)), +The message names the written signature, parameter, return, or binding annotation. An ML signature range starts at its header. Other ranges identify the containing declaration. A range is not a deletion edit. The compiler does not offer an automatic deletion action. For an assembled project, the safe set is chosen for the entire program before filtering diagnostics to an open file, so opening a different file cannot change which annotations are reported as removable. diff --git a/docs/specs/0005-FunctionCalls.md b/docs/specs/0005-FunctionCalls.md index 4de8777b..88a98807 100644 --- a/docs/specs/0005-FunctionCalls.md +++ b/docs/specs/0005-FunctionCalls.md @@ -1,10 +1,23 @@ # Function Calls -Default calls lower to one `Expr::Call`. ML whitespace application and +Ordinary Default calls lower to one `Expr::Call`. Dotted calls retain their +receiver until its type determines field access or UFCS fallback +([BUILTIN-STRING-UFCS](0012-Built-InFunctions.md#calling-style--builtin-string-ufcs)). +For a generic receiver this selection occurs at each instantiation. +ML whitespace application and uncurried grouping lower to the same node shapes as described in [FLAVOR-CURRY](0023-LanguageFlavors.md#currying-canonicalisation) and [FLAVOR-ML-CALL](0024-MLFlavorSyntax.md). +## Type arguments [TYPE-GENERICS-APPLY] + +A call to a function that declares type parameters may pin them at the call +site: `identity(5)`, ML `identity 5`. The written list is positional, +must match the declared binder count, and is checked against the instantiation +the value arguments infer — the full contract is +[TYPE-GENERICS-APPLY](0004-TypeSystem.md#generics-and-variance), the grammar is +[0003 §Call-site type arguments](0003-Syntax.md#call-site-type-arguments--type-generics-apply). + ## Argument forms [CALL-ARGUMENTS] Default accepts positional calls at every arity: @@ -25,10 +38,28 @@ A call may instead name every supplied argument: let c = add(y: 20, x: 10) ``` -For a known function or extern, named values are reordered to the declaration's -parameter order. The grammar does not permit positional and named arguments in -one argument list. Unknown and duplicate argument names are not rejected -consistently; a named call must use each declared name exactly once. +A declaration call is a call whose callee resolves at that source site to a function or extern declaration. Its named values are reordered to the declaration's parameter order before evaluation. The grammar does not permit positional and named arguments in one argument list. Unknown and duplicate names on declaration calls are not rejected consistently; a named declaration call must use each declared name exactly once. + +In a UFCS call such as `receiver.f(second: value)`, the receiver supplies the +first declared parameter. Written names supply the remaining parameters in +declaration order. The implicit receiver is preserved even though the written +argument list is named. + +A function-value call has ordered parameter types but no parameter-name contract. A callable record field, function parameter, local function value, or returned or computed function is called by slot: positional values fill slots in written order, and labels on a fully named argument list do not change that order. For example, a field of type `(int, int) -> int` called as `record.f(second: 20, first: 10)` receives `20` in its first slot and `10` in its second slot. The actual callback's formal parameter names do not change these slots. A selected record field uses this rule even when a same-named free function exists; UFCS fallback uses the declaration rule above. Type checking, effect analysis, and code generation must use the same selected slot order. + +The distinction belongs to the source call site. Learning a function value's runtime target during optimization does not grant that value a declaration's parameter-name contract. This is a semantic requirement for specializations and inlining, not an additional form of name-based dispatch. + +These two callbacks have the same function type despite their different formal names. The field calls both pass `20` in the first slot and `10` in the second: + +```osprey +type Picker = { choose: (int, int) -> int } +fn first(first: int, second: int) = first +fn last(second: int, first: int) = first +let left = Picker { choose: first } +let right = Picker { choose: last } +print("${left.choose(second: 20, first: 10)} ${right.choose(second: 20, first: 10)}") +// 20 10 +``` The ML equivalent of the flat two-parameter function is uncurried application: diff --git a/docs/specs/0011-LightweightFibersAndConcurrency.md b/docs/specs/0011-LightweightFibersAndConcurrency.md index 10735bd1..17d77682 100644 --- a/docs/specs/0011-LightweightFibersAndConcurrency.md +++ b/docs/specs/0011-LightweightFibersAndConcurrency.md @@ -75,15 +75,15 @@ the element type erased, and a collection crosses the wire in the runtime representation a receiver can read — a backend may not put a construction-time layout on a channel that only its own scope knows how to interpret. -One route does NOT carry `T`, and it is REJECTED rather than guessed at: a -handle stored in a field whose DECLARED type is a type variable — `type Box = -Box { slot: t }` — reaches `recv` with nothing to unbox by, because the -declaration is all the field read has. `recv` and `await` refuse such a program -and name the field. They used to fall back to the uniform wire word, which is a -plausible WRONG VALUE and not an error: a `Channel>>` read out of -such a field answered its outer shape as an integer, so reading a row out of it -produced `0` where the answer was `3` — exit status 0, no diagnostic, nothing to -notice. The same rule and the same refusal apply to `Fiber`. +A handle stored in a generic field also preserves its resolved type. For +`type Box = Box { slot: t }`, a field containing +`Channel>>` carries the instantiated channel element type into +`recv`; a field containing `Fiber` carries the instantiated result type into +`await`. Field access uses the solved instance, including through aliases and +nested records. It must never guess from the erased machine word. A backend +that cannot recover this metadata must reject the program with a diagnostic. +The former metadata-loss reproduction sends `[[1, 2, 3]]` through a boxed +channel and now correctly reports row length `3` rather than `0`. A managed `T` handed to `send` is OWNED by the channel until a `recv` takes it. A send the runtime rejects owns nothing and releases the value again; a value diff --git a/docs/specs/0012-Built-InFunctions.md b/docs/specs/0012-Built-InFunctions.md index d64b2f1f..ea5203f2 100644 --- a/docs/specs/0012-Built-InFunctions.md +++ b/docs/specs/0012-Built-InFunctions.md @@ -72,19 +72,22 @@ editor integration are specified in [Testing Framework](0027-TestingFramework.md ## Numeric Functions -The numeric builtins are inside the arithmetic totality guarantee: none may trap, panic, wrap silently, or return an unspecified value ([ARITH-TOTAL](0037-ArithmeticEffects.md#the-guarantee--arith-total)). `abs` and `intDiv` follow the operators — plain `int`, with faults dispatched to the `Arith` handler. `checkedAdd`/`checkedSub`/`checkedMul` return a `Result` and are the explicit value-level form for code that wants overflow as data. +The numeric builtins are inside the arithmetic totality guarantee: none may trap, panic, wrap silently, or return an unspecified value ([ARITH-TOTAL](0037-ArithmeticEffects.md#the-guarantee--arith-total)). `abs` and `intDiv` follow the operators, so whatever the operators return, they return. `checkedAdd`/`checkedSub`/`checkedMul` are the explicit value-level form for code that wants overflow as data, and keep the runtime's generic `Error` channel. -### `abs(n: int) -> int` — [BUILTIN-ABS] Returns the absolute value. Because `2^63` is not representable, the minimum signed 64-bit input performs `Arith.overflow`; it never wraps or panics. +**What ships today is the checked-`Result` form.** `abs` and `intDiv` return `Result` — the same `MathError` channel the arithmetic operators use, because a division fault is a math fault and not a runtime fault — and a caller discharges it with `match` or `?:`. [Plan 0027](../plans/0027-arithmetic-effects.md) retires that shape in favour of a plain `int` whose faults dispatch to a compiler-declared `Arith` handler, which is what [spec 0037](0037-ArithmeticEffects.md) specifies as the normative target; **no part of it is implemented yet**. The signatures below are written in the shipped form, and the `Arith.*` faults name what each one performs once that plan lands. -### `intDiv(a: int, b: int) -> int` — [BUILTIN-INTDIV] -Truncates toward zero. A zero divisor performs `Arith.remainderByZero`; `intDiv(-9223372036854775808, -1)` performs `Arith.overflow`; every other input yields the quotient. The `/` operator instead returns `float`. +### `abs(n: int) -> Result` — [BUILTIN-ABS] +Returns the absolute value. Because `2^63` is not representable, the minimum signed 64-bit input is the `Error` case (`Arith.overflow` under plan 0027); it never wraps or panics. + +### `intDiv(a: int, b: int) -> Result` — [BUILTIN-INTDIV] +Truncates toward zero. A zero divisor is the `Error` case (`Arith.remainderByZero`), as is `intDiv(-9223372036854775808, -1)` (`Arith.overflow`); every other input yields the quotient. The `/` operator instead returns `float`. ```osprey -intDiv(7, 2) // 3 -intDiv(255643, 10) // 25564 -intDiv(5, 0) // performs Arith.remainderByZero -intDiv(-9223372036854775808, -1) // performs Arith.overflow -fn half(n) = intDiv(n, 2) +intDiv(7, 2) ?: 0 // 3 +intDiv(255643, 10) ?: 0 // 25564 +intDiv(5, 0) // Error — division by zero +intDiv(-9223372036854775808, -1) // Error — integer overflow +fn half(n) = intDiv(n, 2) ?: 0 ``` ### `toFloat(n: int) -> float` — [BUILTIN-TOFLOAT] @@ -232,6 +235,29 @@ All three desugar to the same call. Rules: - **UFCS (`x.f(args)`)** rewrites to `f(x, args)`. **Parens are required** to disambiguate from field access — `x.f` always means field access, never a method call. If a record has a field named `f`, field access wins; UFCS is the fallback. - **Direct call** is ordinary function application. +For dotted calls, the receiver's resolved type determines the choice. A +declared field named `f` is selected even when a free function with that name +is in scope. The field value must be callable; a non-callable field is an +error and does not enable fallback. Calling the field passes only the written +arguments. UFCS passes the receiver first, followed by the written arguments, +and is considered only when the receiver has no such field. + +This rule also applies inside generic functions. If the receiver is still a +type variable when the body is checked, selection remains deferred and is +resolved for each instantiation. For example, `dispatch(x:T) = x.m()` may +select a record's `m` field for one call and a free `m(x)` for a scalar call. +The receiver, argument, result, and callback type constraints remain linked +through generalization and instantiation. An annotation cannot be required +solely to compensate for losing those links. + +Written type arguments apply to the selected callable's declaration binders. +A function-valued field has no declaration binders, so `record.f()` is +rejected even if an in-scope free `f` declares a type parameter. The selected +callable also determines the call's effect requirements: an ignored free +function contributes none, and selecting a field cannot discard its effects. +Evaluation of the receiver and written argument expressions still contributes +their own effects exactly once. + Multi-argument functions in this spec are documented subject-first (e.g. `split(s: string, separator: string)`) so all three forms work uniformly. ### Inspection (total) — [BUILTIN-STRING-INSPECTION] diff --git a/docs/specs/0017-AlgebraicEffects.md b/docs/specs/0017-AlgebraicEffects.md index 25f3fdac..a2448991 100644 --- a/docs/specs/0017-AlgebraicEffects.md +++ b/docs/specs/0017-AlgebraicEffects.md @@ -85,6 +85,13 @@ key. ## Effectful Function Types +`[EFFECTS-GENERIC-ROWS]` A written effect-row argument list must contain exactly +the effect's declared number of type arguments. Omitting the entire list leaves +the instance to inference. An explicit list cannot omit some arguments or add +extra ones, even when the function body performs no operations. Each argument +must name a known type or an enclosing type parameter; nested constructors must +have their declared arity, and a type parameter cannot itself take arguments. + An effect row follows the return type. It contains one effect reference or a bracketed list; generic references may include type arguments. @@ -126,6 +133,23 @@ discharge the operation they cover. Constructing a lambda is pure, but invoking it contributes its latent requirements; constructing one inside a handler does not give it authority after it escapes that handler's lexical region. +Passing a callback without invoking it contributes no latent requirements. +Invoking a function parameter substitutes both the actual callee and its +supplied arguments: forwarding an effectful callback through another function +preserves the effects of each invocation, including named and curried calls. +When a callback returns a record or another callable, subsequent field reads +and calls retain the returned value's effect requirements. This applies equally +when the callback is a named function, a local binding, or a function parameter; +transport through a generic helper cannot make an effectful field pure. +The same rule applies to operation results supplied by an active handler. +Returning a record or closure from a handler does not discharge effects that +are performed only when that value is called after the handler exits. + +Builtin callback and iterator behavior belongs to the resolved builtin binding. +A user function, local binding, or parameter that shadows a builtin name uses +its own body and return value for effect analysis. Its spelling cannot cause +builtin callback invocation or prove that its result has no callable fields. + The current compiler realizes these rules with a closed-program operation summary and fixed-point call analysis. Explicit open effect-row variables are not surface syntax and effect rows are not yet exposed as independently diff --git a/docs/specs/0023-LanguageFlavors.md b/docs/specs/0023-LanguageFlavors.md index 858dc485..d730f38f 100644 --- a/docs/specs/0023-LanguageFlavors.md +++ b/docs/specs/0023-LanguageFlavors.md @@ -17,6 +17,12 @@ Type inference, effect checking, project resolution, and code generation must not branch on `Flavor`. `Parsed.flavor` is retained for frontend and editor presentation only. +Dotted calls that may use UFCS retain that choice in the canonical AST until +shared type resolution selects a field or free function. A generic receiver +defers selection to each instantiation. ML field application denotes field +access directly. When both select the same field, the shared lowering uses +the same call semantics and ABI; no backend branch inspects the source flavor. + ## Supported Flavors | Flavor | Blocks | Calls | Function default | Extension | @@ -170,3 +176,9 @@ equal flat twins, and the expected unequal curried/flat pair. paired `.osp` and `.ospml` examples and requires byte-identical LLVM IR. Each ML example has a Default twin and shares its expected-output file, except for the explicit ML-only allowlist in that test. + +Twins must express the same typing contract. A helper explicitly constrained +to `Source` is not the twin of an unannotated helper that generalizes +over records with the required field. The paired sources must agree on that +constraint or both retain the generic helper. Equal output for the particular +values in one run does not establish that their inferred contracts agree. diff --git a/docs/specs/0024-MLFlavorSyntax.md b/docs/specs/0024-MLFlavorSyntax.md index 2d62b185..7ba61e93 100644 --- a/docs/specs/0024-MLFlavorSyntax.md +++ b/docs/specs/0024-MLFlavorSyntax.md @@ -97,6 +97,28 @@ it. The parenthesised list is a tuple known head is exactly this flat call — which is why the ML and Default twins share IR. +Currying is a property of the **declaration**, never of the call site. A head +declared flat stays flat everywhere it is applied, so juxtaposing its arguments +one at a time is not a partial application of it — there is nothing to bind one +argument to — and the program is rejected. `add 10 20` above is not another +spelling of `add (10, 20)`: the head takes one two-element tuple, so that line +reads as applying `int` to `20` and is refused. + +Written type arguments do not change which of the two a callee is +([TYPE-GENERICS-APPLY](0004-TypeSystem.md#generics-and-variance)). They pin the +callee's binders and leave its parameter shape exactly as declared: + +```osprey-ml +pick : (T, U) -> T +pick (first, second) = first + +kept = pick (1, "two") +// pick 1 "two" is rejected for the same reason `add 10 20` is. +``` + +Reach for whitespace parameters when partial application is wanted, and for a +parenthesised list when it is not. + Lambdas follow the same split: `\x y => body` is curried and `\(x, y) => body` is flat. `name () = body` is a zero-parameter function; `name = body` is a value binding. @@ -217,6 +239,33 @@ An effect declaration lowers to `Stmt::Effect`; a performance lowers to `Expr::Perform`. `resume` and `resume value` lower to `Expr::Resume` inside a handler arm. +`[FLAVOR-ML-EFFECT-OP-NAME]` Operation names are their own namespace. Exactly +three positions hold one, and each admits nothing else, so a word this flavor +reserves elsewhere still names an operation in all three: + +1. the name on an operation line of an `effect` block, +2. the name after the dot in `perform Effect.name`, +3. the head of a handler arm. + +```osprey-ml +effect Chan T + send : T => Unit + select : Unit => T + +relay x = + handle Chan + send v => print "sent ${v}" + select => x + in perform Chan.send x +``` + +This is the rule `abort` / `once` / `many` / `replayable` already follow under +[FLAVOR-ML-EFFECT-ANNOTATIONS](#effects): a marker is a marker only when another +name follows it, so `abort : string => Unit` declares an operation *called* +`abort`. Every other position keeps its ordinary meaning — `send`, `recv` and +`select` remain the channel forms wherever an expression is expected, and +`handler` and `do` stay reserved and name nothing. + `[FLAVOR-ML-EFFECT-ANNOTATIONS]` An effect declaration carries two axes beyond its operations, and ML spells both as prefix keywords: `static` before `effect` fixes the stage @@ -272,6 +321,9 @@ Generic declarations lower to the same variance-carrying `TypeParam` and - Effect rows apply arguments with angles: `! Stash` or `! [Read, Write]`. - Construction-site type arguments use `Box(item = 7)`. +- Call-site type arguments attach to the callee name and precede the juxtaposed + argument: `identity 5`, `pick (1, "two")` + ([TYPE-GENERICS-APPLY](0004-TypeSystem.md#generics-and-variance)). Function binders do not accept variance. A binding without a signature cannot declare function type parameters. diff --git a/docs/specs/0035-StagedEffects.md b/docs/specs/0035-StagedEffects.md index 540da1e8..552d752c 100644 --- a/docs/specs/0035-StagedEffects.md +++ b/docs/specs/0035-StagedEffects.md @@ -420,6 +420,32 @@ under-approximating: - A row variable that is not yet instantiated has no dependency set. The dependency set of a stage-polymorphic function is known at each call site, not at its definition. +- **Where an instantiation may be written.** A written instantiation *is* the + identity, so only a `static effect` may carry one at a request or a handler: + `perform Signal.read()` and `handle Signal` name a static + effect. A **dynamic** effect takes its instantiation from inference and both + its mention forms omit the arguments — `perform Signal.read()` and + `handle Signal` — because a runtime handler is installed under a key the + source did not write. A **row** is the exception in the other direction: it + states a type, not a mention, so `!Signal` and `![Read, Write]` + pin their arguments in either stage. + + ```osprey + effect Stash { take: fn() -> T } + + // Accepted — the row pins, the mentions infer. + fn held() !Stash = perform Stash.take() + fn main() = print("${handle Stash take => 9 do held()}") + + // Rejected — `Stash` is dynamic, so neither mention may write ``: + // perform Stash.take() + // handle Stash take => 9 do ... + ``` + + That a runtime handler key happens to be mangled per instantiation does not + license the written form: the key is an implementation of the identity, not a + second way to spell it. Declare `static effect Stash` when the program needs + to name one instantiation apart from another. `[STAGE-SIGNALS-REBUILD]` A UI framework consuming this uses the dependency set as its dirty set directly: when a signal changes, the subtrees to rebuild are diff --git a/examples/failscompilation/channel_element_type_lost_in_generic_field.ospo b/examples/failscompilation/channel_element_type_lost_in_generic_field.ospo deleted file mode 100644 index 4a7e4052..00000000 --- a/examples/failscompilation/channel_element_type_lost_in_generic_field.ospo +++ /dev/null @@ -1,12 +0,0 @@ -// A `Channel` stored in a field whose DECLARED type is a type variable -// arrives at `recv` with no element type, and the field read has only the -// declaration to go on. Guessing the wire word is what this rejection replaces: -// it answered a plausible wrong value -- `listLength(listGet(m, 0))` printed -// `0` where the answer was `3`, with exit status 0 and no diagnostic. -// [CONCURRENCY-CHANNEL] -type Box = Box { slot: t } - -let boxed = Box { slot: Channel(2) } -send(boxed.slot, [[1, 2, 3]]) -let m = recv(boxed.slot) -print(toString(listLength(listGet(m, 0) ?: [99]))) diff --git a/examples/failscompilation/channel_element_type_lost_in_generic_field.ospo.expectedoutput b/examples/failscompilation/channel_element_type_lost_in_generic_field.ospo.expectedoutput deleted file mode 100644 index 593c7d9a..00000000 --- a/examples/failscompilation/channel_element_type_lost_in_generic_field.ospo.expectedoutput +++ /dev/null @@ -1 +0,0 @@ -codegen: invalid program: this channel's element type did not reach `recv`: it was read out of a field or structure whose declared type is a type variable, which carries no element type. Give the field the channel's concrete type diff --git a/examples/failscompilation/ffi_capturing_callback.ospo b/examples/failscompilation/ffi_capturing_callback.ospo index 10eb5fc0..51e56a8e 100644 --- a/examples/failscompilation/ffi_capturing_callback.ospo +++ b/examples/failscompilation/ffi_capturing_callback.ospo @@ -6,5 +6,5 @@ extern fn registerCallback(cb: fn(int) -> int) -> int let base = 10 -let r = registerCallback(fn(x) => x + base) +let r = registerCallback(fn(x) => (x + base) ?: 0) print("${r}") diff --git a/examples/failscompilation/ffi_capturing_callback.ospo.expectedoutput b/examples/failscompilation/ffi_capturing_callback.ospo.expectedoutput index 5d5e6776..17030a06 100644 --- a/examples/failscompilation/ffi_capturing_callback.ospo.expectedoutput +++ b/examples/failscompilation/ffi_capturing_callback.ospo.expectedoutput @@ -1 +1 @@ -type mismatch: cannot unify int with Result +codegen: unsupported construct: a capturing lambda as an FFI callback (captures cannot cross the C boundary; use a named function) diff --git a/examples/failscompilation/function_typed_record_field.ospo b/examples/failscompilation/function_typed_record_field.ospo index 2217d3bd..85fed034 100644 --- a/examples/failscompilation/function_typed_record_field.ospo +++ b/examples/failscompilation/function_typed_record_field.ospo @@ -1,8 +1,6 @@ -// Function-typed record fields ARE a runnable feature (closure cells), but -// calling one as `a.add(10)` still goes through the UFCS rewrite -// (`add(a, 10)`) and is rejected — the spec'd field-access-wins -// disambiguation (0012-Built-InFunctions) is not implemented yet. The working -// spelling is `let f = a.add` then `f(10)`. Must reject cleanly, never panic. +// Field-call syntax resolves `a.add(10)` to the record's callable field. +// The initializer must still match that field's declared return type: +// checked addition returns Result, not int. type Adder = { add: (int) -> int } diff --git a/examples/failscompilation/function_typed_record_field.ospo.expectedoutput b/examples/failscompilation/function_typed_record_field.ospo.expectedoutput index aedf67de..5d5e6776 100644 --- a/examples/failscompilation/function_typed_record_field.ospo.expectedoutput +++ b/examples/failscompilation/function_typed_record_field.ospo.expectedoutput @@ -1,2 +1 @@ type mismatch: cannot unify int with Result -unknown identifier `add` diff --git a/examples/failscompilation/ml_turbofish_no_declared_binder.ospo b/examples/failscompilation/ml_turbofish_no_declared_binder.ospo new file mode 100644 index 00000000..3d8d2bfa --- /dev/null +++ b/examples/failscompilation/ml_turbofish_no_declared_binder.ospo @@ -0,0 +1,9 @@ +// osprey: flavor=ml +(** A binding without a signature cannot declare type parameters, so it cannot + be applied at a call site either. + Implements [TYPE-GENERICS-APPLY], [FLAVOR-ML-GENERICS] *) +plain x = x + +main () = + pinned = plain 5 + print "${pinned}" diff --git a/examples/failscompilation/ml_turbofish_no_declared_binder.ospo.expectedoutput b/examples/failscompilation/ml_turbofish_no_declared_binder.ospo.expectedoutput new file mode 100644 index 00000000..96c5d771 --- /dev/null +++ b/examples/failscompilation/ml_turbofish_no_declared_binder.ospo.expectedoutput @@ -0,0 +1 @@ +8:13: function `plain` takes 0 type argument(s), got 1 diff --git a/examples/failscompilation/ml_turbofish_type_arg_arity.ospo b/examples/failscompilation/ml_turbofish_type_arg_arity.ospo new file mode 100644 index 00000000..7f8b4e92 --- /dev/null +++ b/examples/failscompilation/ml_turbofish_type_arg_arity.ospo @@ -0,0 +1,10 @@ +// osprey: flavor=ml +(** The ML surface applies call-site type arguments with the same angles and is + held to the same count contract — one shared core, two spellings. + Implements [TYPE-GENERICS-APPLY], [FLAVOR-ML-GENERICS] *) +identity : T -> T +identity x = x + +main () = + pinned = identity 5 + print "${pinned}" diff --git a/examples/failscompilation/ml_turbofish_type_arg_arity.ospo.expectedoutput b/examples/failscompilation/ml_turbofish_type_arg_arity.ospo.expectedoutput new file mode 100644 index 00000000..f768c588 --- /dev/null +++ b/examples/failscompilation/ml_turbofish_type_arg_arity.ospo.expectedoutput @@ -0,0 +1 @@ +9:13: function `identity` takes 1 type argument(s), got 2 diff --git a/examples/failscompilation/ml_variance_covariant_no_inward_coercion.ospo b/examples/failscompilation/ml_variance_covariant_no_inward_coercion.ospo new file mode 100644 index 00000000..916e86d8 --- /dev/null +++ b/examples/failscompilation/ml_variance_covariant_no_inward_coercion.ospo @@ -0,0 +1,13 @@ +// osprey: flavor=ml +(** The ML surface lowers to the same canonical nodes, so the coercion stops at + the same boundary. Implements [TYPE-VARIANCE-COERCION], [FLAVOR-ML-GENERICS] *) +type Feed out T = + supply : T + +feedInt : Unit -> Feed +feedInt () = Feed(supply = 1) + +total : Feed> -> int +total f = f.supply ?: 0 + +main () = print "${total (feedInt ())}" diff --git a/examples/failscompilation/ml_variance_covariant_no_inward_coercion.ospo.expectedoutput b/examples/failscompilation/ml_variance_covariant_no_inward_coercion.ospo.expectedoutput new file mode 100644 index 00000000..6207037d --- /dev/null +++ b/examples/failscompilation/ml_variance_covariant_no_inward_coercion.ospo.expectedoutput @@ -0,0 +1 @@ +type mismatch: cannot unify Result with int diff --git a/examples/failscompilation/recursive_generic_needs_annotation.ospo b/examples/failscompilation/recursive_generic_needs_annotation.ospo deleted file mode 100644 index afbedb5a..00000000 --- a/examples/failscompilation/recursive_generic_needs_annotation.ospo +++ /dev/null @@ -1,11 +0,0 @@ -// A recursive function whose signature is not fully inferred cannot be -// specialised (the self-call would name a definition that is never emitted), -// so codegen fails closed and asks for annotations. `walk` stays generic in its -// element type because nothing in the body inspects an element, and the two -// call sites instantiate it at two different ones. -fn walk(xs, n) = match n { - 0 => xs - _ => walk(listReverse(xs), (n - 1) ?: 0) -} - -fn main() = print("${listLength(walk([5, 6, 7], 2))} ${listLength(walk(["a", "b"], 1))}") diff --git a/examples/failscompilation/recursive_generic_needs_annotation.ospo.expectedoutput b/examples/failscompilation/recursive_generic_needs_annotation.ospo.expectedoutput deleted file mode 100644 index c18a69a8..00000000 --- a/examples/failscompilation/recursive_generic_needs_annotation.ospo.expectedoutput +++ /dev/null @@ -1 +0,0 @@ -codegen: unsupported construct: `walk` is recursive and its return type is not inferred; annotate its return type so it is emitted as a real function diff --git a/examples/failscompilation/stage_signal_instantiated_dynamic_effect.ospo.expectedoutput b/examples/failscompilation/stage_signal_instantiated_dynamic_effect.ospo.expectedoutput index f2bc7fc1..43efabde 100644 --- a/examples/failscompilation/stage_signal_instantiated_dynamic_effect.ospo.expectedoutput +++ b/examples/failscompilation/stage_signal_instantiated_dynamic_effect.ospo.expectedoutput @@ -1 +1 @@ -11:21: `perform Signal` names an instantiation of dynamic effect `Signal`; a dynamic handler is keyed by effect name at runtime, so instantiations share one key and cannot be told apart (docs/plans/0024-staged-effects.md). Declare `static effect Signal`, or write `perform Signal` and let inference instantiate it +11:21: `perform Signal` names an instantiation of dynamic effect `Signal`; a written instantiation is the identity of a `static effect`, while a dynamic effect takes its instantiation from inference (docs/plans/0024-staged-effects.md). Declare `static effect Signal`, or write `perform Signal` and let inference instantiate it diff --git a/examples/failscompilation/staged_static_arm_requires_dynamic.ospo b/examples/failscompilation/staged_static_arm_requires_dynamic.ospo index 5a1bb38d..1d92c8d6 100644 --- a/examples/failscompilation/staged_static_arm_requires_dynamic.ospo +++ b/examples/failscompilation/staged_static_arm_requires_dynamic.ospo @@ -11,5 +11,8 @@ effect Log { fn main() = handle Log write message => print(message) in print("${handle static Tile - size => { perform Log.write("measuring") 8 } + size => { + perform Log.write("measuring") + 8 + } in perform Tile.size()}") diff --git a/examples/failscompilation/turbofish_argument_contradiction.ospo b/examples/failscompilation/turbofish_argument_contradiction.ospo new file mode 100644 index 00000000..25b66207 --- /dev/null +++ b/examples/failscompilation/turbofish_argument_contradiction.ospo @@ -0,0 +1,9 @@ +// A written type argument is checked, not decorative: it unifies with the +// instantiation the value arguments infer, so a contradiction is a type error. +// Implements [TYPE-GENERICS-APPLY] +fn identity(x: T) -> T = x + +fn main() -> Unit = { + let pinned = identity("text") + print("${pinned}") +} diff --git a/examples/failscompilation/turbofish_argument_contradiction.ospo.expectedoutput b/examples/failscompilation/turbofish_argument_contradiction.ospo.expectedoutput new file mode 100644 index 00000000..31079bc4 --- /dev/null +++ b/examples/failscompilation/turbofish_argument_contradiction.ospo.expectedoutput @@ -0,0 +1 @@ +type mismatch: cannot unify int with string diff --git a/examples/failscompilation/turbofish_no_declared_binder.ospo b/examples/failscompilation/turbofish_no_declared_binder.ospo new file mode 100644 index 00000000..63271697 --- /dev/null +++ b/examples/failscompilation/turbofish_no_declared_binder.ospo @@ -0,0 +1,10 @@ +// An unannotated function is implicitly polymorphic, which is NOT a declared +// binder: there is nothing for a written type argument to pin, so the call is +// rejected rather than silently ignoring the annotation. +// Implements [TYPE-GENERICS-APPLY], [TYPE-GENERICS-FN] +fn plain(x) = x + +fn main() -> Unit = { + let pinned = plain(5) + print("${pinned}") +} diff --git a/examples/failscompilation/turbofish_no_declared_binder.ospo.expectedoutput b/examples/failscompilation/turbofish_no_declared_binder.ospo.expectedoutput new file mode 100644 index 00000000..0d7f3748 --- /dev/null +++ b/examples/failscompilation/turbofish_no_declared_binder.ospo.expectedoutput @@ -0,0 +1 @@ +8:17: function `plain` takes 0 type argument(s), got 1 diff --git a/examples/failscompilation/turbofish_type_arg_arity.ospo b/examples/failscompilation/turbofish_type_arg_arity.ospo new file mode 100644 index 00000000..0f727aff --- /dev/null +++ b/examples/failscompilation/turbofish_type_arg_arity.ospo @@ -0,0 +1,9 @@ +// A call site's type arguments are a contract with the declaration: the count +// must equal the declared binder count, exactly as a construction site's does. +// Implements [TYPE-GENERICS-APPLY], [GENERICS-CTOR-ARITY] +fn identity(x: T) -> T = x + +fn main() -> Unit = { + let pinned = identity(5) + print("${pinned}") +} diff --git a/examples/failscompilation/turbofish_type_arg_arity.ospo.expectedoutput b/examples/failscompilation/turbofish_type_arg_arity.ospo.expectedoutput new file mode 100644 index 00000000..b900bfce --- /dev/null +++ b/examples/failscompilation/turbofish_type_arg_arity.ospo.expectedoutput @@ -0,0 +1 @@ +7:17: function `identity` takes 1 type argument(s), got 2 diff --git a/examples/failscompilation/turbofish_type_arg_too_few.ospo b/examples/failscompilation/turbofish_type_arg_too_few.ospo new file mode 100644 index 00000000..6a5a179f --- /dev/null +++ b/examples/failscompilation/turbofish_type_arg_too_few.ospo @@ -0,0 +1,9 @@ +// The count contract binds in both directions: two declared binders demand two +// written arguments, since a partially written list has no meaning. +// Implements [TYPE-GENERICS-APPLY] +fn pick(first: T, second: U) -> T = first + +fn main() -> Unit = { + let kept = pick(1, "two") + print("${kept}") +} diff --git a/examples/failscompilation/turbofish_type_arg_too_few.ospo.expectedoutput b/examples/failscompilation/turbofish_type_arg_too_few.ospo.expectedoutput new file mode 100644 index 00000000..5bfad242 --- /dev/null +++ b/examples/failscompilation/turbofish_type_arg_too_few.ospo.expectedoutput @@ -0,0 +1 @@ +7:15: function `pick` takes 2 type argument(s), got 1 diff --git a/examples/failscompilation/turbofish_variance_marker.ospo b/examples/failscompilation/turbofish_variance_marker.ospo new file mode 100644 index 00000000..2726012a --- /dev/null +++ b/examples/failscompilation/turbofish_variance_marker.ospo @@ -0,0 +1,9 @@ +// Variance is declaration-site on types and effects only. A call site pins an +// instantiation; it does not declare one, so a marker there has no meaning. +// Implements [TYPE-GENERICS-APPLY], [TYPE-VARIANCE-DECL] +fn identity(x: T) -> T = x + +fn main() -> Unit = { + let pinned = identity(5) + print("${pinned}") +} diff --git a/examples/failscompilation/turbofish_variance_marker.ospo.expectedoutput b/examples/failscompilation/turbofish_variance_marker.ospo.expectedoutput new file mode 100644 index 00000000..0c80ffaa --- /dev/null +++ b/examples/failscompilation/turbofish_variance_marker.ospo.expectedoutput @@ -0,0 +1 @@ +7:17: variance annotations are only valid on type and effect declarations; remove the marker from `int` at the call to `identity` diff --git a/examples/failscompilation/ufcs_field_collision.ospo.expectedoutput b/examples/failscompilation/ufcs_field_collision.ospo.expectedoutput index 884801e2..09a35f76 100644 --- a/examples/failscompilation/ufcs_field_collision.ospo.expectedoutput +++ b/examples/failscompilation/ufcs_field_collision.ospo.expectedoutput @@ -1 +1 @@ -type mismatch: cannot unify string with { trim: string } +cannot call non-function `string` diff --git a/examples/failscompilation/variance_builtin_no_inward_coercion.ospo b/examples/failscompilation/variance_builtin_no_inward_coercion.ospo new file mode 100644 index 00000000..9a242cbb --- /dev/null +++ b/examples/failscompilation/variance_builtin_no_inward_coercion.ospo @@ -0,0 +1,8 @@ +// `List` is a covariant built-in and still matches its element exactly: +// a List stores raw ints, and reading them as Results would misread every +// element. Implements [TYPE-VARIANCE-COERCION] +fn listInt() -> List = [1, 2] + +fn total(items: List>) = length(items) + +fn main() -> Unit = print("${total(listInt())}") diff --git a/examples/failscompilation/variance_builtin_no_inward_coercion.ospo.expectedoutput b/examples/failscompilation/variance_builtin_no_inward_coercion.ospo.expectedoutput new file mode 100644 index 00000000..6207037d --- /dev/null +++ b/examples/failscompilation/variance_builtin_no_inward_coercion.ospo.expectedoutput @@ -0,0 +1 @@ +type mismatch: cannot unify Result with int diff --git a/examples/failscompilation/variance_contravariant_no_inward_coercion.ospo b/examples/failscompilation/variance_contravariant_no_inward_coercion.ospo new file mode 100644 index 00000000..05c433d5 --- /dev/null +++ b/examples/failscompilation/variance_contravariant_no_inward_coercion.ospo @@ -0,0 +1,12 @@ +// The flipped recursion of `in T` does not smuggle the coercion in either: the +// leaves still match exactly, so a Gate> is not a +// Gate. Implements [TYPE-VARIANCE-COERCION] +type Gate = Gate { admit: (T) -> bool } | Open + +fn gateRes() -> Gate> = Gate { admit: |x| => true } +fn describe(g: Gate) = match g { + Gate { admit } => "guarded" + Open => "open" +} + +fn main() -> Unit = print(describe(gateRes())) diff --git a/examples/failscompilation/variance_contravariant_no_inward_coercion.ospo.expectedoutput b/examples/failscompilation/variance_contravariant_no_inward_coercion.ospo.expectedoutput new file mode 100644 index 00000000..6207037d --- /dev/null +++ b/examples/failscompilation/variance_contravariant_no_inward_coercion.ospo.expectedoutput @@ -0,0 +1 @@ +type mismatch: cannot unify Result with int diff --git a/examples/failscompilation/variance_covariant_no_inward_coercion.ospo b/examples/failscompilation/variance_covariant_no_inward_coercion.ospo new file mode 100644 index 00000000..d942a5a7 --- /dev/null +++ b/examples/failscompilation/variance_covariant_no_inward_coercion.ospo @@ -0,0 +1,15 @@ +// The bare-to-Success coercion is representation-changing, so it applies at a +// DIRECT value site and never inside a constructor argument: a Feed holds +// a raw int where a Feed> holds a Result, and nothing +// rebuilds the container. `out T` does not change that — the shipped fixture +// variance_covariant_result_payload.ospo covers the unwrapping direction; this +// is the widening one. Implements [TYPE-VARIANCE-COERCION] +type Feed = Feed { supply: T } | Dry + +fn feedInt() -> Feed = Feed { supply: 1 } +fn total(f: Feed>) = match f { + Feed { supply } => supply ?: 0 + Dry => 0 +} + +fn main() -> Unit = print("${total(feedInt())}") diff --git a/examples/failscompilation/variance_covariant_no_inward_coercion.ospo.expectedoutput b/examples/failscompilation/variance_covariant_no_inward_coercion.ospo.expectedoutput new file mode 100644 index 00000000..6207037d --- /dev/null +++ b/examples/failscompilation/variance_covariant_no_inward_coercion.ospo.expectedoutput @@ -0,0 +1 @@ +type mismatch: cannot unify Result with int diff --git a/examples/failscompilation/variance_in_under_two_flips.ospo b/examples/failscompilation/variance_in_under_two_flips.ospo new file mode 100644 index 00000000..c21eb304 --- /dev/null +++ b/examples/failscompilation/variance_in_under_two_flips.ospo @@ -0,0 +1,10 @@ +// Two parameter flips cancel. In `((T) -> int) -> int` the inner arrow puts `T` +// in an input position and the outer arrow flips that position again, so `T` +// ends up in OUTPUT position — which an `in T` may not occupy, exactly as if it +// had been written as a bare field. A variance check that only looked one arrow +// deep would accept this; type_equality_comprehensive.test.osp shipped it on a +// `Sink` for that reason, and the double flip belongs on `out T`. +// Implements [TYPE-VARIANCE-POSITIONS] +type Sink = Sink { admit: (T) -> bool, hof: ((T) -> int) -> int } + +fn main() -> Unit = print("must not compile") diff --git a/examples/failscompilation/variance_in_under_two_flips.ospo.expectedoutput b/examples/failscompilation/variance_in_under_two_flips.ospo.expectedoutput new file mode 100644 index 00000000..89dcd8d1 --- /dev/null +++ b/examples/failscompilation/variance_in_under_two_flips.ospo.expectedoutput @@ -0,0 +1 @@ +8:0: type parameter `T` is declared `in T` but appears in output position in field `hof` of `Sink` diff --git a/examples/projects/modules/src/domain/json.ospml b/examples/projects/modules/src/domain/json.ospml index a00a4553..accc441d 100644 --- a/examples/projects/modules/src/domain/json.ospml +++ b/examples/projects/modules/src/domain/json.ospml @@ -42,46 +42,37 @@ module Json : JsonApi // Escape original slashes first; later JSON escapes must remain single. // Runtime strings cannot contain NUL, so representable controls start at 1. - escape : string -> string escape s = bslash = "\\" quote = "\"" step = replace s bslash (bslash + bslash) ?: "" escapeControls (replace step quote (bslash + quote) ?: "") 1 - quote : string -> string quote s = quote = "\"" quote + escape s + quote // `"key":"escaped value"` — a string-valued object member. - strField : string -> string -> string strField key value = quote key + ":" + quote value // `"key":123` — a number-valued object member (integers need no escaping). - numField : string -> int -> string numField key value = quote key + ":" + toString value // An already-encoded JSON value. Kept explicit so callers cannot confuse // protocol trees with ordinary escaped application strings. - rawField : string -> string -> string rawField key value = quote key + ":" + value // Wrap a comma-joined member list into an object / array. Callers join the // members with `,`; these only add the braces so nesting stays composable. - obj : string -> string obj members = "{" + members + "}" - arr : string -> string arr elements = "[" + elements + "]" // The one canonical error body shape, so every 4xx path is identical. - error : string -> string error why = obj (strField "error" why) // Scalar-only projection used by the browser model boundary. Documents // are always freed here, so consumers cannot accidentally retain handles. - getOr : string -> string -> string -> string getOr source path fallback = doc = jsonParse source ?: 0 value = jsonGet doc path ?: fallback diff --git a/scripts/install-deslop.sh b/scripts/install-deslop.sh index ceffe6bc..cbea9afa 100755 --- a/scripts/install-deslop.sh +++ b/scripts/install-deslop.sh @@ -3,10 +3,9 @@ # # Local / devcontainer installer for the gate binary. Tracks the newest release # by default so a fresh checkout always runs the current deslop; export -# DESLOP_VERSION=X.Y.Z to pin a specific release (e.g. to dodge a bad one). CI -# installs the same gate independently via the Homebrew tap -# (`brew install nimblesite/tap/deslop`), which is likewise unpinned — so local -# and CI stay on the same current version. Downloads the release tarball, +# DESLOP_VERSION=X.Y.Z to pin a specific release. CI uses the Deslop action +# pinned to 0.27.0; use DESLOP_VERSION=0.27.0 to reproduce that gate locally. +# Downloads the release tarball, # verifies its SHA-256, and installs the `deslop` binary onto PATH. # # Usage: @@ -28,8 +27,15 @@ fail() { echo -e "${RED}✗ $*${RESET}" >&2; exit 1; } DESLOP_VERSION="${DESLOP_VERSION:-}" if [[ -z "$DESLOP_VERSION" ]]; then say "Resolving latest deslop release" - DESLOP_VERSION="$(curl -sSfL https://api.github.com/repos/Nimblesite/Deslop/releases/latest \ - | grep -m1 '"tag_name"' | sed -E 's/.*"v?([^"]+)".*/\1/')" + # No pipeline here, on purpose. `curl | grep -m1` failed the installer: + # grep exits on the first match, curl dies of SIGPIPE, and `pipefail` + # failed the whole script even though the version had been resolved. + # Piping a captured body into an early-exiting matcher has the same hazard, + # so the body is captured first and matched from a here-string. + latest="$(curl -sSfL https://api.github.com/repos/Nimblesite/Deslop/releases/latest)" \ + || fail "could not reach the GitHub API to resolve the latest deslop release" + DESLOP_VERSION="$(awk -F'"' '/"tag_name"/ { v = $4; sub(/^v/, "", v); print v; exit }' \ + <<<"$latest")" [[ -n "$DESLOP_VERSION" ]] || fail "could not resolve latest deslop release from the GitHub API" fi BASE_URL="https://github.com/Nimblesite/Deslop/releases/download/v${DESLOP_VERSION}" diff --git a/scripts/verify-no-dead-code.mjs b/scripts/verify-no-dead-code.mjs new file mode 100644 index 00000000..4f066e3a --- /dev/null +++ b/scripts/verify-no-dead-code.mjs @@ -0,0 +1,226 @@ +#!/usr/bin/env node +// Dead-code gate for the Rust workspace. [LINTS-DEADCODE-REACH] +// +// WHY THIS EXISTS. `dead_code = "deny"` (workspace Cargo.toml) catches every +// unused item that is private to a crate, and `unreachable_pub = "deny"` forces +// a `pub` item that nobody can name from outside down to `pub(crate)`, which +// puts it back under `dead_code`. One hole survives both: an item that IS +// reachable from its crate root and IS re-exported, but that no OTHER crate and +// no product code path ever names. rustc assumes such an item is a library's +// public API and stays silent, so it can rot in the tree forever. +// +// That hole is not theoretical. `osprey_debug::DebugBuild` was a two-state +// wrapper over `BuildKind` whose only callers were its own unit tests, and +// `DocComment::summary_only` was a constructor the real parser never used. +// Both compiled clean under the full lint set above. +// +// WHAT COUNTS AS DEAD. An item is dead when no PRODUCT line outside its own +// definition names it. A line is product code unless it sits in a test file +// (`tests/`, `*_tests.rs`, `test_support`/`testutil`) or inside a +// `#[cfg(test)]` block. Tests alone never keep an item alive: code whose sole +// purpose is to be tested is exactly the thing this gate removes. +// +// An item's "own definition" is its declaration block plus, for a type, every +// `impl` block for that type. Without that, a dead type looks alive because its +// own inherent methods mention it. +// +// WHAT IT DELIBERATELY MISSES. Items are tracked by bare NAME, so a dead item +// sharing a name with a live one anywhere in the workspace (`new`, `kind`, +// `path`) is held alive by its namesake, and macro-generated items are not seen +// at all. Both are FALSE NEGATIVES: the gate under-reports and never invents a +// finding, which is what lets it run with no allowlist. It is a floor on top of +// `make hawk`, not a replacement for reading the code. +// +// NO ALLOWLIST, deliberately. A gate you can turn off is not a gate. When this +// fails, the fix is to call the item or delete it, never to exempt it. + +import { readFileSync, readdirSync, statSync } from "node:fs"; +import { join, extname, resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const REPO_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), ".."); + +// Directories that never hold hand-written product source. +const SKIP_DIRS = new Set([ + "target", + "node_modules", + ".git", + "_site", + "out", + ".vscode-test", + "coverage", + "test-results", +]); + +// Only these can NAME a Rust item. Rust is obvious; C is here because an +// `extern "C"` declaration's real user is the C definition it links to, and +// dropping `.c`/`.h` would condemn the whole runtime FFI surface. +// +// Prose and config are deliberately absent. Markdown cannot call a function, so +// counting a doc mention as a use lets any item stay alive by being written +// about — this gate caught its own header comment resurrecting the very example +// it describes. +const REFERENCE_EXTS = new Set([".rs", ".c", ".h"]); + +const TYPE_KINDS = new Set(["struct", "enum", "trait", "union"]); + +const DECL = + /^(\s*)pub(?:\s*\(\s*(?:crate|self|super)\s*\))?\s+(?:(?:const|async|unsafe|extern\s+"[^"]*")\s+)*(fn|struct|enum|trait|type|const|static|union)\s+([A-Za-z_]\w*)/; +const IMPL = /^\s*impl\b[^{]*?\b([A-Za-z_]\w*)\s*(?:<[^{]*>)?\s*(?:where[^{]*)?\{/; +const VARIANT = /^\s{4,}([A-Z]\w*)\s*(?:[{(,=]|$)/; +const FIELD = /^\s{4,}pub\s+(?:\([^)]*\)\s*)?([a-z_]\w*)\s*:/; +const CFG_TEST = /^\s*#\[cfg\(test\)\]/; + +const walk = (dir, out = []) => { + for (const entry of readdirSync(dir)) { + if (SKIP_DIRS.has(entry)) continue; + const path = join(dir, entry); + if (statSync(path).isDirectory()) walk(path, out); + else out.push(path); + } + return out; +}; + +const isTestFile = (path) => + path.includes("/tests/") || + path.includes("/test/") || + path.endsWith("_tests.rs") || + path.includes("test_support") || + path.includes("testutil") || + path.includes("/benchmarks/"); + +// The 1-based [start, end] of the brace block opening at `start`, or of a +// single `;`-terminated declaration when no brace follows. +const blockSpan = (lines, start) => { + let depth = 0; + let sawBrace = false; + for (let j = start - 1; j < lines.length; j += 1) { + const line = lines[j]; + depth += (line.match(/\{/g) ?? []).length - (line.match(/\}/g) ?? []).length; + if (line.includes("{")) sawBrace = true; + if (sawBrace && depth <= 0) return [start, j + 1]; + if (!sawBrace && line.trimEnd().endsWith(";")) return [start, j + 1]; + } + return [start, lines.length]; +}; + +// Every 1-based line number sitting inside a `#[cfg(test)]` block. +const testMask = (lines) => { + const mask = new Set(); + let i = 0; + while (i < lines.length) { + if (CFG_TEST.test(lines[i])) { + const [a, b] = blockSpan(lines, i + 1); + for (let k = a; k <= b; k += 1) mask.add(k); + i = b; + } else i += 1; + } + return mask; +}; + +const files = new Map(); +for (const path of walk(REPO_ROOT)) { + if (!REFERENCE_EXTS.has(extname(path))) continue; + try { + files.set(path, readFileSync(path, "utf8")); + } catch { + /* unreadable file cannot name anything */ + } +} + +const linesOf = new Map(); +const maskOf = new Map(); +for (const [path, text] of files) { + const lines = text.split("\n"); + linesOf.set(path, lines); + maskOf.set(path, path.endsWith(".rs") ? testMask(lines) : new Set()); +} + +const crateSrc = (path) => + path.startsWith(join(REPO_ROOT, "crates")) && path.endsWith(".rs") && !isTestFile(path); + +// name -> { kind, path, line, spans: [[path, start, end]] } +const items = new Map(); +const record = (name, kind, path, line, span) => { + const found = items.get(name); + if (found) found.spans.push(span); + else items.set(name, { kind, path, line, spans: [span] }); +}; + +for (const [path, text] of files) { + if (!crateSrc(path)) continue; + const lines = linesOf.get(path); + const mask = maskOf.get(path); + lines.forEach((line, index) => { + const lineNo = index + 1; + if (mask.has(lineNo)) return; + const decl = DECL.exec(line); + if (!decl) return; + const [, , kind, name] = decl; + const [a, b] = blockSpan(lines, lineNo); + record(name, kind, path, lineNo, [path, a, b]); + // Enum variants and public struct fields are members of the same block, and + // rustc treats both as used the moment the enclosing type is `pub`. + if (kind === "enum" || kind === "struct") { + for (let j = a; j < b - 1; j += 1) { + const member = kind === "enum" ? VARIANT.exec(lines[j]) : FIELD.exec(lines[j]); + if (member && member[1] !== "Self") record(member[1], `${kind} member`, path, j + 1, [path, a, b]); + } + } + }); +} + +// A type's inherent and trait `impl` blocks are part of its own definition. +for (const [path, text] of files) { + if (!path.endsWith(".rs")) continue; + const lines = linesOf.get(path); + lines.forEach((line, index) => { + const impl = IMPL.exec(line); + if (!impl) return; + const found = items.get(impl[1]); + if (!found || !TYPE_KINDS.has(found.kind)) return; + const [a, b] = blockSpan(lines, index + 1); + found.spans.push([path, a, b]); + }); +} + +const insideOwnSpans = (item, path, lineNo) => + item.spans.some(([p, a, b]) => p === path && lineNo >= a && lineNo <= b); + +const hasProductReference = (name, item) => { + const word = new RegExp(`\\b${name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`); + for (const [path, text] of files) { + if (!text.includes(name)) continue; + const testFile = isTestFile(path); + const mask = maskOf.get(path); + const lines = linesOf.get(path); + for (let i = 0; i < lines.length; i += 1) { + const lineNo = i + 1; + if (testFile || mask.has(lineNo)) continue; + if (insideOwnSpans(item, path, lineNo)) continue; + if (word.test(lines[i])) return true; + } + } + return false; +}; + +const dead = []; +for (const [name, item] of items) { + if (!hasProductReference(name, item)) dead.push({ name, ...item }); +} +dead.sort((a, b) => a.path.localeCompare(b.path) || a.line - b.line); + +if (dead.length === 0) { + console.log(`==> Dead-code gate: ${items.size} public items, all reachable from product code.`); + process.exit(0); +} + +console.error( + `FAIL: ${dead.length} public item(s) are never named by product code.\n` + + "Each is reachable only from its own definition or its own tests, so no\n" + + "rustc lint can see it. Call it from product code, or delete it.\n", +); +for (const item of dead) { + console.error(` ${item.path.slice(REPO_ROOT.length + 1)}:${item.line} ${item.kind} ${item.name}`); +} +process.exit(1); diff --git a/tests/MOBILE_UNPORTABLE.txt b/tests/MOBILE_UNPORTABLE.txt index aa988e49..a5bab205 100644 --- a/tests/MOBILE_UNPORTABLE.txt +++ b/tests/MOBILE_UNPORTABLE.txt @@ -30,6 +30,8 @@ # legal C spelling. tests/effects/errors/direct_recovery.test.osp C ABI: unhandled effect operations at library export `requirePositive`: RecoveryError.missingInt; add a matching `handle` tests/effects/errors/direct_recovery.test.ospml C ABI: unhandled effect operations at library export `requirePositive`: RecoveryError.missingInt; add a matching `handle` +tests/effects/injection/storage_injection.test.osp C ABI: unhandled effect operations at library export `countNotes`: Storage.exists, Storage.load; add a matching `handle` +tests/effects/injection/storage_injection.test.ospml C ABI: unhandled effect operations at library export `countNotes`: Storage.exists, Storage.load; add a matching `handle` tests/effects/multiplicity/multiplicity.test.osp a continuation for `Charge.charge` (a suspended continuation cannot cross or outlive a synchronous host call) tests/effects/multiplicity/multiplicity.test.ospml a continuation for `Charge.charge` (a suspended continuation cannot cross or outlive a synchronous host call) tests/effects/resume/resume_abort_early_exit.test.osp a continuation for `Stop.check` (a suspended continuation cannot cross or outlive a synchronous host call) diff --git a/tests/WASM_UNPORTABLE.txt b/tests/WASM_UNPORTABLE.txt index c39e5607..484721ac 100644 --- a/tests/WASM_UNPORTABLE.txt +++ b/tests/WASM_UNPORTABLE.txt @@ -40,6 +40,7 @@ tests/regressions/basics/processes/async_process_management.test.osp process spa tests/regressions/basics/processes/async_process_management.test.ospml process spawning builtin `spawnProcess` tests/regressions/basics/processes/callback_stdout_demo.test.osp process spawning builtin `spawnProcess` tests/regressions/basics/processes/callback_stdout_demo.test.ospml process spawning builtin `spawnProcess` +tests/regressions/basics/types/channel_element_type_in_generic_field.test.osp fiber concurrency builtin `Channel` tests/regressions/basics/website/website_examples.test.osp fiber concurrency tests/regressions/basics/website/website_examples.test.ospml fiber concurrency tests/regressions/db/database_effect.test.osp foreign C import `sqlite3_open` diff --git a/tests/effects/README.md b/tests/effects/README.md index ccf1876b..8ca6421f 100644 --- a/tests/effects/README.md +++ b/tests/effects/README.md @@ -36,6 +36,24 @@ Returning `42` here does **not** stop `load`. It supplies a value and lets that rule across nested policies, repeated failures, handler-owned state, multiple result types, recursion and outer effects. +Because `handle … in` is an expression, the policy does not have to be written +where the logic is. A function that returns one is an implementation the caller +passes in: + +```osprey +fn withDiskStorage(action) = handle Storage + save key contents => writeFile(key, contents) ?: 0 + load key => readFile(key) ?: "" +in action() +``` + +The same logic then runs against the real file system, against an in-memory +test double that records every call, or against a policy that refuses to write +— chosen at the call site, with no change to the code performing the +operations. The paired [injection suites](injection/README.md) hold that +pattern end to end, including the mock verification a file system cannot +offer. + ### Explicit resume and early exit If any arm in a handler region contains `resume`, Osprey runs the handled code diff --git a/tests/effects/injection/README.md b/tests/effects/injection/README.md new file mode 100644 index 00000000..52eb450d --- /dev/null +++ b/tests/effects/injection/README.md @@ -0,0 +1,62 @@ +# Injected implementations + +A handler is not where the implementation has to be written. `handle … in` is +an expression, so a function that returns one is a policy you pass around: +the code under test performs an operation, and the caller decides which +implementation answers it. + +`storage_injection.test.{osp,ospml}` is the whole pattern in one program. +The logic is written once against a `Storage` effect, and three separate +implementations are handed to it without the logic changing, recompiling, or +knowing which one it got: + +| Implementation | Installed by | What the arms do | +| --- | --- | --- | +| Real file system | `withDiskStorage` | `writeFile` / `readFile` | +| Test double | `withMockStorage` | An in-memory `Map`, plus call counters and an ordered call log | +| Read-only policy | `withReadOnlyStorage` | Refuses every write and serves one fixed entry | + +```osprey +// The logic performs the operation and names no implementation. +fn appendNote(book, line) !Storage = { + let updated = "${perform Storage.load(book)}${line}\n" + let _ = perform Storage.save(book, updated) + entryCount(updated) +} + +// The caller chooses one, per call. +let live = withDiskStorage(|| => appendNote("notes.txt", "buy milk")) +let mocked = withMockStorage(|| => appendNote("notes.txt", "buy milk")) +``` + +The suite asserts the two runs answer identically, that the disk run really +wrote the bytes (they are read back with `readFile` from outside the handler), +and that the mocked run touched no file system at all — `readFile` on the +mock's paths still reports `No such file or directory`. + +## Verifying calls, not just answers + +Handler arms are the only place state may be mutated, which makes the test +double the natural place to record what the logic asked for. The mock counts +each operation and appends to a call log, so the suite pins the exact sequence: + +``` +load(notes.txt);save(notes.txt,9);load(notes.txt);save(notes.txt,22);… +``` + +That is the verification a real file system cannot offer, and it is what makes +the double a mock rather than a stub: the assertions cover the calls the logic +made, their order, their arguments, and the count of each. + +## Why the effect is the seam + +Nothing is threaded through the logic to make this work — no handle parameter, +no interface record, no constructor. `appendNote` and `countNotes` name +`Storage` in their effect row and the compiler refuses to let either reach +program entry without a handler that discharges it, so the seam is checked +rather than conventional. Swapping the implementation is swapping the caller's +one word: `withDiskStorage` becomes `withMockStorage`. + +These handlers are direct-substitution handlers — no arm calls `resume` — so +each arm's value simply becomes the operation's result and the caller carries +on. See the [effects overview](../README.md) for the resuming form. diff --git a/tests/effects/injection/storage_injection.test.osp b/tests/effects/injection/storage_injection.test.osp new file mode 100644 index 00000000..c74266f6 --- /dev/null +++ b/tests/effects/injection/storage_injection.test.osp @@ -0,0 +1,218 @@ +/// Storage names the persistence the notebook logic needs and nothing more. +/// No implementation appears here: `save`, `load` and `exists` are answered +/// by whoever installs the handler, so the logic compiles once and runs unchanged +/// against the real file system, against an in-memory test double, and against +/// a policy that refuses to write at all. +effect Storage { + /// Persist `contents` under `key`; answers the byte count stored. + save: fn(string, string) -> int + /// Load whatever `key` holds; a key holding nothing answers "". + load: fn(string) -> string + /// Report whether `key` currently holds anything. + exists: fn(string) -> bool +} + +/// Counts the newline-terminated entries in a notebook body. +fn entryCount(body) = match isEmpty(body) { + true => 0 + false => listLength(lines(trimEnd(body))) +} + +/// Appends one entry to `book` and answers the entry count after the write. +/// This is the logic under test: it performs Storage and picks no handler. +fn appendNote(book, line) !Storage = { + let updated = "${perform Storage.load(book)}${line}\n" + let _ = perform Storage.save(book, updated) + entryCount(updated) +} + +/// Answers the entries in `book`, or 0 when the book was never started. +fn countNotes(book) !Storage = match perform Storage.exists(book) { + true => entryCount(perform Storage.load(book)) + false => 0 +} + +/// Copies `book` into `archive` and answers the bytes the copy reported. +/// A book that does not exist is not copied and answers 0 bytes. +fn archiveNotes(book, archive) !Storage = match perform Storage.exists(book) { + true => perform Storage.save(archive, perform Storage.load(book)) + false => 0 +} + +/// The production implementation, passed in as a handler: every operation +/// reaches the real file system through the file builtins. +fn withDiskStorage(action) = handle Storage + save key contents => writeFile(key, contents) ?: 0 + load key => readFile(key) ?: "" + exists key => match readFile(key) { + Success { value } => !isEmpty(value) + Error { message } => false + } +in action() + +/// The test double's disk: a map that never reaches a file system, seeded +/// with one fixture entry no real file system holds. +mut mockFiles = mapSet(Map(), "fixture.txt", "seeded entry\n") +/// Call records the disk handler cannot offer, one per operation. +mut mockSaves = 0 +mut mockLoads = 0 +mut mockExistsCalls = 0 +/// The ordered call log, which is what a mock is verified against. +mut mockLog = "" + +/// The test implementation, passed in exactly like the production one. Handler +/// arms are the only place state may be mutated, so the double records every +/// call it answers. +fn withMockStorage(action) = handle Storage + save key contents => { + mockSaves = mockSaves + 1 ?: mockSaves + mockLog = "${mockLog}save(${key},${toString(byteLength(contents))});" + mockFiles = mapSet(mockFiles, key, contents) + byteLength(contents) + } + load key => { + mockLoads = mockLoads + 1 ?: mockLoads + mockLog = "${mockLog}load(${key});" + mapGet(mockFiles, key) ?: "" + } + exists key => { + mockExistsCalls = mockExistsCalls + 1 ?: mockExistsCalls + mockLog = "${mockLog}exists(${key});" + mapContains(mockFiles, key) + } +in action() + +/// A third implementation: a read-only policy that accepts no write and serves +/// one fixed entry. The logic is not recompiled, edited or told about it. +fn withReadOnlyStorage(action) = handle Storage + save key contents => 0 + load key => "locked entry\n" + exists key => true +in action() + +/// A fresh 126-bit random suffix isolates concurrent executions of either flavor. +let diskBook = "osprey_storage_injection_${random()}_${random()}.txt" +let diskArchive = "${diskBook}.archive.txt" + +/// This case runs the logic against the real file system and verifies the +/// bytes with `readFile` from outside the handler. +fn diskStorageCase() = { + /// Truncate both paths so a rerun starts from the same file system state. + let clearedBook = writeFile(diskBook, "") ?: (0 - 1 ?: 0) + let clearedArchive = writeFile(diskArchive, "") ?: (0 - 1 ?: 0) + let first = withDiskStorage(|| => appendNote(diskBook, "buy milk")) + let second = withDiskStorage(|| => appendNote(diskBook, "call dentist")) + let counted = withDiskStorage(|| => countNotes(diskBook)) + let archived = withDiskStorage(|| => archiveNotes(diskBook, diskArchive)) + let onDisk = readFile(diskBook) ?: "" + let archivedOnDisk = readFile(diskArchive) ?: "" + let missing = withDiskStorage(|| => countNotes("osprey_storage_injection_absent.txt")) + + // The logic's answers come back through the injected disk implementation. + checkAll("disk implementation answers", [ + clearedBook == 0, + clearedArchive == 0, + first == 1, + second == 2, + counted == 2, + archived == byteLength(onDisk), + missing == 0 + ]) + + // The file system really was written: these bytes are read back directly. + checkAll("disk implementation side effects", [ + onDisk == "buy milk\ncall dentist\n", + archivedOnDisk == onDisk, + byteLength(onDisk) == 22, + contains(onDisk, "buy milk\n"), + endsWith(onDisk, "call dentist\n"), + entryCount(onDisk) == 2 + ]) +} + +// Register the production implementation against the real file system. +test("injected disk handler persists the notebook to real files", diskStorageCase) + +/// This case runs the identical logic against the in-memory double and +/// verifies both the answers and the calls the logic made. +fn mockStorageCase() = { + let first = withMockStorage(|| => appendNote("notes.txt", "buy milk")) + let second = withMockStorage(|| => appendNote("notes.txt", "call dentist")) + let counted = withMockStorage(|| => countNotes("notes.txt")) + let archived = withMockStorage(|| => archiveNotes("notes.txt", "archive.txt")) + let missing = withMockStorage(|| => countNotes("never-written.txt")) + let fixture = withMockStorage(|| => countNotes("fixture.txt")) + let stored = mapGet(mockFiles, "notes.txt") ?: "" + + // Every answer matches the disk run above: same logic, same results. + checkAll("mock answers match the disk implementation", [ + first == 1, + second == 2, + counted == 2, + archived == 22, + missing == 0, + fixture == 1, + stored == "buy milk\ncall dentist\n", + (mapGet(mockFiles, "archive.txt") ?: "") == stored + ]) + + // Verification a real file system cannot offer: which calls were made. + checkAll("mock recorded every call", [ + mockSaves == 3, + mockLoads == 5, + mockExistsCalls == 4, + mapLength(mockFiles) == 3, + !mapContains(mockFiles, "never-written.txt"), + mockLog == "load(notes.txt);save(notes.txt,9);load(notes.txt);save(notes.txt,22);exists(notes.txt);load(notes.txt);exists(notes.txt);load(notes.txt);save(archive.txt,22);exists(never-written.txt);exists(fixture.txt);load(fixture.txt);", + startsWith(mockLog, "load(notes.txt);save(notes.txt,9);"), + contains(mockLog, "save(archive.txt,22);"), + endsWith(mockLog, "load(fixture.txt);") + ]) + + /// The double touched no file system: nothing named by the test exists. + let notesAbsent = match readFile("notes.txt") { + Success { value } => false + Error { message } => contains(message, "No such file or directory") + } + let archiveAbsent = match readFile("archive.txt") { + Success { value } => false + Error { message } => contains(message, "readFile") + } + checkAll("mock touched no file system", [ + notesAbsent, + archiveAbsent + ]) +} + +// Register the test double standing in for the file system. +test("injected mock handler replaces the file system and records every call", mockStorageCase) + +/// This case swaps in a third policy to show the logic is unchanged by it. +fn readOnlyStorageCase() = { + let savesBefore = mockSaves + let appended = withReadOnlyStorage(|| => appendNote("notes.txt", "buy milk")) + let counted = withReadOnlyStorage(|| => countNotes("notes.txt")) + let archived = withReadOnlyStorage(|| => archiveNotes("notes.txt", "archive.txt")) + + // A refused write still answers the operation's declared type, so the + // logic keeps running and reports what the policy actually stored. + checkAll("read-only policy answers", [ + appended == 2, + counted == 1, + archived == 0, + entryCount("locked entry\n") == 1 + ]) + + // Swapping the handler swapped the implementation and nothing else: the + // mock's records and the earlier disk file are untouched by this run. + checkAll("policies stay isolated", [ + mockSaves == savesBefore, + mockSaves == 3, + (mapGet(mockFiles, "notes.txt") ?: "") == "buy milk\ncall dentist\n", + !contains(mockLog, "locked"), + (readFile(diskBook) ?: "") == "buy milk\ncall dentist\n" + ]) +} + +// Register the third policy, proving the logic depends on none of them. +test("swapping the injected handler swaps the policy, not the logic", readOnlyStorageCase) diff --git a/tests/effects/injection/storage_injection.test.osp.expectedoutput b/tests/effects/injection/storage_injection.test.osp.expectedoutput new file mode 100644 index 00000000..35b0dc4e --- /dev/null +++ b/tests/effects/injection/storage_injection.test.osp.expectedoutput @@ -0,0 +1,5 @@ +ok 1 - injected disk handler persists the notebook to real files +ok 2 - injected mock handler replaces the file system and records every call +ok 3 - swapping the injected handler swaps the policy, not the logic +1..3 +# tests=3 passed=3 failed=0 skipped=0 diff --git a/tests/effects/injection/storage_injection.test.ospml b/tests/effects/injection/storage_injection.test.ospml new file mode 100644 index 00000000..342afc54 --- /dev/null +++ b/tests/effects/injection/storage_injection.test.ospml @@ -0,0 +1,210 @@ +(** Storage names the persistence the notebook logic needs and nothing more. + No implementation appears here: `save`, `load` and `exists` are answered + by whoever installs the handler, so the logic compiles once and runs unchanged + against the real file system, against an in-memory test double, and against + a policy that refuses to write at all. *) +effect Storage + (** Persist `contents` under `key`; answers the byte count stored. *) + save : (string, string) => int + (** Load whatever `key` holds; a key holding nothing answers "". *) + load : string => string + (** Report whether `key` currently holds anything. *) + exists : string => bool + +(** Counts the newline-terminated entries in a notebook body. *) +entryCount body = + match isEmpty body + true => 0 + false => listLength (lines (trimEnd body)) + +(** Appends one entry to `book` and answers the entry count after the write. + This is the logic under test: it performs Storage and picks no handler. *) +appendNote (book, line) = + updated = "${perform Storage.load book}${line}\n" + _ = perform Storage.save book updated + entryCount updated + +(** Answers the entries in `book`, or 0 when the book was never started. *) +countNotes book = + match perform Storage.exists book + true => entryCount (perform Storage.load book) + false => 0 + +(** Copies `book` into `archive` and answers the bytes the copy reported. + A book that does not exist is not copied and answers 0 bytes. *) +archiveNotes (book, archive) = + match perform Storage.exists book + true => perform Storage.save archive (perform Storage.load book) + false => 0 + +(** The production implementation, passed in as a handler: every operation + reaches the real file system through the file builtins. *) +withDiskStorage action = + handle Storage + save key contents => writeFile key contents ?: 0 + load key => readFile key ?: "" + exists key => + match readFile key + Success value => !(isEmpty value) + Error message => false + in action () + +(** The test double's disk: a map that never reaches a file system, seeded + with one fixture entry no real file system holds. *) +mut mockFiles = mapSet (Map ()) "fixture.txt" "seeded entry\n" +(** Call records the disk handler cannot offer, one per operation. *) +mut mockSaves = 0 +mut mockLoads = 0 +mut mockExistsCalls = 0 +(** The ordered call log, which is what a mock is verified against. *) +mut mockLog = "" + +(** The test implementation, passed in exactly like the production one. Handler + arms are the only place state may be mutated, so the double records every + call it answers. *) +withMockStorage action = + handle Storage + save key contents => + mockSaves := mockSaves + 1 ?: mockSaves + mockLog := "${mockLog}save(${key},${toString (byteLength contents)});" + mockFiles := mapSet mockFiles key contents + byteLength contents + load key => + mockLoads := mockLoads + 1 ?: mockLoads + mockLog := "${mockLog}load(${key});" + mapGet mockFiles key ?: "" + exists key => + mockExistsCalls := mockExistsCalls + 1 ?: mockExistsCalls + mockLog := "${mockLog}exists(${key});" + mapContains mockFiles key + in action () + +(** A third implementation: a read-only policy that accepts no write and serves + one fixed entry. The logic is not recompiled, edited or told about it. *) +withReadOnlyStorage action = + handle Storage + save key contents => 0 + load key => "locked entry\n" + exists key => true + in action () + +(** A fresh 126-bit random suffix isolates concurrent executions of either flavor. *) +diskBook = "osprey_storage_injection_${random ()}_${random ()}.txt" +diskArchive = "${diskBook}.archive.txt" + +(** This case runs the logic against the real file system and verifies the + bytes with `readFile` from outside the handler. *) +diskStorageCase () = + (** Truncate both paths so a rerun starts from the same file system state. *) + clearedBook = writeFile diskBook "" ?: (0 - 1 ?: 0) + clearedArchive = writeFile diskArchive "" ?: (0 - 1 ?: 0) + first = withDiskStorage (\() => appendNote (diskBook, "buy milk")) + second = withDiskStorage (\() => appendNote (diskBook, "call dentist")) + counted = withDiskStorage (\() => countNotes diskBook) + archived = withDiskStorage (\() => archiveNotes (diskBook, diskArchive)) + onDisk = readFile diskBook ?: "" + archivedOnDisk = readFile diskArchive ?: "" + missing = withDiskStorage (\() => countNotes "osprey_storage_injection_absent.txt") + + // The logic's answers come back through the injected disk implementation. + checkAll "disk implementation answers" [ + clearedBook == 0, + clearedArchive == 0, + first == 1, + second == 2, + counted == 2, + archived == byteLength onDisk, + missing == 0 + ] + + // The file system really was written: these bytes are read back directly. + checkAll "disk implementation side effects" [ + onDisk == "buy milk\ncall dentist\n", + archivedOnDisk == onDisk, + byteLength onDisk == 22, + contains onDisk "buy milk\n", + endsWith onDisk "call dentist\n", + entryCount onDisk == 2 + ] + +test "injected disk handler persists the notebook to real files" diskStorageCase + +(** This case runs the identical logic against the in-memory double and + verifies both the answers and the calls the logic made. *) +mockStorageCase () = + first = withMockStorage (\() => appendNote ("notes.txt", "buy milk")) + second = withMockStorage (\() => appendNote ("notes.txt", "call dentist")) + counted = withMockStorage (\() => countNotes "notes.txt") + archived = withMockStorage (\() => archiveNotes ("notes.txt", "archive.txt")) + missing = withMockStorage (\() => countNotes "never-written.txt") + fixture = withMockStorage (\() => countNotes "fixture.txt") + stored = mapGet mockFiles "notes.txt" ?: "" + + // Every answer matches the disk run above: same logic, same results. + checkAll "mock answers match the disk implementation" [ + first == 1, + second == 2, + counted == 2, + archived == 22, + missing == 0, + fixture == 1, + stored == "buy milk\ncall dentist\n", + (mapGet mockFiles "archive.txt" ?: "") == stored + ] + + // Verification a real file system cannot offer: which calls were made. + checkAll "mock recorded every call" [ + mockSaves == 3, + mockLoads == 5, + mockExistsCalls == 4, + mapLength mockFiles == 3, + !(mapContains mockFiles "never-written.txt"), + mockLog == "load(notes.txt);save(notes.txt,9);load(notes.txt);save(notes.txt,22);exists(notes.txt);load(notes.txt);exists(notes.txt);load(notes.txt);save(archive.txt,22);exists(never-written.txt);exists(fixture.txt);load(fixture.txt);", + startsWith mockLog "load(notes.txt);save(notes.txt,9);", + contains mockLog "save(archive.txt,22);", + endsWith mockLog "load(fixture.txt);" + ] + + (** The double touched no file system: nothing named by the test exists. *) + notesAbsent = + match readFile "notes.txt" + Success value => false + Error message => contains message "No such file or directory" + archiveAbsent = + match readFile "archive.txt" + Success value => false + Error message => contains message "readFile" + checkAll "mock touched no file system" [ + notesAbsent, + archiveAbsent + ] + +test "injected mock handler replaces the file system and records every call" mockStorageCase + +(** This case swaps in a third policy to show the logic is unchanged by it. *) +readOnlyStorageCase () = + savesBefore = mockSaves + appended = withReadOnlyStorage (\() => appendNote ("notes.txt", "buy milk")) + counted = withReadOnlyStorage (\() => countNotes "notes.txt") + archived = withReadOnlyStorage (\() => archiveNotes ("notes.txt", "archive.txt")) + + // A refused write still answers the operation's declared type, so the + // logic keeps running and reports what the policy actually stored. + checkAll "read-only policy answers" [ + appended == 2, + counted == 1, + archived == 0, + entryCount "locked entry\n" == 1 + ] + + // Swapping the handler swapped the implementation and nothing else: the + // mock's records and the earlier disk file are untouched by this run. + checkAll "policies stay isolated" [ + mockSaves == savesBefore, + mockSaves == 3, + (mapGet mockFiles "notes.txt" ?: "") == "buy milk\ncall dentist\n", + !(contains mockLog "locked"), + (readFile diskBook ?: "") == "buy milk\ncall dentist\n" + ] + +test "swapping the injected handler swaps the policy, not the logic" readOnlyStorageCase diff --git a/tests/regressions/basics/types/channel_element_type_in_generic_field.test.osp b/tests/regressions/basics/types/channel_element_type_in_generic_field.test.osp new file mode 100644 index 00000000..3e011cc9 --- /dev/null +++ b/tests/regressions/basics/types/channel_element_type_in_generic_field.test.osp @@ -0,0 +1,22 @@ +/// A channel stored in a generic record field retains its nested element type. +/// This previously misread the received row and printed 0 instead of 3. +/// [CONCURRENCY-CHANNEL] +type Box = Box { slot: t } + +let boxed = Box { slot: Channel(2) } +send(boxed.slot, [[1, 2, 3]]) +let m = recv(boxed.slot) +print(toString(listLength(listGet(m, 0) ?: [99]))) + +/// Verifies both list levels survive the generic field and channel transfer. +fn channelElementCase() = { + let row = listGet(m, 0) ?: [99] + checkAll("channel element metadata survives a generic record field", [ + listLength(m) == 1, + listLength(row) == 3, + (listGet(row, 0) ?: 99) == 1, + (listGet(row, 1) ?: 99) == 2, + (listGet(row, 2) ?: 99) == 3 + ]) +} +test("generic record fields preserve nested channel elements", channelElementCase) diff --git a/tests/regressions/basics/types/channel_element_type_in_generic_field.test.osp.expectedoutput b/tests/regressions/basics/types/channel_element_type_in_generic_field.test.osp.expectedoutput new file mode 100644 index 00000000..c7fcefb7 --- /dev/null +++ b/tests/regressions/basics/types/channel_element_type_in_generic_field.test.osp.expectedoutput @@ -0,0 +1,4 @@ +3 +ok 1 - generic record fields preserve nested channel elements +1..1 +# tests=1 passed=1 failed=0 skipped=0 diff --git a/tests/regressions/basics/types/recursive_generic_specialization.test.osp b/tests/regressions/basics/types/recursive_generic_specialization.test.osp new file mode 100644 index 00000000..c58fd34f --- /dev/null +++ b/tests/regressions/basics/types/recursive_generic_specialization.test.osp @@ -0,0 +1,24 @@ +/// An inferred recursive function specializes at each call's element type. +/// The self-call must resolve to the matching emitted specialization. +fn walk(xs, n) = match n { + 0 => xs + _ => walk(listReverse(xs), (n - 1) ?: 0) +} + +print("${listLength(walk([5, 6, 7], 2))} ${listLength(walk(["a", "b"], 1))}") + +/// Verifies recursive integer and string specializations retain their contents. +fn recursiveGenericCase() = { + let ints = walk([5, 6, 7], 2) + let strings = walk(["a", "b"], 1) + checkAll("recursive generic calls specialize without annotations", [ + listLength(ints) == 3, + (listGet(ints, 0) ?: 0) == 5, + (listGet(ints, 1) ?: 0) == 6, + (listGet(ints, 2) ?: 0) == 7, + listLength(strings) == 2, + (listGet(strings, 0) ?: "") == "b", + (listGet(strings, 1) ?: "") == "a" + ]) +} +test("recursive generic functions specialize for integers and strings", recursiveGenericCase) diff --git a/tests/regressions/basics/types/recursive_generic_specialization.test.osp.expectedoutput b/tests/regressions/basics/types/recursive_generic_specialization.test.osp.expectedoutput new file mode 100644 index 00000000..c6be4a0c --- /dev/null +++ b/tests/regressions/basics/types/recursive_generic_specialization.test.osp.expectedoutput @@ -0,0 +1,4 @@ +3 2 +ok 1 - recursive generic functions specialize for integers and strings +1..1 +# tests=1 passed=1 failed=0 skipped=0 diff --git a/tests/regressions/basics/types/type_equality_comprehensive.test.osp b/tests/regressions/basics/types/type_equality_comprehensive.test.osp index b4e24e5d..74d0bf33 100644 --- a/tests/regressions/basics/types/type_equality_comprehensive.test.osp +++ b/tests/regressions/basics/types/type_equality_comprehensive.test.osp @@ -112,6 +112,49 @@ fn mkGate() -> Gate<(int) -> Result> = Gate { admit: |f| => true print("fn-payload feed accepted: ${label(mkFeed())}") print("fn-payload gate accepted: ${describe(mkGate())}") +/// --- Variance positions: every legal shape, exercised end to end --- +/// `out T` sits in a field, a function RESULT and a covariant built-in; +/// `in T` sits in function parameters, including a callback result; an unannotated +/// parameter sits in both at once. Each value is then USED, so a position that +/// merely compiled but lowered wrongly is caught as well as one that was +/// wrongly rejected. Assignment keeps the leaves exact under every marker — +/// the refusals are in examples/failscompilation/variance_*.ospo. +/// Implements [TYPE-VARIANCE-POSITIONS], [TYPE-VARIANCE-COERCION] +type Source = Source { produce: T, make: (int) -> T, items: List } +type Sink = Sink { admit: (T) -> bool, hof: ((int) -> T) -> int } +type Both = Both { slot: T, consume: (T) -> int } + +fn srcInt() -> Source = Source { produce: 4, make: |n| => n, items: [1, 2] } +fn sinkInt() -> Sink = Sink { admit: |x| => true, hof: |f| => 7 } +fn bothInt() -> Both = Both { slot: 5, consume: |x| => 6 } +fn keepSource(s) = s.produce +fn keepSink(g) = g.hof(|n| => 3) + +print("variance produce=${srcInt().produce} make=${srcInt().make(9)} items=${length(srcInt().items)} admit=${toString(sinkInt().admit(1))} slot=${bothInt().slot} kept=${keepSource(srcInt())}/${keepSink(sinkInt())}") + +/// --- Call-site type application: pinning an instantiation in the source --- +/// A written type-argument list pins the callee's declared binders left to +/// right and is checked against what the value arguments infer. `emptyOf`'s +/// binder appears in NO parameter position, so nothing but the written +/// argument can pin it, and `identityOf>` closes two argument lists +/// with one `>>`. Implements [TYPE-GENERICS-APPLY] +fn identityOf(x: T) -> T = x +fn emptyOf() -> List = [] +fn pickOf(first: T, second: U) -> T = first +fn alsoOf(x: T, f: (T) -> T) -> T = f(x) +fn headOr(items: List, fallback: T) -> T = items.listGet(0) ?: fallback +fn repeatOf(value: T, times: int) -> T = match times { + 0 => value + _ => repeatOf(value, times - 1 ?: 0) +} + +let appliedInt = identityOf(5) +let appliedText = identityOf("os") +let appliedNested = length(identityOf>([1, 2])) +let appliedEmpty = length(emptyOf()) +let appliedPair = pickOf(7, "seven") +print("applied int=${appliedInt} text=${appliedText} nested=${appliedNested} empty=${appliedEmpty} pair=${appliedPair}") + print("=== TYPE EQUALITY COMPLETE ===") /// Verifies generic records, function shapes, union tags, and variant payload types. @@ -138,7 +181,42 @@ fn typeEqualityCase() = { !(sameColor(a: Red, b: Blue)), colorName(Green) == "green", label(mkFeed()) == "supplied", - describe(mkGate()) == "guarded" + describe(mkGate()) == "guarded", + identityOf(5) == 5, + identityOf("os") == "os", + length(identityOf>([1, 2])) == 2, + length(emptyOf()) == 0, + pickOf(7, "seven") == 7, + identityOf(true), + !identityOf(false), + identityOf(2.5) == 2.5, + length(identityOf>(["a", "b"])) == 2, + mapLength(identityOf>>({ "a": [1], "b": [2] })) == 2, + identityOf>(Container { value: 9 }).value == 9, + identityOf>(Container { value: "c" }).value == "c", + isEmpty(emptyOf()), + pickOf("first", 2) == "first", + pickOf(3, 4) == 3, + alsoOf(21, timesTwo) == 42, + identityOf<(int) -> int>(timesTwo)(21) == 42, + applyInt(f: identityOf<(int) -> int>(addOne), x: 9) == 10, + [4, 5].headOr(0) == 4, + headOr([], 9) == 9, + headOr(["a"], "z") == "a", + repeatOf(7, 3) == 7, + repeatOf("os", 2) == "os", + (identityOf>(20 * 5) ?: 0) == 100, + identityOf(identityOf(6)) == 6, + srcInt().produce == 4, + srcInt().make(9) == 9, + length(srcInt().items) == 2, + (srcInt().items.listGet(1) ?: 0) == 2, + sinkInt().admit(1), + sinkInt().hof(|n| => 3) == 7, + bothInt().slot == 5, + bothInt().consume(1) == 6, + keepSource(srcInt()) == 4, + keepSink(sinkInt()) == 7 ]) } test("equivalent type shapes compose while union tags remain distinct", typeEqualityCase) diff --git a/tests/regressions/basics/types/type_equality_comprehensive.test.osp.expectedoutput b/tests/regressions/basics/types/type_equality_comprehensive.test.osp.expectedoutput index b615c5df..0bc1fe0f 100644 --- a/tests/regressions/basics/types/type_equality_comprehensive.test.osp.expectedoutput +++ b/tests/regressions/basics/types/type_equality_comprehensive.test.osp.expectedoutput @@ -25,6 +25,8 @@ sameRR=true sameRB=false fn-payload feed accepted: supplied fn-payload gate accepted: guarded +variance produce=4 make=9 items=2 admit=true slot=5 kept=4/7 +applied int=5 text=os nested=2 empty=0 pair=7 === TYPE EQUALITY COMPLETE === ok 1 - equivalent type shapes compose while union tags remain distinct 1..1 diff --git a/tests/regressions/basics/types/type_equality_comprehensive.test.ospml b/tests/regressions/basics/types/type_equality_comprehensive.test.ospml index 8db81707..84d7b43b 100644 --- a/tests/regressions/basics/types/type_equality_comprehensive.test.ospml +++ b/tests/regressions/basics/types/type_equality_comprehensive.test.ospml @@ -136,6 +136,64 @@ mkGate () = Gate(admit = \f => true) print "fn-payload feed accepted: ${label (mkFeed ())}" print "fn-payload gate accepted: ${describe (mkGate ())}" +(** --- Variance positions: every legal shape, exercised end to end --- + `out T` sits in a field, a function RESULT and a covariant built-in; + `in T` sits in function parameters, including a callback result; an unannotated + parameter sits in both at once. Each value is then USED, so a position that + merely compiled but lowered wrongly is caught as well as one that was + wrongly rejected. Assignment keeps the leaves exact under every marker. + Implements [TYPE-VARIANCE-POSITIONS], [TYPE-VARIANCE-COERCION], + [FLAVOR-ML-GENERICS] *) +type Source out T = + produce : T + make : (int) -> T + items : List +type Sink in T = + admit : (T) -> bool + hof : ((int) -> T) -> int +type Both T = + slot : T + consume : (T) -> int + +srcInt : Unit -> Source +srcInt () = Source(produce = 4, make = \n => n, items = [1, 2]) +sinkInt : Unit -> Sink +sinkInt () = Sink(admit = \x => true, hof = \f => 7) +bothInt : Unit -> Both +bothInt () = Both(slot = 5, consume = \x => 6) +keepSource s = s.produce +keepSink g = g.hof (\n => 3) + +print "variance produce=${(srcInt ()).produce} make=${(srcInt ()).make 9} items=${length (srcInt ()).items} admit=${toString ((sinkInt ()).admit 1)} slot=${(bothInt ()).slot} kept=${keepSource (srcInt ())}/${keepSink (sinkInt ())}" + +(** --- Call-site type application: pinning an instantiation in the source --- + A written type-argument list pins the callee's declared binders left to + right and is checked against what the value arguments infer. `emptyOf`'s + binder appears in NO parameter position, so nothing but the written + argument can pin it, and `identityOf>` closes two argument lists + with one `>>`. Implements [TYPE-GENERICS-APPLY], [FLAVOR-ML-GENERICS] *) +identityOf : T -> T +identityOf x = x +emptyOf : Unit -> List +emptyOf () = [] +pickOf : (T, U) -> T +pickOf (first, second) = first +alsoOf : (T, (T) -> T) -> T +alsoOf (x, f) = f x +headOr : (List, T) -> T +headOr (items, fallback) = listGet items 0 ?: fallback +repeatOf : (T, int) -> T +repeatOf (value, times) = match times + 0 => value + _ => repeatOf (value, times - 1 ?: 0) + +appliedInt = identityOf 5 +appliedText = identityOf "os" +appliedNested = length (identityOf> [1, 2]) +appliedEmpty = length (emptyOf ()) +appliedPair = pickOf (7, "seven") +print "applied int=${appliedInt} text=${appliedText} nested=${appliedNested} empty=${appliedEmpty} pair=${appliedPair}" + print "=== TYPE EQUALITY COMPLETE ===" (** Verify generic records, function shapes, union tags, and variant payload types. *) @@ -162,6 +220,41 @@ typeEqualityCase () = !(sameColor (Red, Blue)), colorName Green == "green", label (mkFeed ()) == "supplied", - describe (mkGate ()) == "guarded" + describe (mkGate ()) == "guarded", + identityOf 5 == 5, + identityOf "os" == "os", + length (identityOf> [1, 2]) == 2, + length (emptyOf ()) == 0, + pickOf (7, "seven") == 7, + identityOf true, + !(identityOf false), + identityOf 2.5 == 2.5, + length (identityOf> ["a", "b"]) == 2, + mapLength (identityOf>> ["a" => [1], "b" => [2]]) == 2, + (identityOf> (Container(value = 9))).value == 9, + (identityOf> (Container(value = "c"))).value == "c", + isEmpty (emptyOf ()), + pickOf ("first", 2) == "first", + pickOf (3, 4) == 3, + alsoOf (21, timesTwo) == 42, + (identityOf<(int) -> int> timesTwo) 21 == 42, + applyInt (identityOf<(int) -> int> addOne, 9) == 10, + ([4, 5] |> headOr 0) == 4, + headOr ([], 9) == 9, + headOr (["a"], "z") == "a", + repeatOf (7, 3) == 7, + repeatOf ("os", 2) == "os", + (identityOf> (20 * 5) ?: 0) == 100, + identityOf (identityOf 6) == 6, + (srcInt ()).produce == 4, + (srcInt ()).make 9 == 9, + length (srcInt ()).items == 2, + (listGet (srcInt ()).items 1 ?: 0) == 2, + (sinkInt ()).admit 1, + (sinkInt ()).hof (\n => 3) == 7, + (bothInt ()).slot == 5, + (bothInt ()).consume 1 == 6, + keepSource (srcInt ()) == 4, + keepSink (sinkInt ()) == 7 ] test "equivalent type shapes compose while union tags remain distinct" typeEqualityCase diff --git a/tree-sitter-osprey/grammar.js b/tree-sitter-osprey/grammar.js index c885df7b..7a3f5739 100644 --- a/tree-sitter-osprey/grammar.js +++ b/tree-sitter-osprey/grammar.js @@ -46,7 +46,7 @@ module.exports = grammar({ // statements, so `let r = add 2 3` silently split into // `let r = add` plus the orphans `2` and `3` // [LEX-STATEMENT-BREAK]. - externals: ($) => [$._call_open_gap, $._statement_break], + externals: ($) => [$._call_open_gap, $._statement_break, $._type_application_ahead], conflicts: ($) => [ // `abort` / `once` / `many` / `replayable` opening an operation line are @@ -439,7 +439,7 @@ module.exports = grammar({ // and `Signal` are different effects to a row, so they are different // effects to a handler. Implements [STAGE-SIGNALS-EXACT]. handler_expression: ($) => - prec.right(seq('handle', optional(field('stage', $.static_stage)), field('effect', choice($.qualified_path, $.identifier)), optional(field('instantiation', $.type_arguments)), repeat1($.handler_arm), 'in', field('body', $.expression))), + prec.right(seq('handle', optional(field('stage', $.static_stage)), field('effect', choice($.qualified_path, $.identifier)), optional(field('instantiation', $.type_arguments)), repeat1($.handler_arm), choice('in', 'do'), field('body', $.expression))), handler_arm: ($) => seq(field('operation', $.identifier), optional($.handler_params), '=>', field('body', $.expression)), handler_params: ($) => repeat1($.identifier), @@ -523,6 +523,10 @@ module.exports = grammar({ // arm's `(a, b)` tuple pattern instead. Implements [PATTERN-TUPLE] // coexistence with postfix calls. seq($._call_open_gap, '(', optional($.argument_list), ')'), + // [TYPE-GENERICS-APPLY]: both delimiters abut the call. Alias the + // immediate opening form to the shared construction-site CST. + seq(field('type_arguments', alias($._call_type_arguments, $.type_arguments)), + token.immediate('('), optional($.argument_list), ')'), // The index `[` must IMMEDIATELY follow its target — a stricter rule // than the call's same-line one, and deliberately so. List-pattern // arms are written on ONE line in real source: @@ -583,6 +587,9 @@ module.exports = grammar({ type_constructor: ($) => prec.dynamic(1, seq(field('name', choice($.qualified_path, $.identifier)), optional($.type_arguments), '{', $.field_assignments, '}')), type_arguments: ($) => seq('<', $.type_list, '>'), + _call_type_arguments: ($) => seq($._type_application_ahead, token.immediate('<'), alias($._call_type_list, $.type_list), '>'), + // Keep misplaced declaration markers visible for a precise diagnostic. + _call_type_list: ($) => sep1(',', seq(optional(field('variance', choice('in', 'out'))), $._type)), update_expression: ($) => prec.dynamic(0, seq(field('record', $.identifier), '{', $.field_assignments, '}')), diff --git a/tree-sitter-osprey/src/grammar.json b/tree-sitter-osprey/src/grammar.json index a1e9d0e0..4e2fcc9c 100644 --- a/tree-sitter-osprey/src/grammar.json +++ b/tree-sitter-osprey/src/grammar.json @@ -2029,8 +2029,17 @@ } }, { - "type": "STRING", - "value": "in" + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "in" + }, + { + "type": "STRING", + "value": "do" + } + ] }, { "type": "FIELD", @@ -2905,6 +2914,47 @@ } ] }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "type_arguments", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_call_type_arguments" + }, + "named": true, + "value": "type_arguments" + } + }, + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "STRING", + "value": "(" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "argument_list" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, { "type": "SEQ", "members": [ @@ -3387,6 +3437,120 @@ } ] }, + "_call_type_arguments": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_type_application_ahead" + }, + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "STRING", + "value": "<" + } + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_call_type_list" + }, + "named": true, + "value": "type_list" + }, + { + "type": "STRING", + "value": ">" + } + ] + }, + "_call_type_list": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "variance", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "in" + }, + { + "type": "STRING", + "value": "out" + } + ] + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "variance", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "in" + }, + { + "type": "STRING", + "value": "out" + } + ] + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + ] + } + } + ] + }, "update_expression": { "type": "PREC_DYNAMIC", "value": 0, @@ -5123,6 +5287,10 @@ { "type": "SYMBOL", "name": "_statement_break" + }, + { + "type": "SYMBOL", + "name": "_type_application_ahead" } ], "inline": [], diff --git a/tree-sitter-osprey/src/node-types.json b/tree-sitter-osprey/src/node-types.json index d3158c80..2f53840e 100644 --- a/tree-sitter-osprey/src/node-types.json +++ b/tree-sitter-osprey/src/node-types.json @@ -242,6 +242,16 @@ "named": true } ] + }, + "type_arguments": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_arguments", + "named": true + } + ] } }, "children": { @@ -2955,7 +2965,22 @@ { "type": "type_list", "named": true, - "fields": {}, + "fields": { + "variance": { + "multiple": true, + "required": false, + "types": [ + { + "type": "in", + "named": false + }, + { + "type": "out", + "named": false + } + ] + } + }, "children": { "multiple": true, "required": true, @@ -3301,6 +3326,10 @@ "type": "await", "named": false }, + { + "type": "do", + "named": false + }, { "type": "effect", "named": false diff --git a/tree-sitter-osprey/src/parser.c b/tree-sitter-osprey/src/parser.c index 514fce01..61d1457d 100644 --- a/tree-sitter-osprey/src/parser.c +++ b/tree-sitter-osprey/src/parser.c @@ -5,15 +5,15 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 1725 +#define STATE_COUNT 1754 #define LARGE_STATE_COUNT 21 -#define SYMBOL_COUNT 214 +#define SYMBOL_COUNT 221 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 83 -#define EXTERNAL_TOKEN_COUNT 2 -#define FIELD_COUNT 48 +#define TOKEN_COUNT 87 +#define EXTERNAL_TOKEN_COUNT 3 +#define FIELD_COUNT 49 #define MAX_ALIAS_SEQUENCE_LENGTH 14 -#define PRODUCTION_ID_COUNT 192 +#define PRODUCTION_ID_COUNT 199 enum ts_symbol_identifiers { sym_identifier = 1, @@ -58,177 +58,184 @@ enum ts_symbol_identifiers { anon_sym_if = 40, anon_sym_else = 41, anon_sym_handle = 42, - anon_sym_kernel = 43, - anon_sym_select = 44, - anon_sym_QMARK = 45, - anon_sym_PIPE_PIPE = 46, - anon_sym_AMP_AMP = 47, - anon_sym_EQ_EQ = 48, - anon_sym_BANG_EQ = 49, - anon_sym_LT_EQ = 50, - anon_sym_GT_EQ = 51, - anon_sym_PLUS = 52, - anon_sym_DASH = 53, - anon_sym_SLASH = 54, - anon_sym_PERCENT = 55, - anon_sym_await = 56, - anon_sym_PIPE_GT = 57, - anon_sym_LBRACK2 = 58, - anon_sym_spawn = 59, - anon_sym_yield = 60, - anon_sym_send = 61, - anon_sym_recv = 62, - anon_sym_perform = 63, - anon_sym_resume = 64, - anon_sym_DOT_DOT = 65, - anon_sym_DOT_DOT_DOT = 66, - anon_sym_state = 67, - anon_sym_module = 68, - anon_sym_extra = 69, - anon_sym_export = 70, - anon_sym_opaque = 71, - anon_sym_signature = 72, - anon_sym_true = 73, - anon_sym_false = 74, - sym_float = 75, - sym_integer = 76, - sym_string = 77, - sym_interpolated_string = 78, - sym__doc_comment_line = 79, - sym_line_comment = 80, - sym__call_open_gap = 81, - sym__statement_break = 82, - sym_source_file = 83, - sym_statement = 84, - sym_import_statement = 85, - sym_legacy_import_path = 86, - sym_import_target = 87, - sym_import_tail = 88, - sym_import_member_list = 89, - sym_import_member = 90, - sym_namespace_name = 91, - sym_namespace_declaration = 92, - sym_namespace_body = 93, - sym_let_declaration = 94, - sym_assignment = 95, - sym_function_declaration = 96, - sym_extern_declaration = 97, - sym_extern_parameter_list = 98, - sym_extern_parameter = 99, - sym_parameter_list = 100, - sym_parameter = 101, - sym_type_declaration = 102, - sym_type_parameter_list = 103, - sym_type_parameter = 104, - sym_union_type = 105, - sym_type_alias = 106, - sym_variant = 107, - sym_positional_payload = 108, - sym_record_type = 109, - sym_field_declarations = 110, - sym_field_declaration = 111, - sym_type_validation = 112, - sym_effect_declaration = 113, - sym_multiplicity = 114, - sym_operation_declaration = 115, - sym_effect_set = 116, - sym_effect_list = 117, - sym_effect_ref = 118, - sym__type = 119, - sym_function_type = 120, - sym_generic_type = 121, - sym_array_type = 122, - sym_type_identifier = 123, - sym_type_list = 124, - sym_expression_statement = 125, - sym_expression = 126, - sym_match_expression = 127, - sym_match_arm = 128, - sym_if_expression = 129, - sym_handler_expression = 130, - sym_handler_arm = 131, - sym_handler_params = 132, - sym_kernel_expression = 133, - sym_kernel_arm = 134, - sym_select_expression = 135, - sym_select_arm = 136, - sym_ternary_expression = 137, - sym_binary_expression = 138, - sym_unary_expression = 139, - sym_pipe_expression = 140, - sym_call_expression = 141, - sym_argument_list = 142, - sym_named_argument_list = 143, - sym_named_argument = 144, - sym_primary_expression = 145, - sym_spawn_expression = 146, - sym_yield_expression = 147, - sym_await_call = 148, - sym_send_call = 149, - sym_recv_call = 150, - sym_perform_expression = 151, - sym_resume_expression = 152, - sym_type_constructor = 153, - sym_type_arguments = 154, - sym_update_expression = 155, - sym_field_assignments = 156, - sym_field_assignment = 157, - sym_block = 158, - sym_object_literal = 159, - sym_lambda_expression = 160, - sym_literal = 161, - sym_list_literal = 162, - sym_map_literal = 163, - sym_map_entry = 164, - sym_pattern = 165, - sym_structural_pattern = 166, - sym_tuple_pattern = 167, - sym_list_pattern = 168, - sym_field_pattern = 169, - sym_module_declaration = 170, - sym_signature_ascription = 171, - sym_module_item = 172, - sym_export_declaration = 173, - sym__module_declaration = 174, - sym_signature_declaration = 175, - sym_signature_item = 176, - sym_signature_value = 177, - sym_signature_function = 178, - sym_signature_type = 179, - sym_signature_module = 180, - sym_qualified_path = 181, - sym_symbol_path = 182, - sym_boolean = 183, - sym_doc_comment = 184, - aux_sym_source_file_repeat1 = 185, - aux_sym_legacy_import_path_repeat1 = 186, - aux_sym_import_target_repeat1 = 187, - aux_sym_import_member_list_repeat1 = 188, - aux_sym_extern_parameter_list_repeat1 = 189, - aux_sym_parameter_list_repeat1 = 190, - aux_sym_type_parameter_list_repeat1 = 191, - aux_sym_union_type_repeat1 = 192, - aux_sym_positional_payload_repeat1 = 193, - aux_sym_field_declarations_repeat1 = 194, - aux_sym_effect_declaration_repeat1 = 195, - aux_sym_effect_list_repeat1 = 196, - aux_sym_match_expression_repeat1 = 197, - aux_sym_handler_expression_repeat1 = 198, - aux_sym_handler_params_repeat1 = 199, - aux_sym_kernel_expression_repeat1 = 200, - aux_sym_select_expression_repeat1 = 201, - aux_sym_argument_list_repeat1 = 202, - aux_sym_named_argument_list_repeat1 = 203, - aux_sym_field_assignments_repeat1 = 204, - aux_sym_map_literal_repeat1 = 205, - aux_sym_pattern_repeat1 = 206, - aux_sym_tuple_pattern_repeat1 = 207, - aux_sym_list_pattern_repeat1 = 208, - aux_sym_field_pattern_repeat1 = 209, - aux_sym_module_declaration_repeat1 = 210, - aux_sym_signature_declaration_repeat1 = 211, - aux_sym_qualified_path_repeat1 = 212, - aux_sym_doc_comment_repeat1 = 213, + anon_sym_do = 43, + anon_sym_kernel = 44, + anon_sym_select = 45, + anon_sym_QMARK = 46, + anon_sym_PIPE_PIPE = 47, + anon_sym_AMP_AMP = 48, + anon_sym_EQ_EQ = 49, + anon_sym_BANG_EQ = 50, + anon_sym_LT_EQ = 51, + anon_sym_GT_EQ = 52, + anon_sym_PLUS = 53, + anon_sym_DASH = 54, + anon_sym_SLASH = 55, + anon_sym_PERCENT = 56, + anon_sym_await = 57, + anon_sym_PIPE_GT = 58, + anon_sym_LPAREN2 = 59, + anon_sym_LBRACK2 = 60, + anon_sym_spawn = 61, + anon_sym_yield = 62, + anon_sym_send = 63, + anon_sym_recv = 64, + anon_sym_perform = 65, + anon_sym_resume = 66, + anon_sym_LT2 = 67, + anon_sym_DOT_DOT = 68, + anon_sym_DOT_DOT_DOT = 69, + anon_sym_state = 70, + anon_sym_module = 71, + anon_sym_extra = 72, + anon_sym_export = 73, + anon_sym_opaque = 74, + anon_sym_signature = 75, + anon_sym_true = 76, + anon_sym_false = 77, + sym_float = 78, + sym_integer = 79, + sym_string = 80, + sym_interpolated_string = 81, + sym__doc_comment_line = 82, + sym_line_comment = 83, + sym__call_open_gap = 84, + sym__statement_break = 85, + sym__type_application_ahead = 86, + sym_source_file = 87, + sym_statement = 88, + sym_import_statement = 89, + sym_legacy_import_path = 90, + sym_import_target = 91, + sym_import_tail = 92, + sym_import_member_list = 93, + sym_import_member = 94, + sym_namespace_name = 95, + sym_namespace_declaration = 96, + sym_namespace_body = 97, + sym_let_declaration = 98, + sym_assignment = 99, + sym_function_declaration = 100, + sym_extern_declaration = 101, + sym_extern_parameter_list = 102, + sym_extern_parameter = 103, + sym_parameter_list = 104, + sym_parameter = 105, + sym_type_declaration = 106, + sym_type_parameter_list = 107, + sym_type_parameter = 108, + sym_union_type = 109, + sym_type_alias = 110, + sym_variant = 111, + sym_positional_payload = 112, + sym_record_type = 113, + sym_field_declarations = 114, + sym_field_declaration = 115, + sym_type_validation = 116, + sym_effect_declaration = 117, + sym_multiplicity = 118, + sym_operation_declaration = 119, + sym_effect_set = 120, + sym_effect_list = 121, + sym_effect_ref = 122, + sym__type = 123, + sym_function_type = 124, + sym_generic_type = 125, + sym_array_type = 126, + sym_type_identifier = 127, + sym_type_list = 128, + sym_expression_statement = 129, + sym_expression = 130, + sym_match_expression = 131, + sym_match_arm = 132, + sym_if_expression = 133, + sym_handler_expression = 134, + sym_handler_arm = 135, + sym_handler_params = 136, + sym_kernel_expression = 137, + sym_kernel_arm = 138, + sym_select_expression = 139, + sym_select_arm = 140, + sym_ternary_expression = 141, + sym_binary_expression = 142, + sym_unary_expression = 143, + sym_pipe_expression = 144, + sym_call_expression = 145, + sym_argument_list = 146, + sym_named_argument_list = 147, + sym_named_argument = 148, + sym_primary_expression = 149, + sym_spawn_expression = 150, + sym_yield_expression = 151, + sym_await_call = 152, + sym_send_call = 153, + sym_recv_call = 154, + sym_perform_expression = 155, + sym_resume_expression = 156, + sym_type_constructor = 157, + sym_type_arguments = 158, + sym__call_type_arguments = 159, + sym__call_type_list = 160, + sym_update_expression = 161, + sym_field_assignments = 162, + sym_field_assignment = 163, + sym_block = 164, + sym_object_literal = 165, + sym_lambda_expression = 166, + sym_literal = 167, + sym_list_literal = 168, + sym_map_literal = 169, + sym_map_entry = 170, + sym_pattern = 171, + sym_structural_pattern = 172, + sym_tuple_pattern = 173, + sym_list_pattern = 174, + sym_field_pattern = 175, + sym_module_declaration = 176, + sym_signature_ascription = 177, + sym_module_item = 178, + sym_export_declaration = 179, + sym__module_declaration = 180, + sym_signature_declaration = 181, + sym_signature_item = 182, + sym_signature_value = 183, + sym_signature_function = 184, + sym_signature_type = 185, + sym_signature_module = 186, + sym_qualified_path = 187, + sym_symbol_path = 188, + sym_boolean = 189, + sym_doc_comment = 190, + aux_sym_source_file_repeat1 = 191, + aux_sym_legacy_import_path_repeat1 = 192, + aux_sym_import_target_repeat1 = 193, + aux_sym_import_member_list_repeat1 = 194, + aux_sym_extern_parameter_list_repeat1 = 195, + aux_sym_parameter_list_repeat1 = 196, + aux_sym_type_parameter_list_repeat1 = 197, + aux_sym_union_type_repeat1 = 198, + aux_sym_positional_payload_repeat1 = 199, + aux_sym_field_declarations_repeat1 = 200, + aux_sym_effect_declaration_repeat1 = 201, + aux_sym_effect_list_repeat1 = 202, + aux_sym_match_expression_repeat1 = 203, + aux_sym_handler_expression_repeat1 = 204, + aux_sym_handler_params_repeat1 = 205, + aux_sym_kernel_expression_repeat1 = 206, + aux_sym_select_expression_repeat1 = 207, + aux_sym_argument_list_repeat1 = 208, + aux_sym_named_argument_list_repeat1 = 209, + aux_sym__call_type_list_repeat1 = 210, + aux_sym_field_assignments_repeat1 = 211, + aux_sym_map_literal_repeat1 = 212, + aux_sym_pattern_repeat1 = 213, + aux_sym_tuple_pattern_repeat1 = 214, + aux_sym_list_pattern_repeat1 = 215, + aux_sym_field_pattern_repeat1 = 216, + aux_sym_module_declaration_repeat1 = 217, + aux_sym_signature_declaration_repeat1 = 218, + aux_sym_qualified_path_repeat1 = 219, + aux_sym_doc_comment_repeat1 = 220, }; static const char * const ts_symbol_names[] = { @@ -275,6 +282,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_if] = "if", [anon_sym_else] = "else", [anon_sym_handle] = "handle", + [anon_sym_do] = "do", [anon_sym_kernel] = "kernel", [anon_sym_select] = "select", [anon_sym_QMARK] = "\?", @@ -290,6 +298,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_PERCENT] = "%", [anon_sym_await] = "await", [anon_sym_PIPE_GT] = "|>", + [anon_sym_LPAREN2] = "(", [anon_sym_LBRACK2] = "[", [anon_sym_spawn] = "spawn", [anon_sym_yield] = "yield", @@ -297,6 +306,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_recv] = "recv", [anon_sym_perform] = "perform", [anon_sym_resume] = "resume", + [anon_sym_LT2] = "<", [anon_sym_DOT_DOT] = "..", [anon_sym_DOT_DOT_DOT] = "...", [anon_sym_state] = "state", @@ -315,6 +325,7 @@ static const char * const ts_symbol_names[] = { [sym_line_comment] = "line_comment", [sym__call_open_gap] = "_call_open_gap", [sym__statement_break] = "_statement_break", + [sym__type_application_ahead] = "_type_application_ahead", [sym_source_file] = "source_file", [sym_statement] = "statement", [sym_import_statement] = "import_statement", @@ -387,6 +398,8 @@ static const char * const ts_symbol_names[] = { [sym_resume_expression] = "resume_expression", [sym_type_constructor] = "type_constructor", [sym_type_arguments] = "type_arguments", + [sym__call_type_arguments] = "type_arguments", + [sym__call_type_list] = "type_list", [sym_update_expression] = "update_expression", [sym_field_assignments] = "field_assignments", [sym_field_assignment] = "field_assignment", @@ -436,6 +449,7 @@ static const char * const ts_symbol_names[] = { [aux_sym_select_expression_repeat1] = "select_expression_repeat1", [aux_sym_argument_list_repeat1] = "argument_list_repeat1", [aux_sym_named_argument_list_repeat1] = "named_argument_list_repeat1", + [aux_sym__call_type_list_repeat1] = "_call_type_list_repeat1", [aux_sym_field_assignments_repeat1] = "field_assignments_repeat1", [aux_sym_map_literal_repeat1] = "map_literal_repeat1", [aux_sym_pattern_repeat1] = "pattern_repeat1", @@ -492,6 +506,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_if] = anon_sym_if, [anon_sym_else] = anon_sym_else, [anon_sym_handle] = anon_sym_handle, + [anon_sym_do] = anon_sym_do, [anon_sym_kernel] = anon_sym_kernel, [anon_sym_select] = anon_sym_select, [anon_sym_QMARK] = anon_sym_QMARK, @@ -507,6 +522,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_PERCENT] = anon_sym_PERCENT, [anon_sym_await] = anon_sym_await, [anon_sym_PIPE_GT] = anon_sym_PIPE_GT, + [anon_sym_LPAREN2] = anon_sym_LPAREN, [anon_sym_LBRACK2] = anon_sym_LBRACK, [anon_sym_spawn] = anon_sym_spawn, [anon_sym_yield] = anon_sym_yield, @@ -514,6 +530,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_recv] = anon_sym_recv, [anon_sym_perform] = anon_sym_perform, [anon_sym_resume] = anon_sym_resume, + [anon_sym_LT2] = anon_sym_LT, [anon_sym_DOT_DOT] = anon_sym_DOT_DOT, [anon_sym_DOT_DOT_DOT] = anon_sym_DOT_DOT_DOT, [anon_sym_state] = anon_sym_state, @@ -532,6 +549,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_line_comment] = sym_line_comment, [sym__call_open_gap] = sym__call_open_gap, [sym__statement_break] = sym__statement_break, + [sym__type_application_ahead] = sym__type_application_ahead, [sym_source_file] = sym_source_file, [sym_statement] = sym_statement, [sym_import_statement] = sym_import_statement, @@ -604,6 +622,8 @@ static const TSSymbol ts_symbol_map[] = { [sym_resume_expression] = sym_resume_expression, [sym_type_constructor] = sym_type_constructor, [sym_type_arguments] = sym_type_arguments, + [sym__call_type_arguments] = sym_type_arguments, + [sym__call_type_list] = sym_type_list, [sym_update_expression] = sym_update_expression, [sym_field_assignments] = sym_field_assignments, [sym_field_assignment] = sym_field_assignment, @@ -653,6 +673,7 @@ static const TSSymbol ts_symbol_map[] = { [aux_sym_select_expression_repeat1] = aux_sym_select_expression_repeat1, [aux_sym_argument_list_repeat1] = aux_sym_argument_list_repeat1, [aux_sym_named_argument_list_repeat1] = aux_sym_named_argument_list_repeat1, + [aux_sym__call_type_list_repeat1] = aux_sym__call_type_list_repeat1, [aux_sym_field_assignments_repeat1] = aux_sym_field_assignments_repeat1, [aux_sym_map_literal_repeat1] = aux_sym_map_literal_repeat1, [aux_sym_pattern_repeat1] = aux_sym_pattern_repeat1, @@ -838,6 +859,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_do] = { + .visible = true, + .named = false, + }, [anon_sym_kernel] = { .visible = true, .named = false, @@ -898,6 +923,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_LPAREN2] = { + .visible = true, + .named = false, + }, [anon_sym_LBRACK2] = { .visible = true, .named = false, @@ -926,6 +955,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_LT2] = { + .visible = true, + .named = false, + }, [anon_sym_DOT_DOT] = { .visible = true, .named = false, @@ -998,6 +1031,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = true, }, + [sym__type_application_ahead] = { + .visible = false, + .named = true, + }, [sym_source_file] = { .visible = true, .named = true, @@ -1286,6 +1323,14 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym__call_type_arguments] = { + .visible = true, + .named = true, + }, + [sym__call_type_list] = { + .visible = true, + .named = true, + }, [sym_update_expression] = { .visible = true, .named = true, @@ -1482,6 +1527,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, + [aux_sym__call_type_list_repeat1] = { + .visible = false, + .named = false, + }, [aux_sym_field_assignments_repeat1] = { .visible = false, .named = false, @@ -1570,9 +1619,10 @@ enum ts_field_identifiers { field_target = 43, field_then = 44, field_type = 45, - field_type_parameters = 46, - field_value = 47, - field_variance = 48, + field_type_arguments = 46, + field_type_parameters = 47, + field_value = 48, + field_variance = 49, }; static const char * const ts_field_names[] = { @@ -1622,6 +1672,7 @@ static const char * const ts_field_names[] = { [field_target] = "target", [field_then] = "then", [field_type] = "type", + [field_type_arguments] = "type_arguments", [field_type_parameters] = "type_parameters", [field_value] = "value", [field_variance] = "variance", @@ -1661,164 +1712,171 @@ static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [31] = {.index = 49, .length = 2}, [32] = {.index = 51, .length = 2}, [33] = {.index = 53, .length = 2}, - [34] = {.index = 55, .length = 3}, - [35] = {.index = 58, .length = 1}, - [36] = {.index = 59, .length = 2}, + [34] = {.index = 55, .length = 2}, + [35] = {.index = 57, .length = 3}, + [36] = {.index = 60, .length = 1}, [37] = {.index = 61, .length = 2}, - [38] = {.index = 63, .length = 1}, - [39] = {.index = 64, .length = 2}, + [38] = {.index = 63, .length = 2}, + [39] = {.index = 65, .length = 1}, [40] = {.index = 66, .length = 2}, [41] = {.index = 68, .length = 2}, - [42] = {.index = 70, .length = 3}, - [43] = {.index = 73, .length = 1}, - [44] = {.index = 74, .length = 2}, - [45] = {.index = 76, .length = 3}, - [46] = {.index = 79, .length = 1}, - [47] = {.index = 80, .length = 3}, - [48] = {.index = 83, .length = 3}, - [49] = {.index = 86, .length = 3}, - [50] = {.index = 89, .length = 2}, - [51] = {.index = 91, .length = 2}, - [52] = {.index = 93, .length = 4}, - [53] = {.index = 97, .length = 1}, - [54] = {.index = 98, .length = 2}, - [55] = {.index = 100, .length = 3}, - [56] = {.index = 103, .length = 3}, - [57] = {.index = 106, .length = 2}, - [58] = {.index = 35, .length = 2}, - [59] = {.index = 108, .length = 3}, - [60] = {.index = 111, .length = 2}, - [61] = {.index = 113, .length = 3}, - [62] = {.index = 116, .length = 3}, - [63] = {.index = 119, .length = 2}, - [64] = {.index = 121, .length = 2}, - [65] = {.index = 123, .length = 2}, - [66] = {.index = 125, .length = 4}, - [67] = {.index = 129, .length = 2}, - [68] = {.index = 131, .length = 1}, - [69] = {.index = 132, .length = 2}, - [70] = {.index = 134, .length = 2}, - [71] = {.index = 136, .length = 2}, - [72] = {.index = 138, .length = 2}, - [73] = {.index = 140, .length = 1}, - [74] = {.index = 141, .length = 2}, - [75] = {.index = 143, .length = 3}, - [76] = {.index = 146, .length = 3}, - [77] = {.index = 149, .length = 2}, - [78] = {.index = 151, .length = 1}, - [79] = {.index = 152, .length = 3}, - [80] = {.index = 155, .length = 3}, - [81] = {.index = 158, .length = 3}, - [82] = {.index = 161, .length = 4}, - [83] = {.index = 165, .length = 2}, - [84] = {.index = 167, .length = 2}, - [85] = {.index = 169, .length = 3}, - [86] = {.index = 172, .length = 3}, - [87] = {.index = 172, .length = 3}, - [88] = {.index = 175, .length = 3}, - [89] = {.index = 175, .length = 3}, - [90] = {.index = 178, .length = 2}, - [91] = {.index = 178, .length = 2}, - [92] = {.index = 180, .length = 2}, - [93] = {.index = 182, .length = 3}, - [94] = {.index = 185, .length = 4}, - [95] = {.index = 189, .length = 3}, - [96] = {.index = 192, .length = 2}, - [97] = {.index = 194, .length = 4}, - [98] = {.index = 198, .length = 2}, - [99] = {.index = 200, .length = 3}, - [100] = {.index = 203, .length = 3}, - [101] = {.index = 206, .length = 2}, - [102] = {.index = 208, .length = 4}, - [103] = {.index = 212, .length = 1}, - [104] = {.index = 213, .length = 3}, - [105] = {.index = 216, .length = 3}, - [106] = {.index = 219, .length = 4}, - [107] = {.index = 223, .length = 4}, - [108] = {.index = 227, .length = 4}, - [109] = {.index = 231, .length = 3}, - [110] = {.index = 234, .length = 3}, - [111] = {.index = 237, .length = 4}, - [112] = {.index = 237, .length = 4}, - [113] = {.index = 241, .length = 3}, - [114] = {.index = 241, .length = 3}, - [115] = {.index = 244, .length = 3}, - [116] = {.index = 244, .length = 3}, - [117] = {.index = 247, .length = 2}, - [118] = {.index = 249, .length = 2}, - [119] = {.index = 251, .length = 2}, - [120] = {.index = 253, .length = 3}, - [121] = {.index = 256, .length = 1}, - [122] = {.index = 257, .length = 3}, - [123] = {.index = 260, .length = 3}, - [124] = {.index = 263, .length = 3}, - [125] = {.index = 266, .length = 4}, - [126] = {.index = 270, .length = 2}, - [127] = {.index = 272, .length = 3}, - [128] = {.index = 275, .length = 2}, - [129] = {.index = 277, .length = 3}, - [130] = {.index = 280, .length = 4}, - [131] = {.index = 284, .length = 4}, - [132] = {.index = 288, .length = 4}, - [133] = {.index = 292, .length = 4}, - [134] = {.index = 296, .length = 5}, - [135] = {.index = 301, .length = 4}, - [136] = {.index = 301, .length = 4}, - [137] = {.index = 305, .length = 3}, - [138] = {.index = 308, .length = 3}, - [139] = {.index = 311, .length = 2}, - [140] = {.index = 313, .length = 3}, - [141] = {.index = 316, .length = 3}, - [142] = {.index = 319, .length = 3}, - [143] = {.index = 322, .length = 3}, - [144] = {.index = 325, .length = 4}, - [145] = {.index = 329, .length = 4}, - [146] = {.index = 333, .length = 4}, - [147] = {.index = 337, .length = 3}, - [148] = {.index = 340, .length = 3}, - [149] = {.index = 343, .length = 4}, - [150] = {.index = 347, .length = 4}, - [151] = {.index = 351, .length = 4}, - [152] = {.index = 355, .length = 5}, - [153] = {.index = 360, .length = 5}, - [154] = {.index = 365, .length = 3}, - [155] = {.index = 368, .length = 3}, - [156] = {.index = 371, .length = 3}, - [157] = {.index = 374, .length = 4}, - [158] = {.index = 378, .length = 4}, - [159] = {.index = 382, .length = 4}, - [160] = {.index = 386, .length = 4}, - [161] = {.index = 390, .length = 5}, - [162] = {.index = 395, .length = 4}, - [163] = {.index = 399, .length = 5}, - [164] = {.index = 404, .length = 5}, - [165] = {.index = 409, .length = 5}, - [166] = {.index = 414, .length = 3}, - [167] = {.index = 417, .length = 3}, - [168] = {.index = 420, .length = 4}, - [169] = {.index = 424, .length = 4}, - [170] = {.index = 428, .length = 4}, - [171] = {.index = 432, .length = 4}, - [172] = {.index = 436, .length = 4}, - [173] = {.index = 440, .length = 5}, - [174] = {.index = 445, .length = 5}, - [175] = {.index = 450, .length = 5}, - [176] = {.index = 455, .length = 5}, - [177] = {.index = 460, .length = 6}, - [178] = {.index = 466, .length = 3}, - [179] = {.index = 469, .length = 4}, - [180] = {.index = 473, .length = 4}, - [181] = {.index = 477, .length = 5}, - [182] = {.index = 482, .length = 5}, - [183] = {.index = 487, .length = 5}, - [184] = {.index = 492, .length = 6}, - [185] = {.index = 498, .length = 4}, - [186] = {.index = 502, .length = 4}, - [187] = {.index = 506, .length = 5}, - [188] = {.index = 511, .length = 5}, - [189] = {.index = 516, .length = 6}, - [190] = {.index = 522, .length = 5}, - [191] = {.index = 527, .length = 6}, + [42] = {.index = 70, .length = 2}, + [43] = {.index = 72, .length = 3}, + [44] = {.index = 75, .length = 1}, + [45] = {.index = 76, .length = 2}, + [46] = {.index = 78, .length = 3}, + [47] = {.index = 81, .length = 1}, + [48] = {.index = 82, .length = 3}, + [49] = {.index = 85, .length = 1}, + [50] = {.index = 86, .length = 1}, + [51] = {.index = 87, .length = 1}, + [52] = {.index = 88, .length = 3}, + [53] = {.index = 91, .length = 3}, + [54] = {.index = 94, .length = 2}, + [55] = {.index = 96, .length = 2}, + [56] = {.index = 98, .length = 4}, + [57] = {.index = 102, .length = 1}, + [58] = {.index = 103, .length = 2}, + [59] = {.index = 105, .length = 3}, + [60] = {.index = 108, .length = 3}, + [61] = {.index = 111, .length = 2}, + [62] = {.index = 35, .length = 2}, + [63] = {.index = 113, .length = 3}, + [64] = {.index = 116, .length = 2}, + [65] = {.index = 118, .length = 3}, + [66] = {.index = 121, .length = 3}, + [67] = {.index = 124, .length = 2}, + [68] = {.index = 126, .length = 2}, + [69] = {.index = 128, .length = 2}, + [70] = {.index = 130, .length = 4}, + [71] = {.index = 134, .length = 2}, + [72] = {.index = 136, .length = 1}, + [73] = {.index = 137, .length = 2}, + [74] = {.index = 139, .length = 2}, + [75] = {.index = 141, .length = 2}, + [76] = {.index = 143, .length = 2}, + [77] = {.index = 145, .length = 2}, + [78] = {.index = 147, .length = 2}, + [79] = {.index = 149, .length = 1}, + [80] = {.index = 150, .length = 2}, + [81] = {.index = 152, .length = 3}, + [82] = {.index = 155, .length = 3}, + [83] = {.index = 158, .length = 2}, + [84] = {.index = 160, .length = 1}, + [85] = {.index = 161, .length = 3}, + [86] = {.index = 164, .length = 3}, + [87] = {.index = 167, .length = 3}, + [88] = {.index = 170, .length = 4}, + [89] = {.index = 174, .length = 2}, + [90] = {.index = 176, .length = 2}, + [91] = {.index = 178, .length = 3}, + [92] = {.index = 181, .length = 3}, + [93] = {.index = 181, .length = 3}, + [94] = {.index = 184, .length = 3}, + [95] = {.index = 184, .length = 3}, + [96] = {.index = 187, .length = 2}, + [97] = {.index = 187, .length = 2}, + [98] = {.index = 189, .length = 2}, + [99] = {.index = 191, .length = 3}, + [100] = {.index = 194, .length = 4}, + [101] = {.index = 198, .length = 3}, + [102] = {.index = 201, .length = 2}, + [103] = {.index = 203, .length = 1}, + [104] = {.index = 204, .length = 4}, + [105] = {.index = 208, .length = 2}, + [106] = {.index = 210, .length = 3}, + [107] = {.index = 213, .length = 3}, + [108] = {.index = 216, .length = 2}, + [109] = {.index = 218, .length = 4}, + [110] = {.index = 222, .length = 1}, + [111] = {.index = 223, .length = 3}, + [112] = {.index = 226, .length = 3}, + [113] = {.index = 229, .length = 4}, + [114] = {.index = 233, .length = 4}, + [115] = {.index = 237, .length = 4}, + [116] = {.index = 241, .length = 3}, + [117] = {.index = 244, .length = 3}, + [118] = {.index = 247, .length = 4}, + [119] = {.index = 247, .length = 4}, + [120] = {.index = 251, .length = 3}, + [121] = {.index = 251, .length = 3}, + [122] = {.index = 254, .length = 3}, + [123] = {.index = 254, .length = 3}, + [124] = {.index = 257, .length = 2}, + [125] = {.index = 259, .length = 2}, + [126] = {.index = 261, .length = 2}, + [127] = {.index = 263, .length = 3}, + [128] = {.index = 266, .length = 1}, + [129] = {.index = 267, .length = 3}, + [130] = {.index = 270, .length = 3}, + [131] = {.index = 273, .length = 3}, + [132] = {.index = 276, .length = 4}, + [133] = {.index = 280, .length = 2}, + [134] = {.index = 282, .length = 3}, + [135] = {.index = 285, .length = 2}, + [136] = {.index = 287, .length = 3}, + [137] = {.index = 290, .length = 4}, + [138] = {.index = 294, .length = 4}, + [139] = {.index = 298, .length = 4}, + [140] = {.index = 302, .length = 4}, + [141] = {.index = 306, .length = 5}, + [142] = {.index = 311, .length = 4}, + [143] = {.index = 311, .length = 4}, + [144] = {.index = 315, .length = 3}, + [145] = {.index = 318, .length = 3}, + [146] = {.index = 321, .length = 2}, + [147] = {.index = 323, .length = 3}, + [148] = {.index = 326, .length = 3}, + [149] = {.index = 329, .length = 3}, + [150] = {.index = 332, .length = 3}, + [151] = {.index = 335, .length = 4}, + [152] = {.index = 339, .length = 4}, + [153] = {.index = 343, .length = 4}, + [154] = {.index = 347, .length = 3}, + [155] = {.index = 350, .length = 3}, + [156] = {.index = 353, .length = 4}, + [157] = {.index = 357, .length = 4}, + [158] = {.index = 361, .length = 4}, + [159] = {.index = 365, .length = 5}, + [160] = {.index = 370, .length = 5}, + [161] = {.index = 375, .length = 3}, + [162] = {.index = 378, .length = 3}, + [163] = {.index = 381, .length = 3}, + [164] = {.index = 384, .length = 4}, + [165] = {.index = 388, .length = 4}, + [166] = {.index = 392, .length = 4}, + [167] = {.index = 396, .length = 4}, + [168] = {.index = 400, .length = 5}, + [169] = {.index = 405, .length = 4}, + [170] = {.index = 409, .length = 5}, + [171] = {.index = 414, .length = 5}, + [172] = {.index = 419, .length = 5}, + [173] = {.index = 424, .length = 3}, + [174] = {.index = 427, .length = 3}, + [175] = {.index = 430, .length = 4}, + [176] = {.index = 434, .length = 4}, + [177] = {.index = 438, .length = 4}, + [178] = {.index = 442, .length = 4}, + [179] = {.index = 446, .length = 4}, + [180] = {.index = 450, .length = 5}, + [181] = {.index = 455, .length = 5}, + [182] = {.index = 460, .length = 5}, + [183] = {.index = 465, .length = 5}, + [184] = {.index = 470, .length = 6}, + [185] = {.index = 476, .length = 3}, + [186] = {.index = 479, .length = 4}, + [187] = {.index = 483, .length = 4}, + [188] = {.index = 487, .length = 5}, + [189] = {.index = 492, .length = 5}, + [190] = {.index = 497, .length = 5}, + [191] = {.index = 502, .length = 6}, + [192] = {.index = 508, .length = 4}, + [193] = {.index = 512, .length = 4}, + [194] = {.index = 516, .length = 5}, + [195] = {.index = 521, .length = 5}, + [196] = {.index = 526, .length = 6}, + [197] = {.index = 532, .length = 5}, + [198] = {.index = 537, .length = 6}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -1908,630 +1966,647 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_callee, 0}, {field_index, 2}, [53] = + {field_callee, 0}, + {field_type_arguments, 1}, + [55] = {field_keyword, 1}, {field_name, 2}, - [55] = + [57] = {field_body, 3}, {field_keyword, 1}, {field_name, 2}, - [58] = + [60] = {field_body, 4}, - [59] = + [61] = {field_name, 1}, {field_variance, 0}, - [61] = + [63] = {field_body, 4}, {field_name, 1}, - [63] = + [65] = {field_name, 2}, - [64] = + [66] = {field_name, 2}, {field_stage, 0}, - [66] = + [68] = {field_body, 2}, {field_operation, 0}, - [68] = + [70] = {field_body, 4}, {field_effect, 1}, - [70] = + [72] = {field_body, 3}, {field_effect, 0}, {field_operation, 1}, - [73] = + [75] = {field_element, 1}, - [74] = + [76] = {field_body, 2}, {field_pattern, 0}, - [76] = + [78] = {field_keyword, 1}, {field_path, 2}, {field_state, 0}, - [79] = + [81] = {field_declaration, 1}, - [80] = + [82] = {field_keyword, 0}, {field_path, 1}, {field_signature, 2}, - [83] = + [85] = + {field_variance, 0}, + [86] = + {field_variance, 1, .inherited = true}, + [87] = + {field_variance, 2, .inherited = true}, + [88] = {field_condition, 0}, {field_else, 4}, {field_then, 2}, - [86] = + [91] = {field_keyword, 1}, {field_name, 2}, {field_value, 4}, - [89] = + [94] = {field_definition, 4}, {field_name, 2}, - [91] = + [96] = {field_keyword, 1}, {field_path, 2}, - [93] = + [98] = {field_keyword, 0}, {field_name, 1}, {field_type, 3}, {field_value, 5}, - [97] = + [102] = {field_body, 5}, - [98] = + [103] = {field_body, 5}, {field_name, 1}, - [100] = + [105] = {field_body, 5}, {field_effects, 4}, {field_name, 1}, - [103] = + [108] = {field_body, 5}, {field_name, 1}, {field_parameters, 3}, - [106] = + [111] = {field_name, 2}, {field_parameters, 4}, - [108] = + [113] = {field_body, 5}, {field_effect, 2}, {field_stage, 1}, - [111] = + [116] = {field_body, 3}, {field_operation, 0}, - [113] = + [118] = {field_body, 5}, {field_effect, 1}, {field_instantiation, 2}, - [116] = + [121] = {field_body, 4}, {field_effect, 0}, {field_operation, 1}, - [119] = + [124] = {field_element, 1}, {field_element, 2, .inherited = true}, - [121] = + [126] = {field_element, 0, .inherited = true}, {field_element, 1, .inherited = true}, - [123] = + [128] = {field_effect, 1}, {field_operation, 3}, - [125] = + [130] = {field_keyword, 1}, {field_path, 2}, {field_signature, 3}, {field_state, 0}, - [129] = + [134] = {field_declaration, 2}, {field_opaque, 1}, - [131] = + [136] = {field_declaration, 2}, - [132] = + [137] = {field_extra, 3}, {field_path, 1}, - [134] = + [139] = {field_path, 1}, {field_signature, 2}, - [136] = + [141] = {field_name, 2}, {field_opaque, 0}, - [138] = + [143] = + {field_variance, 0}, + {field_variance, 2, .inherited = true}, + [145] = + {field_variance, 0, .inherited = true}, + {field_variance, 1, .inherited = true}, + [147] = {field_body, 5}, {field_name, 2}, - [140] = + [149] = {field_name, 3}, - [141] = + [150] = {field_name, 3}, {field_stage, 1}, - [143] = + [152] = {field_keyword, 2}, {field_path, 3}, {field_state, 1}, - [146] = + [155] = {field_keyword, 1}, {field_path, 2}, {field_signature, 3}, - [149] = + [158] = {field_alias, 2}, {field_name, 0}, - [151] = + [160] = {field_body, 6}, - [152] = + [161] = {field_body, 6}, {field_name, 1}, {field_return_type, 5}, - [155] = + [164] = {field_body, 6}, {field_effects, 4}, {field_name, 1}, - [158] = + [167] = {field_body, 6}, {field_name, 1}, {field_parameters, 3}, - [161] = + [170] = {field_body, 6}, {field_effects, 5}, {field_name, 1}, {field_parameters, 3}, - [165] = + [174] = {field_name, 2}, {field_return_type, 6}, - [167] = + [176] = {field_name, 0}, {field_positional, 2}, - [169] = + [178] = {field_definition, 6}, {field_name, 1}, {field_type_parameters, 3}, - [172] = + [181] = {field_name, 1}, {field_replayable, 0}, {field_type, 3}, - [175] = + [184] = {field_multiplicity, 0}, {field_name, 1}, {field_type, 3}, - [178] = + [187] = {field_name, 1}, {field_type, 3}, - [180] = + [189] = {field_name, 1}, {field_type_parameters, 3}, - [182] = + [191] = {field_alternative, 6}, {field_condition, 1}, {field_consequence, 3}, - [185] = + [194] = {field_body, 6}, {field_effect, 2}, {field_instantiation, 3}, {field_stage, 1}, - [189] = + [198] = {field_effect, 1}, {field_instantiation, 2}, {field_operation, 4}, - [192] = + [201] = {field_declaration, 3}, {field_opaque, 2}, - [194] = + [203] = + {field_variance, 1}, + [204] = {field_keyword, 1}, {field_name, 2}, {field_type, 4}, {field_value, 6}, - [198] = + [208] = {field_body, 6}, {field_name, 2}, - [200] = + [210] = {field_body, 6}, {field_effects, 5}, {field_name, 2}, - [203] = + [213] = {field_body, 6}, {field_name, 2}, {field_parameters, 4}, - [206] = + [216] = {field_name, 3}, {field_parameters, 5}, - [208] = + [218] = {field_keyword, 2}, {field_path, 3}, {field_signature, 4}, {field_state, 1}, - [212] = + [222] = {field_body, 7}, - [213] = + [223] = {field_body, 7}, {field_name, 1}, {field_type_parameters, 3}, - [216] = + [226] = {field_body, 7}, {field_name, 1}, {field_return_type, 5}, - [219] = + [229] = {field_body, 7}, {field_effects, 6}, {field_name, 1}, {field_return_type, 5}, - [223] = + [233] = {field_body, 7}, {field_name, 1}, {field_parameters, 3}, {field_return_type, 6}, - [227] = + [237] = {field_body, 7}, {field_effects, 5}, {field_name, 1}, {field_parameters, 3}, - [231] = + [241] = {field_name, 2}, {field_parameters, 4}, {field_return_type, 7}, - [234] = + [244] = {field_name, 2}, {field_stage, 0}, {field_type_parameters, 4}, - [237] = + [247] = {field_multiplicity, 0}, {field_name, 2}, {field_replayable, 1}, {field_type, 4}, - [241] = + [251] = {field_name, 2}, {field_replayable, 1}, {field_type, 4}, - [244] = + [254] = {field_multiplicity, 1}, {field_name, 2}, {field_type, 4}, - [247] = + [257] = {field_element, 1}, {field_rest, 4}, - [249] = + [259] = {field_effects, 4}, {field_name, 1}, - [251] = + [261] = {field_name, 1}, {field_parameters, 3}, - [253] = + [263] = {field_definition, 4}, {field_name, 2}, {field_opaque, 0}, - [256] = + [266] = {field_condition, 0}, - [257] = + [267] = {field_body, 7}, {field_name, 2}, {field_return_type, 6}, - [260] = + [270] = {field_body, 7}, {field_effects, 5}, {field_name, 2}, - [263] = + [273] = {field_body, 7}, {field_name, 2}, {field_parameters, 4}, - [266] = + [276] = {field_body, 7}, {field_effects, 6}, {field_name, 2}, {field_parameters, 4}, - [270] = + [280] = {field_name, 3}, {field_return_type, 7}, - [272] = + [282] = {field_definition, 7}, {field_name, 2}, {field_type_parameters, 4}, - [275] = + [285] = {field_name, 2}, {field_type_parameters, 4}, - [277] = + [287] = {field_body, 8}, {field_name, 1}, {field_type_parameters, 3}, - [280] = + [290] = {field_body, 8}, {field_effects, 7}, {field_name, 1}, {field_type_parameters, 3}, - [284] = + [294] = {field_body, 8}, {field_name, 1}, {field_parameters, 6}, {field_type_parameters, 3}, - [288] = + [298] = {field_body, 8}, {field_effects, 6}, {field_name, 1}, {field_return_type, 5}, - [292] = + [302] = {field_body, 8}, {field_name, 1}, {field_parameters, 3}, {field_return_type, 6}, - [296] = + [306] = {field_body, 8}, {field_effects, 7}, {field_name, 1}, {field_parameters, 3}, {field_return_type, 6}, - [301] = + [311] = {field_multiplicity, 1}, {field_name, 3}, {field_replayable, 2}, {field_type, 5}, - [305] = + [315] = {field_alternative, 7}, {field_condition, 1}, {field_consequence, 3}, - [308] = + [318] = {field_element, 1}, {field_element, 2, .inherited = true}, {field_rest, 5}, - [311] = + [321] = {field_name, 1}, {field_return_type, 5}, - [313] = + [323] = {field_effects, 5}, {field_name, 1}, {field_parameters, 3}, - [316] = + [326] = {field_name, 2}, {field_opaque, 0}, {field_type_parameters, 4}, - [319] = + [329] = {field_body, 8}, {field_name, 2}, {field_type_parameters, 4}, - [322] = + [332] = {field_body, 8}, {field_name, 2}, {field_return_type, 6}, - [325] = + [335] = {field_body, 8}, {field_effects, 7}, {field_name, 2}, {field_return_type, 6}, - [329] = + [339] = {field_body, 8}, {field_name, 2}, {field_parameters, 4}, {field_return_type, 7}, - [333] = + [343] = {field_body, 8}, {field_effects, 6}, {field_name, 2}, {field_parameters, 4}, - [337] = + [347] = {field_name, 3}, {field_parameters, 5}, {field_return_type, 8}, - [340] = + [350] = {field_name, 3}, {field_stage, 1}, {field_type_parameters, 5}, - [343] = + [353] = {field_body, 9}, {field_name, 1}, {field_return_type, 8}, {field_type_parameters, 3}, - [347] = + [357] = {field_body, 9}, {field_effects, 7}, {field_name, 1}, {field_type_parameters, 3}, - [351] = + [361] = {field_body, 9}, {field_name, 1}, {field_parameters, 6}, {field_type_parameters, 3}, - [355] = + [365] = {field_body, 9}, {field_effects, 8}, {field_name, 1}, {field_parameters, 6}, {field_type_parameters, 3}, - [360] = + [370] = {field_body, 9}, {field_effects, 7}, {field_name, 1}, {field_parameters, 3}, {field_return_type, 6}, - [365] = + [375] = {field_effects, 6}, {field_name, 1}, {field_return_type, 5}, - [368] = + [378] = {field_name, 1}, {field_parameters, 3}, {field_return_type, 6}, - [371] = + [381] = {field_body, 9}, {field_name, 2}, {field_type_parameters, 4}, - [374] = + [384] = {field_body, 9}, {field_effects, 8}, {field_name, 2}, {field_type_parameters, 4}, - [378] = + [388] = {field_body, 9}, {field_name, 2}, {field_parameters, 7}, {field_type_parameters, 4}, - [382] = + [392] = {field_body, 9}, {field_effects, 7}, {field_name, 2}, {field_return_type, 6}, - [386] = + [396] = {field_body, 9}, {field_name, 2}, {field_parameters, 4}, {field_return_type, 7}, - [390] = + [400] = {field_body, 9}, {field_effects, 8}, {field_name, 2}, {field_parameters, 4}, {field_return_type, 7}, - [395] = + [405] = {field_body, 10}, {field_name, 1}, {field_return_type, 8}, {field_type_parameters, 3}, - [399] = + [409] = {field_body, 10}, {field_effects, 9}, {field_name, 1}, {field_return_type, 8}, {field_type_parameters, 3}, - [404] = + [414] = {field_body, 10}, {field_name, 1}, {field_parameters, 6}, {field_return_type, 9}, {field_type_parameters, 3}, - [409] = + [419] = {field_body, 10}, {field_effects, 8}, {field_name, 1}, {field_parameters, 6}, {field_type_parameters, 3}, - [414] = + [424] = {field_effects, 7}, {field_name, 1}, {field_type_parameters, 3}, - [417] = + [427] = {field_name, 1}, {field_parameters, 6}, {field_type_parameters, 3}, - [420] = + [430] = {field_effects, 7}, {field_name, 1}, {field_parameters, 3}, {field_return_type, 6}, - [424] = + [434] = {field_definition, 7}, {field_name, 2}, {field_opaque, 0}, {field_type_parameters, 4}, - [428] = + [438] = {field_body, 10}, {field_name, 2}, {field_return_type, 9}, {field_type_parameters, 4}, - [432] = + [442] = {field_body, 10}, {field_effects, 8}, {field_name, 2}, {field_type_parameters, 4}, - [436] = + [446] = {field_body, 10}, {field_name, 2}, {field_parameters, 7}, {field_type_parameters, 4}, - [440] = + [450] = {field_body, 10}, {field_effects, 9}, {field_name, 2}, {field_parameters, 7}, {field_type_parameters, 4}, - [445] = + [455] = {field_body, 10}, {field_effects, 8}, {field_name, 2}, {field_parameters, 4}, {field_return_type, 7}, - [450] = + [460] = {field_body, 11}, {field_effects, 9}, {field_name, 1}, {field_return_type, 8}, {field_type_parameters, 3}, - [455] = + [465] = {field_body, 11}, {field_name, 1}, {field_parameters, 6}, {field_return_type, 9}, {field_type_parameters, 3}, - [460] = + [470] = {field_body, 11}, {field_effects, 10}, {field_name, 1}, {field_parameters, 6}, {field_return_type, 9}, {field_type_parameters, 3}, - [466] = + [476] = {field_name, 1}, {field_return_type, 8}, {field_type_parameters, 3}, - [469] = + [479] = {field_effects, 8}, {field_name, 1}, {field_parameters, 6}, {field_type_parameters, 3}, - [473] = + [483] = {field_body, 11}, {field_name, 2}, {field_return_type, 9}, {field_type_parameters, 4}, - [477] = + [487] = {field_body, 11}, {field_effects, 10}, {field_name, 2}, {field_return_type, 9}, {field_type_parameters, 4}, - [482] = + [492] = {field_body, 11}, {field_name, 2}, {field_parameters, 7}, {field_return_type, 10}, {field_type_parameters, 4}, - [487] = + [497] = {field_body, 11}, {field_effects, 9}, {field_name, 2}, {field_parameters, 7}, {field_type_parameters, 4}, - [492] = + [502] = {field_body, 12}, {field_effects, 10}, {field_name, 1}, {field_parameters, 6}, {field_return_type, 9}, {field_type_parameters, 3}, - [498] = + [508] = {field_effects, 9}, {field_name, 1}, {field_return_type, 8}, {field_type_parameters, 3}, - [502] = + [512] = {field_name, 1}, {field_parameters, 6}, {field_return_type, 9}, {field_type_parameters, 3}, - [506] = + [516] = {field_body, 12}, {field_effects, 10}, {field_name, 2}, {field_return_type, 9}, {field_type_parameters, 4}, - [511] = + [521] = {field_body, 12}, {field_name, 2}, {field_parameters, 7}, {field_return_type, 10}, {field_type_parameters, 4}, - [516] = + [526] = {field_body, 12}, {field_effects, 11}, {field_name, 2}, {field_parameters, 7}, {field_return_type, 10}, {field_type_parameters, 4}, - [522] = + [532] = {field_effects, 10}, {field_name, 1}, {field_parameters, 6}, {field_return_type, 9}, {field_type_parameters, 3}, - [527] = + [537] = {field_body, 13}, {field_effects, 11}, {field_name, 2}, @@ -2542,28 +2617,28 @@ static const TSFieldMapEntry ts_field_map_entries[] = { static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { [0] = {0}, - [58] = { + [62] = { [0] = sym_identifier, }, - [86] = { + [92] = { [1] = sym_identifier, }, - [88] = { + [94] = { [1] = sym_identifier, }, - [90] = { + [96] = { [1] = sym_identifier, }, - [111] = { + [118] = { [2] = sym_identifier, }, - [113] = { + [120] = { [2] = sym_identifier, }, - [115] = { + [122] = { [2] = sym_identifier, }, - [135] = { + [142] = { [3] = sym_identifier, }, }; @@ -2585,43 +2660,43 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [6] = 6, [7] = 7, [8] = 8, - [9] = 9, + [9] = 6, [10] = 10, - [11] = 7, - [12] = 5, - [13] = 13, - [14] = 10, - [15] = 7, - [16] = 7, - [17] = 7, - [18] = 13, - [19] = 13, + [11] = 11, + [12] = 12, + [13] = 8, + [14] = 8, + [15] = 12, + [16] = 8, + [17] = 8, + [18] = 5, + [19] = 5, [20] = 20, [21] = 21, - [22] = 22, + [22] = 21, [23] = 23, - [24] = 21, - [25] = 23, - [26] = 22, - [27] = 21, - [28] = 22, - [29] = 23, - [30] = 30, - [31] = 31, - [32] = 32, - [33] = 32, - [34] = 30, + [24] = 23, + [25] = 25, + [26] = 26, + [27] = 26, + [28] = 23, + [29] = 21, + [30] = 25, + [31] = 26, + [32] = 25, + [33] = 33, + [34] = 33, [35] = 35, - [36] = 31, - [37] = 35, - [38] = 32, - [39] = 31, - [40] = 40, - [41] = 30, - [42] = 35, - [43] = 43, - [44] = 44, - [45] = 45, + [36] = 36, + [37] = 37, + [38] = 36, + [39] = 37, + [40] = 33, + [41] = 37, + [42] = 42, + [43] = 36, + [44] = 42, + [45] = 42, [46] = 46, [47] = 47, [48] = 48, @@ -2647,8 +2722,8 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [68] = 68, [69] = 69, [70] = 70, - [71] = 43, - [72] = 72, + [71] = 71, + [72] = 46, [73] = 73, [74] = 74, [75] = 75, @@ -2677,136 +2752,136 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [98] = 98, [99] = 99, [100] = 100, - [101] = 100, + [101] = 101, [102] = 102, [103] = 103, [104] = 104, [105] = 105, [106] = 106, - [107] = 102, + [107] = 101, [108] = 108, [109] = 109, [110] = 110, [111] = 111, [112] = 112, [113] = 113, - [114] = 47, - [115] = 48, - [116] = 49, - [117] = 50, - [118] = 52, - [119] = 54, - [120] = 56, - [121] = 61, + [114] = 48, + [115] = 49, + [116] = 50, + [117] = 51, + [118] = 53, + [119] = 102, + [120] = 55, + [121] = 57, [122] = 62, [123] = 63, [124] = 64, - [125] = 66, - [126] = 67, - [127] = 68, - [128] = 69, - [129] = 70, - [130] = 72, - [131] = 73, - [132] = 74, - [133] = 75, - [134] = 76, - [135] = 77, - [136] = 79, - [137] = 80, - [138] = 81, - [139] = 139, - [140] = 83, - [141] = 84, - [142] = 85, - [143] = 86, - [144] = 87, - [145] = 88, - [146] = 89, - [147] = 90, - [148] = 91, - [149] = 92, - [150] = 93, - [151] = 94, - [152] = 95, - [153] = 96, - [154] = 97, - [155] = 98, - [156] = 99, - [157] = 157, + [125] = 65, + [126] = 126, + [127] = 67, + [128] = 68, + [129] = 69, + [130] = 70, + [131] = 71, + [132] = 73, + [133] = 74, + [134] = 75, + [135] = 76, + [136] = 77, + [137] = 78, + [138] = 80, + [139] = 81, + [140] = 82, + [141] = 83, + [142] = 142, + [143] = 85, + [144] = 86, + [145] = 87, + [146] = 88, + [147] = 89, + [148] = 90, + [149] = 91, + [150] = 92, + [151] = 93, + [152] = 94, + [153] = 95, + [154] = 96, + [155] = 97, + [156] = 98, + [157] = 99, [158] = 100, - [159] = 102, - [160] = 103, - [161] = 104, - [162] = 105, - [163] = 106, - [164] = 109, - [165] = 110, - [166] = 111, - [167] = 112, - [168] = 113, - [169] = 47, - [170] = 50, - [171] = 54, - [172] = 56, - [173] = 61, - [174] = 64, - [175] = 68, - [176] = 72, - [177] = 103, - [178] = 157, - [179] = 104, - [180] = 180, - [181] = 51, - [182] = 105, - [183] = 106, - [184] = 184, - [185] = 185, + [159] = 159, + [160] = 101, + [161] = 102, + [162] = 103, + [163] = 104, + [164] = 105, + [165] = 106, + [166] = 109, + [167] = 110, + [168] = 111, + [169] = 112, + [170] = 113, + [171] = 48, + [172] = 51, + [173] = 55, + [174] = 57, + [175] = 62, + [176] = 65, + [177] = 69, + [178] = 73, + [179] = 103, + [180] = 159, + [181] = 104, + [182] = 182, + [183] = 59, + [184] = 105, + [185] = 106, [186] = 186, [187] = 187, - [188] = 65, - [189] = 157, - [190] = 180, - [191] = 51, + [188] = 188, + [189] = 189, + [190] = 126, + [191] = 159, [192] = 108, - [193] = 109, - [194] = 194, - [195] = 180, - [196] = 110, - [197] = 197, - [198] = 198, + [193] = 182, + [194] = 59, + [195] = 109, + [196] = 196, + [197] = 182, + [198] = 110, [199] = 111, [200] = 200, - [201] = 139, - [202] = 197, - [203] = 200, - [204] = 184, - [205] = 46, - [206] = 60, - [207] = 43, - [208] = 139, - [209] = 197, - [210] = 200, - [211] = 184, - [212] = 46, - [213] = 60, - [214] = 112, - [215] = 185, - [216] = 185, - [217] = 198, - [218] = 218, - [219] = 198, + [201] = 201, + [202] = 112, + [203] = 142, + [204] = 200, + [205] = 52, + [206] = 186, + [207] = 47, + [208] = 61, + [209] = 46, + [210] = 142, + [211] = 200, + [212] = 52, + [213] = 186, + [214] = 47, + [215] = 61, + [216] = 216, + [217] = 187, + [218] = 187, + [219] = 201, [220] = 113, - [221] = 65, - [222] = 82, + [221] = 201, + [222] = 222, [223] = 223, - [224] = 224, - [225] = 225, - [226] = 225, + [224] = 126, + [225] = 84, + [226] = 226, [227] = 227, [228] = 228, [229] = 229, - [230] = 230, + [230] = 229, [231] = 231, [232] = 232, [233] = 233, @@ -2823,7 +2898,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [244] = 244, [245] = 245, [246] = 246, - [247] = 227, + [247] = 247, [248] = 248, [249] = 249, [250] = 250, @@ -2866,368 +2941,368 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [287] = 287, [288] = 288, [289] = 289, - [290] = 229, - [291] = 228, - [292] = 231, - [293] = 230, - [294] = 283, - [295] = 235, - [296] = 236, - [297] = 237, - [298] = 238, + [290] = 290, + [291] = 291, + [292] = 292, + [293] = 293, + [294] = 228, + [295] = 231, + [296] = 232, + [297] = 297, + [298] = 298, [299] = 299, [300] = 300, [301] = 301, - [302] = 243, - [303] = 244, - [304] = 245, - [305] = 246, + [302] = 302, + [303] = 303, + [304] = 304, + [305] = 305, [306] = 306, - [307] = 248, - [308] = 251, - [309] = 252, - [310] = 253, - [311] = 254, - [312] = 255, - [313] = 232, - [314] = 257, - [315] = 258, - [316] = 261, - [317] = 262, - [318] = 263, + [307] = 307, + [308] = 308, + [309] = 309, + [310] = 310, + [311] = 311, + [312] = 312, + [313] = 313, + [314] = 314, + [315] = 315, + [316] = 316, + [317] = 317, + [318] = 318, [319] = 319, - [320] = 264, - [321] = 265, - [322] = 266, - [323] = 267, - [324] = 268, - [325] = 269, - [326] = 270, - [327] = 271, + [320] = 320, + [321] = 321, + [322] = 322, + [323] = 323, + [324] = 324, + [325] = 325, + [326] = 326, + [327] = 327, [328] = 328, - [329] = 273, - [330] = 274, - [331] = 275, - [332] = 276, - [333] = 333, - [334] = 334, - [335] = 277, - [336] = 278, - [337] = 279, - [338] = 280, - [339] = 339, - [340] = 281, - [341] = 282, - [342] = 284, - [343] = 285, - [344] = 286, - [345] = 287, - [346] = 288, - [347] = 260, - [348] = 256, - [349] = 349, - [350] = 241, - [351] = 233, - [352] = 234, - [353] = 239, - [354] = 259, - [355] = 242, - [356] = 356, - [357] = 357, - [358] = 358, - [359] = 359, - [360] = 360, - [361] = 361, - [362] = 362, - [363] = 363, - [364] = 364, - [365] = 365, - [366] = 366, - [367] = 367, - [368] = 368, - [369] = 369, - [370] = 370, - [371] = 371, - [372] = 372, - [373] = 373, - [374] = 374, - [375] = 375, - [376] = 376, - [377] = 377, - [378] = 378, - [379] = 250, - [380] = 240, - [381] = 249, - [382] = 382, - [383] = 383, - [384] = 384, - [385] = 272, - [386] = 289, - [387] = 387, - [388] = 388, - [389] = 229, - [390] = 228, - [391] = 231, - [392] = 392, - [393] = 393, + [329] = 329, + [330] = 235, + [331] = 331, + [332] = 236, + [333] = 237, + [334] = 238, + [335] = 240, + [336] = 241, + [337] = 337, + [338] = 243, + [339] = 244, + [340] = 245, + [341] = 246, + [342] = 247, + [343] = 248, + [344] = 249, + [345] = 250, + [346] = 251, + [347] = 252, + [348] = 253, + [349] = 233, + [350] = 254, + [351] = 255, + [352] = 256, + [353] = 234, + [354] = 354, + [355] = 239, + [356] = 242, + [357] = 281, + [358] = 263, + [359] = 264, + [360] = 265, + [361] = 266, + [362] = 267, + [363] = 268, + [364] = 259, + [365] = 270, + [366] = 271, + [367] = 272, + [368] = 262, + [369] = 274, + [370] = 269, + [371] = 276, + [372] = 277, + [373] = 275, + [374] = 279, + [375] = 257, + [376] = 289, + [377] = 280, + [378] = 282, + [379] = 283, + [380] = 278, + [381] = 285, + [382] = 293, + [383] = 287, + [384] = 288, + [385] = 290, + [386] = 291, + [387] = 292, + [388] = 261, + [389] = 284, + [390] = 258, + [391] = 286, + [392] = 260, + [393] = 273, [394] = 394, [395] = 395, - [396] = 392, - [397] = 397, - [398] = 398, + [396] = 231, + [397] = 232, + [398] = 239, [399] = 399, [400] = 400, [401] = 401, - [402] = 394, - [403] = 403, + [402] = 402, + [403] = 400, [404] = 404, [405] = 405, - [406] = 397, - [407] = 403, + [406] = 228, + [407] = 407, [408] = 408, - [409] = 395, + [409] = 409, [410] = 410, - [411] = 404, - [412] = 410, - [413] = 398, - [414] = 399, - [415] = 400, - [416] = 393, - [417] = 405, - [418] = 418, + [411] = 411, + [412] = 412, + [413] = 413, + [414] = 414, + [415] = 415, + [416] = 416, + [417] = 404, + [418] = 413, [419] = 419, - [420] = 418, - [421] = 401, - [422] = 422, - [423] = 422, - [424] = 424, - [425] = 424, - [426] = 227, + [420] = 409, + [421] = 410, + [422] = 412, + [423] = 414, + [424] = 401, + [425] = 402, + [426] = 426, [427] = 427, - [428] = 428, - [429] = 429, + [428] = 419, + [429] = 426, [430] = 430, - [431] = 228, - [432] = 229, - [433] = 230, - [434] = 231, - [435] = 435, - [436] = 435, - [437] = 435, - [438] = 438, - [439] = 252, - [440] = 234, - [441] = 239, - [442] = 251, - [443] = 253, - [444] = 254, - [445] = 255, - [446] = 232, - [447] = 257, - [448] = 258, - [449] = 289, - [450] = 261, - [451] = 451, - [452] = 262, - [453] = 263, + [431] = 431, + [432] = 430, + [433] = 415, + [434] = 416, + [435] = 431, + [436] = 427, + [437] = 437, + [438] = 231, + [439] = 232, + [440] = 239, + [441] = 441, + [442] = 236, + [443] = 252, + [444] = 238, + [445] = 445, + [446] = 248, + [447] = 250, + [448] = 237, + [449] = 253, + [450] = 235, + [451] = 247, + [452] = 246, + [453] = 453, [454] = 454, - [455] = 272, - [456] = 240, + [455] = 233, + [456] = 251, [457] = 457, - [458] = 249, - [459] = 264, - [460] = 265, - [461] = 461, - [462] = 266, - [463] = 259, - [464] = 267, - [465] = 268, - [466] = 466, - [467] = 269, - [468] = 270, - [469] = 469, - [470] = 271, - [471] = 235, - [472] = 273, - [473] = 274, - [474] = 236, - [475] = 475, - [476] = 275, - [477] = 242, - [478] = 243, - [479] = 244, - [480] = 276, + [458] = 242, + [459] = 243, + [460] = 249, + [461] = 254, + [462] = 445, + [463] = 457, + [464] = 255, + [465] = 244, + [466] = 245, + [467] = 445, + [468] = 256, + [469] = 457, + [470] = 234, + [471] = 240, + [472] = 241, + [473] = 473, + [474] = 287, + [475] = 282, + [476] = 283, + [477] = 477, + [478] = 264, + [479] = 265, + [480] = 480, [481] = 481, - [482] = 245, - [483] = 483, - [484] = 278, + [482] = 482, + [483] = 268, + [484] = 286, [485] = 279, - [486] = 280, - [487] = 281, - [488] = 246, - [489] = 250, - [490] = 237, - [491] = 282, - [492] = 283, - [493] = 284, - [494] = 285, - [495] = 238, - [496] = 286, - [497] = 497, - [498] = 287, - [499] = 288, - [500] = 260, - [501] = 256, - [502] = 457, - [503] = 475, - [504] = 497, - [505] = 454, - [506] = 248, - [507] = 241, - [508] = 457, - [509] = 475, - [510] = 497, - [511] = 454, - [512] = 233, - [513] = 277, - [514] = 514, - [515] = 515, - [516] = 516, - [517] = 517, + [486] = 270, + [487] = 487, + [488] = 278, + [489] = 289, + [490] = 262, + [491] = 271, + [492] = 492, + [493] = 274, + [494] = 272, + [495] = 487, + [496] = 496, + [497] = 276, + [498] = 498, + [499] = 266, + [500] = 291, + [501] = 258, + [502] = 280, + [503] = 260, + [504] = 277, + [505] = 257, + [506] = 269, + [507] = 481, + [508] = 482, + [509] = 285, + [510] = 273, + [511] = 292, + [512] = 288, + [513] = 481, + [514] = 267, + [515] = 481, + [516] = 263, + [517] = 259, [518] = 518, - [519] = 519, - [520] = 520, - [521] = 521, - [522] = 522, - [523] = 522, - [524] = 524, - [525] = 525, - [526] = 524, + [519] = 482, + [520] = 281, + [521] = 290, + [522] = 481, + [523] = 275, + [524] = 284, + [525] = 293, + [526] = 261, [527] = 527, - [528] = 527, + [528] = 328, [529] = 529, - [530] = 522, - [531] = 531, - [532] = 532, - [533] = 533, - [534] = 522, - [535] = 522, - [536] = 524, + [530] = 530, + [531] = 329, + [532] = 313, + [533] = 302, + [534] = 314, + [535] = 309, + [536] = 536, [537] = 537, - [538] = 538, - [539] = 376, - [540] = 360, + [538] = 315, + [539] = 316, + [540] = 308, [541] = 541, - [542] = 300, - [543] = 362, - [544] = 363, - [545] = 545, - [546] = 546, + [542] = 542, + [543] = 317, + [544] = 544, + [545] = 310, + [546] = 318, [547] = 547, - [548] = 365, - [549] = 366, - [550] = 367, - [551] = 368, - [552] = 333, - [553] = 374, - [554] = 375, - [555] = 377, - [556] = 370, - [557] = 371, - [558] = 558, - [559] = 372, - [560] = 560, - [561] = 229, - [562] = 373, - [563] = 334, - [564] = 564, - [565] = 565, - [566] = 378, - [567] = 567, - [568] = 382, - [569] = 383, - [570] = 570, - [571] = 384, - [572] = 349, - [573] = 339, - [574] = 357, - [575] = 558, - [576] = 576, - [577] = 577, - [578] = 578, - [579] = 579, - [580] = 538, - [581] = 545, - [582] = 356, - [583] = 359, - [584] = 577, - [585] = 547, - [586] = 578, - [587] = 564, - [588] = 369, - [589] = 589, - [590] = 364, - [591] = 591, - [592] = 558, - [593] = 306, - [594] = 576, - [595] = 577, - [596] = 578, - [597] = 538, - [598] = 545, - [599] = 358, - [600] = 547, - [601] = 589, - [602] = 564, - [603] = 589, - [604] = 319, - [605] = 328, - [606] = 606, - [607] = 299, - [608] = 301, - [609] = 579, - [610] = 541, - [611] = 361, - [612] = 579, - [613] = 541, - [614] = 576, - [615] = 231, + [548] = 548, + [549] = 549, + [550] = 550, + [551] = 551, + [552] = 541, + [553] = 529, + [554] = 547, + [555] = 555, + [556] = 548, + [557] = 557, + [558] = 557, + [559] = 319, + [560] = 555, + [561] = 561, + [562] = 551, + [563] = 297, + [564] = 331, + [565] = 527, + [566] = 566, + [567] = 542, + [568] = 568, + [569] = 569, + [570] = 549, + [571] = 307, + [572] = 301, + [573] = 542, + [574] = 550, + [575] = 547, + [576] = 548, + [577] = 549, + [578] = 550, + [579] = 321, + [580] = 541, + [581] = 529, + [582] = 322, + [583] = 555, + [584] = 557, + [585] = 551, + [586] = 566, + [587] = 323, + [588] = 320, + [589] = 324, + [590] = 311, + [591] = 354, + [592] = 337, + [593] = 312, + [594] = 325, + [595] = 326, + [596] = 596, + [597] = 299, + [598] = 598, + [599] = 300, + [600] = 566, + [601] = 569, + [602] = 306, + [603] = 603, + [604] = 569, + [605] = 527, + [606] = 303, + [607] = 304, + [608] = 327, + [609] = 305, + [610] = 298, + [611] = 611, + [612] = 612, + [613] = 613, + [614] = 614, + [615] = 611, [616] = 616, [617] = 617, - [618] = 618, - [619] = 619, - [620] = 620, + [618] = 614, + [619] = 616, + [620] = 614, [621] = 621, [622] = 622, - [623] = 622, - [624] = 622, + [623] = 616, + [624] = 624, [625] = 625, - [626] = 620, - [627] = 620, - [628] = 228, + [626] = 611, + [627] = 627, + [628] = 231, [629] = 629, - [630] = 629, + [630] = 630, [631] = 631, [632] = 632, - [633] = 633, - [634] = 631, - [635] = 632, - [636] = 633, + [633] = 239, + [634] = 634, + [635] = 635, + [636] = 636, [637] = 637, [638] = 638, [639] = 639, [640] = 640, - [641] = 641, + [641] = 232, [642] = 642, - [643] = 643, - [644] = 644, - [645] = 645, - [646] = 646, + [643] = 638, + [644] = 639, + [645] = 637, + [646] = 640, [647] = 647, [648] = 648, - [649] = 428, + [649] = 649, [650] = 650, - [651] = 651, + [651] = 437, [652] = 652, [653] = 653, [654] = 654, @@ -3237,34 +3312,34 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [658] = 658, [659] = 659, [660] = 660, - [661] = 652, + [661] = 661, [662] = 662, [663] = 663, [664] = 664, [665] = 665, - [666] = 663, + [666] = 666, [667] = 667, - [668] = 668, + [668] = 665, [669] = 669, [670] = 670, [671] = 671, [672] = 672, - [673] = 667, + [673] = 673, [674] = 674, [675] = 675, [676] = 676, [677] = 677, [678] = 678, - [679] = 654, + [679] = 679, [680] = 680, [681] = 681, [682] = 682, [683] = 683, [684] = 684, - [685] = 685, + [685] = 675, [686] = 686, - [687] = 687, - [688] = 688, + [687] = 661, + [688] = 686, [689] = 689, [690] = 690, [691] = 691, @@ -3272,7 +3347,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [693] = 693, [694] = 694, [695] = 695, - [696] = 438, + [696] = 696, [697] = 697, [698] = 698, [699] = 699, @@ -3303,8 +3378,8 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [724] = 724, [725] = 725, [726] = 726, - [727] = 242, - [728] = 289, + [727] = 727, + [728] = 728, [729] = 729, [730] = 730, [731] = 731, @@ -3328,114 +3403,114 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [749] = 749, [750] = 750, [751] = 751, - [752] = 752, - [753] = 753, - [754] = 754, - [755] = 751, + [752] = 284, + [753] = 258, + [754] = 518, + [755] = 755, [756] = 756, [757] = 757, [758] = 758, [759] = 759, - [760] = 753, + [760] = 760, [761] = 761, - [762] = 756, - [763] = 759, + [762] = 762, + [763] = 763, [764] = 764, [765] = 765, [766] = 766, [767] = 767, [768] = 768, - [769] = 766, - [770] = 767, - [771] = 765, + [769] = 769, + [770] = 770, + [771] = 771, [772] = 772, [773] = 773, - [774] = 764, + [774] = 762, [775] = 775, [776] = 776, - [777] = 777, - [778] = 773, - [779] = 768, - [780] = 761, + [777] = 760, + [778] = 764, + [779] = 779, + [780] = 776, [781] = 781, - [782] = 754, - [783] = 775, - [784] = 776, - [785] = 777, + [782] = 771, + [783] = 772, + [784] = 784, + [785] = 773, [786] = 786, [787] = 787, - [788] = 788, - [789] = 757, - [790] = 532, - [791] = 791, - [792] = 792, - [793] = 531, - [794] = 794, - [795] = 795, - [796] = 533, + [788] = 761, + [789] = 763, + [790] = 766, + [791] = 767, + [792] = 769, + [793] = 770, + [794] = 775, + [795] = 781, + [796] = 796, [797] = 797, [798] = 798, - [799] = 799, - [800] = 515, - [801] = 801, - [802] = 799, - [803] = 799, - [804] = 801, + [799] = 786, + [800] = 617, + [801] = 625, + [802] = 802, + [803] = 803, + [804] = 804, [805] = 805, - [806] = 537, - [807] = 801, - [808] = 808, + [806] = 806, + [807] = 807, + [808] = 624, [809] = 809, [810] = 810, - [811] = 811, + [811] = 621, [812] = 812, - [813] = 813, - [814] = 814, - [815] = 815, - [816] = 811, - [817] = 817, - [818] = 817, - [819] = 815, + [813] = 802, + [814] = 807, + [815] = 802, + [816] = 807, + [817] = 622, + [818] = 818, + [819] = 819, [820] = 820, - [821] = 817, + [821] = 821, [822] = 822, [823] = 823, - [824] = 824, + [824] = 822, [825] = 825, [826] = 826, - [827] = 827, + [827] = 823, [828] = 828, [829] = 829, - [830] = 830, - [831] = 831, + [830] = 828, + [831] = 823, [832] = 832, - [833] = 829, + [833] = 833, [834] = 834, [835] = 835, [836] = 836, [837] = 837, [838] = 838, - [839] = 828, + [839] = 839, [840] = 840, [841] = 841, [842] = 842, [843] = 843, - [844] = 829, + [844] = 844, [845] = 845, [846] = 846, - [847] = 228, - [848] = 848, - [849] = 229, + [847] = 847, + [848] = 613, + [849] = 834, [850] = 850, [851] = 851, [852] = 852, [853] = 853, - [854] = 518, - [855] = 855, + [854] = 854, + [855] = 853, [856] = 856, - [857] = 857, - [858] = 842, - [859] = 859, + [857] = 232, + [858] = 858, + [859] = 231, [860] = 860, [861] = 861, [862] = 862, @@ -3444,16 +3519,16 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [865] = 865, [866] = 866, [867] = 867, - [868] = 838, + [868] = 868, [869] = 869, - [870] = 862, - [871] = 864, + [870] = 850, + [871] = 871, [872] = 872, [873] = 873, [874] = 874, [875] = 875, [876] = 876, - [877] = 828, + [877] = 877, [878] = 878, [879] = 879, [880] = 880, @@ -3462,234 +3537,234 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [883] = 883, [884] = 884, [885] = 885, - [886] = 886, + [886] = 842, [887] = 887, [888] = 888, - [889] = 889, + [889] = 879, [890] = 890, - [891] = 891, - [892] = 860, + [891] = 882, + [892] = 852, [893] = 893, - [894] = 837, - [895] = 890, - [896] = 850, - [897] = 863, - [898] = 885, + [894] = 894, + [895] = 895, + [896] = 896, + [897] = 897, + [898] = 898, [899] = 899, - [900] = 869, - [901] = 830, - [902] = 861, - [903] = 865, + [900] = 900, + [901] = 901, + [902] = 902, + [903] = 903, [904] = 904, - [905] = 836, - [906] = 834, + [905] = 905, + [906] = 906, [907] = 907, - [908] = 908, - [909] = 837, - [910] = 910, - [911] = 890, - [912] = 863, - [913] = 874, - [914] = 914, - [915] = 915, - [916] = 916, + [908] = 905, + [909] = 909, + [910] = 880, + [911] = 911, + [912] = 850, + [913] = 842, + [914] = 868, + [915] = 881, + [916] = 895, [917] = 917, - [918] = 842, - [919] = 904, + [918] = 871, + [919] = 854, [920] = 920, - [921] = 733, - [922] = 231, - [923] = 923, - [924] = 924, - [925] = 925, + [921] = 836, + [922] = 856, + [923] = 867, + [924] = 878, + [925] = 880, [926] = 926, [927] = 927, - [928] = 928, - [929] = 929, - [930] = 930, + [928] = 834, + [929] = 881, + [930] = 853, [931] = 931, - [932] = 930, - [933] = 933, - [934] = 934, - [935] = 617, - [936] = 618, - [937] = 929, - [938] = 929, + [932] = 920, + [933] = 909, + [934] = 706, + [935] = 239, + [936] = 631, + [937] = 937, + [938] = 938, [939] = 939, [940] = 940, - [941] = 930, + [941] = 941, [942] = 942, [943] = 943, [944] = 944, [945] = 945, [946] = 946, [947] = 947, - [948] = 948, + [948] = 937, [949] = 949, [950] = 950, [951] = 951, [952] = 952, [953] = 953, [954] = 954, - [955] = 428, - [956] = 956, + [955] = 955, + [956] = 636, [957] = 957, - [958] = 956, - [959] = 959, - [960] = 953, - [961] = 959, - [962] = 867, - [963] = 963, + [958] = 946, + [959] = 937, + [960] = 960, + [961] = 961, + [962] = 962, + [963] = 946, [964] = 964, - [965] = 808, + [965] = 965, [966] = 966, [967] = 967, - [968] = 966, - [969] = 969, - [970] = 957, - [971] = 964, - [972] = 969, - [973] = 954, + [968] = 968, + [969] = 885, + [970] = 970, + [971] = 971, + [972] = 972, + [973] = 972, [974] = 974, - [975] = 975, - [976] = 976, - [977] = 977, + [975] = 967, + [976] = 968, + [977] = 970, [978] = 978, - [979] = 979, - [980] = 980, + [979] = 971, + [980] = 966, [981] = 981, [982] = 982, - [983] = 983, - [984] = 984, - [985] = 758, - [986] = 986, + [983] = 437, + [984] = 818, + [985] = 978, + [986] = 981, [987] = 987, [988] = 988, [989] = 989, [990] = 990, [991] = 991, [992] = 992, - [993] = 989, + [993] = 993, [994] = 994, - [995] = 994, - [996] = 974, - [997] = 976, - [998] = 998, + [995] = 995, + [996] = 996, + [997] = 997, + [998] = 647, [999] = 999, [1000] = 1000, [1001] = 1001, - [1002] = 1002, - [1003] = 986, - [1004] = 991, - [1005] = 1000, - [1006] = 988, - [1007] = 787, - [1008] = 1008, - [1009] = 978, - [1010] = 638, - [1011] = 989, - [1012] = 998, - [1013] = 994, - [1014] = 992, + [1002] = 987, + [1003] = 1003, + [1004] = 1004, + [1005] = 1005, + [1006] = 1006, + [1007] = 1007, + [1008] = 1003, + [1009] = 1009, + [1010] = 1010, + [1011] = 1011, + [1012] = 1012, + [1013] = 1013, + [1014] = 1013, [1015] = 1015, [1016] = 1016, - [1017] = 999, - [1018] = 983, - [1019] = 1019, + [1017] = 1017, + [1018] = 996, + [1019] = 1005, [1020] = 1020, - [1021] = 990, - [1022] = 977, - [1023] = 1020, - [1024] = 1024, - [1025] = 1025, - [1026] = 1024, - [1027] = 975, - [1028] = 1016, - [1029] = 979, + [1021] = 1020, + [1022] = 1022, + [1023] = 992, + [1024] = 1000, + [1025] = 1000, + [1026] = 1001, + [1027] = 1011, + [1028] = 797, + [1029] = 1006, [1030] = 1030, - [1031] = 980, - [1032] = 1008, - [1033] = 1016, - [1034] = 1015, - [1035] = 1001, - [1036] = 1002, - [1037] = 999, - [1038] = 992, - [1039] = 1039, - [1040] = 1040, - [1041] = 1041, - [1042] = 1042, + [1031] = 989, + [1032] = 1015, + [1033] = 1033, + [1034] = 1034, + [1035] = 1030, + [1036] = 798, + [1037] = 1037, + [1038] = 1034, + [1039] = 1001, + [1040] = 995, + [1041] = 1033, + [1042] = 993, [1043] = 1043, - [1044] = 1044, - [1045] = 639, - [1046] = 1039, - [1047] = 1047, - [1048] = 1048, - [1049] = 1040, - [1050] = 1044, - [1051] = 1051, + [1044] = 1012, + [1045] = 1030, + [1046] = 989, + [1047] = 1015, + [1048] = 1034, + [1049] = 1016, + [1050] = 994, + [1051] = 992, [1052] = 1052, - [1053] = 1053, + [1053] = 997, [1054] = 1054, - [1055] = 1055, - [1056] = 1056, + [1055] = 1017, + [1056] = 1007, [1057] = 1057, - [1058] = 1058, - [1059] = 1059, - [1060] = 1060, - [1061] = 1061, - [1062] = 1062, - [1063] = 1063, - [1064] = 1048, - [1065] = 1058, + [1058] = 990, + [1059] = 1004, + [1060] = 1010, + [1061] = 1007, + [1062] = 1052, + [1063] = 1037, + [1064] = 1006, + [1065] = 1065, [1066] = 1066, - [1067] = 1067, - [1068] = 438, - [1069] = 1069, + [1067] = 261, + [1068] = 1068, + [1069] = 649, [1070] = 1070, [1071] = 1071, [1072] = 1072, - [1073] = 1054, - [1074] = 640, - [1075] = 1044, - [1076] = 1055, - [1077] = 1077, - [1078] = 1078, - [1079] = 1060, - [1080] = 1060, + [1073] = 1073, + [1074] = 1074, + [1075] = 1075, + [1076] = 1076, + [1077] = 648, + [1078] = 518, + [1079] = 1079, + [1080] = 1080, [1081] = 1081, - [1082] = 1055, - [1083] = 259, - [1084] = 1084, + [1082] = 1082, + [1083] = 1083, + [1084] = 1081, [1085] = 1085, [1086] = 1086, [1087] = 1087, [1088] = 1088, - [1089] = 1089, - [1090] = 1048, + [1089] = 1085, + [1090] = 1090, [1091] = 1091, [1092] = 1092, - [1093] = 1077, + [1093] = 1093, [1094] = 1094, - [1095] = 1040, - [1096] = 1096, - [1097] = 1097, + [1095] = 1095, + [1096] = 1068, + [1097] = 835, [1098] = 1098, [1099] = 1099, - [1100] = 887, - [1101] = 641, - [1102] = 1102, + [1100] = 1088, + [1101] = 1101, + [1102] = 1081, [1103] = 1103, [1104] = 1104, [1105] = 1105, - [1106] = 1106, + [1106] = 650, [1107] = 1107, [1108] = 1108, [1109] = 1109, [1110] = 1110, [1111] = 1111, [1112] = 1112, - [1113] = 1113, + [1113] = 1103, [1114] = 1114, [1115] = 1115, [1116] = 1116, @@ -3700,7 +3775,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1121] = 1121, [1122] = 1122, [1123] = 1123, - [1124] = 643, + [1124] = 1124, [1125] = 1125, [1126] = 1126, [1127] = 1127, @@ -3712,595 +3787,624 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1133] = 1133, [1134] = 1134, [1135] = 1135, - [1136] = 1136, + [1136] = 1116, [1137] = 1137, [1138] = 1138, - [1139] = 1139, + [1139] = 657, [1140] = 1140, - [1141] = 1141, + [1141] = 656, [1142] = 1142, [1143] = 1143, [1144] = 1144, [1145] = 1145, [1146] = 1146, - [1147] = 1147, + [1147] = 1123, [1148] = 1148, [1149] = 1149, [1150] = 1150, - [1151] = 647, + [1151] = 1151, [1152] = 1152, - [1153] = 648, - [1154] = 1141, - [1155] = 1155, + [1153] = 1153, + [1154] = 1154, + [1155] = 1130, [1156] = 1156, [1157] = 1157, - [1158] = 1158, - [1159] = 1159, + [1158] = 655, + [1159] = 1154, [1160] = 1160, [1161] = 1161, - [1162] = 1112, - [1163] = 1121, + [1162] = 1162, + [1163] = 658, [1164] = 1164, - [1165] = 1165, + [1165] = 1149, [1166] = 1166, - [1167] = 1167, - [1168] = 1165, - [1169] = 1102, - [1170] = 1170, - [1171] = 1171, - [1172] = 1106, - [1173] = 1173, + [1167] = 1156, + [1168] = 1161, + [1169] = 1169, + [1170] = 1132, + [1171] = 1125, + [1172] = 1172, + [1173] = 652, [1174] = 1174, - [1175] = 1175, - [1176] = 646, - [1177] = 1177, - [1178] = 1110, - [1179] = 1179, - [1180] = 1156, - [1181] = 1113, + [1175] = 1152, + [1176] = 1176, + [1177] = 1115, + [1178] = 1123, + [1179] = 1134, + [1180] = 1180, + [1181] = 1181, [1182] = 1182, - [1183] = 1117, - [1184] = 1122, - [1185] = 1128, - [1186] = 1137, - [1187] = 1139, - [1188] = 1140, - [1189] = 1143, - [1190] = 1145, - [1191] = 1149, - [1192] = 1152, - [1193] = 1157, + [1183] = 1126, + [1184] = 1184, + [1185] = 1185, + [1186] = 1186, + [1187] = 1187, + [1188] = 1188, + [1189] = 1189, + [1190] = 1190, + [1191] = 1191, + [1192] = 1192, + [1193] = 1135, [1194] = 1194, - [1195] = 1102, + [1195] = 1195, [1196] = 1196, - [1197] = 1152, + [1197] = 1197, [1198] = 1198, - [1199] = 1199, + [1199] = 1182, [1200] = 1200, - [1201] = 1141, - [1202] = 1156, + [1201] = 1201, + [1202] = 1202, [1203] = 1203, - [1204] = 1204, - [1205] = 1134, + [1204] = 1176, + [1205] = 1189, [1206] = 1206, - [1207] = 1182, - [1208] = 1208, - [1209] = 1209, + [1207] = 1180, + [1208] = 1149, + [1209] = 1154, [1210] = 1210, - [1211] = 1196, + [1211] = 1211, [1212] = 1212, - [1213] = 1103, - [1214] = 1123, - [1215] = 1146, - [1216] = 1174, - [1217] = 1171, - [1218] = 1105, - [1219] = 1119, - [1220] = 1212, - [1221] = 1134, - [1222] = 1222, - [1223] = 1208, - [1224] = 1209, - [1225] = 1175, - [1226] = 1196, - [1227] = 1103, - [1228] = 1174, - [1229] = 1229, - [1230] = 1209, + [1213] = 1129, + [1214] = 1214, + [1215] = 1215, + [1216] = 1130, + [1217] = 1161, + [1218] = 1218, + [1219] = 1125, + [1220] = 1148, + [1221] = 1221, + [1222] = 1176, + [1223] = 1223, + [1224] = 1134, + [1225] = 1160, + [1226] = 1126, + [1227] = 1227, + [1228] = 1162, + [1229] = 654, + [1230] = 1206, [1231] = 1231, - [1232] = 1132, + [1232] = 1232, [1233] = 1233, [1234] = 1234, - [1235] = 1132, - [1236] = 1236, - [1237] = 642, - [1238] = 644, - [1239] = 1166, - [1240] = 1240, - [1241] = 645, + [1235] = 1181, + [1236] = 1201, + [1237] = 1190, + [1238] = 1238, + [1239] = 1132, + [1240] = 653, + [1241] = 1181, [1242] = 1242, - [1243] = 1199, - [1244] = 1166, - [1245] = 1208, - [1246] = 533, - [1247] = 1247, + [1243] = 1194, + [1244] = 1244, + [1245] = 1245, + [1246] = 1153, + [1247] = 1122, [1248] = 1248, - [1249] = 1249, - [1250] = 1250, - [1251] = 1159, + [1249] = 1124, + [1250] = 1144, + [1251] = 1251, [1252] = 1252, - [1253] = 1253, - [1254] = 1254, - [1255] = 1255, - [1256] = 1256, - [1257] = 1257, - [1258] = 657, + [1253] = 1138, + [1254] = 1153, + [1255] = 1127, + [1256] = 1157, + [1257] = 1242, + [1258] = 1223, [1259] = 1259, - [1260] = 1260, + [1260] = 1169, [1261] = 1261, [1262] = 1262, - [1263] = 857, + [1263] = 1263, [1264] = 1264, [1265] = 1265, - [1266] = 1266, + [1266] = 1120, [1267] = 1267, [1268] = 1268, - [1269] = 1269, - [1270] = 1265, + [1269] = 662, + [1270] = 1270, [1271] = 1271, [1272] = 1272, - [1273] = 822, + [1273] = 684, [1274] = 1274, - [1275] = 1275, + [1275] = 670, [1276] = 1276, [1277] = 1277, [1278] = 1278, [1279] = 1279, - [1280] = 1276, - [1281] = 659, + [1280] = 1280, + [1281] = 1281, [1282] = 1282, [1283] = 1283, [1284] = 1284, [1285] = 1285, [1286] = 1286, - [1287] = 515, - [1288] = 669, + [1287] = 1287, + [1288] = 1288, [1289] = 1289, - [1290] = 1290, - [1291] = 664, - [1292] = 1256, + [1290] = 1276, + [1291] = 1291, + [1292] = 1292, [1293] = 1293, [1294] = 1294, - [1295] = 531, - [1296] = 532, + [1295] = 1295, + [1296] = 1296, [1297] = 1297, - [1298] = 1265, - [1299] = 1272, + [1298] = 1298, + [1299] = 1299, [1300] = 1300, [1301] = 1301, - [1302] = 1302, - [1303] = 1271, - [1304] = 1286, - [1305] = 1305, - [1306] = 656, + [1302] = 674, + [1303] = 622, + [1304] = 624, + [1305] = 625, + [1306] = 1285, [1307] = 1307, [1308] = 1308, - [1309] = 1309, + [1309] = 877, [1310] = 1310, [1311] = 1311, - [1312] = 651, - [1313] = 1313, - [1314] = 1254, - [1315] = 1274, - [1316] = 1269, - [1317] = 1293, - [1318] = 1307, - [1319] = 1247, - [1320] = 1320, - [1321] = 1311, + [1312] = 1312, + [1313] = 617, + [1314] = 1287, + [1315] = 825, + [1316] = 1316, + [1317] = 1317, + [1318] = 621, + [1319] = 1319, + [1320] = 1293, + [1321] = 1321, [1322] = 1322, [1323] = 1323, - [1324] = 1297, - [1325] = 1266, + [1324] = 1324, + [1325] = 1291, [1326] = 1326, - [1327] = 1293, + [1327] = 1322, [1328] = 1328, - [1329] = 1257, - [1330] = 1330, - [1331] = 1285, + [1329] = 876, + [1330] = 1292, + [1331] = 1331, [1332] = 1332, - [1333] = 537, - [1334] = 1322, - [1335] = 835, - [1336] = 1336, - [1337] = 1257, - [1338] = 1310, - [1339] = 1262, - [1340] = 1266, + [1333] = 666, + [1334] = 1334, + [1335] = 1335, + [1336] = 667, + [1337] = 1337, + [1338] = 1331, + [1339] = 1339, + [1340] = 1340, [1341] = 1341, - [1342] = 1262, + [1342] = 1334, [1343] = 1343, - [1344] = 1344, - [1345] = 1345, - [1346] = 1346, + [1344] = 1316, + [1345] = 1340, + [1346] = 1264, [1347] = 1347, - [1348] = 1348, - [1349] = 1349, - [1350] = 731, - [1351] = 675, - [1352] = 1352, - [1353] = 1353, + [1348] = 1328, + [1349] = 1265, + [1350] = 1308, + [1351] = 1267, + [1352] = 1310, + [1353] = 1286, [1354] = 1354, - [1355] = 1355, - [1356] = 1356, - [1357] = 1357, - [1358] = 1358, - [1359] = 1359, + [1355] = 1326, + [1356] = 1332, + [1357] = 1267, + [1358] = 1293, + [1359] = 1316, [1360] = 1360, - [1361] = 1361, + [1361] = 1264, [1362] = 1362, - [1363] = 1363, + [1363] = 1287, [1364] = 1364, - [1365] = 1365, + [1365] = 673, [1366] = 1366, [1367] = 1367, - [1368] = 732, - [1369] = 690, + [1368] = 1368, + [1369] = 1369, [1370] = 1370, [1371] = 1371, [1372] = 1372, [1373] = 1373, - [1374] = 650, + [1374] = 1374, [1375] = 1375, [1376] = 1376, [1377] = 1377, [1378] = 1378, [1379] = 1379, - [1380] = 1380, + [1380] = 690, [1381] = 1381, [1382] = 1382, - [1383] = 1383, + [1383] = 740, [1384] = 1384, [1385] = 1385, [1386] = 1386, [1387] = 1387, - [1388] = 734, - [1389] = 691, + [1388] = 1388, + [1389] = 701, [1390] = 1390, - [1391] = 692, - [1392] = 735, + [1391] = 1391, + [1392] = 1392, [1393] = 1393, - [1394] = 687, + [1394] = 1394, [1395] = 1395, - [1396] = 1359, - [1397] = 653, + [1396] = 1396, + [1397] = 1397, [1398] = 1398, - [1399] = 693, + [1399] = 1399, [1400] = 1400, [1401] = 1401, - [1402] = 1402, + [1402] = 671, [1403] = 1403, [1404] = 1404, - [1405] = 1405, + [1405] = 747, [1406] = 1406, - [1407] = 242, + [1407] = 1407, [1408] = 1408, - [1409] = 694, - [1410] = 655, - [1411] = 1401, + [1409] = 1409, + [1410] = 1410, + [1411] = 1411, [1412] = 1412, - [1413] = 1413, - [1414] = 1402, + [1413] = 1407, + [1414] = 725, [1415] = 1415, - [1416] = 681, - [1417] = 736, - [1418] = 695, - [1419] = 1419, + [1416] = 1416, + [1417] = 1417, + [1418] = 702, + [1419] = 672, [1420] = 1420, [1421] = 1421, [1422] = 1422, - [1423] = 1423, - [1424] = 1424, - [1425] = 1425, - [1426] = 672, + [1423] = 703, + [1424] = 691, + [1425] = 693, + [1426] = 1426, [1427] = 1427, [1428] = 1428, - [1429] = 697, - [1430] = 671, + [1429] = 676, + [1430] = 1430, [1431] = 1431, - [1432] = 678, + [1432] = 1409, [1433] = 1433, - [1434] = 1434, - [1435] = 1435, - [1436] = 1436, - [1437] = 1437, - [1438] = 1438, - [1439] = 1439, - [1440] = 682, + [1434] = 707, + [1435] = 1400, + [1436] = 663, + [1437] = 1372, + [1438] = 1399, + [1439] = 694, + [1440] = 708, [1441] = 1441, - [1442] = 1442, - [1443] = 683, - [1444] = 1444, - [1445] = 684, - [1446] = 289, + [1442] = 709, + [1443] = 695, + [1444] = 1410, + [1445] = 1445, + [1446] = 1411, [1447] = 1447, - [1448] = 1448, + [1448] = 711, [1449] = 1449, - [1450] = 1450, - [1451] = 719, + [1450] = 1388, + [1451] = 696, [1452] = 1452, - [1453] = 1425, - [1454] = 685, - [1455] = 749, - [1456] = 699, + [1453] = 713, + [1454] = 1454, + [1455] = 1396, + [1456] = 1364, [1457] = 1457, [1458] = 1458, - [1459] = 723, + [1459] = 714, [1460] = 1460, - [1461] = 1461, - [1462] = 1400, - [1463] = 700, - [1464] = 1464, - [1465] = 1371, - [1466] = 1354, + [1461] = 715, + [1462] = 1462, + [1463] = 716, + [1464] = 677, + [1465] = 1465, + [1466] = 1466, [1467] = 1467, - [1468] = 701, - [1469] = 1347, - [1470] = 1435, + [1468] = 1468, + [1469] = 1469, + [1470] = 733, [1471] = 1471, - [1472] = 702, - [1473] = 703, + [1472] = 1472, + [1473] = 1412, [1474] = 1474, - [1475] = 676, - [1476] = 1381, + [1475] = 678, + [1476] = 1476, [1477] = 1477, - [1478] = 677, + [1478] = 1478, [1479] = 1479, - [1480] = 686, - [1481] = 704, + [1480] = 1480, + [1481] = 1481, [1482] = 1482, [1483] = 1483, [1484] = 1484, - [1485] = 1471, + [1485] = 1485, [1486] = 1486, [1487] = 1487, - [1488] = 1452, - [1489] = 1489, + [1488] = 664, + [1489] = 718, [1490] = 1490, - [1491] = 1405, + [1491] = 1491, [1492] = 1492, - [1493] = 1360, - [1494] = 1361, - [1495] = 1362, - [1496] = 1366, - [1497] = 737, - [1498] = 738, - [1499] = 724, - [1500] = 1384, - [1501] = 1385, - [1502] = 1386, - [1503] = 1359, - [1504] = 1504, - [1505] = 1405, + [1493] = 1493, + [1494] = 1494, + [1495] = 1481, + [1496] = 1496, + [1497] = 719, + [1498] = 700, + [1499] = 1499, + [1500] = 1500, + [1501] = 1501, + [1502] = 1502, + [1503] = 704, + [1504] = 720, + [1505] = 721, [1506] = 1506, - [1507] = 1408, - [1508] = 1508, - [1509] = 1425, - [1510] = 713, - [1511] = 875, - [1512] = 1435, - [1513] = 739, - [1514] = 1514, - [1515] = 1435, - [1516] = 705, - [1517] = 1435, - [1518] = 1479, - [1519] = 1519, - [1520] = 1382, - [1521] = 1521, - [1522] = 1378, - [1523] = 1523, - [1524] = 1523, - [1525] = 725, - [1526] = 1365, - [1527] = 1527, - [1528] = 1528, - [1529] = 1529, - [1530] = 715, - [1531] = 1408, - [1532] = 1532, - [1533] = 1533, - [1534] = 1534, - [1535] = 1434, - [1536] = 1536, + [1507] = 1507, + [1508] = 697, + [1509] = 1379, + [1510] = 1510, + [1511] = 679, + [1512] = 1445, + [1513] = 723, + [1514] = 1368, + [1515] = 1515, + [1516] = 1516, + [1517] = 1517, + [1518] = 1518, + [1519] = 1384, + [1520] = 1385, + [1521] = 1386, + [1522] = 1387, + [1523] = 1391, + [1524] = 724, + [1525] = 1421, + [1526] = 660, + [1527] = 1409, + [1528] = 1410, + [1529] = 1411, + [1530] = 1421, + [1531] = 1368, + [1532] = 1430, + [1533] = 759, + [1534] = 1433, + [1535] = 1535, + [1536] = 1388, [1537] = 1537, - [1538] = 1482, - [1539] = 1539, - [1540] = 706, - [1541] = 1541, - [1542] = 1542, - [1543] = 1543, - [1544] = 1544, - [1545] = 726, - [1546] = 1364, - [1547] = 750, - [1548] = 1548, + [1538] = 1538, + [1539] = 1481, + [1540] = 705, + [1541] = 1384, + [1542] = 1481, + [1543] = 726, + [1544] = 1481, + [1545] = 1428, + [1546] = 1546, + [1547] = 659, + [1548] = 680, [1549] = 1549, - [1550] = 707, - [1551] = 1384, - [1552] = 1552, + [1550] = 698, + [1551] = 1452, + [1552] = 699, [1553] = 1553, [1554] = 1554, - [1555] = 688, - [1556] = 709, - [1557] = 1383, + [1555] = 1555, + [1556] = 1433, + [1557] = 1397, [1558] = 1558, - [1559] = 1559, - [1560] = 662, + [1559] = 717, + [1560] = 1385, [1561] = 1561, - [1562] = 1385, - [1563] = 1386, - [1564] = 1490, - [1565] = 1508, + [1562] = 1477, + [1563] = 1404, + [1564] = 722, + [1565] = 1565, [1566] = 1566, - [1567] = 1567, - [1568] = 710, - [1569] = 740, - [1570] = 1570, - [1571] = 1372, - [1572] = 1421, - [1573] = 689, - [1574] = 711, - [1575] = 1486, - [1576] = 1412, - [1577] = 741, - [1578] = 1559, - [1579] = 1413, - [1580] = 1380, - [1581] = 1398, - [1582] = 1458, - [1583] = 1554, - [1584] = 665, - [1585] = 1585, - [1586] = 1586, - [1587] = 1587, - [1588] = 1588, + [1567] = 1370, + [1568] = 1386, + [1569] = 1369, + [1570] = 1447, + [1571] = 1571, + [1572] = 1485, + [1573] = 728, + [1574] = 1566, + [1575] = 1487, + [1576] = 692, + [1577] = 1577, + [1578] = 1578, + [1579] = 729, + [1580] = 1580, + [1581] = 1581, + [1582] = 1582, + [1583] = 1583, + [1584] = 730, + [1585] = 1578, + [1586] = 1491, + [1587] = 1500, + [1588] = 731, [1589] = 1589, - [1590] = 668, - [1591] = 1428, - [1592] = 1592, - [1593] = 1592, - [1594] = 1594, - [1595] = 742, - [1596] = 1360, - [1597] = 1567, - [1598] = 1431, - [1599] = 743, - [1600] = 1357, - [1601] = 744, - [1602] = 1602, - [1603] = 660, + [1590] = 732, + [1591] = 681, + [1592] = 1460, + [1593] = 1469, + [1594] = 1426, + [1595] = 1546, + [1596] = 682, + [1597] = 1427, + [1598] = 1598, + [1599] = 735, + [1600] = 1600, + [1601] = 1601, + [1602] = 734, + [1603] = 1603, [1604] = 1604, [1605] = 1605, - [1606] = 1606, - [1607] = 1378, - [1608] = 745, - [1609] = 1365, - [1610] = 1610, - [1611] = 1373, - [1612] = 712, - [1613] = 722, - [1614] = 1614, - [1615] = 1615, + [1606] = 1491, + [1607] = 736, + [1608] = 1561, + [1609] = 1601, + [1610] = 1382, + [1611] = 1441, + [1612] = 1612, + [1613] = 1479, + [1614] = 1483, + [1615] = 1494, [1616] = 1616, - [1617] = 1482, - [1618] = 1594, + [1617] = 1617, + [1618] = 669, [1619] = 1619, - [1620] = 1544, - [1621] = 1621, - [1622] = 680, - [1623] = 1387, - [1624] = 746, - [1625] = 1367, - [1626] = 1420, - [1627] = 1375, - [1628] = 1400, - [1629] = 1490, - [1630] = 1361, - [1631] = 1567, - [1632] = 658, + [1620] = 1619, + [1621] = 1420, + [1622] = 1484, + [1623] = 1623, + [1624] = 1553, + [1625] = 1565, + [1626] = 1431, + [1627] = 1387, + [1628] = 1492, + [1629] = 1501, + [1630] = 737, + [1631] = 1631, + [1632] = 1632, [1633] = 1633, - [1634] = 1634, - [1635] = 1398, - [1636] = 1458, - [1637] = 1554, - [1638] = 1362, - [1639] = 747, - [1640] = 1427, - [1641] = 1641, - [1642] = 748, - [1643] = 670, - [1644] = 1477, - [1645] = 1370, - [1646] = 1641, - [1647] = 1460, - [1648] = 1354, - [1649] = 1523, - [1650] = 1588, - [1651] = 1419, - [1652] = 714, - [1653] = 1585, - [1654] = 1461, - [1655] = 1423, - [1656] = 1561, + [1634] = 738, + [1635] = 1549, + [1636] = 1636, + [1637] = 1553, + [1638] = 1638, + [1639] = 1639, + [1640] = 739, + [1641] = 683, + [1642] = 1642, + [1643] = 1643, + [1644] = 741, + [1645] = 1565, + [1646] = 1646, + [1647] = 1370, + [1648] = 1648, + [1649] = 1485, + [1650] = 742, + [1651] = 1496, + [1652] = 1652, + [1653] = 1600, + [1654] = 1481, + [1655] = 1496, + [1656] = 1656, [1657] = 1657, - [1658] = 1435, + [1658] = 1460, [1659] = 1659, - [1660] = 1553, - [1661] = 1344, - [1662] = 1471, + [1660] = 1546, + [1661] = 743, + [1662] = 1662, [1663] = 1663, - [1664] = 1345, - [1665] = 1657, - [1666] = 1377, + [1664] = 1601, + [1665] = 1382, + [1666] = 1441, [1667] = 1667, - [1668] = 1492, - [1669] = 1669, - [1670] = 1586, - [1671] = 1393, - [1672] = 1667, - [1673] = 1673, - [1674] = 1558, - [1675] = 1589, - [1676] = 1676, - [1677] = 1663, - [1678] = 1477, - [1679] = 1370, - [1680] = 1381, - [1681] = 1461, - [1682] = 716, - [1683] = 1553, - [1684] = 1542, + [1668] = 1589, + [1669] = 1458, + [1670] = 1670, + [1671] = 744, + [1672] = 1672, + [1673] = 1408, + [1674] = 1538, + [1675] = 1675, + [1676] = 1454, + [1677] = 1501, + [1678] = 1452, + [1679] = 1517, + [1680] = 1659, + [1681] = 1670, + [1682] = 1682, + [1683] = 1598, + [1684] = 1506, [1685] = 1685, - [1686] = 1492, - [1687] = 1669, - [1688] = 1570, - [1689] = 1602, - [1690] = 1379, + [1686] = 1643, + [1687] = 1487, + [1688] = 1603, + [1689] = 1657, + [1690] = 1390, [1691] = 1691, - [1692] = 1692, - [1693] = 717, - [1694] = 1694, - [1695] = 1415, - [1696] = 1376, - [1697] = 674, - [1698] = 1698, - [1699] = 1566, - [1700] = 1489, - [1701] = 1534, - [1702] = 1673, - [1703] = 1366, - [1704] = 1633, - [1705] = 1705, - [1706] = 1587, - [1707] = 1669, - [1708] = 1484, - [1709] = 1484, - [1710] = 1566, - [1711] = 1489, - [1712] = 1356, - [1713] = 1448, - [1714] = 1541, - [1715] = 730, - [1716] = 1344, - [1717] = 1544, - [1718] = 1356, - [1719] = 718, + [1692] = 1555, + [1693] = 1558, + [1694] = 1398, + [1695] = 1652, + [1696] = 284, + [1697] = 1462, + [1698] = 1612, + [1699] = 1371, + [1700] = 1700, + [1701] = 1457, + [1702] = 1490, + [1703] = 1583, + [1704] = 1417, + [1705] = 745, + [1706] = 1706, + [1707] = 1408, + [1708] = 1538, + [1709] = 727, + [1710] = 1598, + [1711] = 1549, + [1712] = 1657, + [1713] = 1390, + [1714] = 1714, + [1715] = 1462, + [1716] = 1612, + [1717] = 1449, + [1718] = 1656, + [1719] = 1719, [1720] = 1720, - [1721] = 1452, - [1722] = 1722, - [1723] = 1694, - [1724] = 1621, + [1721] = 1719, + [1722] = 746, + [1723] = 1582, + [1724] = 1467, + [1725] = 1581, + [1726] = 1726, + [1727] = 1727, + [1728] = 1663, + [1729] = 1364, + [1730] = 1580, + [1731] = 689, + [1732] = 1430, + [1733] = 1476, + [1734] = 1391, + [1735] = 750, + [1736] = 755, + [1737] = 757, + [1738] = 1738, + [1739] = 1663, + [1740] = 1700, + [1741] = 1465, + [1742] = 1742, + [1743] = 748, + [1744] = 1744, + [1745] = 1745, + [1746] = 258, + [1747] = 1465, + [1748] = 1379, + [1749] = 1415, + [1750] = 1750, + [1751] = 869, + [1752] = 756, + [1753] = 1750, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -4308,679 +4412,720 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(44); + if (eof) ADVANCE(46); ADVANCE_MAP( - '!', 68, - '"', 12, - '%', 84, - '&', 20, - '(', 62, - ')', 63, - '*', 50, - '+', 79, - ',', 51, - '-', 81, - '.', 46, - '/', 82, - ':', 53, - ';', 52, - '<', 59, - '=', 56, - '>', 61, - '?', 72, - '[', 86, - ']', 70, - '{', 48, - '|', 66, - '}', 49, + '!', 70, + '"', 13, + '%', 86, + '&', 21, + '(', 88, + ')', 65, + '*', 52, + '+', 81, + ',', 53, + '-', 83, + '.', 48, + '/', 84, + ':', 55, + ';', 54, + '<', 91, + '=', 58, + '>', 63, + '?', 74, + '[', 89, + ']', 72, + '{', 50, + '|', 68, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(40); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + lookahead == ' ') SKIP(42); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 1: - if (lookahead == '\n') ADVANCE(19); - if (lookahead == '"') ADVANCE(14); - if (lookahead == '$') ADVANCE(15); + if (lookahead == '\n') ADVANCE(20); + if (lookahead == '"') ADVANCE(15); + if (lookahead == '$') ADVANCE(16); if (lookahead == '\\') ADVANCE(2); - if (lookahead != 0) ADVANCE(12); + if (lookahead != 0) ADVANCE(13); END_STATE(); case 2: - if (lookahead == '\n') ADVANCE(14); - if (lookahead == '"') ADVANCE(94); + if (lookahead == '\n') ADVANCE(15); + if (lookahead == '"') ADVANCE(99); if (lookahead == '\\') ADVANCE(1); - if (lookahead != 0) ADVANCE(12); + if (lookahead != 0) ADVANCE(13); END_STATE(); case 3: - if (lookahead == '\n') ADVANCE(14); - if (lookahead == '"') ADVANCE(93); + if (lookahead == '\n') ADVANCE(15); + if (lookahead == '"') ADVANCE(98); if (lookahead == '\\') ADVANCE(5); - if (lookahead != 0) ADVANCE(13); + if (lookahead != 0) ADVANCE(14); END_STATE(); case 4: - if (lookahead == '\n') ADVANCE(33); - if (lookahead == '}') ADVANCE(13); - if (lookahead != 0) ADVANCE(16); + if (lookahead == '\n') ADVANCE(35); + if (lookahead == '}') ADVANCE(14); + if (lookahead != 0) ADVANCE(17); END_STATE(); case 5: - if (lookahead == '\n') ADVANCE(17); - if (lookahead == '"') ADVANCE(97); - if (lookahead == '$') ADVANCE(18); + if (lookahead == '\n') ADVANCE(18); + if (lookahead == '"') ADVANCE(102); + if (lookahead == '$') ADVANCE(19); if (lookahead == '\\') ADVANCE(3); - if (lookahead != 0) ADVANCE(13); + if (lookahead != 0) ADVANCE(14); END_STATE(); case 6: ADVANCE_MAP( - '!', 68, - '"', 12, - '%', 84, - '&', 20, - '(', 62, - '*', 50, - '+', 79, - '-', 80, - '.', 45, - '/', 82, - ':', 27, - '<', 59, - '=', 28, - '>', 61, - '?', 72, - '[', 86, - '{', 48, - '|', 66, - '}', 49, + '!', 70, + '"', 13, + '%', 86, + '&', 21, + '(', 64, + '*', 52, + '+', 81, + '-', 82, + '.', 47, + '/', 84, + ':', 29, + '<', 61, + '=', 30, + '>', 63, + '?', 74, + '[', 89, + '{', 50, + '|', 68, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(7); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 7: ADVANCE_MAP( - '!', 68, - '"', 12, - '%', 84, - '&', 20, - '(', 62, - '*', 50, - '+', 79, - '-', 80, - '.', 45, - '/', 82, - ':', 27, - '<', 59, - '=', 28, - '>', 61, - '?', 72, - '[', 69, - '{', 48, - '|', 66, - '}', 49, + '!', 70, + '"', 13, + '%', 86, + '&', 21, + '(', 64, + '*', 52, + '+', 81, + '-', 82, + '.', 47, + '/', 84, + ':', 29, + '<', 61, + '=', 30, + '>', 63, + '?', 74, + '[', 71, + '{', 50, + '|', 68, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(7); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 8: ADVANCE_MAP( - '!', 67, - '"', 12, - '(', 62, - ')', 63, - '+', 79, - ',', 51, - '-', 80, - '.', 24, - '/', 26, - ':', 53, - '<', 58, - '=', 57, - '>', 60, - '[', 69, - ']', 70, - '{', 48, - '|', 65, - '}', 49, + '!', 69, + '"', 13, + '(', 64, + ')', 65, + '+', 81, + ',', 53, + '-', 82, + '.', 26, + '/', 28, + ':', 55, + '<', 60, + '=', 59, + '>', 62, + '[', 71, + ']', 72, + '{', 50, + '|', 67, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(8); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 9: ADVANCE_MAP( - '!', 67, - '"', 14, - '(', 62, - ')', 63, - '+', 79, - ',', 51, - '-', 29, - '.', 45, - '/', 26, - ':', 53, - '<', 58, - '=', 57, - '>', 60, - '[', 69, - ']', 70, - '{', 48, - '|', 65, - '}', 49, + '!', 69, + '"', 15, + '(', 64, + ')', 65, + '+', 81, + ',', 53, + '-', 31, + '.', 47, + '/', 28, + ':', 55, + '<', 60, + '=', 59, + '>', 62, + '[', 71, + ']', 72, + '{', 50, + '|', 67, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(9); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 10: - if (lookahead == '!') ADVANCE(67); - if (lookahead == '-') ADVANCE(29); - if (lookahead == '/') ADVANCE(25); - if (lookahead == '}') ADVANCE(49); + if (lookahead == '!') ADVANCE(69); + if (lookahead == '(') ADVANCE(88); + if (lookahead == '-') ADVANCE(31); + if (lookahead == '/') ADVANCE(28); + if (lookahead == '=') ADVANCE(56); + if (lookahead == '{') ADVANCE(50); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(10); - if (('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + lookahead == ' ') SKIP(12); END_STATE(); case 11: - if (lookahead == '!') ADVANCE(67); - if (lookahead == '-') ADVANCE(29); - if (lookahead == '/') ADVANCE(26); - if (lookahead == '=') ADVANCE(54); - if (lookahead == '{') ADVANCE(48); + if (lookahead == '!') ADVANCE(69); + if (lookahead == '-') ADVANCE(31); + if (lookahead == '/') ADVANCE(27); + if (lookahead == '}') ADVANCE(51); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(11); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 12: - if (lookahead == '"') ADVANCE(92); - if (lookahead == '$') ADVANCE(15); - if (lookahead == '\\') ADVANCE(35); - if (lookahead != 0) ADVANCE(12); + if (lookahead == '!') ADVANCE(69); + if (lookahead == '-') ADVANCE(31); + if (lookahead == '/') ADVANCE(28); + if (lookahead == '=') ADVANCE(56); + if (lookahead == '{') ADVANCE(50); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(12); END_STATE(); case 13: - if (lookahead == '"') ADVANCE(92); - if (lookahead == '$') ADVANCE(18); - if (lookahead == '\\') ADVANCE(39); + if (lookahead == '"') ADVANCE(97); + if (lookahead == '$') ADVANCE(16); + if (lookahead == '\\') ADVANCE(37); if (lookahead != 0) ADVANCE(13); END_STATE(); case 14: - if (lookahead == '"') ADVANCE(92); - if (lookahead == '\\') ADVANCE(37); + if (lookahead == '"') ADVANCE(97); + if (lookahead == '$') ADVANCE(19); + if (lookahead == '\\') ADVANCE(41); if (lookahead != 0) ADVANCE(14); END_STATE(); case 15: - if (lookahead == '"') ADVANCE(94); - if (lookahead == '\\') ADVANCE(1); - if (lookahead == '{') ADVANCE(16); - if (lookahead != 0) ADVANCE(12); + if (lookahead == '"') ADVANCE(97); + if (lookahead == '\\') ADVANCE(39); + if (lookahead != 0) ADVANCE(15); END_STATE(); case 16: - if (lookahead == '"') ADVANCE(95); - if (lookahead == '\\') ADVANCE(4); - if (lookahead == '}') ADVANCE(13); - if (lookahead != 0) ADVANCE(16); + if (lookahead == '"') ADVANCE(99); + if (lookahead == '\\') ADVANCE(1); + if (lookahead == '{') ADVANCE(17); + if (lookahead != 0) ADVANCE(13); END_STATE(); case 17: - if (lookahead == '"') ADVANCE(96); - if (lookahead == '$') ADVANCE(32); - if (lookahead == '\\') ADVANCE(38); + if (lookahead == '"') ADVANCE(100); + if (lookahead == '\\') ADVANCE(4); + if (lookahead == '}') ADVANCE(14); if (lookahead != 0) ADVANCE(17); END_STATE(); case 18: - if (lookahead == '"') ADVANCE(93); - if (lookahead == '\\') ADVANCE(5); - if (lookahead == '{') ADVANCE(16); - if (lookahead != 0) ADVANCE(13); + if (lookahead == '"') ADVANCE(101); + if (lookahead == '$') ADVANCE(34); + if (lookahead == '\\') ADVANCE(40); + if (lookahead != 0) ADVANCE(18); END_STATE(); case 19: - if (lookahead == '$') ADVANCE(31); - if (lookahead == '\\') ADVANCE(36); - if (lookahead != 0 && - lookahead != '"') ADVANCE(19); + if (lookahead == '"') ADVANCE(98); + if (lookahead == '\\') ADVANCE(5); + if (lookahead == '{') ADVANCE(17); + if (lookahead != 0) ADVANCE(14); END_STATE(); case 20: - if (lookahead == '&') ADVANCE(74); + if (lookahead == '$') ADVANCE(33); + if (lookahead == '\\') ADVANCE(38); + if (lookahead != 0 && + lookahead != '"') ADVANCE(20); END_STATE(); case 21: + if (lookahead == '&') ADVANCE(76); + END_STATE(); + case 22: ADVANCE_MAP( - '(', 62, - ')', 63, - ',', 51, - '-', 29, - '.', 23, - '/', 26, - ':', 53, - '=', 30, - ']', 70, - '{', 48, - '}', 49, + '(', 64, + ')', 65, + ',', 53, + '-', 31, + '.', 25, + '/', 28, + ':', 55, + '<', 90, + '=', 32, + ']', 72, + '{', 50, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(21); + lookahead == ' ') SKIP(23); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); - END_STATE(); - case 22: - if (lookahead == '.') ADVANCE(89); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 23: - if (lookahead == '.') ADVANCE(87); + ADVANCE_MAP( + '(', 64, + ')', 65, + ',', 53, + '-', 31, + '.', 25, + '/', 28, + ':', 55, + '=', 32, + ']', 72, + '{', 50, + '}', 51, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(23); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); case 24: - if (lookahead == '.') ADVANCE(22); + if (lookahead == '.') ADVANCE(94); END_STATE(); case 25: - if (lookahead == '/') ADVANCE(100); + if (lookahead == '.') ADVANCE(92); END_STATE(); case 26: - if (lookahead == '/') ADVANCE(101); + if (lookahead == '.') ADVANCE(24); END_STATE(); case 27: - if (lookahead == ':') ADVANCE(47); + if (lookahead == '/') ADVANCE(105); END_STATE(); case 28: - if (lookahead == '=') ADVANCE(75); + if (lookahead == '/') ADVANCE(106); END_STATE(); case 29: - if (lookahead == '>') ADVANCE(64); + if (lookahead == ':') ADVANCE(49); END_STATE(); case 30: - if (lookahead == '>') ADVANCE(71); + if (lookahead == '=') ADVANCE(77); END_STATE(); case 31: - if (lookahead == '{') ADVANCE(33); - if (lookahead != 0) ADVANCE(19); + if (lookahead == '>') ADVANCE(66); END_STATE(); case 32: - if (lookahead == '{') ADVANCE(33); - if (lookahead != 0) ADVANCE(17); + if (lookahead == '>') ADVANCE(73); END_STATE(); case 33: - if (lookahead == '}') ADVANCE(17); - if (lookahead != 0) ADVANCE(33); + if (lookahead == '{') ADVANCE(35); + if (lookahead != 0) ADVANCE(20); END_STATE(); case 34: - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(90); + if (lookahead == '{') ADVANCE(35); + if (lookahead != 0) ADVANCE(18); END_STATE(); case 35: - if (lookahead != 0 && - lookahead != '\n') ADVANCE(12); + if (lookahead == '}') ADVANCE(18); + if (lookahead != 0) ADVANCE(35); END_STATE(); case 36: - if (lookahead != 0 && - lookahead != '\n') ADVANCE(19); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(95); END_STATE(); case 37: if (lookahead != 0 && - lookahead != '\n') ADVANCE(14); + lookahead != '\n') ADVANCE(13); END_STATE(); case 38: if (lookahead != 0 && - lookahead != '\n') ADVANCE(17); + lookahead != '\n') ADVANCE(20); END_STATE(); case 39: if (lookahead != 0 && - lookahead != '\n') ADVANCE(13); + lookahead != '\n') ADVANCE(15); END_STATE(); case 40: - if (eof) ADVANCE(44); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(18); + END_STATE(); + case 41: + if (lookahead != 0 && + lookahead != '\n') ADVANCE(14); + END_STATE(); + case 42: + if (eof) ADVANCE(46); ADVANCE_MAP( - '!', 68, - '"', 12, - '%', 84, - '&', 20, - '(', 62, - ')', 63, - '*', 50, - '+', 79, - ',', 51, - '-', 81, - '.', 46, - '/', 82, - ':', 53, - ';', 52, - '<', 59, - '=', 56, - '>', 61, - '?', 72, - '[', 69, - ']', 70, - '{', 48, - '|', 66, - '}', 49, + '!', 70, + '"', 13, + '%', 86, + '&', 21, + '(', 64, + ')', 65, + '*', 52, + '+', 81, + ',', 53, + '-', 83, + '.', 48, + '/', 84, + ':', 55, + ';', 54, + '<', 61, + '=', 58, + '>', 63, + '?', 74, + '[', 71, + ']', 72, + '{', 50, + '|', 68, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(40); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + lookahead == ' ') SKIP(42); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); - case 41: - if (eof) ADVANCE(44); + case 43: + if (eof) ADVANCE(46); ADVANCE_MAP( - '!', 68, - '"', 12, - '%', 84, - '&', 20, - '(', 62, - ')', 63, - '*', 50, - '+', 79, - ',', 51, - '-', 80, - '.', 45, - '/', 83, - ':', 53, - ';', 52, - '<', 59, - '=', 55, - '>', 61, - '?', 72, - '[', 86, - ']', 70, - '{', 48, - '|', 66, - '}', 49, + '!', 70, + '"', 13, + '%', 86, + '&', 21, + '(', 64, + ')', 65, + '*', 52, + '+', 81, + ',', 53, + '-', 82, + '.', 47, + '/', 85, + ':', 55, + ';', 54, + '<', 61, + '=', 57, + '>', 63, + '?', 74, + '[', 89, + ']', 72, + '{', 50, + '|', 68, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(42); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + lookahead == ' ') SKIP(44); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); - case 42: - if (eof) ADVANCE(44); + case 44: + if (eof) ADVANCE(46); ADVANCE_MAP( - '!', 68, - '"', 12, - '%', 84, - '&', 20, - '(', 62, - ')', 63, - '*', 50, - '+', 79, - ',', 51, - '-', 80, - '.', 45, - '/', 83, - ':', 53, - ';', 52, - '<', 59, - '=', 55, - '>', 61, - '?', 72, - '[', 69, - ']', 70, - '{', 48, - '|', 66, - '}', 49, + '!', 70, + '"', 13, + '%', 86, + '&', 21, + '(', 64, + ')', 65, + '*', 52, + '+', 81, + ',', 53, + '-', 82, + '.', 47, + '/', 85, + ':', 55, + ';', 54, + '<', 61, + '=', 57, + '>', 63, + '?', 74, + '[', 71, + ']', 72, + '{', 50, + '|', 68, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(42); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + lookahead == ' ') SKIP(44); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); - case 43: - if (eof) ADVANCE(44); + case 45: + if (eof) ADVANCE(46); ADVANCE_MAP( - '!', 67, - '"', 12, - '(', 62, - '+', 79, - '-', 80, - '/', 25, - ':', 27, - '<', 58, - '=', 54, - '[', 69, - '{', 48, - '|', 65, - '}', 49, + '!', 69, + '"', 13, + '(', 64, + '+', 81, + '-', 82, + '/', 27, + ':', 29, + '<', 60, + '=', 56, + '[', 71, + '{', 50, + '|', 67, + '}', 51, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(43); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + lookahead == ' ') SKIP(45); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); - case 44: + case 46: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 45: + case 47: ACCEPT_TOKEN(anon_sym_DOT); END_STATE(); - case 46: + case 48: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(88); + if (lookahead == '.') ADVANCE(93); END_STATE(); - case 47: + case 49: ACCEPT_TOKEN(anon_sym_COLON_COLON); END_STATE(); - case 48: + case 50: ACCEPT_TOKEN(anon_sym_LBRACE); END_STATE(); - case 49: + case 51: ACCEPT_TOKEN(anon_sym_RBRACE); END_STATE(); - case 50: + case 52: ACCEPT_TOKEN(anon_sym_STAR); END_STATE(); - case 51: + case 53: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 52: + case 54: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 53: + case 55: ACCEPT_TOKEN(anon_sym_COLON); - if (lookahead == ':') ADVANCE(47); + if (lookahead == ':') ADVANCE(49); END_STATE(); - case 54: + case 56: ACCEPT_TOKEN(anon_sym_EQ); END_STATE(); - case 55: + case 57: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(75); + if (lookahead == '=') ADVANCE(77); END_STATE(); - case 56: + case 58: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(75); - if (lookahead == '>') ADVANCE(71); + if (lookahead == '=') ADVANCE(77); + if (lookahead == '>') ADVANCE(73); END_STATE(); - case 57: + case 59: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '>') ADVANCE(71); + if (lookahead == '>') ADVANCE(73); END_STATE(); - case 58: + case 60: ACCEPT_TOKEN(anon_sym_LT); END_STATE(); - case 59: + case 61: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(77); + if (lookahead == '=') ADVANCE(79); END_STATE(); - case 60: + case 62: ACCEPT_TOKEN(anon_sym_GT); END_STATE(); - case 61: + case 63: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(78); + if (lookahead == '=') ADVANCE(80); END_STATE(); - case 62: + case 64: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 63: + case 65: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 64: + case 66: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 65: + case 67: ACCEPT_TOKEN(anon_sym_PIPE); END_STATE(); - case 66: + case 68: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '>') ADVANCE(85); - if (lookahead == '|') ADVANCE(73); + if (lookahead == '>') ADVANCE(87); + if (lookahead == '|') ADVANCE(75); END_STATE(); - case 67: + case 69: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 68: + case 70: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(78); END_STATE(); - case 69: + case 71: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 70: + case 72: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 71: + case 73: ACCEPT_TOKEN(anon_sym_EQ_GT); END_STATE(); - case 72: + case 74: ACCEPT_TOKEN(anon_sym_QMARK); END_STATE(); - case 73: + case 75: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 74: + case 76: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 75: + case 77: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 76: + case 78: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 77: + case 79: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 78: + case 80: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 79: + case 81: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 80: + case 82: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 81: + case 83: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(64); + if (lookahead == '>') ADVANCE(66); END_STATE(); - case 82: + case 84: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(100); + if (lookahead == '/') ADVANCE(105); END_STATE(); - case 83: + case 85: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(101); + if (lookahead == '/') ADVANCE(106); END_STATE(); - case 84: + case 86: ACCEPT_TOKEN(anon_sym_PERCENT); END_STATE(); - case 85: + case 87: ACCEPT_TOKEN(anon_sym_PIPE_GT); END_STATE(); - case 86: + case 88: + ACCEPT_TOKEN(anon_sym_LPAREN2); + END_STATE(); + case 89: ACCEPT_TOKEN(anon_sym_LBRACK2); END_STATE(); - case 87: + case 90: + ACCEPT_TOKEN(anon_sym_LT2); + END_STATE(); + case 91: + ACCEPT_TOKEN(anon_sym_LT2); + if (lookahead == '=') ADVANCE(79); + END_STATE(); + case 92: ACCEPT_TOKEN(anon_sym_DOT_DOT); END_STATE(); - case 88: + case 93: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(89); + if (lookahead == '.') ADVANCE(94); END_STATE(); - case 89: + case 94: ACCEPT_TOKEN(anon_sym_DOT_DOT_DOT); END_STATE(); - case 90: + case 95: ACCEPT_TOKEN(sym_float); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(90); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(95); END_STATE(); - case 91: + case 96: ACCEPT_TOKEN(sym_integer); - if (lookahead == '.') ADVANCE(34); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(91); + if (lookahead == '.') ADVANCE(36); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(96); END_STATE(); - case 92: + case 97: ACCEPT_TOKEN(sym_string); END_STATE(); - case 93: + case 98: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(96); - if (lookahead == '$') ADVANCE(32); - if (lookahead == '\\') ADVANCE(38); - if (lookahead != 0) ADVANCE(17); + if (lookahead == '"') ADVANCE(101); + if (lookahead == '$') ADVANCE(34); + if (lookahead == '\\') ADVANCE(40); + if (lookahead != 0) ADVANCE(18); END_STATE(); - case 94: + case 99: ACCEPT_TOKEN(sym_string); - if (lookahead == '$') ADVANCE(31); - if (lookahead == '\\') ADVANCE(36); + if (lookahead == '$') ADVANCE(33); + if (lookahead == '\\') ADVANCE(38); if (lookahead != 0 && - lookahead != '"') ADVANCE(19); + lookahead != '"') ADVANCE(20); END_STATE(); - case 95: + case 100: ACCEPT_TOKEN(sym_string); - if (lookahead == '}') ADVANCE(17); - if (lookahead != 0) ADVANCE(33); + if (lookahead == '}') ADVANCE(18); + if (lookahead != 0) ADVANCE(35); END_STATE(); - case 96: + case 101: ACCEPT_TOKEN(sym_interpolated_string); END_STATE(); - case 97: + case 102: ACCEPT_TOKEN(sym_interpolated_string); - if (lookahead == '"') ADVANCE(92); - if (lookahead == '\\') ADVANCE(37); - if (lookahead != 0) ADVANCE(14); + if (lookahead == '"') ADVANCE(97); + if (lookahead == '\\') ADVANCE(39); + if (lookahead != 0) ADVANCE(15); END_STATE(); - case 98: + case 103: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(98); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(103); END_STATE(); - case 99: + case 104: ACCEPT_TOKEN(sym__doc_comment_line); if (lookahead != 0 && lookahead != '\n' && - lookahead != '\r') ADVANCE(99); + lookahead != '\r') ADVANCE(104); END_STATE(); - case 100: + case 105: ACCEPT_TOKEN(sym_line_comment); - if (lookahead == '/') ADVANCE(99); + if (lookahead == '/') ADVANCE(104); if (lookahead != 0 && lookahead != '\n' && - lookahead != '\r') ADVANCE(101); + lookahead != '\r') ADVANCE(106); END_STATE(); - case 101: + case 106: ACCEPT_TOKEN(sym_line_comment); if (lookahead != 0 && lookahead != '\n' && - lookahead != '\r') ADVANCE(101); + lookahead != '\r') ADVANCE(106); END_STATE(); default: return false; @@ -4995,21 +5140,22 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '_', 1, 'a', 2, - 'e', 3, - 'f', 4, - 'h', 5, - 'i', 6, - 'k', 7, - 'l', 8, - 'm', 9, - 'n', 10, - 'o', 11, - 'p', 12, - 'r', 13, - 's', 14, - 't', 15, - 'w', 16, - 'y', 17, + 'd', 3, + 'e', 4, + 'f', 5, + 'h', 6, + 'i', 7, + 'k', 8, + 'l', 9, + 'm', 10, + 'n', 11, + 'o', 12, + 'p', 13, + 'r', 14, + 's', 15, + 't', 16, + 'w', 17, + 'y', 18, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(0); @@ -5018,502 +5164,508 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(anon_sym__); END_STATE(); case 2: - if (lookahead == 'b') ADVANCE(18); - if (lookahead == 's') ADVANCE(19); - if (lookahead == 'w') ADVANCE(20); + if (lookahead == 'b') ADVANCE(19); + if (lookahead == 's') ADVANCE(20); + if (lookahead == 'w') ADVANCE(21); END_STATE(); case 3: - if (lookahead == 'f') ADVANCE(21); - if (lookahead == 'l') ADVANCE(22); - if (lookahead == 'x') ADVANCE(23); + if (lookahead == 'o') ADVANCE(22); END_STATE(); case 4: - if (lookahead == 'a') ADVANCE(24); - if (lookahead == 'n') ADVANCE(25); + if (lookahead == 'f') ADVANCE(23); + if (lookahead == 'l') ADVANCE(24); + if (lookahead == 'x') ADVANCE(25); END_STATE(); case 5: if (lookahead == 'a') ADVANCE(26); + if (lookahead == 'n') ADVANCE(27); END_STATE(); case 6: - if (lookahead == 'f') ADVANCE(27); - if (lookahead == 'm') ADVANCE(28); - if (lookahead == 'n') ADVANCE(29); + if (lookahead == 'a') ADVANCE(28); END_STATE(); case 7: - if (lookahead == 'e') ADVANCE(30); + if (lookahead == 'f') ADVANCE(29); + if (lookahead == 'm') ADVANCE(30); + if (lookahead == 'n') ADVANCE(31); END_STATE(); case 8: - if (lookahead == 'e') ADVANCE(31); + if (lookahead == 'e') ADVANCE(32); END_STATE(); case 9: - if (lookahead == 'a') ADVANCE(32); - if (lookahead == 'o') ADVANCE(33); - if (lookahead == 'u') ADVANCE(34); + if (lookahead == 'e') ADVANCE(33); END_STATE(); case 10: - if (lookahead == 'a') ADVANCE(35); + if (lookahead == 'a') ADVANCE(34); + if (lookahead == 'o') ADVANCE(35); + if (lookahead == 'u') ADVANCE(36); END_STATE(); case 11: - if (lookahead == 'n') ADVANCE(36); - if (lookahead == 'p') ADVANCE(37); - if (lookahead == 'u') ADVANCE(38); + if (lookahead == 'a') ADVANCE(37); END_STATE(); case 12: - if (lookahead == 'e') ADVANCE(39); + if (lookahead == 'n') ADVANCE(38); + if (lookahead == 'p') ADVANCE(39); + if (lookahead == 'u') ADVANCE(40); END_STATE(); case 13: - if (lookahead == 'e') ADVANCE(40); + if (lookahead == 'e') ADVANCE(41); END_STATE(); case 14: - if (lookahead == 'e') ADVANCE(41); - if (lookahead == 'i') ADVANCE(42); - if (lookahead == 'p') ADVANCE(43); - if (lookahead == 't') ADVANCE(44); + if (lookahead == 'e') ADVANCE(42); END_STATE(); case 15: - if (lookahead == 'r') ADVANCE(45); - if (lookahead == 'y') ADVANCE(46); + if (lookahead == 'e') ADVANCE(43); + if (lookahead == 'i') ADVANCE(44); + if (lookahead == 'p') ADVANCE(45); + if (lookahead == 't') ADVANCE(46); END_STATE(); case 16: - if (lookahead == 'h') ADVANCE(47); + if (lookahead == 'r') ADVANCE(47); + if (lookahead == 'y') ADVANCE(48); END_STATE(); case 17: - if (lookahead == 'i') ADVANCE(48); + if (lookahead == 'h') ADVANCE(49); END_STATE(); case 18: - if (lookahead == 'o') ADVANCE(49); + if (lookahead == 'i') ADVANCE(50); END_STATE(); case 19: - ACCEPT_TOKEN(anon_sym_as); + if (lookahead == 'o') ADVANCE(51); END_STATE(); case 20: - if (lookahead == 'a') ADVANCE(50); + ACCEPT_TOKEN(anon_sym_as); END_STATE(); case 21: - if (lookahead == 'f') ADVANCE(51); + if (lookahead == 'a') ADVANCE(52); END_STATE(); case 22: - if (lookahead == 's') ADVANCE(52); + ACCEPT_TOKEN(anon_sym_do); END_STATE(); case 23: - if (lookahead == 'p') ADVANCE(53); - if (lookahead == 't') ADVANCE(54); + if (lookahead == 'f') ADVANCE(53); END_STATE(); case 24: - if (lookahead == 'l') ADVANCE(55); + if (lookahead == 's') ADVANCE(54); END_STATE(); case 25: - ACCEPT_TOKEN(anon_sym_fn); + if (lookahead == 'p') ADVANCE(55); + if (lookahead == 't') ADVANCE(56); END_STATE(); case 26: - if (lookahead == 'n') ADVANCE(56); + if (lookahead == 'l') ADVANCE(57); END_STATE(); case 27: - ACCEPT_TOKEN(anon_sym_if); + ACCEPT_TOKEN(anon_sym_fn); END_STATE(); case 28: - if (lookahead == 'p') ADVANCE(57); + if (lookahead == 'n') ADVANCE(58); END_STATE(); case 29: - ACCEPT_TOKEN(anon_sym_in); + ACCEPT_TOKEN(anon_sym_if); END_STATE(); case 30: - if (lookahead == 'r') ADVANCE(58); + if (lookahead == 'p') ADVANCE(59); END_STATE(); case 31: - if (lookahead == 't') ADVANCE(59); + ACCEPT_TOKEN(anon_sym_in); END_STATE(); case 32: - if (lookahead == 'n') ADVANCE(60); - if (lookahead == 't') ADVANCE(61); + if (lookahead == 'r') ADVANCE(60); END_STATE(); case 33: - if (lookahead == 'd') ADVANCE(62); + if (lookahead == 't') ADVANCE(61); END_STATE(); case 34: + if (lookahead == 'n') ADVANCE(62); if (lookahead == 't') ADVANCE(63); END_STATE(); case 35: - if (lookahead == 'm') ADVANCE(64); + if (lookahead == 'd') ADVANCE(64); END_STATE(); case 36: - if (lookahead == 'c') ADVANCE(65); + if (lookahead == 't') ADVANCE(65); END_STATE(); case 37: - if (lookahead == 'a') ADVANCE(66); + if (lookahead == 'm') ADVANCE(66); END_STATE(); case 38: - if (lookahead == 't') ADVANCE(67); + if (lookahead == 'c') ADVANCE(67); END_STATE(); case 39: - if (lookahead == 'r') ADVANCE(68); + if (lookahead == 'a') ADVANCE(68); END_STATE(); case 40: - if (lookahead == 'c') ADVANCE(69); - if (lookahead == 'p') ADVANCE(70); - if (lookahead == 's') ADVANCE(71); + if (lookahead == 't') ADVANCE(69); END_STATE(); case 41: - if (lookahead == 'l') ADVANCE(72); - if (lookahead == 'n') ADVANCE(73); + if (lookahead == 'r') ADVANCE(70); END_STATE(); case 42: - if (lookahead == 'g') ADVANCE(74); + if (lookahead == 'c') ADVANCE(71); + if (lookahead == 'p') ADVANCE(72); + if (lookahead == 's') ADVANCE(73); END_STATE(); case 43: - if (lookahead == 'a') ADVANCE(75); + if (lookahead == 'l') ADVANCE(74); + if (lookahead == 'n') ADVANCE(75); END_STATE(); case 44: - if (lookahead == 'a') ADVANCE(76); + if (lookahead == 'g') ADVANCE(76); END_STATE(); case 45: - if (lookahead == 'u') ADVANCE(77); + if (lookahead == 'a') ADVANCE(77); END_STATE(); case 46: - if (lookahead == 'p') ADVANCE(78); + if (lookahead == 'a') ADVANCE(78); END_STATE(); case 47: - if (lookahead == 'e') ADVANCE(79); + if (lookahead == 'u') ADVANCE(79); END_STATE(); case 48: - if (lookahead == 'e') ADVANCE(80); + if (lookahead == 'p') ADVANCE(80); END_STATE(); case 49: - if (lookahead == 'r') ADVANCE(81); + if (lookahead == 'e') ADVANCE(81); END_STATE(); case 50: - if (lookahead == 'i') ADVANCE(82); + if (lookahead == 'e') ADVANCE(82); END_STATE(); case 51: - if (lookahead == 'e') ADVANCE(83); + if (lookahead == 'r') ADVANCE(83); END_STATE(); case 52: - if (lookahead == 'e') ADVANCE(84); + if (lookahead == 'i') ADVANCE(84); END_STATE(); case 53: - if (lookahead == 'o') ADVANCE(85); + if (lookahead == 'e') ADVANCE(85); END_STATE(); case 54: if (lookahead == 'e') ADVANCE(86); - if (lookahead == 'r') ADVANCE(87); END_STATE(); case 55: - if (lookahead == 's') ADVANCE(88); + if (lookahead == 'o') ADVANCE(87); END_STATE(); case 56: - if (lookahead == 'd') ADVANCE(89); + if (lookahead == 'e') ADVANCE(88); + if (lookahead == 'r') ADVANCE(89); END_STATE(); case 57: - if (lookahead == 'o') ADVANCE(90); + if (lookahead == 's') ADVANCE(90); END_STATE(); case 58: - if (lookahead == 'n') ADVANCE(91); + if (lookahead == 'd') ADVANCE(91); END_STATE(); case 59: - ACCEPT_TOKEN(anon_sym_let); + if (lookahead == 'o') ADVANCE(92); END_STATE(); case 60: - if (lookahead == 'y') ADVANCE(92); + if (lookahead == 'n') ADVANCE(93); END_STATE(); case 61: - if (lookahead == 'c') ADVANCE(93); + ACCEPT_TOKEN(anon_sym_let); END_STATE(); case 62: - if (lookahead == 'u') ADVANCE(94); + if (lookahead == 'y') ADVANCE(94); END_STATE(); case 63: - ACCEPT_TOKEN(anon_sym_mut); + if (lookahead == 'c') ADVANCE(95); END_STATE(); case 64: - if (lookahead == 'e') ADVANCE(95); + if (lookahead == 'u') ADVANCE(96); END_STATE(); case 65: - if (lookahead == 'e') ADVANCE(96); + ACCEPT_TOKEN(anon_sym_mut); END_STATE(); case 66: - if (lookahead == 'q') ADVANCE(97); + if (lookahead == 'e') ADVANCE(97); END_STATE(); case 67: - ACCEPT_TOKEN(anon_sym_out); + if (lookahead == 'e') ADVANCE(98); END_STATE(); case 68: - if (lookahead == 'f') ADVANCE(98); + if (lookahead == 'q') ADVANCE(99); END_STATE(); case 69: - if (lookahead == 'v') ADVANCE(99); + ACCEPT_TOKEN(anon_sym_out); END_STATE(); case 70: - if (lookahead == 'l') ADVANCE(100); + if (lookahead == 'f') ADVANCE(100); END_STATE(); case 71: - if (lookahead == 'u') ADVANCE(101); + if (lookahead == 'v') ADVANCE(101); END_STATE(); case 72: - if (lookahead == 'e') ADVANCE(102); + if (lookahead == 'l') ADVANCE(102); END_STATE(); case 73: - if (lookahead == 'd') ADVANCE(103); + if (lookahead == 'u') ADVANCE(103); END_STATE(); case 74: - if (lookahead == 'n') ADVANCE(104); + if (lookahead == 'e') ADVANCE(104); END_STATE(); case 75: - if (lookahead == 'w') ADVANCE(105); + if (lookahead == 'd') ADVANCE(105); END_STATE(); case 76: - if (lookahead == 't') ADVANCE(106); + if (lookahead == 'n') ADVANCE(106); END_STATE(); case 77: - if (lookahead == 'e') ADVANCE(107); + if (lookahead == 'w') ADVANCE(107); END_STATE(); case 78: - if (lookahead == 'e') ADVANCE(108); + if (lookahead == 't') ADVANCE(108); END_STATE(); case 79: - if (lookahead == 'r') ADVANCE(109); + if (lookahead == 'e') ADVANCE(109); END_STATE(); case 80: - if (lookahead == 'l') ADVANCE(110); + if (lookahead == 'e') ADVANCE(110); END_STATE(); case 81: - if (lookahead == 't') ADVANCE(111); + if (lookahead == 'r') ADVANCE(111); END_STATE(); case 82: - if (lookahead == 't') ADVANCE(112); + if (lookahead == 'l') ADVANCE(112); END_STATE(); case 83: - if (lookahead == 'c') ADVANCE(113); + if (lookahead == 't') ADVANCE(113); END_STATE(); case 84: - ACCEPT_TOKEN(anon_sym_else); + if (lookahead == 't') ADVANCE(114); END_STATE(); case 85: - if (lookahead == 'r') ADVANCE(114); + if (lookahead == 'c') ADVANCE(115); END_STATE(); case 86: - if (lookahead == 'r') ADVANCE(115); + ACCEPT_TOKEN(anon_sym_else); END_STATE(); case 87: - if (lookahead == 'a') ADVANCE(116); + if (lookahead == 'r') ADVANCE(116); END_STATE(); case 88: - if (lookahead == 'e') ADVANCE(117); + if (lookahead == 'r') ADVANCE(117); END_STATE(); case 89: - if (lookahead == 'l') ADVANCE(118); + if (lookahead == 'a') ADVANCE(118); END_STATE(); case 90: - if (lookahead == 'r') ADVANCE(119); + if (lookahead == 'e') ADVANCE(119); END_STATE(); case 91: - if (lookahead == 'e') ADVANCE(120); + if (lookahead == 'l') ADVANCE(120); END_STATE(); case 92: - ACCEPT_TOKEN(anon_sym_many); + if (lookahead == 'r') ADVANCE(121); END_STATE(); case 93: - if (lookahead == 'h') ADVANCE(121); + if (lookahead == 'e') ADVANCE(122); END_STATE(); case 94: - if (lookahead == 'l') ADVANCE(122); + ACCEPT_TOKEN(anon_sym_many); END_STATE(); case 95: - if (lookahead == 's') ADVANCE(123); + if (lookahead == 'h') ADVANCE(123); END_STATE(); case 96: - ACCEPT_TOKEN(anon_sym_once); + if (lookahead == 'l') ADVANCE(124); END_STATE(); case 97: - if (lookahead == 'u') ADVANCE(124); + if (lookahead == 's') ADVANCE(125); END_STATE(); case 98: - if (lookahead == 'o') ADVANCE(125); + ACCEPT_TOKEN(anon_sym_once); END_STATE(); case 99: - ACCEPT_TOKEN(anon_sym_recv); + if (lookahead == 'u') ADVANCE(126); END_STATE(); case 100: - if (lookahead == 'a') ADVANCE(126); + if (lookahead == 'o') ADVANCE(127); END_STATE(); case 101: - if (lookahead == 'm') ADVANCE(127); + ACCEPT_TOKEN(anon_sym_recv); END_STATE(); case 102: - if (lookahead == 'c') ADVANCE(128); + if (lookahead == 'a') ADVANCE(128); END_STATE(); case 103: - ACCEPT_TOKEN(anon_sym_send); + if (lookahead == 'm') ADVANCE(129); END_STATE(); case 104: - if (lookahead == 'a') ADVANCE(129); + if (lookahead == 'c') ADVANCE(130); END_STATE(); case 105: - if (lookahead == 'n') ADVANCE(130); + ACCEPT_TOKEN(anon_sym_send); END_STATE(); case 106: - if (lookahead == 'e') ADVANCE(131); - if (lookahead == 'i') ADVANCE(132); + if (lookahead == 'a') ADVANCE(131); END_STATE(); case 107: - ACCEPT_TOKEN(anon_sym_true); + if (lookahead == 'n') ADVANCE(132); END_STATE(); case 108: - ACCEPT_TOKEN(anon_sym_type); + if (lookahead == 'e') ADVANCE(133); + if (lookahead == 'i') ADVANCE(134); END_STATE(); case 109: - if (lookahead == 'e') ADVANCE(133); + ACCEPT_TOKEN(anon_sym_true); END_STATE(); case 110: - if (lookahead == 'd') ADVANCE(134); + ACCEPT_TOKEN(anon_sym_type); END_STATE(); case 111: - ACCEPT_TOKEN(anon_sym_abort); + if (lookahead == 'e') ADVANCE(135); END_STATE(); case 112: - ACCEPT_TOKEN(anon_sym_await); + if (lookahead == 'd') ADVANCE(136); END_STATE(); case 113: - if (lookahead == 't') ADVANCE(135); + ACCEPT_TOKEN(anon_sym_abort); END_STATE(); case 114: - if (lookahead == 't') ADVANCE(136); + ACCEPT_TOKEN(anon_sym_await); END_STATE(); case 115: - if (lookahead == 'n') ADVANCE(137); + if (lookahead == 't') ADVANCE(137); END_STATE(); case 116: - ACCEPT_TOKEN(anon_sym_extra); + if (lookahead == 't') ADVANCE(138); END_STATE(); case 117: - ACCEPT_TOKEN(anon_sym_false); + if (lookahead == 'n') ADVANCE(139); END_STATE(); case 118: - if (lookahead == 'e') ADVANCE(138); + ACCEPT_TOKEN(anon_sym_extra); END_STATE(); case 119: - if (lookahead == 't') ADVANCE(139); + ACCEPT_TOKEN(anon_sym_false); END_STATE(); case 120: - if (lookahead == 'l') ADVANCE(140); + if (lookahead == 'e') ADVANCE(140); END_STATE(); case 121: - ACCEPT_TOKEN(anon_sym_match); + if (lookahead == 't') ADVANCE(141); END_STATE(); case 122: - if (lookahead == 'e') ADVANCE(141); + if (lookahead == 'l') ADVANCE(142); END_STATE(); case 123: - if (lookahead == 'p') ADVANCE(142); + ACCEPT_TOKEN(anon_sym_match); END_STATE(); case 124: if (lookahead == 'e') ADVANCE(143); END_STATE(); case 125: - if (lookahead == 'r') ADVANCE(144); + if (lookahead == 'p') ADVANCE(144); END_STATE(); case 126: - if (lookahead == 'y') ADVANCE(145); + if (lookahead == 'e') ADVANCE(145); END_STATE(); case 127: - if (lookahead == 'e') ADVANCE(146); + if (lookahead == 'r') ADVANCE(146); END_STATE(); case 128: - if (lookahead == 't') ADVANCE(147); + if (lookahead == 'y') ADVANCE(147); END_STATE(); case 129: - if (lookahead == 't') ADVANCE(148); + if (lookahead == 'e') ADVANCE(148); END_STATE(); case 130: - ACCEPT_TOKEN(anon_sym_spawn); + if (lookahead == 't') ADVANCE(149); END_STATE(); case 131: - ACCEPT_TOKEN(anon_sym_state); + if (lookahead == 't') ADVANCE(150); END_STATE(); case 132: - if (lookahead == 'c') ADVANCE(149); + ACCEPT_TOKEN(anon_sym_spawn); END_STATE(); case 133: - ACCEPT_TOKEN(anon_sym_where); + ACCEPT_TOKEN(anon_sym_state); END_STATE(); case 134: - ACCEPT_TOKEN(anon_sym_yield); + if (lookahead == 'c') ADVANCE(151); END_STATE(); case 135: - ACCEPT_TOKEN(anon_sym_effect); + ACCEPT_TOKEN(anon_sym_where); END_STATE(); case 136: - ACCEPT_TOKEN(anon_sym_export); + ACCEPT_TOKEN(anon_sym_yield); END_STATE(); case 137: - ACCEPT_TOKEN(anon_sym_extern); + ACCEPT_TOKEN(anon_sym_effect); END_STATE(); case 138: - ACCEPT_TOKEN(anon_sym_handle); + ACCEPT_TOKEN(anon_sym_export); END_STATE(); case 139: - ACCEPT_TOKEN(anon_sym_import); + ACCEPT_TOKEN(anon_sym_extern); END_STATE(); case 140: - ACCEPT_TOKEN(anon_sym_kernel); + ACCEPT_TOKEN(anon_sym_handle); END_STATE(); case 141: - ACCEPT_TOKEN(anon_sym_module); + ACCEPT_TOKEN(anon_sym_import); END_STATE(); case 142: - if (lookahead == 'a') ADVANCE(150); + ACCEPT_TOKEN(anon_sym_kernel); END_STATE(); case 143: - ACCEPT_TOKEN(anon_sym_opaque); + ACCEPT_TOKEN(anon_sym_module); END_STATE(); case 144: - if (lookahead == 'm') ADVANCE(151); + if (lookahead == 'a') ADVANCE(152); END_STATE(); case 145: - if (lookahead == 'a') ADVANCE(152); + ACCEPT_TOKEN(anon_sym_opaque); END_STATE(); case 146: - ACCEPT_TOKEN(anon_sym_resume); + if (lookahead == 'm') ADVANCE(153); END_STATE(); case 147: - ACCEPT_TOKEN(anon_sym_select); + if (lookahead == 'a') ADVANCE(154); END_STATE(); case 148: - if (lookahead == 'u') ADVANCE(153); + ACCEPT_TOKEN(anon_sym_resume); END_STATE(); case 149: - ACCEPT_TOKEN(sym_static_stage); + ACCEPT_TOKEN(anon_sym_select); END_STATE(); case 150: - if (lookahead == 'c') ADVANCE(154); + if (lookahead == 'u') ADVANCE(155); END_STATE(); case 151: - ACCEPT_TOKEN(anon_sym_perform); + ACCEPT_TOKEN(sym_static_stage); END_STATE(); case 152: - if (lookahead == 'b') ADVANCE(155); + if (lookahead == 'c') ADVANCE(156); END_STATE(); case 153: - if (lookahead == 'r') ADVANCE(156); + ACCEPT_TOKEN(anon_sym_perform); END_STATE(); case 154: - if (lookahead == 'e') ADVANCE(157); + if (lookahead == 'b') ADVANCE(157); END_STATE(); case 155: - if (lookahead == 'l') ADVANCE(158); + if (lookahead == 'r') ADVANCE(158); END_STATE(); case 156: if (lookahead == 'e') ADVANCE(159); END_STATE(); case 157: - ACCEPT_TOKEN(anon_sym_namespace); + if (lookahead == 'l') ADVANCE(160); END_STATE(); case 158: - if (lookahead == 'e') ADVANCE(160); + if (lookahead == 'e') ADVANCE(161); END_STATE(); case 159: - ACCEPT_TOKEN(anon_sym_signature); + ACCEPT_TOKEN(anon_sym_namespace); END_STATE(); case 160: + if (lookahead == 'e') ADVANCE(162); + END_STATE(); + case 161: + ACCEPT_TOKEN(anon_sym_signature); + END_STATE(); + case 162: ACCEPT_TOKEN(sym_replayable); END_STATE(); default: @@ -5523,25 +5675,25 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { static const TSLexMode ts_lex_modes[STATE_COUNT] = { [0] = {.lex_state = 0, .external_lex_state = 1}, - [1] = {.lex_state = 43}, - [2] = {.lex_state = 43}, - [3] = {.lex_state = 43}, - [4] = {.lex_state = 43}, - [5] = {.lex_state = 43}, - [6] = {.lex_state = 43}, - [7] = {.lex_state = 43}, - [8] = {.lex_state = 43}, - [9] = {.lex_state = 43}, - [10] = {.lex_state = 43}, - [11] = {.lex_state = 43}, - [12] = {.lex_state = 43}, - [13] = {.lex_state = 6, .external_lex_state = 2}, - [14] = {.lex_state = 43}, - [15] = {.lex_state = 43}, - [16] = {.lex_state = 43}, - [17] = {.lex_state = 43}, - [18] = {.lex_state = 41, .external_lex_state = 2}, - [19] = {.lex_state = 41, .external_lex_state = 1}, + [1] = {.lex_state = 45}, + [2] = {.lex_state = 45}, + [3] = {.lex_state = 45}, + [4] = {.lex_state = 45}, + [5] = {.lex_state = 6, .external_lex_state = 2}, + [6] = {.lex_state = 45}, + [7] = {.lex_state = 45}, + [8] = {.lex_state = 45}, + [9] = {.lex_state = 45}, + [10] = {.lex_state = 45}, + [11] = {.lex_state = 45}, + [12] = {.lex_state = 45}, + [13] = {.lex_state = 45}, + [14] = {.lex_state = 45}, + [15] = {.lex_state = 45}, + [16] = {.lex_state = 45}, + [17] = {.lex_state = 45}, + [18] = {.lex_state = 43, .external_lex_state = 2}, + [19] = {.lex_state = 43, .external_lex_state = 1}, [20] = {.lex_state = 8}, [21] = {.lex_state = 8}, [22] = {.lex_state = 8}, @@ -5745,77 +5897,77 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [220] = {.lex_state = 8}, [221] = {.lex_state = 8}, [222] = {.lex_state = 8}, - [223] = {.lex_state = 43}, - [224] = {.lex_state = 43}, - [225] = {.lex_state = 43}, - [226] = {.lex_state = 43}, - [227] = {.lex_state = 41, .external_lex_state = 2}, - [228] = {.lex_state = 41, .external_lex_state = 2}, - [229] = {.lex_state = 41, .external_lex_state = 2}, - [230] = {.lex_state = 41, .external_lex_state = 2}, - [231] = {.lex_state = 41, .external_lex_state = 2}, - [232] = {.lex_state = 41, .external_lex_state = 2}, - [233] = {.lex_state = 41, .external_lex_state = 2}, - [234] = {.lex_state = 41, .external_lex_state = 2}, - [235] = {.lex_state = 41, .external_lex_state = 2}, - [236] = {.lex_state = 41, .external_lex_state = 2}, - [237] = {.lex_state = 41, .external_lex_state = 2}, - [238] = {.lex_state = 41, .external_lex_state = 2}, - [239] = {.lex_state = 41, .external_lex_state = 2}, - [240] = {.lex_state = 41, .external_lex_state = 2}, - [241] = {.lex_state = 41, .external_lex_state = 2}, - [242] = {.lex_state = 41, .external_lex_state = 2}, - [243] = {.lex_state = 41, .external_lex_state = 2}, - [244] = {.lex_state = 41, .external_lex_state = 2}, - [245] = {.lex_state = 41, .external_lex_state = 2}, - [246] = {.lex_state = 41, .external_lex_state = 2}, - [247] = {.lex_state = 6, .external_lex_state = 2}, - [248] = {.lex_state = 41, .external_lex_state = 2}, - [249] = {.lex_state = 41, .external_lex_state = 2}, - [250] = {.lex_state = 41, .external_lex_state = 2}, - [251] = {.lex_state = 41, .external_lex_state = 2}, - [252] = {.lex_state = 41, .external_lex_state = 2}, - [253] = {.lex_state = 41, .external_lex_state = 2}, - [254] = {.lex_state = 41, .external_lex_state = 2}, - [255] = {.lex_state = 41, .external_lex_state = 2}, - [256] = {.lex_state = 41, .external_lex_state = 2}, - [257] = {.lex_state = 41, .external_lex_state = 2}, - [258] = {.lex_state = 41, .external_lex_state = 2}, - [259] = {.lex_state = 41, .external_lex_state = 2}, - [260] = {.lex_state = 41, .external_lex_state = 2}, - [261] = {.lex_state = 41, .external_lex_state = 2}, - [262] = {.lex_state = 41, .external_lex_state = 2}, - [263] = {.lex_state = 41, .external_lex_state = 2}, - [264] = {.lex_state = 41, .external_lex_state = 2}, - [265] = {.lex_state = 41, .external_lex_state = 2}, - [266] = {.lex_state = 41, .external_lex_state = 2}, - [267] = {.lex_state = 41, .external_lex_state = 2}, - [268] = {.lex_state = 41, .external_lex_state = 2}, - [269] = {.lex_state = 41, .external_lex_state = 2}, - [270] = {.lex_state = 41, .external_lex_state = 2}, - [271] = {.lex_state = 41, .external_lex_state = 2}, - [272] = {.lex_state = 41, .external_lex_state = 2}, - [273] = {.lex_state = 41, .external_lex_state = 2}, - [274] = {.lex_state = 41, .external_lex_state = 2}, - [275] = {.lex_state = 41, .external_lex_state = 2}, - [276] = {.lex_state = 41, .external_lex_state = 2}, - [277] = {.lex_state = 41, .external_lex_state = 2}, - [278] = {.lex_state = 41, .external_lex_state = 2}, - [279] = {.lex_state = 41, .external_lex_state = 2}, - [280] = {.lex_state = 41, .external_lex_state = 2}, - [281] = {.lex_state = 41, .external_lex_state = 2}, - [282] = {.lex_state = 41, .external_lex_state = 2}, - [283] = {.lex_state = 41, .external_lex_state = 2}, - [284] = {.lex_state = 41, .external_lex_state = 2}, - [285] = {.lex_state = 41, .external_lex_state = 2}, - [286] = {.lex_state = 41, .external_lex_state = 2}, - [287] = {.lex_state = 41, .external_lex_state = 2}, - [288] = {.lex_state = 41, .external_lex_state = 2}, - [289] = {.lex_state = 41, .external_lex_state = 2}, - [290] = {.lex_state = 6, .external_lex_state = 2}, - [291] = {.lex_state = 6, .external_lex_state = 2}, - [292] = {.lex_state = 6, .external_lex_state = 2}, - [293] = {.lex_state = 6, .external_lex_state = 2}, + [223] = {.lex_state = 8}, + [224] = {.lex_state = 8}, + [225] = {.lex_state = 8}, + [226] = {.lex_state = 45}, + [227] = {.lex_state = 45}, + [228] = {.lex_state = 43, .external_lex_state = 2}, + [229] = {.lex_state = 45}, + [230] = {.lex_state = 45}, + [231] = {.lex_state = 43, .external_lex_state = 2}, + [232] = {.lex_state = 43, .external_lex_state = 2}, + [233] = {.lex_state = 43, .external_lex_state = 2}, + [234] = {.lex_state = 43, .external_lex_state = 2}, + [235] = {.lex_state = 43, .external_lex_state = 2}, + [236] = {.lex_state = 43, .external_lex_state = 2}, + [237] = {.lex_state = 43, .external_lex_state = 2}, + [238] = {.lex_state = 43, .external_lex_state = 2}, + [239] = {.lex_state = 43, .external_lex_state = 2}, + [240] = {.lex_state = 43, .external_lex_state = 2}, + [241] = {.lex_state = 43, .external_lex_state = 2}, + [242] = {.lex_state = 43, .external_lex_state = 2}, + [243] = {.lex_state = 43, .external_lex_state = 2}, + [244] = {.lex_state = 43, .external_lex_state = 2}, + [245] = {.lex_state = 43, .external_lex_state = 2}, + [246] = {.lex_state = 43, .external_lex_state = 2}, + [247] = {.lex_state = 43, .external_lex_state = 2}, + [248] = {.lex_state = 43, .external_lex_state = 2}, + [249] = {.lex_state = 43, .external_lex_state = 2}, + [250] = {.lex_state = 43, .external_lex_state = 2}, + [251] = {.lex_state = 43, .external_lex_state = 2}, + [252] = {.lex_state = 43, .external_lex_state = 2}, + [253] = {.lex_state = 43, .external_lex_state = 2}, + [254] = {.lex_state = 43, .external_lex_state = 2}, + [255] = {.lex_state = 43, .external_lex_state = 2}, + [256] = {.lex_state = 43, .external_lex_state = 2}, + [257] = {.lex_state = 43, .external_lex_state = 2}, + [258] = {.lex_state = 43, .external_lex_state = 2}, + [259] = {.lex_state = 43, .external_lex_state = 2}, + [260] = {.lex_state = 43, .external_lex_state = 2}, + [261] = {.lex_state = 43, .external_lex_state = 2}, + [262] = {.lex_state = 43, .external_lex_state = 2}, + [263] = {.lex_state = 43, .external_lex_state = 2}, + [264] = {.lex_state = 43, .external_lex_state = 2}, + [265] = {.lex_state = 43, .external_lex_state = 2}, + [266] = {.lex_state = 43, .external_lex_state = 2}, + [267] = {.lex_state = 43, .external_lex_state = 2}, + [268] = {.lex_state = 43, .external_lex_state = 2}, + [269] = {.lex_state = 43, .external_lex_state = 2}, + [270] = {.lex_state = 43, .external_lex_state = 2}, + [271] = {.lex_state = 43, .external_lex_state = 2}, + [272] = {.lex_state = 43, .external_lex_state = 2}, + [273] = {.lex_state = 43, .external_lex_state = 2}, + [274] = {.lex_state = 43, .external_lex_state = 2}, + [275] = {.lex_state = 43, .external_lex_state = 2}, + [276] = {.lex_state = 43, .external_lex_state = 2}, + [277] = {.lex_state = 43, .external_lex_state = 2}, + [278] = {.lex_state = 43, .external_lex_state = 2}, + [279] = {.lex_state = 43, .external_lex_state = 2}, + [280] = {.lex_state = 43, .external_lex_state = 2}, + [281] = {.lex_state = 43, .external_lex_state = 2}, + [282] = {.lex_state = 43, .external_lex_state = 2}, + [283] = {.lex_state = 43, .external_lex_state = 2}, + [284] = {.lex_state = 43, .external_lex_state = 2}, + [285] = {.lex_state = 43, .external_lex_state = 2}, + [286] = {.lex_state = 43, .external_lex_state = 2}, + [287] = {.lex_state = 43, .external_lex_state = 2}, + [288] = {.lex_state = 43, .external_lex_state = 2}, + [289] = {.lex_state = 43, .external_lex_state = 2}, + [290] = {.lex_state = 43, .external_lex_state = 2}, + [291] = {.lex_state = 43, .external_lex_state = 2}, + [292] = {.lex_state = 43, .external_lex_state = 2}, + [293] = {.lex_state = 43, .external_lex_state = 2}, [294] = {.lex_state = 6, .external_lex_state = 2}, [295] = {.lex_state = 6, .external_lex_state = 2}, [296] = {.lex_state = 6, .external_lex_state = 2}, @@ -5909,28 +6061,28 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [384] = {.lex_state = 6, .external_lex_state = 2}, [385] = {.lex_state = 6, .external_lex_state = 2}, [386] = {.lex_state = 6, .external_lex_state = 2}, - [387] = {.lex_state = 41, .external_lex_state = 2}, - [388] = {.lex_state = 41, .external_lex_state = 2}, - [389] = {.lex_state = 43}, - [390] = {.lex_state = 43}, - [391] = {.lex_state = 43}, - [392] = {.lex_state = 0}, - [393] = {.lex_state = 0}, - [394] = {.lex_state = 0}, - [395] = {.lex_state = 0}, - [396] = {.lex_state = 0}, - [397] = {.lex_state = 0}, - [398] = {.lex_state = 0}, - [399] = {.lex_state = 0}, + [387] = {.lex_state = 6, .external_lex_state = 2}, + [388] = {.lex_state = 6, .external_lex_state = 2}, + [389] = {.lex_state = 6, .external_lex_state = 2}, + [390] = {.lex_state = 6, .external_lex_state = 2}, + [391] = {.lex_state = 6, .external_lex_state = 2}, + [392] = {.lex_state = 6, .external_lex_state = 2}, + [393] = {.lex_state = 6, .external_lex_state = 2}, + [394] = {.lex_state = 43, .external_lex_state = 2}, + [395] = {.lex_state = 43, .external_lex_state = 2}, + [396] = {.lex_state = 45}, + [397] = {.lex_state = 45}, + [398] = {.lex_state = 45}, + [399] = {.lex_state = 43, .external_lex_state = 1}, [400] = {.lex_state = 0}, [401] = {.lex_state = 0}, [402] = {.lex_state = 0}, [403] = {.lex_state = 0}, [404] = {.lex_state = 0}, - [405] = {.lex_state = 0}, - [406] = {.lex_state = 0}, - [407] = {.lex_state = 0}, - [408] = {.lex_state = 0}, + [405] = {.lex_state = 43, .external_lex_state = 2}, + [406] = {.lex_state = 43, .external_lex_state = 1}, + [407] = {.lex_state = 43, .external_lex_state = 2}, + [408] = {.lex_state = 43, .external_lex_state = 1}, [409] = {.lex_state = 0}, [410] = {.lex_state = 0}, [411] = {.lex_state = 0}, @@ -5941,276 +6093,276 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [416] = {.lex_state = 0}, [417] = {.lex_state = 0}, [418] = {.lex_state = 0}, - [419] = {.lex_state = 41, .external_lex_state = 1}, + [419] = {.lex_state = 0}, [420] = {.lex_state = 0}, [421] = {.lex_state = 0}, [422] = {.lex_state = 0}, [423] = {.lex_state = 0}, [424] = {.lex_state = 0}, [425] = {.lex_state = 0}, - [426] = {.lex_state = 41, .external_lex_state = 1}, - [427] = {.lex_state = 41, .external_lex_state = 2}, - [428] = {.lex_state = 43}, - [429] = {.lex_state = 41, .external_lex_state = 1}, - [430] = {.lex_state = 41, .external_lex_state = 2}, - [431] = {.lex_state = 41, .external_lex_state = 1}, - [432] = {.lex_state = 41, .external_lex_state = 1}, - [433] = {.lex_state = 41, .external_lex_state = 1}, - [434] = {.lex_state = 41, .external_lex_state = 1}, - [435] = {.lex_state = 8}, - [436] = {.lex_state = 8}, - [437] = {.lex_state = 8}, - [438] = {.lex_state = 43}, - [439] = {.lex_state = 41, .external_lex_state = 1}, - [440] = {.lex_state = 41, .external_lex_state = 1}, - [441] = {.lex_state = 41, .external_lex_state = 1}, - [442] = {.lex_state = 41, .external_lex_state = 1}, - [443] = {.lex_state = 41, .external_lex_state = 1}, - [444] = {.lex_state = 41, .external_lex_state = 1}, - [445] = {.lex_state = 41, .external_lex_state = 1}, - [446] = {.lex_state = 41, .external_lex_state = 1}, - [447] = {.lex_state = 41, .external_lex_state = 1}, - [448] = {.lex_state = 41, .external_lex_state = 1}, - [449] = {.lex_state = 41, .external_lex_state = 1}, - [450] = {.lex_state = 41, .external_lex_state = 1}, - [451] = {.lex_state = 41, .external_lex_state = 2}, - [452] = {.lex_state = 41, .external_lex_state = 1}, - [453] = {.lex_state = 41, .external_lex_state = 1}, - [454] = {.lex_state = 8}, - [455] = {.lex_state = 41, .external_lex_state = 1}, - [456] = {.lex_state = 41, .external_lex_state = 1}, - [457] = {.lex_state = 41, .external_lex_state = 1}, - [458] = {.lex_state = 41, .external_lex_state = 1}, - [459] = {.lex_state = 41, .external_lex_state = 1}, - [460] = {.lex_state = 41, .external_lex_state = 1}, - [461] = {.lex_state = 8}, - [462] = {.lex_state = 41, .external_lex_state = 1}, - [463] = {.lex_state = 41, .external_lex_state = 1}, - [464] = {.lex_state = 41, .external_lex_state = 1}, - [465] = {.lex_state = 41, .external_lex_state = 1}, - [466] = {.lex_state = 0}, - [467] = {.lex_state = 41, .external_lex_state = 1}, - [468] = {.lex_state = 41, .external_lex_state = 1}, - [469] = {.lex_state = 41, .external_lex_state = 2}, - [470] = {.lex_state = 41, .external_lex_state = 1}, - [471] = {.lex_state = 41, .external_lex_state = 1}, - [472] = {.lex_state = 41, .external_lex_state = 1}, - [473] = {.lex_state = 41, .external_lex_state = 1}, - [474] = {.lex_state = 41, .external_lex_state = 1}, - [475] = {.lex_state = 41, .external_lex_state = 2}, - [476] = {.lex_state = 41, .external_lex_state = 1}, - [477] = {.lex_state = 41, .external_lex_state = 1}, - [478] = {.lex_state = 41, .external_lex_state = 1}, - [479] = {.lex_state = 41, .external_lex_state = 1}, - [480] = {.lex_state = 41, .external_lex_state = 1}, - [481] = {.lex_state = 8}, - [482] = {.lex_state = 41, .external_lex_state = 1}, - [483] = {.lex_state = 0}, - [484] = {.lex_state = 41, .external_lex_state = 1}, - [485] = {.lex_state = 41, .external_lex_state = 1}, - [486] = {.lex_state = 41, .external_lex_state = 1}, - [487] = {.lex_state = 41, .external_lex_state = 1}, - [488] = {.lex_state = 41, .external_lex_state = 1}, - [489] = {.lex_state = 41, .external_lex_state = 1}, - [490] = {.lex_state = 41, .external_lex_state = 1}, - [491] = {.lex_state = 41, .external_lex_state = 1}, - [492] = {.lex_state = 41, .external_lex_state = 1}, - [493] = {.lex_state = 41, .external_lex_state = 1}, - [494] = {.lex_state = 41, .external_lex_state = 1}, - [495] = {.lex_state = 41, .external_lex_state = 1}, - [496] = {.lex_state = 41, .external_lex_state = 1}, - [497] = {.lex_state = 8}, - [498] = {.lex_state = 41, .external_lex_state = 1}, - [499] = {.lex_state = 41, .external_lex_state = 1}, - [500] = {.lex_state = 41, .external_lex_state = 1}, - [501] = {.lex_state = 41, .external_lex_state = 1}, - [502] = {.lex_state = 41, .external_lex_state = 1}, - [503] = {.lex_state = 41, .external_lex_state = 2}, - [504] = {.lex_state = 8}, - [505] = {.lex_state = 8}, - [506] = {.lex_state = 41, .external_lex_state = 1}, - [507] = {.lex_state = 41, .external_lex_state = 1}, - [508] = {.lex_state = 41, .external_lex_state = 1}, - [509] = {.lex_state = 41, .external_lex_state = 2}, - [510] = {.lex_state = 8}, - [511] = {.lex_state = 8}, - [512] = {.lex_state = 41, .external_lex_state = 1}, - [513] = {.lex_state = 41, .external_lex_state = 1}, - [514] = {.lex_state = 41, .external_lex_state = 2}, - [515] = {.lex_state = 0}, - [516] = {.lex_state = 41, .external_lex_state = 2}, - [517] = {.lex_state = 41, .external_lex_state = 2}, - [518] = {.lex_state = 43}, - [519] = {.lex_state = 41, .external_lex_state = 2}, - [520] = {.lex_state = 41, .external_lex_state = 2}, - [521] = {.lex_state = 41, .external_lex_state = 2}, - [522] = {.lex_state = 41, .external_lex_state = 1}, - [523] = {.lex_state = 41, .external_lex_state = 1}, - [524] = {.lex_state = 8}, - [525] = {.lex_state = 41, .external_lex_state = 2}, - [526] = {.lex_state = 8}, - [527] = {.lex_state = 41, .external_lex_state = 1}, - [528] = {.lex_state = 41, .external_lex_state = 1}, - [529] = {.lex_state = 41, .external_lex_state = 2}, - [530] = {.lex_state = 41, .external_lex_state = 1}, - [531] = {.lex_state = 0}, - [532] = {.lex_state = 0}, - [533] = {.lex_state = 0}, - [534] = {.lex_state = 41, .external_lex_state = 1}, - [535] = {.lex_state = 41, .external_lex_state = 1}, - [536] = {.lex_state = 8}, - [537] = {.lex_state = 0}, - [538] = {.lex_state = 41, .external_lex_state = 2}, - [539] = {.lex_state = 41, .external_lex_state = 1}, - [540] = {.lex_state = 41, .external_lex_state = 1}, - [541] = {.lex_state = 41, .external_lex_state = 2}, - [542] = {.lex_state = 41, .external_lex_state = 1}, - [543] = {.lex_state = 41, .external_lex_state = 1}, - [544] = {.lex_state = 41, .external_lex_state = 1}, - [545] = {.lex_state = 41, .external_lex_state = 2}, - [546] = {.lex_state = 8}, - [547] = {.lex_state = 41, .external_lex_state = 2}, - [548] = {.lex_state = 41, .external_lex_state = 1}, - [549] = {.lex_state = 41, .external_lex_state = 1}, - [550] = {.lex_state = 41, .external_lex_state = 1}, - [551] = {.lex_state = 41, .external_lex_state = 1}, - [552] = {.lex_state = 41, .external_lex_state = 1}, - [553] = {.lex_state = 41, .external_lex_state = 1}, - [554] = {.lex_state = 41, .external_lex_state = 1}, - [555] = {.lex_state = 41, .external_lex_state = 1}, - [556] = {.lex_state = 41, .external_lex_state = 1}, - [557] = {.lex_state = 41, .external_lex_state = 1}, - [558] = {.lex_state = 41, .external_lex_state = 2}, - [559] = {.lex_state = 41, .external_lex_state = 1}, + [426] = {.lex_state = 0}, + [427] = {.lex_state = 0}, + [428] = {.lex_state = 0}, + [429] = {.lex_state = 0}, + [430] = {.lex_state = 0}, + [431] = {.lex_state = 0}, + [432] = {.lex_state = 0}, + [433] = {.lex_state = 0}, + [434] = {.lex_state = 0}, + [435] = {.lex_state = 0}, + [436] = {.lex_state = 0}, + [437] = {.lex_state = 45}, + [438] = {.lex_state = 43, .external_lex_state = 1}, + [439] = {.lex_state = 43, .external_lex_state = 1}, + [440] = {.lex_state = 43, .external_lex_state = 1}, + [441] = {.lex_state = 43, .external_lex_state = 2}, + [442] = {.lex_state = 43, .external_lex_state = 1}, + [443] = {.lex_state = 43, .external_lex_state = 1}, + [444] = {.lex_state = 43, .external_lex_state = 1}, + [445] = {.lex_state = 43, .external_lex_state = 1}, + [446] = {.lex_state = 43, .external_lex_state = 1}, + [447] = {.lex_state = 43, .external_lex_state = 1}, + [448] = {.lex_state = 43, .external_lex_state = 1}, + [449] = {.lex_state = 43, .external_lex_state = 1}, + [450] = {.lex_state = 43, .external_lex_state = 1}, + [451] = {.lex_state = 43, .external_lex_state = 1}, + [452] = {.lex_state = 43, .external_lex_state = 1}, + [453] = {.lex_state = 43, .external_lex_state = 2}, + [454] = {.lex_state = 43, .external_lex_state = 2}, + [455] = {.lex_state = 43, .external_lex_state = 1}, + [456] = {.lex_state = 43, .external_lex_state = 1}, + [457] = {.lex_state = 43, .external_lex_state = 2}, + [458] = {.lex_state = 43, .external_lex_state = 1}, + [459] = {.lex_state = 43, .external_lex_state = 1}, + [460] = {.lex_state = 43, .external_lex_state = 1}, + [461] = {.lex_state = 43, .external_lex_state = 1}, + [462] = {.lex_state = 43, .external_lex_state = 1}, + [463] = {.lex_state = 43, .external_lex_state = 2}, + [464] = {.lex_state = 43, .external_lex_state = 1}, + [465] = {.lex_state = 43, .external_lex_state = 1}, + [466] = {.lex_state = 43, .external_lex_state = 1}, + [467] = {.lex_state = 43, .external_lex_state = 1}, + [468] = {.lex_state = 43, .external_lex_state = 1}, + [469] = {.lex_state = 43, .external_lex_state = 2}, + [470] = {.lex_state = 43, .external_lex_state = 1}, + [471] = {.lex_state = 43, .external_lex_state = 1}, + [472] = {.lex_state = 43, .external_lex_state = 1}, + [473] = {.lex_state = 43, .external_lex_state = 2}, + [474] = {.lex_state = 43, .external_lex_state = 1}, + [475] = {.lex_state = 43, .external_lex_state = 1}, + [476] = {.lex_state = 43, .external_lex_state = 1}, + [477] = {.lex_state = 43, .external_lex_state = 2}, + [478] = {.lex_state = 43, .external_lex_state = 1}, + [479] = {.lex_state = 43, .external_lex_state = 1}, + [480] = {.lex_state = 43, .external_lex_state = 2}, + [481] = {.lex_state = 43, .external_lex_state = 1}, + [482] = {.lex_state = 8}, + [483] = {.lex_state = 43, .external_lex_state = 1}, + [484] = {.lex_state = 43, .external_lex_state = 1}, + [485] = {.lex_state = 43, .external_lex_state = 1}, + [486] = {.lex_state = 43, .external_lex_state = 1}, + [487] = {.lex_state = 43, .external_lex_state = 1}, + [488] = {.lex_state = 43, .external_lex_state = 1}, + [489] = {.lex_state = 43, .external_lex_state = 1}, + [490] = {.lex_state = 43, .external_lex_state = 1}, + [491] = {.lex_state = 43, .external_lex_state = 1}, + [492] = {.lex_state = 43, .external_lex_state = 2}, + [493] = {.lex_state = 43, .external_lex_state = 1}, + [494] = {.lex_state = 43, .external_lex_state = 1}, + [495] = {.lex_state = 43, .external_lex_state = 1}, + [496] = {.lex_state = 43, .external_lex_state = 2}, + [497] = {.lex_state = 43, .external_lex_state = 1}, + [498] = {.lex_state = 43, .external_lex_state = 2}, + [499] = {.lex_state = 43, .external_lex_state = 1}, + [500] = {.lex_state = 43, .external_lex_state = 1}, + [501] = {.lex_state = 43, .external_lex_state = 1}, + [502] = {.lex_state = 43, .external_lex_state = 1}, + [503] = {.lex_state = 43, .external_lex_state = 1}, + [504] = {.lex_state = 43, .external_lex_state = 1}, + [505] = {.lex_state = 43, .external_lex_state = 1}, + [506] = {.lex_state = 43, .external_lex_state = 1}, + [507] = {.lex_state = 43, .external_lex_state = 1}, + [508] = {.lex_state = 8}, + [509] = {.lex_state = 43, .external_lex_state = 1}, + [510] = {.lex_state = 43, .external_lex_state = 1}, + [511] = {.lex_state = 43, .external_lex_state = 1}, + [512] = {.lex_state = 43, .external_lex_state = 1}, + [513] = {.lex_state = 43, .external_lex_state = 1}, + [514] = {.lex_state = 43, .external_lex_state = 1}, + [515] = {.lex_state = 43, .external_lex_state = 1}, + [516] = {.lex_state = 43, .external_lex_state = 1}, + [517] = {.lex_state = 43, .external_lex_state = 1}, + [518] = {.lex_state = 45}, + [519] = {.lex_state = 8}, + [520] = {.lex_state = 43, .external_lex_state = 1}, + [521] = {.lex_state = 43, .external_lex_state = 1}, + [522] = {.lex_state = 43, .external_lex_state = 1}, + [523] = {.lex_state = 43, .external_lex_state = 1}, + [524] = {.lex_state = 43, .external_lex_state = 1}, + [525] = {.lex_state = 43, .external_lex_state = 1}, + [526] = {.lex_state = 43, .external_lex_state = 1}, + [527] = {.lex_state = 43, .external_lex_state = 2}, + [528] = {.lex_state = 43, .external_lex_state = 1}, + [529] = {.lex_state = 43, .external_lex_state = 2}, + [530] = {.lex_state = 8}, + [531] = {.lex_state = 43, .external_lex_state = 1}, + [532] = {.lex_state = 43, .external_lex_state = 1}, + [533] = {.lex_state = 43, .external_lex_state = 1}, + [534] = {.lex_state = 43, .external_lex_state = 1}, + [535] = {.lex_state = 43, .external_lex_state = 1}, + [536] = {.lex_state = 43, .external_lex_state = 2}, + [537] = {.lex_state = 43, .external_lex_state = 1}, + [538] = {.lex_state = 43, .external_lex_state = 1}, + [539] = {.lex_state = 43, .external_lex_state = 1}, + [540] = {.lex_state = 43, .external_lex_state = 1}, + [541] = {.lex_state = 43, .external_lex_state = 2}, + [542] = {.lex_state = 43, .external_lex_state = 2}, + [543] = {.lex_state = 43, .external_lex_state = 1}, + [544] = {.lex_state = 43, .external_lex_state = 2}, + [545] = {.lex_state = 43, .external_lex_state = 1}, + [546] = {.lex_state = 43, .external_lex_state = 1}, + [547] = {.lex_state = 8}, + [548] = {.lex_state = 43, .external_lex_state = 2}, + [549] = {.lex_state = 43, .external_lex_state = 2}, + [550] = {.lex_state = 43, .external_lex_state = 2}, + [551] = {.lex_state = 43, .external_lex_state = 2}, + [552] = {.lex_state = 43, .external_lex_state = 2}, + [553] = {.lex_state = 43, .external_lex_state = 2}, + [554] = {.lex_state = 8}, + [555] = {.lex_state = 8}, + [556] = {.lex_state = 43, .external_lex_state = 2}, + [557] = {.lex_state = 43, .external_lex_state = 2}, + [558] = {.lex_state = 43, .external_lex_state = 2}, + [559] = {.lex_state = 43, .external_lex_state = 1}, [560] = {.lex_state = 8}, - [561] = {.lex_state = 9}, - [562] = {.lex_state = 41, .external_lex_state = 1}, - [563] = {.lex_state = 41, .external_lex_state = 1}, - [564] = {.lex_state = 41, .external_lex_state = 2}, - [565] = {.lex_state = 41, .external_lex_state = 1}, - [566] = {.lex_state = 41, .external_lex_state = 1}, - [567] = {.lex_state = 8}, - [568] = {.lex_state = 41, .external_lex_state = 1}, - [569] = {.lex_state = 41, .external_lex_state = 1}, - [570] = {.lex_state = 41, .external_lex_state = 2}, - [571] = {.lex_state = 41, .external_lex_state = 1}, - [572] = {.lex_state = 41, .external_lex_state = 1}, - [573] = {.lex_state = 41, .external_lex_state = 1}, - [574] = {.lex_state = 41, .external_lex_state = 1}, - [575] = {.lex_state = 41, .external_lex_state = 2}, - [576] = {.lex_state = 41, .external_lex_state = 2}, - [577] = {.lex_state = 41, .external_lex_state = 2}, - [578] = {.lex_state = 41, .external_lex_state = 2}, - [579] = {.lex_state = 41, .external_lex_state = 2}, - [580] = {.lex_state = 41, .external_lex_state = 2}, - [581] = {.lex_state = 41, .external_lex_state = 2}, - [582] = {.lex_state = 41, .external_lex_state = 1}, - [583] = {.lex_state = 41, .external_lex_state = 1}, - [584] = {.lex_state = 41, .external_lex_state = 2}, - [585] = {.lex_state = 41, .external_lex_state = 2}, - [586] = {.lex_state = 41, .external_lex_state = 2}, - [587] = {.lex_state = 41, .external_lex_state = 2}, - [588] = {.lex_state = 41, .external_lex_state = 1}, - [589] = {.lex_state = 41, .external_lex_state = 2}, - [590] = {.lex_state = 41, .external_lex_state = 1}, - [591] = {.lex_state = 41, .external_lex_state = 1}, - [592] = {.lex_state = 41, .external_lex_state = 2}, - [593] = {.lex_state = 41, .external_lex_state = 1}, - [594] = {.lex_state = 41, .external_lex_state = 2}, - [595] = {.lex_state = 41, .external_lex_state = 2}, - [596] = {.lex_state = 41, .external_lex_state = 2}, - [597] = {.lex_state = 41, .external_lex_state = 2}, - [598] = {.lex_state = 41, .external_lex_state = 2}, - [599] = {.lex_state = 41, .external_lex_state = 1}, - [600] = {.lex_state = 41, .external_lex_state = 2}, - [601] = {.lex_state = 41, .external_lex_state = 2}, - [602] = {.lex_state = 41, .external_lex_state = 2}, - [603] = {.lex_state = 41, .external_lex_state = 2}, - [604] = {.lex_state = 41, .external_lex_state = 1}, - [605] = {.lex_state = 41, .external_lex_state = 1}, - [606] = {.lex_state = 41, .external_lex_state = 1}, - [607] = {.lex_state = 41, .external_lex_state = 1}, - [608] = {.lex_state = 41, .external_lex_state = 1}, - [609] = {.lex_state = 41, .external_lex_state = 2}, - [610] = {.lex_state = 41, .external_lex_state = 2}, - [611] = {.lex_state = 41, .external_lex_state = 1}, - [612] = {.lex_state = 41, .external_lex_state = 2}, - [613] = {.lex_state = 41, .external_lex_state = 2}, - [614] = {.lex_state = 41, .external_lex_state = 2}, - [615] = {.lex_state = 9}, + [561] = {.lex_state = 0}, + [562] = {.lex_state = 43, .external_lex_state = 2}, + [563] = {.lex_state = 43, .external_lex_state = 1}, + [564] = {.lex_state = 43, .external_lex_state = 1}, + [565] = {.lex_state = 43, .external_lex_state = 2}, + [566] = {.lex_state = 43, .external_lex_state = 2}, + [567] = {.lex_state = 43, .external_lex_state = 2}, + [568] = {.lex_state = 43, .external_lex_state = 1}, + [569] = {.lex_state = 43, .external_lex_state = 2}, + [570] = {.lex_state = 43, .external_lex_state = 2}, + [571] = {.lex_state = 43, .external_lex_state = 1}, + [572] = {.lex_state = 43, .external_lex_state = 1}, + [573] = {.lex_state = 43, .external_lex_state = 2}, + [574] = {.lex_state = 43, .external_lex_state = 2}, + [575] = {.lex_state = 8}, + [576] = {.lex_state = 43, .external_lex_state = 2}, + [577] = {.lex_state = 43, .external_lex_state = 2}, + [578] = {.lex_state = 43, .external_lex_state = 2}, + [579] = {.lex_state = 43, .external_lex_state = 1}, + [580] = {.lex_state = 43, .external_lex_state = 2}, + [581] = {.lex_state = 43, .external_lex_state = 2}, + [582] = {.lex_state = 43, .external_lex_state = 1}, + [583] = {.lex_state = 8}, + [584] = {.lex_state = 43, .external_lex_state = 2}, + [585] = {.lex_state = 43, .external_lex_state = 2}, + [586] = {.lex_state = 43, .external_lex_state = 2}, + [587] = {.lex_state = 43, .external_lex_state = 1}, + [588] = {.lex_state = 43, .external_lex_state = 1}, + [589] = {.lex_state = 43, .external_lex_state = 1}, + [590] = {.lex_state = 43, .external_lex_state = 1}, + [591] = {.lex_state = 43, .external_lex_state = 1}, + [592] = {.lex_state = 43, .external_lex_state = 1}, + [593] = {.lex_state = 43, .external_lex_state = 1}, + [594] = {.lex_state = 43, .external_lex_state = 1}, + [595] = {.lex_state = 43, .external_lex_state = 1}, + [596] = {.lex_state = 43, .external_lex_state = 1}, + [597] = {.lex_state = 43, .external_lex_state = 1}, + [598] = {.lex_state = 0}, + [599] = {.lex_state = 43, .external_lex_state = 1}, + [600] = {.lex_state = 43, .external_lex_state = 2}, + [601] = {.lex_state = 43, .external_lex_state = 2}, + [602] = {.lex_state = 43, .external_lex_state = 1}, + [603] = {.lex_state = 8}, + [604] = {.lex_state = 43, .external_lex_state = 2}, + [605] = {.lex_state = 43, .external_lex_state = 2}, + [606] = {.lex_state = 43, .external_lex_state = 1}, + [607] = {.lex_state = 43, .external_lex_state = 1}, + [608] = {.lex_state = 43, .external_lex_state = 1}, + [609] = {.lex_state = 43, .external_lex_state = 1}, + [610] = {.lex_state = 43, .external_lex_state = 1}, + [611] = {.lex_state = 43, .external_lex_state = 2}, + [612] = {.lex_state = 43, .external_lex_state = 2}, + [613] = {.lex_state = 45}, + [614] = {.lex_state = 43, .external_lex_state = 2}, + [615] = {.lex_state = 43, .external_lex_state = 2}, [616] = {.lex_state = 8}, - [617] = {.lex_state = 43}, - [618] = {.lex_state = 43}, + [617] = {.lex_state = 0}, + [618] = {.lex_state = 43, .external_lex_state = 2}, [619] = {.lex_state = 8}, - [620] = {.lex_state = 41, .external_lex_state = 2}, - [621] = {.lex_state = 41, .external_lex_state = 2}, - [622] = {.lex_state = 41, .external_lex_state = 2}, - [623] = {.lex_state = 41, .external_lex_state = 2}, - [624] = {.lex_state = 41, .external_lex_state = 2}, - [625] = {.lex_state = 8}, - [626] = {.lex_state = 41, .external_lex_state = 2}, - [627] = {.lex_state = 41, .external_lex_state = 2}, + [620] = {.lex_state = 43, .external_lex_state = 2}, + [621] = {.lex_state = 0}, + [622] = {.lex_state = 0}, + [623] = {.lex_state = 8}, + [624] = {.lex_state = 0}, + [625] = {.lex_state = 0}, + [626] = {.lex_state = 43, .external_lex_state = 2}, + [627] = {.lex_state = 8}, [628] = {.lex_state = 9}, - [629] = {.lex_state = 0}, - [630] = {.lex_state = 0}, - [631] = {.lex_state = 0}, - [632] = {.lex_state = 0}, - [633] = {.lex_state = 0}, - [634] = {.lex_state = 0}, - [635] = {.lex_state = 0}, - [636] = {.lex_state = 0}, + [629] = {.lex_state = 8}, + [630] = {.lex_state = 8}, + [631] = {.lex_state = 45}, + [632] = {.lex_state = 8}, + [633] = {.lex_state = 9}, + [634] = {.lex_state = 8}, + [635] = {.lex_state = 8}, + [636] = {.lex_state = 45}, [637] = {.lex_state = 0}, - [638] = {.lex_state = 43}, - [639] = {.lex_state = 43}, - [640] = {.lex_state = 43}, - [641] = {.lex_state = 43}, - [642] = {.lex_state = 43}, + [638] = {.lex_state = 0}, + [639] = {.lex_state = 0}, + [640] = {.lex_state = 0}, + [641] = {.lex_state = 9}, + [642] = {.lex_state = 0}, [643] = {.lex_state = 0}, - [644] = {.lex_state = 43}, + [644] = {.lex_state = 0}, [645] = {.lex_state = 0}, - [646] = {.lex_state = 43}, - [647] = {.lex_state = 0}, - [648] = {.lex_state = 0}, - [649] = {.lex_state = 8}, - [650] = {.lex_state = 0}, - [651] = {.lex_state = 0}, - [652] = {.lex_state = 41}, + [646] = {.lex_state = 0}, + [647] = {.lex_state = 45}, + [648] = {.lex_state = 45}, + [649] = {.lex_state = 45}, + [650] = {.lex_state = 45}, + [651] = {.lex_state = 8}, + [652] = {.lex_state = 0}, [653] = {.lex_state = 0}, - [654] = {.lex_state = 41}, - [655] = {.lex_state = 0}, - [656] = {.lex_state = 10}, - [657] = {.lex_state = 10}, + [654] = {.lex_state = 0}, + [655] = {.lex_state = 45}, + [656] = {.lex_state = 45}, + [657] = {.lex_state = 45}, [658] = {.lex_state = 0}, - [659] = {.lex_state = 10}, + [659] = {.lex_state = 0}, [660] = {.lex_state = 0}, - [661] = {.lex_state = 41}, - [662] = {.lex_state = 0}, - [663] = {.lex_state = 41}, - [664] = {.lex_state = 10}, - [665] = {.lex_state = 0}, - [666] = {.lex_state = 41}, - [667] = {.lex_state = 41}, - [668] = {.lex_state = 0}, + [661] = {.lex_state = 43}, + [662] = {.lex_state = 11}, + [663] = {.lex_state = 0}, + [664] = {.lex_state = 0}, + [665] = {.lex_state = 43}, + [666] = {.lex_state = 11}, + [667] = {.lex_state = 0}, + [668] = {.lex_state = 43}, [669] = {.lex_state = 0}, - [670] = {.lex_state = 0}, + [670] = {.lex_state = 11}, [671] = {.lex_state = 0}, [672] = {.lex_state = 0}, - [673] = {.lex_state = 41}, - [674] = {.lex_state = 0}, - [675] = {.lex_state = 0}, + [673] = {.lex_state = 0}, + [674] = {.lex_state = 11}, + [675] = {.lex_state = 43}, [676] = {.lex_state = 0}, [677] = {.lex_state = 0}, [678] = {.lex_state = 0}, - [679] = {.lex_state = 41}, + [679] = {.lex_state = 0}, [680] = {.lex_state = 0}, [681] = {.lex_state = 0}, [682] = {.lex_state = 0}, [683] = {.lex_state = 0}, [684] = {.lex_state = 0}, - [685] = {.lex_state = 0}, - [686] = {.lex_state = 0}, - [687] = {.lex_state = 0}, - [688] = {.lex_state = 0}, + [685] = {.lex_state = 43}, + [686] = {.lex_state = 43}, + [687] = {.lex_state = 43}, + [688] = {.lex_state = 43}, [689] = {.lex_state = 0}, [690] = {.lex_state = 0}, [691] = {.lex_state = 0}, @@ -6218,7 +6370,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [693] = {.lex_state = 0}, [694] = {.lex_state = 0}, [695] = {.lex_state = 0}, - [696] = {.lex_state = 8}, + [696] = {.lex_state = 0}, [697] = {.lex_state = 0}, [698] = {.lex_state = 0}, [699] = {.lex_state = 0}, @@ -6228,7 +6380,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [703] = {.lex_state = 0}, [704] = {.lex_state = 0}, [705] = {.lex_state = 0}, - [706] = {.lex_state = 0}, + [706] = {.lex_state = 45}, [707] = {.lex_state = 0}, [708] = {.lex_state = 0}, [709] = {.lex_state = 0}, @@ -6274,9 +6426,9 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [749] = {.lex_state = 0}, [750] = {.lex_state = 0}, [751] = {.lex_state = 0}, - [752] = {.lex_state = 10}, + [752] = {.lex_state = 0}, [753] = {.lex_state = 0}, - [754] = {.lex_state = 0}, + [754] = {.lex_state = 8}, [755] = {.lex_state = 0}, [756] = {.lex_state = 0}, [757] = {.lex_state = 0}, @@ -6287,966 +6439,995 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [762] = {.lex_state = 0}, [763] = {.lex_state = 0}, [764] = {.lex_state = 0}, - [765] = {.lex_state = 0}, + [765] = {.lex_state = 11}, [766] = {.lex_state = 0}, [767] = {.lex_state = 0}, - [768] = {.lex_state = 0}, + [768] = {.lex_state = 11}, [769] = {.lex_state = 0}, [770] = {.lex_state = 0}, [771] = {.lex_state = 0}, - [772] = {.lex_state = 10}, + [772] = {.lex_state = 0}, [773] = {.lex_state = 0}, [774] = {.lex_state = 0}, [775] = {.lex_state = 0}, [776] = {.lex_state = 0}, [777] = {.lex_state = 0}, [778] = {.lex_state = 0}, - [779] = {.lex_state = 0}, + [779] = {.lex_state = 11}, [780] = {.lex_state = 0}, - [781] = {.lex_state = 10}, + [781] = {.lex_state = 0}, [782] = {.lex_state = 0}, [783] = {.lex_state = 0}, - [784] = {.lex_state = 0}, + [784] = {.lex_state = 43}, [785] = {.lex_state = 0}, [786] = {.lex_state = 0}, - [787] = {.lex_state = 0}, - [788] = {.lex_state = 10}, + [787] = {.lex_state = 11}, + [788] = {.lex_state = 0}, [789] = {.lex_state = 0}, - [790] = {.lex_state = 8}, - [791] = {.lex_state = 43}, + [790] = {.lex_state = 0}, + [791] = {.lex_state = 0}, [792] = {.lex_state = 0}, - [793] = {.lex_state = 8}, + [793] = {.lex_state = 0}, [794] = {.lex_state = 0}, - [795] = {.lex_state = 41}, - [796] = {.lex_state = 8}, + [795] = {.lex_state = 0}, + [796] = {.lex_state = 0}, [797] = {.lex_state = 0}, [798] = {.lex_state = 0}, - [799] = {.lex_state = 41}, + [799] = {.lex_state = 0}, [800] = {.lex_state = 8}, - [801] = {.lex_state = 41}, - [802] = {.lex_state = 41}, - [803] = {.lex_state = 41}, - [804] = {.lex_state = 41}, + [801] = {.lex_state = 8}, + [802] = {.lex_state = 43}, + [803] = {.lex_state = 0}, + [804] = {.lex_state = 43}, [805] = {.lex_state = 43}, - [806] = {.lex_state = 8}, - [807] = {.lex_state = 41}, - [808] = {.lex_state = 0}, - [809] = {.lex_state = 41}, - [810] = {.lex_state = 21}, - [811] = {.lex_state = 41}, - [812] = {.lex_state = 43}, - [813] = {.lex_state = 21}, + [806] = {.lex_state = 45}, + [807] = {.lex_state = 43}, + [808] = {.lex_state = 8}, + [809] = {.lex_state = 0}, + [810] = {.lex_state = 0}, + [811] = {.lex_state = 8}, + [812] = {.lex_state = 0}, + [813] = {.lex_state = 43}, [814] = {.lex_state = 43}, - [815] = {.lex_state = 41}, - [816] = {.lex_state = 41}, - [817] = {.lex_state = 41}, - [818] = {.lex_state = 41}, - [819] = {.lex_state = 41}, - [820] = {.lex_state = 41}, - [821] = {.lex_state = 41}, - [822] = {.lex_state = 0}, - [823] = {.lex_state = 41}, - [824] = {.lex_state = 41}, - [825] = {.lex_state = 41}, - [826] = {.lex_state = 0}, - [827] = {.lex_state = 0}, - [828] = {.lex_state = 41}, - [829] = {.lex_state = 41}, - [830] = {.lex_state = 41}, - [831] = {.lex_state = 41}, - [832] = {.lex_state = 0}, - [833] = {.lex_state = 41}, - [834] = {.lex_state = 41}, + [815] = {.lex_state = 43}, + [816] = {.lex_state = 43}, + [817] = {.lex_state = 8}, + [818] = {.lex_state = 45}, + [819] = {.lex_state = 45}, + [820] = {.lex_state = 45}, + [821] = {.lex_state = 45}, + [822] = {.lex_state = 43}, + [823] = {.lex_state = 43}, + [824] = {.lex_state = 43}, + [825] = {.lex_state = 0}, + [826] = {.lex_state = 22}, + [827] = {.lex_state = 43}, + [828] = {.lex_state = 43}, + [829] = {.lex_state = 22}, + [830] = {.lex_state = 43}, + [831] = {.lex_state = 43}, + [832] = {.lex_state = 43}, + [833] = {.lex_state = 43}, + [834] = {.lex_state = 43}, [835] = {.lex_state = 0}, - [836] = {.lex_state = 41}, - [837] = {.lex_state = 41}, - [838] = {.lex_state = 41}, - [839] = {.lex_state = 41}, - [840] = {.lex_state = 41}, - [841] = {.lex_state = 41}, - [842] = {.lex_state = 41}, - [843] = {.lex_state = 41}, - [844] = {.lex_state = 41}, - [845] = {.lex_state = 41}, - [846] = {.lex_state = 41}, - [847] = {.lex_state = 8, .external_lex_state = 3}, - [848] = {.lex_state = 41}, - [849] = {.lex_state = 8, .external_lex_state = 3}, - [850] = {.lex_state = 41}, - [851] = {.lex_state = 0}, - [852] = {.lex_state = 0}, - [853] = {.lex_state = 0}, - [854] = {.lex_state = 8, .external_lex_state = 3}, - [855] = {.lex_state = 41}, - [856] = {.lex_state = 0}, - [857] = {.lex_state = 0}, - [858] = {.lex_state = 41}, - [859] = {.lex_state = 0}, - [860] = {.lex_state = 41}, - [861] = {.lex_state = 41}, - [862] = {.lex_state = 41}, - [863] = {.lex_state = 41}, - [864] = {.lex_state = 41}, - [865] = {.lex_state = 41}, - [866] = {.lex_state = 0}, - [867] = {.lex_state = 0}, - [868] = {.lex_state = 41}, - [869] = {.lex_state = 41}, - [870] = {.lex_state = 41}, - [871] = {.lex_state = 41}, - [872] = {.lex_state = 41}, - [873] = {.lex_state = 41}, - [874] = {.lex_state = 41}, - [875] = {.lex_state = 0}, + [836] = {.lex_state = 43}, + [837] = {.lex_state = 43}, + [838] = {.lex_state = 0}, + [839] = {.lex_state = 43}, + [840] = {.lex_state = 43}, + [841] = {.lex_state = 43}, + [842] = {.lex_state = 43}, + [843] = {.lex_state = 43}, + [844] = {.lex_state = 0}, + [845] = {.lex_state = 43}, + [846] = {.lex_state = 43}, + [847] = {.lex_state = 0}, + [848] = {.lex_state = 8, .external_lex_state = 3}, + [849] = {.lex_state = 43}, + [850] = {.lex_state = 43}, + [851] = {.lex_state = 43}, + [852] = {.lex_state = 43}, + [853] = {.lex_state = 43}, + [854] = {.lex_state = 43}, + [855] = {.lex_state = 43}, + [856] = {.lex_state = 43}, + [857] = {.lex_state = 8, .external_lex_state = 3}, + [858] = {.lex_state = 43}, + [859] = {.lex_state = 8, .external_lex_state = 3}, + [860] = {.lex_state = 43}, + [861] = {.lex_state = 43}, + [862] = {.lex_state = 43}, + [863] = {.lex_state = 43}, + [864] = {.lex_state = 0}, + [865] = {.lex_state = 43}, + [866] = {.lex_state = 43}, + [867] = {.lex_state = 43}, + [868] = {.lex_state = 43}, + [869] = {.lex_state = 0}, + [870] = {.lex_state = 43}, + [871] = {.lex_state = 43}, + [872] = {.lex_state = 0}, + [873] = {.lex_state = 43}, + [874] = {.lex_state = 0}, + [875] = {.lex_state = 43}, [876] = {.lex_state = 0}, - [877] = {.lex_state = 41}, - [878] = {.lex_state = 41}, - [879] = {.lex_state = 41}, - [880] = {.lex_state = 41}, - [881] = {.lex_state = 41}, - [882] = {.lex_state = 41}, - [883] = {.lex_state = 41}, - [884] = {.lex_state = 41}, - [885] = {.lex_state = 41}, - [886] = {.lex_state = 41}, + [877] = {.lex_state = 0}, + [878] = {.lex_state = 43}, + [879] = {.lex_state = 43}, + [880] = {.lex_state = 43}, + [881] = {.lex_state = 43}, + [882] = {.lex_state = 43}, + [883] = {.lex_state = 43}, + [884] = {.lex_state = 0}, + [885] = {.lex_state = 0}, + [886] = {.lex_state = 43}, [887] = {.lex_state = 0}, - [888] = {.lex_state = 41}, - [889] = {.lex_state = 0}, - [890] = {.lex_state = 41}, - [891] = {.lex_state = 0}, - [892] = {.lex_state = 41}, - [893] = {.lex_state = 41}, - [894] = {.lex_state = 41}, - [895] = {.lex_state = 41}, - [896] = {.lex_state = 41}, - [897] = {.lex_state = 41}, - [898] = {.lex_state = 41}, - [899] = {.lex_state = 41}, - [900] = {.lex_state = 41}, - [901] = {.lex_state = 41}, - [902] = {.lex_state = 41}, - [903] = {.lex_state = 41}, - [904] = {.lex_state = 41}, - [905] = {.lex_state = 41}, - [906] = {.lex_state = 41}, - [907] = {.lex_state = 41}, - [908] = {.lex_state = 0}, - [909] = {.lex_state = 41}, - [910] = {.lex_state = 41}, - [911] = {.lex_state = 41}, - [912] = {.lex_state = 41}, - [913] = {.lex_state = 41}, - [914] = {.lex_state = 41}, - [915] = {.lex_state = 41}, - [916] = {.lex_state = 41}, + [888] = {.lex_state = 0}, + [889] = {.lex_state = 43}, + [890] = {.lex_state = 43}, + [891] = {.lex_state = 43}, + [892] = {.lex_state = 43}, + [893] = {.lex_state = 43}, + [894] = {.lex_state = 43}, + [895] = {.lex_state = 43}, + [896] = {.lex_state = 0}, + [897] = {.lex_state = 43}, + [898] = {.lex_state = 0}, + [899] = {.lex_state = 0}, + [900] = {.lex_state = 43}, + [901] = {.lex_state = 43}, + [902] = {.lex_state = 43}, + [903] = {.lex_state = 0}, + [904] = {.lex_state = 43}, + [905] = {.lex_state = 43}, + [906] = {.lex_state = 43}, + [907] = {.lex_state = 43}, + [908] = {.lex_state = 43}, + [909] = {.lex_state = 43}, + [910] = {.lex_state = 43}, + [911] = {.lex_state = 43}, + [912] = {.lex_state = 43}, + [913] = {.lex_state = 43}, + [914] = {.lex_state = 43}, + [915] = {.lex_state = 43}, + [916] = {.lex_state = 43}, [917] = {.lex_state = 0}, - [918] = {.lex_state = 41}, - [919] = {.lex_state = 41}, - [920] = {.lex_state = 0}, - [921] = {.lex_state = 41}, - [922] = {.lex_state = 8, .external_lex_state = 3}, - [923] = {.lex_state = 0}, - [924] = {.lex_state = 0}, - [925] = {.lex_state = 0}, + [918] = {.lex_state = 43}, + [919] = {.lex_state = 43}, + [920] = {.lex_state = 43}, + [921] = {.lex_state = 43}, + [922] = {.lex_state = 43}, + [923] = {.lex_state = 43}, + [924] = {.lex_state = 43}, + [925] = {.lex_state = 43}, [926] = {.lex_state = 0}, - [927] = {.lex_state = 41}, - [928] = {.lex_state = 0}, - [929] = {.lex_state = 41}, - [930] = {.lex_state = 41}, - [931] = {.lex_state = 0}, - [932] = {.lex_state = 41}, - [933] = {.lex_state = 0}, - [934] = {.lex_state = 41}, + [927] = {.lex_state = 43}, + [928] = {.lex_state = 43}, + [929] = {.lex_state = 43}, + [930] = {.lex_state = 43}, + [931] = {.lex_state = 43}, + [932] = {.lex_state = 43}, + [933] = {.lex_state = 43}, + [934] = {.lex_state = 43}, [935] = {.lex_state = 8, .external_lex_state = 3}, [936] = {.lex_state = 8, .external_lex_state = 3}, - [937] = {.lex_state = 41}, - [938] = {.lex_state = 41}, + [937] = {.lex_state = 43}, + [938] = {.lex_state = 0}, [939] = {.lex_state = 0}, - [940] = {.lex_state = 0}, - [941] = {.lex_state = 41}, - [942] = {.lex_state = 0}, - [943] = {.lex_state = 0}, - [944] = {.lex_state = 0}, + [940] = {.lex_state = 43}, + [941] = {.lex_state = 0}, + [942] = {.lex_state = 43}, + [943] = {.lex_state = 43}, + [944] = {.lex_state = 43}, [945] = {.lex_state = 0}, - [946] = {.lex_state = 0}, - [947] = {.lex_state = 41}, - [948] = {.lex_state = 41}, - [949] = {.lex_state = 41}, + [946] = {.lex_state = 43}, + [947] = {.lex_state = 0}, + [948] = {.lex_state = 43}, + [949] = {.lex_state = 0}, [950] = {.lex_state = 0}, [951] = {.lex_state = 0}, - [952] = {.lex_state = 41}, - [953] = {.lex_state = 11}, - [954] = {.lex_state = 11}, - [955] = {.lex_state = 8, .external_lex_state = 3}, - [956] = {.lex_state = 11}, - [957] = {.lex_state = 11}, - [958] = {.lex_state = 11}, - [959] = {.lex_state = 11}, - [960] = {.lex_state = 11}, - [961] = {.lex_state = 11}, - [962] = {.lex_state = 41}, - [963] = {.lex_state = 41}, - [964] = {.lex_state = 11}, - [965] = {.lex_state = 41}, - [966] = {.lex_state = 11}, - [967] = {.lex_state = 41}, - [968] = {.lex_state = 11}, - [969] = {.lex_state = 11}, - [970] = {.lex_state = 11}, - [971] = {.lex_state = 11}, - [972] = {.lex_state = 11}, - [973] = {.lex_state = 11}, - [974] = {.lex_state = 41}, - [975] = {.lex_state = 41}, - [976] = {.lex_state = 41}, - [977] = {.lex_state = 41}, - [978] = {.lex_state = 41}, - [979] = {.lex_state = 41}, - [980] = {.lex_state = 41}, - [981] = {.lex_state = 9}, - [982] = {.lex_state = 41, .external_lex_state = 3}, - [983] = {.lex_state = 41}, - [984] = {.lex_state = 41}, - [985] = {.lex_state = 41}, - [986] = {.lex_state = 41}, - [987] = {.lex_state = 41}, - [988] = {.lex_state = 41}, - [989] = {.lex_state = 41}, - [990] = {.lex_state = 41}, - [991] = {.lex_state = 41}, - [992] = {.lex_state = 8}, - [993] = {.lex_state = 41}, - [994] = {.lex_state = 41}, - [995] = {.lex_state = 41}, - [996] = {.lex_state = 41}, - [997] = {.lex_state = 41}, - [998] = {.lex_state = 41}, - [999] = {.lex_state = 41}, - [1000] = {.lex_state = 41}, - [1001] = {.lex_state = 41}, - [1002] = {.lex_state = 41}, - [1003] = {.lex_state = 41}, - [1004] = {.lex_state = 41}, - [1005] = {.lex_state = 41}, - [1006] = {.lex_state = 41}, - [1007] = {.lex_state = 41}, - [1008] = {.lex_state = 41}, - [1009] = {.lex_state = 41}, - [1010] = {.lex_state = 8, .external_lex_state = 3}, - [1011] = {.lex_state = 41}, - [1012] = {.lex_state = 41}, - [1013] = {.lex_state = 41}, - [1014] = {.lex_state = 8}, - [1015] = {.lex_state = 41}, - [1016] = {.lex_state = 41}, - [1017] = {.lex_state = 41}, - [1018] = {.lex_state = 41}, - [1019] = {.lex_state = 0}, - [1020] = {.lex_state = 41}, - [1021] = {.lex_state = 41}, - [1022] = {.lex_state = 41}, - [1023] = {.lex_state = 41}, - [1024] = {.lex_state = 41}, - [1025] = {.lex_state = 41}, - [1026] = {.lex_state = 41}, - [1027] = {.lex_state = 41}, - [1028] = {.lex_state = 41}, - [1029] = {.lex_state = 41}, - [1030] = {.lex_state = 0}, - [1031] = {.lex_state = 41}, - [1032] = {.lex_state = 41}, - [1033] = {.lex_state = 41}, - [1034] = {.lex_state = 41}, - [1035] = {.lex_state = 41}, - [1036] = {.lex_state = 41}, - [1037] = {.lex_state = 41}, - [1038] = {.lex_state = 8}, - [1039] = {.lex_state = 41}, - [1040] = {.lex_state = 41}, - [1041] = {.lex_state = 41, .external_lex_state = 3}, - [1042] = {.lex_state = 41, .external_lex_state = 3}, - [1043] = {.lex_state = 21}, - [1044] = {.lex_state = 41}, - [1045] = {.lex_state = 8, .external_lex_state = 3}, - [1046] = {.lex_state = 41}, - [1047] = {.lex_state = 21}, - [1048] = {.lex_state = 41}, - [1049] = {.lex_state = 41}, - [1050] = {.lex_state = 41}, - [1051] = {.lex_state = 21}, - [1052] = {.lex_state = 21}, - [1053] = {.lex_state = 41, .external_lex_state = 3}, - [1054] = {.lex_state = 41}, - [1055] = {.lex_state = 41}, - [1056] = {.lex_state = 41}, - [1057] = {.lex_state = 21}, - [1058] = {.lex_state = 8}, - [1059] = {.lex_state = 21}, - [1060] = {.lex_state = 41}, - [1061] = {.lex_state = 41}, - [1062] = {.lex_state = 41}, - [1063] = {.lex_state = 8}, - [1064] = {.lex_state = 41}, - [1065] = {.lex_state = 8}, + [952] = {.lex_state = 43}, + [953] = {.lex_state = 0}, + [954] = {.lex_state = 0}, + [955] = {.lex_state = 0}, + [956] = {.lex_state = 8, .external_lex_state = 3}, + [957] = {.lex_state = 0}, + [958] = {.lex_state = 43}, + [959] = {.lex_state = 43}, + [960] = {.lex_state = 0}, + [961] = {.lex_state = 0}, + [962] = {.lex_state = 43}, + [963] = {.lex_state = 43}, + [964] = {.lex_state = 0}, + [965] = {.lex_state = 0}, + [966] = {.lex_state = 10}, + [967] = {.lex_state = 10}, + [968] = {.lex_state = 10}, + [969] = {.lex_state = 43}, + [970] = {.lex_state = 10}, + [971] = {.lex_state = 10}, + [972] = {.lex_state = 10}, + [973] = {.lex_state = 10}, + [974] = {.lex_state = 43}, + [975] = {.lex_state = 10}, + [976] = {.lex_state = 10}, + [977] = {.lex_state = 10}, + [978] = {.lex_state = 10}, + [979] = {.lex_state = 10}, + [980] = {.lex_state = 10}, + [981] = {.lex_state = 10}, + [982] = {.lex_state = 43}, + [983] = {.lex_state = 8, .external_lex_state = 3}, + [984] = {.lex_state = 43}, + [985] = {.lex_state = 10}, + [986] = {.lex_state = 10}, + [987] = {.lex_state = 43}, + [988] = {.lex_state = 0}, + [989] = {.lex_state = 43}, + [990] = {.lex_state = 43}, + [991] = {.lex_state = 43}, + [992] = {.lex_state = 43}, + [993] = {.lex_state = 43}, + [994] = {.lex_state = 43}, + [995] = {.lex_state = 43}, + [996] = {.lex_state = 43}, + [997] = {.lex_state = 43}, + [998] = {.lex_state = 8, .external_lex_state = 3}, + [999] = {.lex_state = 43}, + [1000] = {.lex_state = 43}, + [1001] = {.lex_state = 43}, + [1002] = {.lex_state = 43}, + [1003] = {.lex_state = 43}, + [1004] = {.lex_state = 43}, + [1005] = {.lex_state = 43}, + [1006] = {.lex_state = 43}, + [1007] = {.lex_state = 43}, + [1008] = {.lex_state = 43}, + [1009] = {.lex_state = 43}, + [1010] = {.lex_state = 43}, + [1011] = {.lex_state = 43}, + [1012] = {.lex_state = 43}, + [1013] = {.lex_state = 43}, + [1014] = {.lex_state = 43}, + [1015] = {.lex_state = 43}, + [1016] = {.lex_state = 43}, + [1017] = {.lex_state = 43}, + [1018] = {.lex_state = 43}, + [1019] = {.lex_state = 43}, + [1020] = {.lex_state = 43}, + [1021] = {.lex_state = 43}, + [1022] = {.lex_state = 43, .external_lex_state = 3}, + [1023] = {.lex_state = 43}, + [1024] = {.lex_state = 43}, + [1025] = {.lex_state = 43}, + [1026] = {.lex_state = 43}, + [1027] = {.lex_state = 43}, + [1028] = {.lex_state = 43}, + [1029] = {.lex_state = 43}, + [1030] = {.lex_state = 8}, + [1031] = {.lex_state = 43}, + [1032] = {.lex_state = 43}, + [1033] = {.lex_state = 43}, + [1034] = {.lex_state = 43}, + [1035] = {.lex_state = 8}, + [1036] = {.lex_state = 43}, + [1037] = {.lex_state = 43}, + [1038] = {.lex_state = 43}, + [1039] = {.lex_state = 43}, + [1040] = {.lex_state = 43}, + [1041] = {.lex_state = 43}, + [1042] = {.lex_state = 43}, + [1043] = {.lex_state = 43}, + [1044] = {.lex_state = 43}, + [1045] = {.lex_state = 8}, + [1046] = {.lex_state = 43}, + [1047] = {.lex_state = 43}, + [1048] = {.lex_state = 43}, + [1049] = {.lex_state = 43}, + [1050] = {.lex_state = 43}, + [1051] = {.lex_state = 43}, + [1052] = {.lex_state = 43}, + [1053] = {.lex_state = 43}, + [1054] = {.lex_state = 0}, + [1055] = {.lex_state = 43}, + [1056] = {.lex_state = 43}, + [1057] = {.lex_state = 9}, + [1058] = {.lex_state = 43}, + [1059] = {.lex_state = 43}, + [1060] = {.lex_state = 43}, + [1061] = {.lex_state = 43}, + [1062] = {.lex_state = 43}, + [1063] = {.lex_state = 43}, + [1064] = {.lex_state = 43}, + [1065] = {.lex_state = 22}, [1066] = {.lex_state = 8}, - [1067] = {.lex_state = 21}, - [1068] = {.lex_state = 8, .external_lex_state = 3}, - [1069] = {.lex_state = 8}, - [1070] = {.lex_state = 41, .external_lex_state = 3}, - [1071] = {.lex_state = 21}, - [1072] = {.lex_state = 21}, - [1073] = {.lex_state = 41}, - [1074] = {.lex_state = 8, .external_lex_state = 3}, - [1075] = {.lex_state = 41}, - [1076] = {.lex_state = 41}, - [1077] = {.lex_state = 41}, - [1078] = {.lex_state = 41}, - [1079] = {.lex_state = 41}, - [1080] = {.lex_state = 41}, - [1081] = {.lex_state = 21}, - [1082] = {.lex_state = 41}, - [1083] = {.lex_state = 21}, - [1084] = {.lex_state = 41}, - [1085] = {.lex_state = 21}, - [1086] = {.lex_state = 41}, - [1087] = {.lex_state = 8}, + [1067] = {.lex_state = 22}, + [1068] = {.lex_state = 43}, + [1069] = {.lex_state = 8, .external_lex_state = 3}, + [1070] = {.lex_state = 8}, + [1071] = {.lex_state = 43}, + [1072] = {.lex_state = 22}, + [1073] = {.lex_state = 8}, + [1074] = {.lex_state = 43, .external_lex_state = 3}, + [1075] = {.lex_state = 22}, + [1076] = {.lex_state = 22}, + [1077] = {.lex_state = 8, .external_lex_state = 3}, + [1078] = {.lex_state = 8, .external_lex_state = 3}, + [1079] = {.lex_state = 22}, + [1080] = {.lex_state = 43}, + [1081] = {.lex_state = 43}, + [1082] = {.lex_state = 22}, + [1083] = {.lex_state = 8}, + [1084] = {.lex_state = 43}, + [1085] = {.lex_state = 43}, + [1086] = {.lex_state = 8}, + [1087] = {.lex_state = 43, .external_lex_state = 3}, [1088] = {.lex_state = 8}, - [1089] = {.lex_state = 41}, - [1090] = {.lex_state = 41}, - [1091] = {.lex_state = 21}, - [1092] = {.lex_state = 8}, - [1093] = {.lex_state = 41}, - [1094] = {.lex_state = 8}, - [1095] = {.lex_state = 41}, - [1096] = {.lex_state = 21}, - [1097] = {.lex_state = 21}, - [1098] = {.lex_state = 21}, - [1099] = {.lex_state = 21}, - [1100] = {.lex_state = 41}, - [1101] = {.lex_state = 8, .external_lex_state = 3}, - [1102] = {.lex_state = 41}, - [1103] = {.lex_state = 41}, - [1104] = {.lex_state = 41}, - [1105] = {.lex_state = 41}, - [1106] = {.lex_state = 41}, - [1107] = {.lex_state = 41}, - [1108] = {.lex_state = 41}, - [1109] = {.lex_state = 8}, - [1110] = {.lex_state = 41}, - [1111] = {.lex_state = 41, .external_lex_state = 3}, - [1112] = {.lex_state = 41}, - [1113] = {.lex_state = 41}, - [1114] = {.lex_state = 41}, - [1115] = {.lex_state = 41}, - [1116] = {.lex_state = 41}, - [1117] = {.lex_state = 41}, - [1118] = {.lex_state = 41}, - [1119] = {.lex_state = 41}, - [1120] = {.lex_state = 41}, - [1121] = {.lex_state = 41}, - [1122] = {.lex_state = 41}, - [1123] = {.lex_state = 41}, - [1124] = {.lex_state = 41, .external_lex_state = 3}, - [1125] = {.lex_state = 41, .external_lex_state = 3}, - [1126] = {.lex_state = 41, .external_lex_state = 3}, - [1127] = {.lex_state = 21}, - [1128] = {.lex_state = 41}, - [1129] = {.lex_state = 41}, - [1130] = {.lex_state = 41}, - [1131] = {.lex_state = 41}, - [1132] = {.lex_state = 41}, - [1133] = {.lex_state = 41}, - [1134] = {.lex_state = 41}, - [1135] = {.lex_state = 41}, - [1136] = {.lex_state = 41}, - [1137] = {.lex_state = 41}, - [1138] = {.lex_state = 41}, - [1139] = {.lex_state = 41}, - [1140] = {.lex_state = 41}, - [1141] = {.lex_state = 41}, - [1142] = {.lex_state = 8}, - [1143] = {.lex_state = 41}, - [1144] = {.lex_state = 8}, - [1145] = {.lex_state = 41}, - [1146] = {.lex_state = 41}, - [1147] = {.lex_state = 41}, - [1148] = {.lex_state = 41}, - [1149] = {.lex_state = 41}, - [1150] = {.lex_state = 41}, - [1151] = {.lex_state = 41, .external_lex_state = 3}, - [1152] = {.lex_state = 41}, - [1153] = {.lex_state = 41, .external_lex_state = 3}, - [1154] = {.lex_state = 41}, - [1155] = {.lex_state = 8}, - [1156] = {.lex_state = 41}, - [1157] = {.lex_state = 41}, - [1158] = {.lex_state = 8}, - [1159] = {.lex_state = 41, .external_lex_state = 3}, - [1160] = {.lex_state = 41}, - [1161] = {.lex_state = 8}, - [1162] = {.lex_state = 41}, - [1163] = {.lex_state = 41}, - [1164] = {.lex_state = 41}, - [1165] = {.lex_state = 41}, - [1166] = {.lex_state = 41}, - [1167] = {.lex_state = 41}, - [1168] = {.lex_state = 41}, - [1169] = {.lex_state = 41}, - [1170] = {.lex_state = 41}, - [1171] = {.lex_state = 41}, - [1172] = {.lex_state = 41}, - [1173] = {.lex_state = 41}, - [1174] = {.lex_state = 41}, - [1175] = {.lex_state = 41}, - [1176] = {.lex_state = 8, .external_lex_state = 3}, - [1177] = {.lex_state = 41}, - [1178] = {.lex_state = 41}, - [1179] = {.lex_state = 21}, - [1180] = {.lex_state = 41}, - [1181] = {.lex_state = 41}, - [1182] = {.lex_state = 41}, - [1183] = {.lex_state = 41}, - [1184] = {.lex_state = 41}, - [1185] = {.lex_state = 41}, - [1186] = {.lex_state = 41}, - [1187] = {.lex_state = 41}, - [1188] = {.lex_state = 41}, - [1189] = {.lex_state = 41}, - [1190] = {.lex_state = 41}, - [1191] = {.lex_state = 41}, - [1192] = {.lex_state = 41}, - [1193] = {.lex_state = 41}, - [1194] = {.lex_state = 41}, - [1195] = {.lex_state = 41}, - [1196] = {.lex_state = 41}, - [1197] = {.lex_state = 41}, - [1198] = {.lex_state = 41}, - [1199] = {.lex_state = 41}, - [1200] = {.lex_state = 41}, - [1201] = {.lex_state = 41}, - [1202] = {.lex_state = 41}, - [1203] = {.lex_state = 41}, - [1204] = {.lex_state = 41}, - [1205] = {.lex_state = 41}, - [1206] = {.lex_state = 9}, - [1207] = {.lex_state = 41}, - [1208] = {.lex_state = 41}, - [1209] = {.lex_state = 41}, - [1210] = {.lex_state = 41}, - [1211] = {.lex_state = 41}, - [1212] = {.lex_state = 41}, - [1213] = {.lex_state = 41}, - [1214] = {.lex_state = 41}, - [1215] = {.lex_state = 41}, - [1216] = {.lex_state = 41}, - [1217] = {.lex_state = 41}, - [1218] = {.lex_state = 41}, - [1219] = {.lex_state = 41}, - [1220] = {.lex_state = 41}, - [1221] = {.lex_state = 41}, - [1222] = {.lex_state = 41}, - [1223] = {.lex_state = 41}, - [1224] = {.lex_state = 41}, - [1225] = {.lex_state = 41}, - [1226] = {.lex_state = 41}, - [1227] = {.lex_state = 41}, - [1228] = {.lex_state = 41}, - [1229] = {.lex_state = 41}, - [1230] = {.lex_state = 41}, - [1231] = {.lex_state = 9}, - [1232] = {.lex_state = 41}, - [1233] = {.lex_state = 41}, - [1234] = {.lex_state = 41}, - [1235] = {.lex_state = 41}, - [1236] = {.lex_state = 41}, - [1237] = {.lex_state = 8, .external_lex_state = 3}, - [1238] = {.lex_state = 8, .external_lex_state = 3}, - [1239] = {.lex_state = 41}, - [1240] = {.lex_state = 41}, - [1241] = {.lex_state = 41, .external_lex_state = 3}, - [1242] = {.lex_state = 41}, - [1243] = {.lex_state = 41}, - [1244] = {.lex_state = 41}, - [1245] = {.lex_state = 41}, - [1246] = {.lex_state = 41, .external_lex_state = 3}, - [1247] = {.lex_state = 41}, - [1248] = {.lex_state = 41}, - [1249] = {.lex_state = 41}, - [1250] = {.lex_state = 41, .external_lex_state = 3}, - [1251] = {.lex_state = 41}, - [1252] = {.lex_state = 8}, - [1253] = {.lex_state = 41}, - [1254] = {.lex_state = 41}, - [1255] = {.lex_state = 41}, - [1256] = {.lex_state = 41}, - [1257] = {.lex_state = 21}, - [1258] = {.lex_state = 9, .external_lex_state = 3}, - [1259] = {.lex_state = 41}, - [1260] = {.lex_state = 41}, - [1261] = {.lex_state = 41}, - [1262] = {.lex_state = 41}, - [1263] = {.lex_state = 41}, - [1264] = {.lex_state = 41}, - [1265] = {.lex_state = 21}, - [1266] = {.lex_state = 41}, - [1267] = {.lex_state = 41}, - [1268] = {.lex_state = 41}, - [1269] = {.lex_state = 41}, - [1270] = {.lex_state = 21}, - [1271] = {.lex_state = 41}, - [1272] = {.lex_state = 41}, - [1273] = {.lex_state = 41}, - [1274] = {.lex_state = 41}, - [1275] = {.lex_state = 8}, - [1276] = {.lex_state = 41}, - [1277] = {.lex_state = 41}, - [1278] = {.lex_state = 41}, - [1279] = {.lex_state = 41}, - [1280] = {.lex_state = 41}, - [1281] = {.lex_state = 9, .external_lex_state = 3}, - [1282] = {.lex_state = 41}, - [1283] = {.lex_state = 41}, - [1284] = {.lex_state = 41}, - [1285] = {.lex_state = 41}, - [1286] = {.lex_state = 41}, - [1287] = {.lex_state = 41, .external_lex_state = 3}, - [1288] = {.lex_state = 41, .external_lex_state = 3}, - [1289] = {.lex_state = 41}, - [1290] = {.lex_state = 41}, - [1291] = {.lex_state = 9, .external_lex_state = 3}, - [1292] = {.lex_state = 41}, - [1293] = {.lex_state = 41}, - [1294] = {.lex_state = 41}, - [1295] = {.lex_state = 41, .external_lex_state = 3}, - [1296] = {.lex_state = 41, .external_lex_state = 3}, - [1297] = {.lex_state = 41}, - [1298] = {.lex_state = 21}, - [1299] = {.lex_state = 41}, - [1300] = {.lex_state = 41}, - [1301] = {.lex_state = 41}, - [1302] = {.lex_state = 41}, - [1303] = {.lex_state = 41}, - [1304] = {.lex_state = 41}, - [1305] = {.lex_state = 41}, - [1306] = {.lex_state = 9, .external_lex_state = 3}, - [1307] = {.lex_state = 41}, - [1308] = {.lex_state = 41}, - [1309] = {.lex_state = 41}, - [1310] = {.lex_state = 41}, - [1311] = {.lex_state = 41}, - [1312] = {.lex_state = 41, .external_lex_state = 3}, - [1313] = {.lex_state = 41}, - [1314] = {.lex_state = 41}, - [1315] = {.lex_state = 41}, - [1316] = {.lex_state = 41}, - [1317] = {.lex_state = 41}, - [1318] = {.lex_state = 41}, - [1319] = {.lex_state = 41}, - [1320] = {.lex_state = 41}, - [1321] = {.lex_state = 41}, - [1322] = {.lex_state = 41}, - [1323] = {.lex_state = 41}, - [1324] = {.lex_state = 41}, - [1325] = {.lex_state = 41}, - [1326] = {.lex_state = 41}, - [1327] = {.lex_state = 41}, - [1328] = {.lex_state = 41}, - [1329] = {.lex_state = 21}, - [1330] = {.lex_state = 41}, - [1331] = {.lex_state = 41}, - [1332] = {.lex_state = 41}, - [1333] = {.lex_state = 41, .external_lex_state = 3}, - [1334] = {.lex_state = 41}, - [1335] = {.lex_state = 41}, - [1336] = {.lex_state = 41}, - [1337] = {.lex_state = 21}, - [1338] = {.lex_state = 41}, - [1339] = {.lex_state = 41}, - [1340] = {.lex_state = 41}, - [1341] = {.lex_state = 41}, - [1342] = {.lex_state = 41}, - [1343] = {.lex_state = 8}, - [1344] = {.lex_state = 41}, - [1345] = {.lex_state = 41}, - [1346] = {.lex_state = 41}, - [1347] = {.lex_state = 41}, - [1348] = {.lex_state = 8}, - [1349] = {.lex_state = 41}, - [1350] = {.lex_state = 41, .external_lex_state = 3}, - [1351] = {.lex_state = 41, .external_lex_state = 3}, - [1352] = {.lex_state = 41}, - [1353] = {.lex_state = 41, .external_lex_state = 3}, - [1354] = {.lex_state = 21}, - [1355] = {.lex_state = 41}, - [1356] = {.lex_state = 41}, - [1357] = {.lex_state = 41}, - [1358] = {.lex_state = 41, .external_lex_state = 3}, - [1359] = {.lex_state = 21}, - [1360] = {.lex_state = 9}, - [1361] = {.lex_state = 41}, - [1362] = {.lex_state = 41}, - [1363] = {.lex_state = 41}, - [1364] = {.lex_state = 41}, - [1365] = {.lex_state = 8}, - [1366] = {.lex_state = 21}, - [1367] = {.lex_state = 41, .external_lex_state = 3}, - [1368] = {.lex_state = 41, .external_lex_state = 3}, - [1369] = {.lex_state = 41, .external_lex_state = 3}, - [1370] = {.lex_state = 41}, - [1371] = {.lex_state = 41}, - [1372] = {.lex_state = 41}, - [1373] = {.lex_state = 41}, - [1374] = {.lex_state = 41, .external_lex_state = 3}, - [1375] = {.lex_state = 41}, - [1376] = {.lex_state = 41}, - [1377] = {.lex_state = 8}, - [1378] = {.lex_state = 41}, - [1379] = {.lex_state = 41}, - [1380] = {.lex_state = 41}, - [1381] = {.lex_state = 21}, - [1382] = {.lex_state = 41}, - [1383] = {.lex_state = 41}, + [1089] = {.lex_state = 43}, + [1090] = {.lex_state = 22}, + [1091] = {.lex_state = 22}, + [1092] = {.lex_state = 22}, + [1093] = {.lex_state = 8}, + [1094] = {.lex_state = 43}, + [1095] = {.lex_state = 22}, + [1096] = {.lex_state = 43}, + [1097] = {.lex_state = 43}, + [1098] = {.lex_state = 22}, + [1099] = {.lex_state = 43}, + [1100] = {.lex_state = 8}, + [1101] = {.lex_state = 43, .external_lex_state = 3}, + [1102] = {.lex_state = 43}, + [1103] = {.lex_state = 43}, + [1104] = {.lex_state = 22}, + [1105] = {.lex_state = 22}, + [1106] = {.lex_state = 8, .external_lex_state = 3}, + [1107] = {.lex_state = 22}, + [1108] = {.lex_state = 43}, + [1109] = {.lex_state = 43}, + [1110] = {.lex_state = 43, .external_lex_state = 3}, + [1111] = {.lex_state = 8}, + [1112] = {.lex_state = 22}, + [1113] = {.lex_state = 43}, + [1114] = {.lex_state = 22}, + [1115] = {.lex_state = 43}, + [1116] = {.lex_state = 43}, + [1117] = {.lex_state = 8}, + [1118] = {.lex_state = 43}, + [1119] = {.lex_state = 8}, + [1120] = {.lex_state = 43, .external_lex_state = 3}, + [1121] = {.lex_state = 43}, + [1122] = {.lex_state = 43}, + [1123] = {.lex_state = 43}, + [1124] = {.lex_state = 43}, + [1125] = {.lex_state = 43}, + [1126] = {.lex_state = 43}, + [1127] = {.lex_state = 43}, + [1128] = {.lex_state = 43}, + [1129] = {.lex_state = 43}, + [1130] = {.lex_state = 43}, + [1131] = {.lex_state = 43}, + [1132] = {.lex_state = 43}, + [1133] = {.lex_state = 43}, + [1134] = {.lex_state = 43}, + [1135] = {.lex_state = 43}, + [1136] = {.lex_state = 43}, + [1137] = {.lex_state = 43}, + [1138] = {.lex_state = 43}, + [1139] = {.lex_state = 8, .external_lex_state = 3}, + [1140] = {.lex_state = 9}, + [1141] = {.lex_state = 8, .external_lex_state = 3}, + [1142] = {.lex_state = 43}, + [1143] = {.lex_state = 43}, + [1144] = {.lex_state = 43}, + [1145] = {.lex_state = 43}, + [1146] = {.lex_state = 43}, + [1147] = {.lex_state = 43}, + [1148] = {.lex_state = 43}, + [1149] = {.lex_state = 43}, + [1150] = {.lex_state = 43}, + [1151] = {.lex_state = 8}, + [1152] = {.lex_state = 43}, + [1153] = {.lex_state = 43}, + [1154] = {.lex_state = 43}, + [1155] = {.lex_state = 43}, + [1156] = {.lex_state = 43}, + [1157] = {.lex_state = 43}, + [1158] = {.lex_state = 8, .external_lex_state = 3}, + [1159] = {.lex_state = 43}, + [1160] = {.lex_state = 43}, + [1161] = {.lex_state = 43}, + [1162] = {.lex_state = 43}, + [1163] = {.lex_state = 43, .external_lex_state = 3}, + [1164] = {.lex_state = 43}, + [1165] = {.lex_state = 43}, + [1166] = {.lex_state = 22}, + [1167] = {.lex_state = 43}, + [1168] = {.lex_state = 43}, + [1169] = {.lex_state = 43}, + [1170] = {.lex_state = 43}, + [1171] = {.lex_state = 43}, + [1172] = {.lex_state = 43}, + [1173] = {.lex_state = 43, .external_lex_state = 3}, + [1174] = {.lex_state = 43}, + [1175] = {.lex_state = 43}, + [1176] = {.lex_state = 43}, + [1177] = {.lex_state = 43}, + [1178] = {.lex_state = 43}, + [1179] = {.lex_state = 43}, + [1180] = {.lex_state = 43}, + [1181] = {.lex_state = 43}, + [1182] = {.lex_state = 43}, + [1183] = {.lex_state = 43}, + [1184] = {.lex_state = 43}, + [1185] = {.lex_state = 43}, + [1186] = {.lex_state = 43}, + [1187] = {.lex_state = 22}, + [1188] = {.lex_state = 8}, + [1189] = {.lex_state = 43}, + [1190] = {.lex_state = 43}, + [1191] = {.lex_state = 43}, + [1192] = {.lex_state = 43}, + [1193] = {.lex_state = 43}, + [1194] = {.lex_state = 43}, + [1195] = {.lex_state = 43}, + [1196] = {.lex_state = 43}, + [1197] = {.lex_state = 8}, + [1198] = {.lex_state = 43}, + [1199] = {.lex_state = 43}, + [1200] = {.lex_state = 43}, + [1201] = {.lex_state = 43}, + [1202] = {.lex_state = 43}, + [1203] = {.lex_state = 8}, + [1204] = {.lex_state = 43}, + [1205] = {.lex_state = 43}, + [1206] = {.lex_state = 43}, + [1207] = {.lex_state = 43}, + [1208] = {.lex_state = 43}, + [1209] = {.lex_state = 43}, + [1210] = {.lex_state = 43}, + [1211] = {.lex_state = 8}, + [1212] = {.lex_state = 43}, + [1213] = {.lex_state = 43}, + [1214] = {.lex_state = 43}, + [1215] = {.lex_state = 43, .external_lex_state = 3}, + [1216] = {.lex_state = 43}, + [1217] = {.lex_state = 43}, + [1218] = {.lex_state = 43}, + [1219] = {.lex_state = 43}, + [1220] = {.lex_state = 43}, + [1221] = {.lex_state = 43}, + [1222] = {.lex_state = 43}, + [1223] = {.lex_state = 43}, + [1224] = {.lex_state = 43}, + [1225] = {.lex_state = 43}, + [1226] = {.lex_state = 43}, + [1227] = {.lex_state = 8}, + [1228] = {.lex_state = 43}, + [1229] = {.lex_state = 43, .external_lex_state = 3}, + [1230] = {.lex_state = 43}, + [1231] = {.lex_state = 43}, + [1232] = {.lex_state = 43}, + [1233] = {.lex_state = 8}, + [1234] = {.lex_state = 43, .external_lex_state = 3}, + [1235] = {.lex_state = 43}, + [1236] = {.lex_state = 43}, + [1237] = {.lex_state = 43}, + [1238] = {.lex_state = 9}, + [1239] = {.lex_state = 43}, + [1240] = {.lex_state = 43, .external_lex_state = 3}, + [1241] = {.lex_state = 43}, + [1242] = {.lex_state = 43}, + [1243] = {.lex_state = 43}, + [1244] = {.lex_state = 43}, + [1245] = {.lex_state = 8}, + [1246] = {.lex_state = 43}, + [1247] = {.lex_state = 43}, + [1248] = {.lex_state = 43, .external_lex_state = 3}, + [1249] = {.lex_state = 43}, + [1250] = {.lex_state = 43}, + [1251] = {.lex_state = 43}, + [1252] = {.lex_state = 43}, + [1253] = {.lex_state = 43}, + [1254] = {.lex_state = 43}, + [1255] = {.lex_state = 43}, + [1256] = {.lex_state = 43}, + [1257] = {.lex_state = 43}, + [1258] = {.lex_state = 43}, + [1259] = {.lex_state = 8}, + [1260] = {.lex_state = 43}, + [1261] = {.lex_state = 43}, + [1262] = {.lex_state = 43}, + [1263] = {.lex_state = 43}, + [1264] = {.lex_state = 43}, + [1265] = {.lex_state = 43}, + [1266] = {.lex_state = 43}, + [1267] = {.lex_state = 43}, + [1268] = {.lex_state = 43}, + [1269] = {.lex_state = 9, .external_lex_state = 3}, + [1270] = {.lex_state = 43}, + [1271] = {.lex_state = 43}, + [1272] = {.lex_state = 8}, + [1273] = {.lex_state = 43, .external_lex_state = 3}, + [1274] = {.lex_state = 43}, + [1275] = {.lex_state = 9, .external_lex_state = 3}, + [1276] = {.lex_state = 43}, + [1277] = {.lex_state = 43}, + [1278] = {.lex_state = 43}, + [1279] = {.lex_state = 43}, + [1280] = {.lex_state = 43}, + [1281] = {.lex_state = 43}, + [1282] = {.lex_state = 43}, + [1283] = {.lex_state = 43}, + [1284] = {.lex_state = 43}, + [1285] = {.lex_state = 43}, + [1286] = {.lex_state = 43}, + [1287] = {.lex_state = 22}, + [1288] = {.lex_state = 43}, + [1289] = {.lex_state = 43}, + [1290] = {.lex_state = 43}, + [1291] = {.lex_state = 43}, + [1292] = {.lex_state = 43}, + [1293] = {.lex_state = 22}, + [1294] = {.lex_state = 43}, + [1295] = {.lex_state = 43}, + [1296] = {.lex_state = 43}, + [1297] = {.lex_state = 43}, + [1298] = {.lex_state = 8}, + [1299] = {.lex_state = 43}, + [1300] = {.lex_state = 43}, + [1301] = {.lex_state = 43}, + [1302] = {.lex_state = 9, .external_lex_state = 3}, + [1303] = {.lex_state = 43, .external_lex_state = 3}, + [1304] = {.lex_state = 43, .external_lex_state = 3}, + [1305] = {.lex_state = 43, .external_lex_state = 3}, + [1306] = {.lex_state = 43}, + [1307] = {.lex_state = 43}, + [1308] = {.lex_state = 43}, + [1309] = {.lex_state = 43}, + [1310] = {.lex_state = 43}, + [1311] = {.lex_state = 43}, + [1312] = {.lex_state = 43}, + [1313] = {.lex_state = 43, .external_lex_state = 3}, + [1314] = {.lex_state = 22}, + [1315] = {.lex_state = 43}, + [1316] = {.lex_state = 43}, + [1317] = {.lex_state = 43}, + [1318] = {.lex_state = 43, .external_lex_state = 3}, + [1319] = {.lex_state = 43}, + [1320] = {.lex_state = 22}, + [1321] = {.lex_state = 43}, + [1322] = {.lex_state = 43}, + [1323] = {.lex_state = 8}, + [1324] = {.lex_state = 43}, + [1325] = {.lex_state = 43}, + [1326] = {.lex_state = 43}, + [1327] = {.lex_state = 43}, + [1328] = {.lex_state = 43}, + [1329] = {.lex_state = 43}, + [1330] = {.lex_state = 43}, + [1331] = {.lex_state = 43}, + [1332] = {.lex_state = 43}, + [1333] = {.lex_state = 9, .external_lex_state = 3}, + [1334] = {.lex_state = 43}, + [1335] = {.lex_state = 43}, + [1336] = {.lex_state = 43, .external_lex_state = 3}, + [1337] = {.lex_state = 43}, + [1338] = {.lex_state = 43}, + [1339] = {.lex_state = 43, .external_lex_state = 3}, + [1340] = {.lex_state = 43}, + [1341] = {.lex_state = 43}, + [1342] = {.lex_state = 43}, + [1343] = {.lex_state = 43}, + [1344] = {.lex_state = 43}, + [1345] = {.lex_state = 43}, + [1346] = {.lex_state = 43}, + [1347] = {.lex_state = 43}, + [1348] = {.lex_state = 43}, + [1349] = {.lex_state = 43}, + [1350] = {.lex_state = 43}, + [1351] = {.lex_state = 43}, + [1352] = {.lex_state = 43}, + [1353] = {.lex_state = 43}, + [1354] = {.lex_state = 43}, + [1355] = {.lex_state = 43}, + [1356] = {.lex_state = 43}, + [1357] = {.lex_state = 43}, + [1358] = {.lex_state = 22}, + [1359] = {.lex_state = 43}, + [1360] = {.lex_state = 8}, + [1361] = {.lex_state = 43}, + [1362] = {.lex_state = 8}, + [1363] = {.lex_state = 22}, + [1364] = {.lex_state = 43}, + [1365] = {.lex_state = 43, .external_lex_state = 3}, + [1366] = {.lex_state = 43}, + [1367] = {.lex_state = 43}, + [1368] = {.lex_state = 43}, + [1369] = {.lex_state = 43}, + [1370] = {.lex_state = 10}, + [1371] = {.lex_state = 43}, + [1372] = {.lex_state = 43}, + [1373] = {.lex_state = 43}, + [1374] = {.lex_state = 22}, + [1375] = {.lex_state = 43, .external_lex_state = 3}, + [1376] = {.lex_state = 43}, + [1377] = {.lex_state = 43}, + [1378] = {.lex_state = 43}, + [1379] = {.lex_state = 43}, + [1380] = {.lex_state = 43, .external_lex_state = 3}, + [1381] = {.lex_state = 43}, + [1382] = {.lex_state = 43}, + [1383] = {.lex_state = 43, .external_lex_state = 3}, [1384] = {.lex_state = 9}, - [1385] = {.lex_state = 8}, - [1386] = {.lex_state = 41}, - [1387] = {.lex_state = 41}, - [1388] = {.lex_state = 41, .external_lex_state = 3}, - [1389] = {.lex_state = 41, .external_lex_state = 3}, - [1390] = {.lex_state = 21}, - [1391] = {.lex_state = 41, .external_lex_state = 3}, - [1392] = {.lex_state = 41, .external_lex_state = 3}, - [1393] = {.lex_state = 41}, - [1394] = {.lex_state = 41, .external_lex_state = 3}, - [1395] = {.lex_state = 41}, - [1396] = {.lex_state = 21}, - [1397] = {.lex_state = 41, .external_lex_state = 3}, - [1398] = {.lex_state = 41}, - [1399] = {.lex_state = 41, .external_lex_state = 3}, - [1400] = {.lex_state = 41}, - [1401] = {.lex_state = 41}, - [1402] = {.lex_state = 41}, - [1403] = {.lex_state = 41}, - [1404] = {.lex_state = 41, .external_lex_state = 3}, - [1405] = {.lex_state = 41}, - [1406] = {.lex_state = 41, .external_lex_state = 3}, - [1407] = {.lex_state = 41, .external_lex_state = 3}, - [1408] = {.lex_state = 9}, - [1409] = {.lex_state = 41, .external_lex_state = 3}, - [1410] = {.lex_state = 41, .external_lex_state = 3}, - [1411] = {.lex_state = 41}, - [1412] = {.lex_state = 41}, - [1413] = {.lex_state = 41}, - [1414] = {.lex_state = 41}, - [1415] = {.lex_state = 41}, - [1416] = {.lex_state = 41, .external_lex_state = 3}, - [1417] = {.lex_state = 41, .external_lex_state = 3}, - [1418] = {.lex_state = 41, .external_lex_state = 3}, - [1419] = {.lex_state = 41}, - [1420] = {.lex_state = 41}, - [1421] = {.lex_state = 41}, - [1422] = {.lex_state = 41}, - [1423] = {.lex_state = 41}, - [1424] = {.lex_state = 21}, - [1425] = {.lex_state = 41}, - [1426] = {.lex_state = 41, .external_lex_state = 3}, - [1427] = {.lex_state = 41}, - [1428] = {.lex_state = 41}, - [1429] = {.lex_state = 41, .external_lex_state = 3}, - [1430] = {.lex_state = 41, .external_lex_state = 3}, - [1431] = {.lex_state = 41}, - [1432] = {.lex_state = 41, .external_lex_state = 3}, - [1433] = {.lex_state = 21}, - [1434] = {.lex_state = 41}, - [1435] = {.lex_state = 41}, - [1436] = {.lex_state = 41}, - [1437] = {.lex_state = 41}, - [1438] = {.lex_state = 41}, - [1439] = {.lex_state = 21}, - [1440] = {.lex_state = 41, .external_lex_state = 3}, - [1441] = {.lex_state = 41}, - [1442] = {.lex_state = 41}, - [1443] = {.lex_state = 41, .external_lex_state = 3}, - [1444] = {.lex_state = 41, .external_lex_state = 3}, - [1445] = {.lex_state = 41, .external_lex_state = 3}, - [1446] = {.lex_state = 41, .external_lex_state = 3}, - [1447] = {.lex_state = 41}, - [1448] = {.lex_state = 8}, - [1449] = {.lex_state = 41}, - [1450] = {.lex_state = 41}, - [1451] = {.lex_state = 41, .external_lex_state = 3}, - [1452] = {.lex_state = 41}, - [1453] = {.lex_state = 41}, - [1454] = {.lex_state = 41, .external_lex_state = 3}, - [1455] = {.lex_state = 41, .external_lex_state = 3}, - [1456] = {.lex_state = 41, .external_lex_state = 3}, - [1457] = {.lex_state = 41, .external_lex_state = 3}, - [1458] = {.lex_state = 41}, - [1459] = {.lex_state = 41, .external_lex_state = 3}, - [1460] = {.lex_state = 41}, - [1461] = {.lex_state = 41}, - [1462] = {.lex_state = 41}, - [1463] = {.lex_state = 41, .external_lex_state = 3}, - [1464] = {.lex_state = 41}, - [1465] = {.lex_state = 41}, - [1466] = {.lex_state = 21}, - [1467] = {.lex_state = 41}, - [1468] = {.lex_state = 41, .external_lex_state = 3}, - [1469] = {.lex_state = 41}, - [1470] = {.lex_state = 41}, - [1471] = {.lex_state = 41}, - [1472] = {.lex_state = 41, .external_lex_state = 3}, - [1473] = {.lex_state = 41, .external_lex_state = 3}, - [1474] = {.lex_state = 41}, - [1475] = {.lex_state = 41, .external_lex_state = 3}, - [1476] = {.lex_state = 21}, - [1477] = {.lex_state = 41}, - [1478] = {.lex_state = 41, .external_lex_state = 3}, - [1479] = {.lex_state = 41}, - [1480] = {.lex_state = 41, .external_lex_state = 3}, - [1481] = {.lex_state = 41, .external_lex_state = 3}, - [1482] = {.lex_state = 41}, - [1483] = {.lex_state = 41}, - [1484] = {.lex_state = 41}, - [1485] = {.lex_state = 41}, - [1486] = {.lex_state = 41}, - [1487] = {.lex_state = 41}, - [1488] = {.lex_state = 41}, - [1489] = {.lex_state = 41}, - [1490] = {.lex_state = 41}, - [1491] = {.lex_state = 41}, - [1492] = {.lex_state = 41}, - [1493] = {.lex_state = 9}, - [1494] = {.lex_state = 41}, - [1495] = {.lex_state = 41}, - [1496] = {.lex_state = 21}, - [1497] = {.lex_state = 41, .external_lex_state = 3}, - [1498] = {.lex_state = 41, .external_lex_state = 3}, - [1499] = {.lex_state = 41, .external_lex_state = 3}, - [1500] = {.lex_state = 9}, - [1501] = {.lex_state = 8}, - [1502] = {.lex_state = 41}, - [1503] = {.lex_state = 21}, - [1504] = {.lex_state = 21}, - [1505] = {.lex_state = 41}, - [1506] = {.lex_state = 41}, - [1507] = {.lex_state = 9}, - [1508] = {.lex_state = 41}, - [1509] = {.lex_state = 41}, - [1510] = {.lex_state = 41, .external_lex_state = 3}, - [1511] = {.lex_state = 41}, - [1512] = {.lex_state = 41}, - [1513] = {.lex_state = 41, .external_lex_state = 3}, - [1514] = {.lex_state = 41}, - [1515] = {.lex_state = 41}, - [1516] = {.lex_state = 41, .external_lex_state = 3}, - [1517] = {.lex_state = 41}, - [1518] = {.lex_state = 41}, - [1519] = {.lex_state = 41}, - [1520] = {.lex_state = 41}, - [1521] = {.lex_state = 41}, - [1522] = {.lex_state = 41}, - [1523] = {.lex_state = 41}, - [1524] = {.lex_state = 41}, - [1525] = {.lex_state = 41, .external_lex_state = 3}, - [1526] = {.lex_state = 8}, - [1527] = {.lex_state = 8}, - [1528] = {.lex_state = 41}, - [1529] = {.lex_state = 41, .external_lex_state = 3}, - [1530] = {.lex_state = 41, .external_lex_state = 3}, - [1531] = {.lex_state = 9}, - [1532] = {.lex_state = 41}, - [1533] = {.lex_state = 41}, - [1534] = {.lex_state = 8}, - [1535] = {.lex_state = 41}, - [1536] = {.lex_state = 41}, - [1537] = {.lex_state = 41}, - [1538] = {.lex_state = 41}, - [1539] = {.lex_state = 41}, - [1540] = {.lex_state = 41, .external_lex_state = 3}, - [1541] = {.lex_state = 41}, - [1542] = {.lex_state = 41}, - [1543] = {.lex_state = 41}, - [1544] = {.lex_state = 41}, - [1545] = {.lex_state = 41, .external_lex_state = 3}, - [1546] = {.lex_state = 41}, - [1547] = {.lex_state = 41, .external_lex_state = 3}, - [1548] = {.lex_state = 41}, - [1549] = {.lex_state = 41}, - [1550] = {.lex_state = 41, .external_lex_state = 3}, - [1551] = {.lex_state = 9}, - [1552] = {.lex_state = 41}, - [1553] = {.lex_state = 41}, - [1554] = {.lex_state = 41}, - [1555] = {.lex_state = 41, .external_lex_state = 3}, - [1556] = {.lex_state = 41, .external_lex_state = 3}, - [1557] = {.lex_state = 41}, - [1558] = {.lex_state = 41}, - [1559] = {.lex_state = 41}, - [1560] = {.lex_state = 41, .external_lex_state = 3}, - [1561] = {.lex_state = 8}, - [1562] = {.lex_state = 8}, - [1563] = {.lex_state = 41}, - [1564] = {.lex_state = 41}, - [1565] = {.lex_state = 41}, - [1566] = {.lex_state = 41}, - [1567] = {.lex_state = 41}, - [1568] = {.lex_state = 41, .external_lex_state = 3}, - [1569] = {.lex_state = 41, .external_lex_state = 3}, - [1570] = {.lex_state = 41}, - [1571] = {.lex_state = 41}, - [1572] = {.lex_state = 41}, - [1573] = {.lex_state = 41, .external_lex_state = 3}, - [1574] = {.lex_state = 41, .external_lex_state = 3}, - [1575] = {.lex_state = 41}, - [1576] = {.lex_state = 41}, - [1577] = {.lex_state = 41, .external_lex_state = 3}, - [1578] = {.lex_state = 41}, - [1579] = {.lex_state = 41}, - [1580] = {.lex_state = 41}, - [1581] = {.lex_state = 41}, - [1582] = {.lex_state = 41}, - [1583] = {.lex_state = 41}, - [1584] = {.lex_state = 41, .external_lex_state = 3}, - [1585] = {.lex_state = 41}, - [1586] = {.lex_state = 8}, - [1587] = {.lex_state = 41}, - [1588] = {.lex_state = 41}, + [1385] = {.lex_state = 43}, + [1386] = {.lex_state = 43}, + [1387] = {.lex_state = 43}, + [1388] = {.lex_state = 43}, + [1389] = {.lex_state = 43, .external_lex_state = 3}, + [1390] = {.lex_state = 43}, + [1391] = {.lex_state = 22}, + [1392] = {.lex_state = 22}, + [1393] = {.lex_state = 8}, + [1394] = {.lex_state = 43}, + [1395] = {.lex_state = 43}, + [1396] = {.lex_state = 43}, + [1397] = {.lex_state = 43}, + [1398] = {.lex_state = 43}, + [1399] = {.lex_state = 43}, + [1400] = {.lex_state = 43}, + [1401] = {.lex_state = 8}, + [1402] = {.lex_state = 43, .external_lex_state = 3}, + [1403] = {.lex_state = 43}, + [1404] = {.lex_state = 43, .external_lex_state = 3}, + [1405] = {.lex_state = 43, .external_lex_state = 3}, + [1406] = {.lex_state = 43}, + [1407] = {.lex_state = 43}, + [1408] = {.lex_state = 43}, + [1409] = {.lex_state = 9}, + [1410] = {.lex_state = 8}, + [1411] = {.lex_state = 43}, + [1412] = {.lex_state = 43}, + [1413] = {.lex_state = 43}, + [1414] = {.lex_state = 43, .external_lex_state = 3}, + [1415] = {.lex_state = 8}, + [1416] = {.lex_state = 43}, + [1417] = {.lex_state = 8}, + [1418] = {.lex_state = 43, .external_lex_state = 3}, + [1419] = {.lex_state = 43, .external_lex_state = 3}, + [1420] = {.lex_state = 43}, + [1421] = {.lex_state = 22}, + [1422] = {.lex_state = 43}, + [1423] = {.lex_state = 43, .external_lex_state = 3}, + [1424] = {.lex_state = 43, .external_lex_state = 3}, + [1425] = {.lex_state = 43, .external_lex_state = 3}, + [1426] = {.lex_state = 43}, + [1427] = {.lex_state = 43}, + [1428] = {.lex_state = 43}, + [1429] = {.lex_state = 43, .external_lex_state = 3}, + [1430] = {.lex_state = 43}, + [1431] = {.lex_state = 43}, + [1432] = {.lex_state = 9}, + [1433] = {.lex_state = 9}, + [1434] = {.lex_state = 43, .external_lex_state = 3}, + [1435] = {.lex_state = 43}, + [1436] = {.lex_state = 43, .external_lex_state = 3}, + [1437] = {.lex_state = 43}, + [1438] = {.lex_state = 43}, + [1439] = {.lex_state = 43, .external_lex_state = 3}, + [1440] = {.lex_state = 43, .external_lex_state = 3}, + [1441] = {.lex_state = 43}, + [1442] = {.lex_state = 43, .external_lex_state = 3}, + [1443] = {.lex_state = 43, .external_lex_state = 3}, + [1444] = {.lex_state = 8}, + [1445] = {.lex_state = 43}, + [1446] = {.lex_state = 43}, + [1447] = {.lex_state = 43}, + [1448] = {.lex_state = 43, .external_lex_state = 3}, + [1449] = {.lex_state = 43}, + [1450] = {.lex_state = 43}, + [1451] = {.lex_state = 43, .external_lex_state = 3}, + [1452] = {.lex_state = 43}, + [1453] = {.lex_state = 43, .external_lex_state = 3}, + [1454] = {.lex_state = 43}, + [1455] = {.lex_state = 43}, + [1456] = {.lex_state = 43}, + [1457] = {.lex_state = 8}, + [1458] = {.lex_state = 43}, + [1459] = {.lex_state = 43, .external_lex_state = 3}, + [1460] = {.lex_state = 43}, + [1461] = {.lex_state = 43, .external_lex_state = 3}, + [1462] = {.lex_state = 43}, + [1463] = {.lex_state = 43, .external_lex_state = 3}, + [1464] = {.lex_state = 43, .external_lex_state = 3}, + [1465] = {.lex_state = 43}, + [1466] = {.lex_state = 10}, + [1467] = {.lex_state = 43}, + [1468] = {.lex_state = 43, .external_lex_state = 3}, + [1469] = {.lex_state = 43}, + [1470] = {.lex_state = 43, .external_lex_state = 3}, + [1471] = {.lex_state = 43}, + [1472] = {.lex_state = 43}, + [1473] = {.lex_state = 43}, + [1474] = {.lex_state = 43, .external_lex_state = 3}, + [1475] = {.lex_state = 43, .external_lex_state = 3}, + [1476] = {.lex_state = 8}, + [1477] = {.lex_state = 43}, + [1478] = {.lex_state = 43}, + [1479] = {.lex_state = 43}, + [1480] = {.lex_state = 43}, + [1481] = {.lex_state = 43}, + [1482] = {.lex_state = 43}, + [1483] = {.lex_state = 8}, + [1484] = {.lex_state = 43}, + [1485] = {.lex_state = 43}, + [1486] = {.lex_state = 8}, + [1487] = {.lex_state = 43}, + [1488] = {.lex_state = 43, .external_lex_state = 3}, + [1489] = {.lex_state = 43, .external_lex_state = 3}, + [1490] = {.lex_state = 8}, + [1491] = {.lex_state = 22}, + [1492] = {.lex_state = 43}, + [1493] = {.lex_state = 43}, + [1494] = {.lex_state = 43}, + [1495] = {.lex_state = 43}, + [1496] = {.lex_state = 43}, + [1497] = {.lex_state = 43, .external_lex_state = 3}, + [1498] = {.lex_state = 43, .external_lex_state = 3}, + [1499] = {.lex_state = 43}, + [1500] = {.lex_state = 43}, + [1501] = {.lex_state = 22}, + [1502] = {.lex_state = 43}, + [1503] = {.lex_state = 43, .external_lex_state = 3}, + [1504] = {.lex_state = 43, .external_lex_state = 3}, + [1505] = {.lex_state = 43, .external_lex_state = 3}, + [1506] = {.lex_state = 43}, + [1507] = {.lex_state = 43}, + [1508] = {.lex_state = 43, .external_lex_state = 3}, + [1509] = {.lex_state = 43}, + [1510] = {.lex_state = 43, .external_lex_state = 3}, + [1511] = {.lex_state = 43, .external_lex_state = 3}, + [1512] = {.lex_state = 43}, + [1513] = {.lex_state = 43, .external_lex_state = 3}, + [1514] = {.lex_state = 43}, + [1515] = {.lex_state = 43}, + [1516] = {.lex_state = 43}, + [1517] = {.lex_state = 43}, + [1518] = {.lex_state = 43}, + [1519] = {.lex_state = 9}, + [1520] = {.lex_state = 43}, + [1521] = {.lex_state = 43}, + [1522] = {.lex_state = 43}, + [1523] = {.lex_state = 22}, + [1524] = {.lex_state = 43, .external_lex_state = 3}, + [1525] = {.lex_state = 22}, + [1526] = {.lex_state = 43, .external_lex_state = 3}, + [1527] = {.lex_state = 9}, + [1528] = {.lex_state = 8}, + [1529] = {.lex_state = 43}, + [1530] = {.lex_state = 22}, + [1531] = {.lex_state = 43}, + [1532] = {.lex_state = 43}, + [1533] = {.lex_state = 43, .external_lex_state = 3}, + [1534] = {.lex_state = 9}, + [1535] = {.lex_state = 43}, + [1536] = {.lex_state = 43}, + [1537] = {.lex_state = 22}, + [1538] = {.lex_state = 43}, + [1539] = {.lex_state = 43}, + [1540] = {.lex_state = 43, .external_lex_state = 3}, + [1541] = {.lex_state = 9}, + [1542] = {.lex_state = 43}, + [1543] = {.lex_state = 43, .external_lex_state = 3}, + [1544] = {.lex_state = 43}, + [1545] = {.lex_state = 43}, + [1546] = {.lex_state = 43}, + [1547] = {.lex_state = 43, .external_lex_state = 3}, + [1548] = {.lex_state = 43, .external_lex_state = 3}, + [1549] = {.lex_state = 43}, + [1550] = {.lex_state = 43, .external_lex_state = 3}, + [1551] = {.lex_state = 43}, + [1552] = {.lex_state = 43, .external_lex_state = 3}, + [1553] = {.lex_state = 8}, + [1554] = {.lex_state = 43}, + [1555] = {.lex_state = 43}, + [1556] = {.lex_state = 9}, + [1557] = {.lex_state = 43}, + [1558] = {.lex_state = 43}, + [1559] = {.lex_state = 43, .external_lex_state = 3}, + [1560] = {.lex_state = 43}, + [1561] = {.lex_state = 43}, + [1562] = {.lex_state = 43}, + [1563] = {.lex_state = 43, .external_lex_state = 3}, + [1564] = {.lex_state = 43, .external_lex_state = 3}, + [1565] = {.lex_state = 43}, + [1566] = {.lex_state = 43}, + [1567] = {.lex_state = 10}, + [1568] = {.lex_state = 43}, + [1569] = {.lex_state = 43}, + [1570] = {.lex_state = 43}, + [1571] = {.lex_state = 43}, + [1572] = {.lex_state = 43}, + [1573] = {.lex_state = 43, .external_lex_state = 3}, + [1574] = {.lex_state = 43}, + [1575] = {.lex_state = 43}, + [1576] = {.lex_state = 43, .external_lex_state = 3}, + [1577] = {.lex_state = 43}, + [1578] = {.lex_state = 43}, + [1579] = {.lex_state = 43, .external_lex_state = 3}, + [1580] = {.lex_state = 8}, + [1581] = {.lex_state = 43}, + [1582] = {.lex_state = 43}, + [1583] = {.lex_state = 43}, + [1584] = {.lex_state = 43, .external_lex_state = 3}, + [1585] = {.lex_state = 43}, + [1586] = {.lex_state = 22}, + [1587] = {.lex_state = 43}, + [1588] = {.lex_state = 43, .external_lex_state = 3}, [1589] = {.lex_state = 8}, - [1590] = {.lex_state = 41, .external_lex_state = 3}, - [1591] = {.lex_state = 41}, - [1592] = {.lex_state = 41}, - [1593] = {.lex_state = 41}, - [1594] = {.lex_state = 41}, - [1595] = {.lex_state = 41, .external_lex_state = 3}, - [1596] = {.lex_state = 9}, - [1597] = {.lex_state = 41}, - [1598] = {.lex_state = 41}, - [1599] = {.lex_state = 41, .external_lex_state = 3}, - [1600] = {.lex_state = 41}, - [1601] = {.lex_state = 41, .external_lex_state = 3}, - [1602] = {.lex_state = 41}, - [1603] = {.lex_state = 41, .external_lex_state = 3}, - [1604] = {.lex_state = 41}, - [1605] = {.lex_state = 41, .external_lex_state = 3}, - [1606] = {.lex_state = 8}, - [1607] = {.lex_state = 41}, - [1608] = {.lex_state = 41, .external_lex_state = 3}, - [1609] = {.lex_state = 8}, - [1610] = {.lex_state = 41}, - [1611] = {.lex_state = 41}, - [1612] = {.lex_state = 41, .external_lex_state = 3}, - [1613] = {.lex_state = 41, .external_lex_state = 3}, - [1614] = {.lex_state = 41}, - [1615] = {.lex_state = 41}, - [1616] = {.lex_state = 41, .external_lex_state = 3}, - [1617] = {.lex_state = 41}, - [1618] = {.lex_state = 41}, - [1619] = {.lex_state = 41, .external_lex_state = 3}, - [1620] = {.lex_state = 41}, - [1621] = {.lex_state = 41}, - [1622] = {.lex_state = 41, .external_lex_state = 3}, - [1623] = {.lex_state = 41}, - [1624] = {.lex_state = 41, .external_lex_state = 3}, - [1625] = {.lex_state = 41, .external_lex_state = 3}, - [1626] = {.lex_state = 41}, - [1627] = {.lex_state = 41}, - [1628] = {.lex_state = 41}, - [1629] = {.lex_state = 41}, - [1630] = {.lex_state = 41}, - [1631] = {.lex_state = 41}, - [1632] = {.lex_state = 41, .external_lex_state = 3}, - [1633] = {.lex_state = 8}, - [1634] = {.lex_state = 41}, - [1635] = {.lex_state = 41}, - [1636] = {.lex_state = 41}, - [1637] = {.lex_state = 41}, - [1638] = {.lex_state = 41}, - [1639] = {.lex_state = 41, .external_lex_state = 3}, - [1640] = {.lex_state = 41}, - [1641] = {.lex_state = 41}, - [1642] = {.lex_state = 41, .external_lex_state = 3}, - [1643] = {.lex_state = 41, .external_lex_state = 3}, - [1644] = {.lex_state = 41}, - [1645] = {.lex_state = 41}, - [1646] = {.lex_state = 41}, - [1647] = {.lex_state = 41}, - [1648] = {.lex_state = 21}, - [1649] = {.lex_state = 41}, - [1650] = {.lex_state = 41}, - [1651] = {.lex_state = 41}, - [1652] = {.lex_state = 41, .external_lex_state = 3}, - [1653] = {.lex_state = 41}, - [1654] = {.lex_state = 41}, - [1655] = {.lex_state = 41}, - [1656] = {.lex_state = 8}, - [1657] = {.lex_state = 41}, - [1658] = {.lex_state = 41}, - [1659] = {.lex_state = 41}, - [1660] = {.lex_state = 41}, - [1661] = {.lex_state = 41}, - [1662] = {.lex_state = 41}, - [1663] = {.lex_state = 41}, - [1664] = {.lex_state = 41}, - [1665] = {.lex_state = 41}, - [1666] = {.lex_state = 8}, - [1667] = {.lex_state = 8}, - [1668] = {.lex_state = 41}, - [1669] = {.lex_state = 41}, - [1670] = {.lex_state = 8}, - [1671] = {.lex_state = 41}, - [1672] = {.lex_state = 8}, - [1673] = {.lex_state = 8}, - [1674] = {.lex_state = 41}, - [1675] = {.lex_state = 8}, - [1676] = {.lex_state = 41}, - [1677] = {.lex_state = 41}, - [1678] = {.lex_state = 41}, - [1679] = {.lex_state = 41}, - [1680] = {.lex_state = 21}, - [1681] = {.lex_state = 41}, - [1682] = {.lex_state = 41, .external_lex_state = 3}, - [1683] = {.lex_state = 41}, - [1684] = {.lex_state = 41}, - [1685] = {.lex_state = 41}, - [1686] = {.lex_state = 41}, - [1687] = {.lex_state = 41}, - [1688] = {.lex_state = 41}, - [1689] = {.lex_state = 41}, - [1690] = {.lex_state = 41}, - [1691] = {.lex_state = 41}, - [1692] = {.lex_state = 41}, - [1693] = {.lex_state = 41, .external_lex_state = 3}, - [1694] = {.lex_state = 41}, - [1695] = {.lex_state = 41}, - [1696] = {.lex_state = 41}, - [1697] = {.lex_state = 41, .external_lex_state = 3}, - [1698] = {.lex_state = 41}, - [1699] = {.lex_state = 41}, - [1700] = {.lex_state = 41}, + [1590] = {.lex_state = 43, .external_lex_state = 3}, + [1591] = {.lex_state = 43, .external_lex_state = 3}, + [1592] = {.lex_state = 43}, + [1593] = {.lex_state = 43}, + [1594] = {.lex_state = 43}, + [1595] = {.lex_state = 43}, + [1596] = {.lex_state = 43, .external_lex_state = 3}, + [1597] = {.lex_state = 43}, + [1598] = {.lex_state = 43}, + [1599] = {.lex_state = 43, .external_lex_state = 3}, + [1600] = {.lex_state = 43}, + [1601] = {.lex_state = 43}, + [1602] = {.lex_state = 43, .external_lex_state = 3}, + [1603] = {.lex_state = 43}, + [1604] = {.lex_state = 8}, + [1605] = {.lex_state = 43}, + [1606] = {.lex_state = 22}, + [1607] = {.lex_state = 43, .external_lex_state = 3}, + [1608] = {.lex_state = 43}, + [1609] = {.lex_state = 43}, + [1610] = {.lex_state = 43}, + [1611] = {.lex_state = 43}, + [1612] = {.lex_state = 43}, + [1613] = {.lex_state = 43}, + [1614] = {.lex_state = 8}, + [1615] = {.lex_state = 43}, + [1616] = {.lex_state = 43, .external_lex_state = 3}, + [1617] = {.lex_state = 43}, + [1618] = {.lex_state = 43, .external_lex_state = 3}, + [1619] = {.lex_state = 43}, + [1620] = {.lex_state = 43}, + [1621] = {.lex_state = 43}, + [1622] = {.lex_state = 43}, + [1623] = {.lex_state = 43, .external_lex_state = 3}, + [1624] = {.lex_state = 8}, + [1625] = {.lex_state = 43}, + [1626] = {.lex_state = 43}, + [1627] = {.lex_state = 43}, + [1628] = {.lex_state = 43}, + [1629] = {.lex_state = 22}, + [1630] = {.lex_state = 43, .external_lex_state = 3}, + [1631] = {.lex_state = 43}, + [1632] = {.lex_state = 43}, + [1633] = {.lex_state = 43, .external_lex_state = 3}, + [1634] = {.lex_state = 43, .external_lex_state = 3}, + [1635] = {.lex_state = 43}, + [1636] = {.lex_state = 43, .external_lex_state = 3}, + [1637] = {.lex_state = 8}, + [1638] = {.lex_state = 43}, + [1639] = {.lex_state = 43}, + [1640] = {.lex_state = 43, .external_lex_state = 3}, + [1641] = {.lex_state = 43, .external_lex_state = 3}, + [1642] = {.lex_state = 22}, + [1643] = {.lex_state = 43}, + [1644] = {.lex_state = 43, .external_lex_state = 3}, + [1645] = {.lex_state = 43}, + [1646] = {.lex_state = 43}, + [1647] = {.lex_state = 10}, + [1648] = {.lex_state = 43}, + [1649] = {.lex_state = 43}, + [1650] = {.lex_state = 43, .external_lex_state = 3}, + [1651] = {.lex_state = 43}, + [1652] = {.lex_state = 8}, + [1653] = {.lex_state = 43}, + [1654] = {.lex_state = 43}, + [1655] = {.lex_state = 43}, + [1656] = {.lex_state = 43}, + [1657] = {.lex_state = 43}, + [1658] = {.lex_state = 43}, + [1659] = {.lex_state = 43}, + [1660] = {.lex_state = 43}, + [1661] = {.lex_state = 43, .external_lex_state = 3}, + [1662] = {.lex_state = 43}, + [1663] = {.lex_state = 43}, + [1664] = {.lex_state = 43}, + [1665] = {.lex_state = 43}, + [1666] = {.lex_state = 43}, + [1667] = {.lex_state = 43, .external_lex_state = 3}, + [1668] = {.lex_state = 8}, + [1669] = {.lex_state = 43}, + [1670] = {.lex_state = 43}, + [1671] = {.lex_state = 43, .external_lex_state = 3}, + [1672] = {.lex_state = 43}, + [1673] = {.lex_state = 43}, + [1674] = {.lex_state = 43}, + [1675] = {.lex_state = 43}, + [1676] = {.lex_state = 43}, + [1677] = {.lex_state = 22}, + [1678] = {.lex_state = 43}, + [1679] = {.lex_state = 43}, + [1680] = {.lex_state = 43}, + [1681] = {.lex_state = 43}, + [1682] = {.lex_state = 22}, + [1683] = {.lex_state = 43}, + [1684] = {.lex_state = 43}, + [1685] = {.lex_state = 43}, + [1686] = {.lex_state = 43}, + [1687] = {.lex_state = 43}, + [1688] = {.lex_state = 43}, + [1689] = {.lex_state = 43}, + [1690] = {.lex_state = 43}, + [1691] = {.lex_state = 22}, + [1692] = {.lex_state = 43}, + [1693] = {.lex_state = 43}, + [1694] = {.lex_state = 43}, + [1695] = {.lex_state = 8}, + [1696] = {.lex_state = 43, .external_lex_state = 3}, + [1697] = {.lex_state = 43}, + [1698] = {.lex_state = 43}, + [1699] = {.lex_state = 43}, + [1700] = {.lex_state = 43}, [1701] = {.lex_state = 8}, [1702] = {.lex_state = 8}, - [1703] = {.lex_state = 21}, + [1703] = {.lex_state = 43}, [1704] = {.lex_state = 8}, - [1705] = {.lex_state = 41}, - [1706] = {.lex_state = 41}, - [1707] = {.lex_state = 41}, - [1708] = {.lex_state = 41}, - [1709] = {.lex_state = 41}, - [1710] = {.lex_state = 41}, - [1711] = {.lex_state = 41}, - [1712] = {.lex_state = 41}, - [1713] = {.lex_state = 8}, - [1714] = {.lex_state = 41}, - [1715] = {.lex_state = 41, .external_lex_state = 3}, - [1716] = {.lex_state = 41}, - [1717] = {.lex_state = 41}, - [1718] = {.lex_state = 41}, - [1719] = {.lex_state = 41, .external_lex_state = 3}, - [1720] = {.lex_state = 41, .external_lex_state = 3}, - [1721] = {.lex_state = 41}, - [1722] = {.lex_state = 41, .external_lex_state = 3}, - [1723] = {.lex_state = 41}, - [1724] = {.lex_state = 41}, + [1705] = {.lex_state = 43, .external_lex_state = 3}, + [1706] = {.lex_state = 43, .external_lex_state = 3}, + [1707] = {.lex_state = 43}, + [1708] = {.lex_state = 43}, + [1709] = {.lex_state = 43, .external_lex_state = 3}, + [1710] = {.lex_state = 43}, + [1711] = {.lex_state = 43}, + [1712] = {.lex_state = 43}, + [1713] = {.lex_state = 43}, + [1714] = {.lex_state = 43}, + [1715] = {.lex_state = 43}, + [1716] = {.lex_state = 43}, + [1717] = {.lex_state = 43}, + [1718] = {.lex_state = 43}, + [1719] = {.lex_state = 43}, + [1720] = {.lex_state = 43}, + [1721] = {.lex_state = 43}, + [1722] = {.lex_state = 43, .external_lex_state = 3}, + [1723] = {.lex_state = 43}, + [1724] = {.lex_state = 43}, + [1725] = {.lex_state = 43}, + [1726] = {.lex_state = 43, .external_lex_state = 3}, + [1727] = {.lex_state = 43, .external_lex_state = 3}, + [1728] = {.lex_state = 43}, + [1729] = {.lex_state = 43}, + [1730] = {.lex_state = 8}, + [1731] = {.lex_state = 43, .external_lex_state = 3}, + [1732] = {.lex_state = 43}, + [1733] = {.lex_state = 8}, + [1734] = {.lex_state = 22}, + [1735] = {.lex_state = 43, .external_lex_state = 3}, + [1736] = {.lex_state = 43, .external_lex_state = 3}, + [1737] = {.lex_state = 43, .external_lex_state = 3}, + [1738] = {.lex_state = 43}, + [1739] = {.lex_state = 43}, + [1740] = {.lex_state = 43}, + [1741] = {.lex_state = 43}, + [1742] = {.lex_state = 43}, + [1743] = {.lex_state = 43, .external_lex_state = 3}, + [1744] = {.lex_state = 43}, + [1745] = {.lex_state = 43}, + [1746] = {.lex_state = 43, .external_lex_state = 3}, + [1747] = {.lex_state = 43}, + [1748] = {.lex_state = 43}, + [1749] = {.lex_state = 8}, + [1750] = {.lex_state = 43}, + [1751] = {.lex_state = 43}, + [1752] = {.lex_state = 43, .external_lex_state = 3}, + [1753] = {.lex_state = 43}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -7294,6 +7475,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_if] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), [anon_sym_handle] = ACTIONS(1), + [anon_sym_do] = ACTIONS(1), [anon_sym_kernel] = ACTIONS(1), [anon_sym_select] = ACTIONS(1), [anon_sym_QMARK] = ACTIONS(1), @@ -7309,6 +7491,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_PERCENT] = ACTIONS(1), [anon_sym_await] = ACTIONS(1), [anon_sym_PIPE_GT] = ACTIONS(1), + [anon_sym_LPAREN2] = ACTIONS(1), [anon_sym_LBRACK2] = ACTIONS(1), [anon_sym_spawn] = ACTIONS(1), [anon_sym_yield] = ACTIONS(1), @@ -7316,6 +7499,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_recv] = ACTIONS(1), [anon_sym_perform] = ACTIONS(1), [anon_sym_resume] = ACTIONS(1), + [anon_sym_LT2] = ACTIONS(1), [anon_sym_DOT_DOT] = ACTIONS(1), [anon_sym_DOT_DOT_DOT] = ACTIONS(1), [anon_sym_state] = ACTIONS(1), @@ -7334,53 +7518,54 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), [sym__call_open_gap] = ACTIONS(1), [sym__statement_break] = ACTIONS(1), + [sym__type_application_ahead] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(1614), - [sym_statement] = STATE(6), - [sym_import_statement] = STATE(1367), - [sym_namespace_declaration] = STATE(1367), - [sym_let_declaration] = STATE(1367), - [sym_assignment] = STATE(1367), - [sym_function_declaration] = STATE(1367), - [sym_extern_declaration] = STATE(1367), - [sym_type_declaration] = STATE(1367), - [sym_effect_declaration] = STATE(1367), - [sym_expression_statement] = STATE(1367), - [sym_expression] = STATE(591), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1367), - [sym_signature_declaration] = STATE(1367), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_source_file] = STATE(1394), + [sym_statement] = STATE(7), + [sym_import_statement] = STATE(1404), + [sym_namespace_declaration] = STATE(1404), + [sym_let_declaration] = STATE(1404), + [sym_assignment] = STATE(1404), + [sym_function_declaration] = STATE(1404), + [sym_extern_declaration] = STATE(1404), + [sym_type_declaration] = STATE(1404), + [sym_effect_declaration] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_expression] = STATE(568), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1404), + [sym_signature_declaration] = STATE(1404), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(6), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(7), + [aux_sym_doc_comment_repeat1] = STATE(227), [ts_builtin_sym_end] = ACTIONS(5), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), @@ -7424,53 +7609,53 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), }, [2] = { - [sym_statement] = STATE(7), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(457), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_field_assignments] = STATE(1400), - [sym_field_assignment] = STATE(1177), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_map_entry] = STATE(1192), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(14), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(467), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_field_assignments] = STATE(1575), + [sym_field_assignment] = STATE(1121), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_map_entry] = STATE(1178), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(7), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(14), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(73), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -7514,53 +7699,53 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), }, [3] = { - [sym_statement] = STATE(16), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(508), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_field_assignments] = STATE(1462), - [sym_field_assignment] = STATE(1177), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_map_entry] = STATE(1197), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(17), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(462), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_field_assignments] = STATE(1487), + [sym_field_assignment] = STATE(1121), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_map_entry] = STATE(1123), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(16), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(17), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(73), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -7604,53 +7789,53 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), }, [4] = { - [sym_statement] = STATE(11), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(502), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_field_assignments] = STATE(1628), - [sym_field_assignment] = STATE(1177), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_map_entry] = STATE(1152), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(8), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(445), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_field_assignments] = STATE(1687), + [sym_field_assignment] = STATE(1121), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_map_entry] = STATE(1147), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(11), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(8), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(73), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -7694,138 +7879,226 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), }, [5] = { - [sym_statement] = STATE(5), - [sym_import_statement] = STATE(1367), - [sym_namespace_declaration] = STATE(1367), - [sym_let_declaration] = STATE(1367), - [sym_assignment] = STATE(1367), - [sym_function_declaration] = STATE(1367), - [sym_extern_declaration] = STATE(1367), - [sym_type_declaration] = STATE(1367), - [sym_effect_declaration] = STATE(1367), - [sym_expression_statement] = STATE(1367), - [sym_expression] = STATE(591), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1367), - [sym_signature_declaration] = STATE(1367), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), - [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(5), - [aux_sym_doc_comment_repeat1] = STATE(224), - [ts_builtin_sym_end] = ACTIONS(81), - [sym_identifier] = ACTIONS(83), - [anon_sym_import] = ACTIONS(86), - [anon_sym_LBRACE] = ACTIONS(89), - [anon_sym_namespace] = ACTIONS(92), - [anon_sym_let] = ACTIONS(95), - [anon_sym_mut] = ACTIONS(95), - [anon_sym_fn] = ACTIONS(98), - [anon_sym_LPAREN] = ACTIONS(101), - [anon_sym_extern] = ACTIONS(104), - [anon_sym_type] = ACTIONS(107), - [anon_sym_PIPE] = ACTIONS(110), - [sym_static_stage] = ACTIONS(113), - [anon_sym_effect] = ACTIONS(116), - [anon_sym_BANG] = ACTIONS(119), - [anon_sym_LBRACK] = ACTIONS(122), - [anon_sym_match] = ACTIONS(125), - [anon_sym_if] = ACTIONS(128), - [anon_sym_handle] = ACTIONS(131), - [anon_sym_kernel] = ACTIONS(134), - [anon_sym_select] = ACTIONS(137), - [anon_sym_PLUS] = ACTIONS(119), - [anon_sym_DASH] = ACTIONS(119), - [anon_sym_await] = ACTIONS(140), - [anon_sym_spawn] = ACTIONS(143), - [anon_sym_yield] = ACTIONS(146), - [anon_sym_send] = ACTIONS(149), - [anon_sym_recv] = ACTIONS(152), - [anon_sym_perform] = ACTIONS(155), - [anon_sym_resume] = ACTIONS(158), - [anon_sym_state] = ACTIONS(161), - [anon_sym_module] = ACTIONS(164), - [anon_sym_signature] = ACTIONS(167), - [anon_sym_true] = ACTIONS(170), - [anon_sym_false] = ACTIONS(170), - [sym_float] = ACTIONS(173), - [sym_integer] = ACTIONS(176), - [sym_string] = ACTIONS(176), - [sym_interpolated_string] = ACTIONS(176), - [sym__doc_comment_line] = ACTIONS(179), + [sym_expression] = STATE(334), + [sym_match_expression] = STATE(377), + [sym_if_expression] = STATE(377), + [sym_handler_expression] = STATE(377), + [sym_kernel_expression] = STATE(377), + [sym_select_expression] = STATE(377), + [sym_ternary_expression] = STATE(377), + [sym_binary_expression] = STATE(377), + [sym_unary_expression] = STATE(377), + [sym_pipe_expression] = STATE(377), + [sym_call_expression] = STATE(377), + [sym_primary_expression] = STATE(377), + [sym_spawn_expression] = STATE(382), + [sym_yield_expression] = STATE(382), + [sym_await_call] = STATE(382), + [sym_send_call] = STATE(382), + [sym_recv_call] = STATE(382), + [sym_perform_expression] = STATE(382), + [sym_resume_expression] = STATE(382), + [sym_type_constructor] = STATE(382), + [sym_update_expression] = STATE(382), + [sym_block] = STATE(382), + [sym_object_literal] = STATE(382), + [sym_lambda_expression] = STATE(382), + [sym_literal] = STATE(382), + [sym_list_literal] = STATE(393), + [sym_map_literal] = STATE(393), + [sym_qualified_path] = STATE(330), + [sym_boolean] = STATE(393), + [sym_identifier] = ACTIONS(81), + [anon_sym_DOT] = ACTIONS(83), + [anon_sym_LBRACE] = ACTIONS(85), + [anon_sym_RBRACE] = ACTIONS(83), + [anon_sym_STAR] = ACTIONS(83), + [anon_sym_let] = ACTIONS(87), + [anon_sym_mut] = ACTIONS(87), + [anon_sym_fn] = ACTIONS(89), + [anon_sym_LT] = ACTIONS(87), + [anon_sym_GT] = ACTIONS(87), + [anon_sym_LPAREN] = ACTIONS(91), + [anon_sym_extern] = ACTIONS(87), + [anon_sym_type] = ACTIONS(87), + [anon_sym_PIPE] = ACTIONS(93), + [sym_static_stage] = ACTIONS(87), + [anon_sym_effect] = ACTIONS(87), + [anon_sym_BANG] = ACTIONS(95), + [anon_sym_LBRACK] = ACTIONS(97), + [anon_sym_match] = ACTIONS(99), + [anon_sym_if] = ACTIONS(101), + [anon_sym_handle] = ACTIONS(103), + [anon_sym_kernel] = ACTIONS(105), + [anon_sym_select] = ACTIONS(107), + [anon_sym_QMARK] = ACTIONS(83), + [anon_sym_PIPE_PIPE] = ACTIONS(83), + [anon_sym_AMP_AMP] = ACTIONS(83), + [anon_sym_EQ_EQ] = ACTIONS(83), + [anon_sym_BANG_EQ] = ACTIONS(83), + [anon_sym_LT_EQ] = ACTIONS(83), + [anon_sym_GT_EQ] = ACTIONS(83), + [anon_sym_PLUS] = ACTIONS(109), + [anon_sym_DASH] = ACTIONS(109), + [anon_sym_SLASH] = ACTIONS(87), + [anon_sym_PERCENT] = ACTIONS(83), + [anon_sym_await] = ACTIONS(111), + [anon_sym_PIPE_GT] = ACTIONS(83), + [anon_sym_LBRACK2] = ACTIONS(83), + [anon_sym_spawn] = ACTIONS(113), + [anon_sym_yield] = ACTIONS(115), + [anon_sym_send] = ACTIONS(117), + [anon_sym_recv] = ACTIONS(119), + [anon_sym_perform] = ACTIONS(121), + [anon_sym_resume] = ACTIONS(123), + [anon_sym_state] = ACTIONS(87), + [anon_sym_module] = ACTIONS(87), + [anon_sym_export] = ACTIONS(87), + [anon_sym_signature] = ACTIONS(87), + [anon_sym_true] = ACTIONS(125), + [anon_sym_false] = ACTIONS(125), + [sym_float] = ACTIONS(127), + [sym_integer] = ACTIONS(129), + [sym_string] = ACTIONS(129), + [sym_interpolated_string] = ACTIONS(129), + [sym__doc_comment_line] = ACTIONS(83), [sym_line_comment] = ACTIONS(3), + [sym__call_open_gap] = ACTIONS(83), + [sym__type_application_ahead] = ACTIONS(83), }, [6] = { - [sym_statement] = STATE(5), - [sym_import_statement] = STATE(1367), - [sym_namespace_declaration] = STATE(1367), - [sym_let_declaration] = STATE(1367), - [sym_assignment] = STATE(1367), - [sym_function_declaration] = STATE(1367), - [sym_extern_declaration] = STATE(1367), - [sym_type_declaration] = STATE(1367), - [sym_effect_declaration] = STATE(1367), - [sym_expression_statement] = STATE(1367), - [sym_expression] = STATE(591), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1367), - [sym_signature_declaration] = STATE(1367), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(6), + [sym_import_statement] = STATE(1404), + [sym_namespace_declaration] = STATE(1404), + [sym_let_declaration] = STATE(1404), + [sym_assignment] = STATE(1404), + [sym_function_declaration] = STATE(1404), + [sym_extern_declaration] = STATE(1404), + [sym_type_declaration] = STATE(1404), + [sym_effect_declaration] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_expression] = STATE(568), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1404), + [sym_signature_declaration] = STATE(1404), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(5), - [aux_sym_doc_comment_repeat1] = STATE(224), - [ts_builtin_sym_end] = ACTIONS(182), + [aux_sym_source_file_repeat1] = STATE(6), + [aux_sym_doc_comment_repeat1] = STATE(227), + [ts_builtin_sym_end] = ACTIONS(131), + [sym_identifier] = ACTIONS(133), + [anon_sym_import] = ACTIONS(136), + [anon_sym_LBRACE] = ACTIONS(139), + [anon_sym_namespace] = ACTIONS(142), + [anon_sym_let] = ACTIONS(145), + [anon_sym_mut] = ACTIONS(145), + [anon_sym_fn] = ACTIONS(148), + [anon_sym_LPAREN] = ACTIONS(151), + [anon_sym_extern] = ACTIONS(154), + [anon_sym_type] = ACTIONS(157), + [anon_sym_PIPE] = ACTIONS(160), + [sym_static_stage] = ACTIONS(163), + [anon_sym_effect] = ACTIONS(166), + [anon_sym_BANG] = ACTIONS(169), + [anon_sym_LBRACK] = ACTIONS(172), + [anon_sym_match] = ACTIONS(175), + [anon_sym_if] = ACTIONS(178), + [anon_sym_handle] = ACTIONS(181), + [anon_sym_kernel] = ACTIONS(184), + [anon_sym_select] = ACTIONS(187), + [anon_sym_PLUS] = ACTIONS(169), + [anon_sym_DASH] = ACTIONS(169), + [anon_sym_await] = ACTIONS(190), + [anon_sym_spawn] = ACTIONS(193), + [anon_sym_yield] = ACTIONS(196), + [anon_sym_send] = ACTIONS(199), + [anon_sym_recv] = ACTIONS(202), + [anon_sym_perform] = ACTIONS(205), + [anon_sym_resume] = ACTIONS(208), + [anon_sym_state] = ACTIONS(211), + [anon_sym_module] = ACTIONS(214), + [anon_sym_signature] = ACTIONS(217), + [anon_sym_true] = ACTIONS(220), + [anon_sym_false] = ACTIONS(220), + [sym_float] = ACTIONS(223), + [sym_integer] = ACTIONS(226), + [sym_string] = ACTIONS(226), + [sym_interpolated_string] = ACTIONS(226), + [sym__doc_comment_line] = ACTIONS(229), + [sym_line_comment] = ACTIONS(3), + }, + [7] = { + [sym_statement] = STATE(6), + [sym_import_statement] = STATE(1404), + [sym_namespace_declaration] = STATE(1404), + [sym_let_declaration] = STATE(1404), + [sym_assignment] = STATE(1404), + [sym_function_declaration] = STATE(1404), + [sym_extern_declaration] = STATE(1404), + [sym_type_declaration] = STATE(1404), + [sym_effect_declaration] = STATE(1404), + [sym_expression_statement] = STATE(1404), + [sym_expression] = STATE(568), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1404), + [sym_signature_declaration] = STATE(1404), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), + [sym_doc_comment] = STATE(20), + [aux_sym_source_file_repeat1] = STATE(6), + [aux_sym_doc_comment_repeat1] = STATE(227), + [ts_builtin_sym_end] = ACTIONS(232), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -7867,55 +8140,55 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__doc_comment_line] = ACTIONS(71), [sym_line_comment] = ACTIONS(3), }, - [7] = { - [sym_statement] = STATE(12), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(523), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [8] = { + [sym_statement] = STATE(9), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(522), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(12), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(9), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), - [anon_sym_RBRACE] = ACTIONS(184), + [anon_sym_RBRACE] = ACTIONS(234), [anon_sym_namespace] = ACTIONS(13), [anon_sym_let] = ACTIONS(15), [anon_sym_mut] = ACTIONS(15), @@ -7954,55 +8227,142 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__doc_comment_line] = ACTIONS(71), [sym_line_comment] = ACTIONS(3), }, - [8] = { + [9] = { [sym_statement] = STATE(9), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(591), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(568), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), [aux_sym_source_file_repeat1] = STATE(9), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_doc_comment_repeat1] = STATE(227), + [sym_identifier] = ACTIONS(133), + [anon_sym_import] = ACTIONS(136), + [anon_sym_LBRACE] = ACTIONS(139), + [anon_sym_RBRACE] = ACTIONS(131), + [anon_sym_namespace] = ACTIONS(142), + [anon_sym_let] = ACTIONS(145), + [anon_sym_mut] = ACTIONS(145), + [anon_sym_fn] = ACTIONS(148), + [anon_sym_LPAREN] = ACTIONS(151), + [anon_sym_extern] = ACTIONS(154), + [anon_sym_type] = ACTIONS(157), + [anon_sym_PIPE] = ACTIONS(160), + [sym_static_stage] = ACTIONS(163), + [anon_sym_effect] = ACTIONS(166), + [anon_sym_BANG] = ACTIONS(169), + [anon_sym_LBRACK] = ACTIONS(172), + [anon_sym_match] = ACTIONS(175), + [anon_sym_if] = ACTIONS(178), + [anon_sym_handle] = ACTIONS(181), + [anon_sym_kernel] = ACTIONS(184), + [anon_sym_select] = ACTIONS(187), + [anon_sym_PLUS] = ACTIONS(169), + [anon_sym_DASH] = ACTIONS(169), + [anon_sym_await] = ACTIONS(190), + [anon_sym_spawn] = ACTIONS(193), + [anon_sym_yield] = ACTIONS(196), + [anon_sym_send] = ACTIONS(199), + [anon_sym_recv] = ACTIONS(202), + [anon_sym_perform] = ACTIONS(205), + [anon_sym_resume] = ACTIONS(208), + [anon_sym_state] = ACTIONS(211), + [anon_sym_module] = ACTIONS(214), + [anon_sym_signature] = ACTIONS(217), + [anon_sym_true] = ACTIONS(220), + [anon_sym_false] = ACTIONS(220), + [sym_float] = ACTIONS(223), + [sym_integer] = ACTIONS(226), + [sym_string] = ACTIONS(226), + [sym_interpolated_string] = ACTIONS(226), + [sym__doc_comment_line] = ACTIONS(229), + [sym_line_comment] = ACTIONS(3), + }, + [10] = { + [sym_statement] = STATE(11), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(568), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), + [sym_doc_comment] = STATE(20), + [aux_sym_source_file_repeat1] = STATE(11), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), - [anon_sym_RBRACE] = ACTIONS(186), + [anon_sym_RBRACE] = ACTIONS(236), [anon_sym_namespace] = ACTIONS(13), [anon_sym_let] = ACTIONS(15), [anon_sym_mut] = ACTIONS(15), @@ -8041,55 +8401,55 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__doc_comment_line] = ACTIONS(71), [sym_line_comment] = ACTIONS(3), }, - [9] = { - [sym_statement] = STATE(12), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(591), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [11] = { + [sym_statement] = STATE(9), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(568), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(12), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(9), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), - [anon_sym_RBRACE] = ACTIONS(188), + [anon_sym_RBRACE] = ACTIONS(238), [anon_sym_namespace] = ACTIONS(13), [anon_sym_let] = ACTIONS(15), [anon_sym_mut] = ACTIONS(15), @@ -8128,55 +8488,55 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__doc_comment_line] = ACTIONS(71), [sym_line_comment] = ACTIONS(3), }, - [10] = { - [sym_statement] = STATE(15), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(528), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [12] = { + [sym_statement] = STATE(16), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(487), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(15), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(16), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), - [anon_sym_RBRACE] = ACTIONS(190), + [anon_sym_RBRACE] = ACTIONS(240), [anon_sym_namespace] = ACTIONS(13), [anon_sym_let] = ACTIONS(15), [anon_sym_mut] = ACTIONS(15), @@ -8215,55 +8575,55 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__doc_comment_line] = ACTIONS(71), [sym_line_comment] = ACTIONS(3), }, - [11] = { - [sym_statement] = STATE(12), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(522), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [13] = { + [sym_statement] = STATE(9), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(515), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(12), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(9), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), - [anon_sym_RBRACE] = ACTIONS(192), + [anon_sym_RBRACE] = ACTIONS(242), [anon_sym_namespace] = ACTIONS(13), [anon_sym_let] = ACTIONS(15), [anon_sym_mut] = ACTIONS(15), @@ -8302,225 +8662,51 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__doc_comment_line] = ACTIONS(71), [sym_line_comment] = ACTIONS(3), }, - [12] = { - [sym_statement] = STATE(12), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(591), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), - [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(12), - [aux_sym_doc_comment_repeat1] = STATE(224), - [sym_identifier] = ACTIONS(83), - [anon_sym_import] = ACTIONS(86), - [anon_sym_LBRACE] = ACTIONS(89), - [anon_sym_RBRACE] = ACTIONS(81), - [anon_sym_namespace] = ACTIONS(92), - [anon_sym_let] = ACTIONS(95), - [anon_sym_mut] = ACTIONS(95), - [anon_sym_fn] = ACTIONS(98), - [anon_sym_LPAREN] = ACTIONS(101), - [anon_sym_extern] = ACTIONS(104), - [anon_sym_type] = ACTIONS(107), - [anon_sym_PIPE] = ACTIONS(110), - [sym_static_stage] = ACTIONS(113), - [anon_sym_effect] = ACTIONS(116), - [anon_sym_BANG] = ACTIONS(119), - [anon_sym_LBRACK] = ACTIONS(122), - [anon_sym_match] = ACTIONS(125), - [anon_sym_if] = ACTIONS(128), - [anon_sym_handle] = ACTIONS(131), - [anon_sym_kernel] = ACTIONS(134), - [anon_sym_select] = ACTIONS(137), - [anon_sym_PLUS] = ACTIONS(119), - [anon_sym_DASH] = ACTIONS(119), - [anon_sym_await] = ACTIONS(140), - [anon_sym_spawn] = ACTIONS(143), - [anon_sym_yield] = ACTIONS(146), - [anon_sym_send] = ACTIONS(149), - [anon_sym_recv] = ACTIONS(152), - [anon_sym_perform] = ACTIONS(155), - [anon_sym_resume] = ACTIONS(158), - [anon_sym_state] = ACTIONS(161), - [anon_sym_module] = ACTIONS(164), - [anon_sym_signature] = ACTIONS(167), - [anon_sym_true] = ACTIONS(170), - [anon_sym_false] = ACTIONS(170), - [sym_float] = ACTIONS(173), - [sym_integer] = ACTIONS(176), - [sym_string] = ACTIONS(176), - [sym_interpolated_string] = ACTIONS(176), - [sym__doc_comment_line] = ACTIONS(179), - [sym_line_comment] = ACTIONS(3), - }, - [13] = { - [sym_expression] = STATE(298), - [sym_match_expression] = STATE(380), - [sym_if_expression] = STATE(380), - [sym_handler_expression] = STATE(380), - [sym_kernel_expression] = STATE(380), - [sym_select_expression] = STATE(380), - [sym_ternary_expression] = STATE(380), - [sym_binary_expression] = STATE(380), - [sym_unary_expression] = STATE(380), - [sym_pipe_expression] = STATE(380), - [sym_call_expression] = STATE(380), - [sym_primary_expression] = STATE(380), - [sym_spawn_expression] = STATE(381), - [sym_yield_expression] = STATE(381), - [sym_await_call] = STATE(381), - [sym_send_call] = STATE(381), - [sym_recv_call] = STATE(381), - [sym_perform_expression] = STATE(381), - [sym_resume_expression] = STATE(381), - [sym_type_constructor] = STATE(381), - [sym_update_expression] = STATE(381), - [sym_block] = STATE(381), - [sym_object_literal] = STATE(381), - [sym_lambda_expression] = STATE(381), - [sym_literal] = STATE(381), - [sym_list_literal] = STATE(379), - [sym_map_literal] = STATE(379), - [sym_qualified_path] = STATE(293), - [sym_boolean] = STATE(379), - [sym_identifier] = ACTIONS(194), - [anon_sym_DOT] = ACTIONS(196), - [anon_sym_LBRACE] = ACTIONS(198), - [anon_sym_RBRACE] = ACTIONS(196), - [anon_sym_STAR] = ACTIONS(196), - [anon_sym_let] = ACTIONS(200), - [anon_sym_mut] = ACTIONS(200), - [anon_sym_fn] = ACTIONS(202), - [anon_sym_LT] = ACTIONS(200), - [anon_sym_GT] = ACTIONS(200), - [anon_sym_LPAREN] = ACTIONS(204), - [anon_sym_extern] = ACTIONS(200), - [anon_sym_type] = ACTIONS(200), - [anon_sym_PIPE] = ACTIONS(206), - [sym_static_stage] = ACTIONS(200), - [anon_sym_effect] = ACTIONS(200), - [anon_sym_BANG] = ACTIONS(208), - [anon_sym_LBRACK] = ACTIONS(210), - [anon_sym_match] = ACTIONS(212), - [anon_sym_if] = ACTIONS(214), - [anon_sym_handle] = ACTIONS(216), - [anon_sym_kernel] = ACTIONS(218), - [anon_sym_select] = ACTIONS(220), - [anon_sym_QMARK] = ACTIONS(196), - [anon_sym_PIPE_PIPE] = ACTIONS(196), - [anon_sym_AMP_AMP] = ACTIONS(196), - [anon_sym_EQ_EQ] = ACTIONS(196), - [anon_sym_BANG_EQ] = ACTIONS(196), - [anon_sym_LT_EQ] = ACTIONS(196), - [anon_sym_GT_EQ] = ACTIONS(196), - [anon_sym_PLUS] = ACTIONS(222), - [anon_sym_DASH] = ACTIONS(222), - [anon_sym_SLASH] = ACTIONS(200), - [anon_sym_PERCENT] = ACTIONS(196), - [anon_sym_await] = ACTIONS(224), - [anon_sym_PIPE_GT] = ACTIONS(196), - [anon_sym_LBRACK2] = ACTIONS(196), - [anon_sym_spawn] = ACTIONS(226), - [anon_sym_yield] = ACTIONS(228), - [anon_sym_send] = ACTIONS(230), - [anon_sym_recv] = ACTIONS(232), - [anon_sym_perform] = ACTIONS(234), - [anon_sym_resume] = ACTIONS(236), - [anon_sym_state] = ACTIONS(200), - [anon_sym_module] = ACTIONS(200), - [anon_sym_export] = ACTIONS(200), - [anon_sym_signature] = ACTIONS(200), - [anon_sym_true] = ACTIONS(238), - [anon_sym_false] = ACTIONS(238), - [sym_float] = ACTIONS(240), - [sym_integer] = ACTIONS(242), - [sym_string] = ACTIONS(242), - [sym_interpolated_string] = ACTIONS(242), - [sym__doc_comment_line] = ACTIONS(196), - [sym_line_comment] = ACTIONS(3), - [sym__call_open_gap] = ACTIONS(196), - }, [14] = { - [sym_statement] = STATE(17), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(527), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(9), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(481), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(17), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(9), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -8564,50 +8750,50 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), }, [15] = { - [sym_statement] = STATE(12), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(530), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(13), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(495), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(12), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(13), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -8651,50 +8837,50 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), }, [16] = { - [sym_statement] = STATE(12), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(534), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(9), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(507), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(12), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(9), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -8738,50 +8924,50 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_line_comment] = ACTIONS(3), }, [17] = { - [sym_statement] = STATE(12), - [sym_import_statement] = STATE(1625), - [sym_namespace_declaration] = STATE(1625), - [sym_let_declaration] = STATE(1625), - [sym_assignment] = STATE(1625), - [sym_function_declaration] = STATE(1625), - [sym_extern_declaration] = STATE(1625), - [sym_type_declaration] = STATE(1625), - [sym_effect_declaration] = STATE(1625), - [sym_expression_statement] = STATE(1625), - [sym_expression] = STATE(535), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_module_declaration] = STATE(1625), - [sym_signature_declaration] = STATE(1625), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_statement] = STATE(9), + [sym_import_statement] = STATE(1563), + [sym_namespace_declaration] = STATE(1563), + [sym_let_declaration] = STATE(1563), + [sym_assignment] = STATE(1563), + [sym_function_declaration] = STATE(1563), + [sym_extern_declaration] = STATE(1563), + [sym_type_declaration] = STATE(1563), + [sym_effect_declaration] = STATE(1563), + [sym_expression_statement] = STATE(1563), + [sym_expression] = STATE(513), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_module_declaration] = STATE(1563), + [sym_signature_declaration] = STATE(1563), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_doc_comment] = STATE(20), - [aux_sym_source_file_repeat1] = STATE(12), - [aux_sym_doc_comment_repeat1] = STATE(224), + [aux_sym_source_file_repeat1] = STATE(9), + [aux_sym_doc_comment_repeat1] = STATE(227), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_LBRACE] = ACTIONS(11), @@ -8826,71 +9012,72 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { }, [18] = { [sym_expression] = STATE(238), - [sym_match_expression] = STATE(240), - [sym_if_expression] = STATE(240), - [sym_handler_expression] = STATE(240), - [sym_kernel_expression] = STATE(240), - [sym_select_expression] = STATE(240), - [sym_ternary_expression] = STATE(240), - [sym_binary_expression] = STATE(240), - [sym_unary_expression] = STATE(240), - [sym_pipe_expression] = STATE(240), - [sym_call_expression] = STATE(240), - [sym_primary_expression] = STATE(240), - [sym_spawn_expression] = STATE(249), - [sym_yield_expression] = STATE(249), - [sym_await_call] = STATE(249), - [sym_send_call] = STATE(249), - [sym_recv_call] = STATE(249), - [sym_perform_expression] = STATE(249), - [sym_resume_expression] = STATE(249), - [sym_type_constructor] = STATE(249), - [sym_update_expression] = STATE(249), - [sym_block] = STATE(249), - [sym_object_literal] = STATE(249), - [sym_lambda_expression] = STATE(249), - [sym_literal] = STATE(249), - [sym_list_literal] = STATE(250), - [sym_map_literal] = STATE(250), - [sym_qualified_path] = STATE(230), - [sym_boolean] = STATE(250), + [sym_match_expression] = STATE(280), + [sym_if_expression] = STATE(280), + [sym_handler_expression] = STATE(280), + [sym_kernel_expression] = STATE(280), + [sym_select_expression] = STATE(280), + [sym_ternary_expression] = STATE(280), + [sym_binary_expression] = STATE(280), + [sym_unary_expression] = STATE(280), + [sym_pipe_expression] = STATE(280), + [sym_call_expression] = STATE(280), + [sym_primary_expression] = STATE(280), + [sym_spawn_expression] = STATE(293), + [sym_yield_expression] = STATE(293), + [sym_await_call] = STATE(293), + [sym_send_call] = STATE(293), + [sym_recv_call] = STATE(293), + [sym_perform_expression] = STATE(293), + [sym_resume_expression] = STATE(293), + [sym_type_constructor] = STATE(293), + [sym_update_expression] = STATE(293), + [sym_block] = STATE(293), + [sym_object_literal] = STATE(293), + [sym_lambda_expression] = STATE(293), + [sym_literal] = STATE(293), + [sym_list_literal] = STATE(273), + [sym_map_literal] = STATE(273), + [sym_qualified_path] = STATE(235), + [sym_boolean] = STATE(273), [sym_identifier] = ACTIONS(252), - [anon_sym_DOT] = ACTIONS(196), + [anon_sym_DOT] = ACTIONS(83), [anon_sym_LBRACE] = ACTIONS(254), - [anon_sym_RBRACE] = ACTIONS(196), - [anon_sym_STAR] = ACTIONS(196), - [anon_sym_COMMA] = ACTIONS(196), - [anon_sym_COLON] = ACTIONS(196), + [anon_sym_RBRACE] = ACTIONS(83), + [anon_sym_STAR] = ACTIONS(83), + [anon_sym_COMMA] = ACTIONS(83), + [anon_sym_COLON] = ACTIONS(83), [anon_sym_fn] = ACTIONS(256), - [anon_sym_LT] = ACTIONS(200), - [anon_sym_GT] = ACTIONS(200), + [anon_sym_LT] = ACTIONS(87), + [anon_sym_GT] = ACTIONS(87), [anon_sym_LPAREN] = ACTIONS(258), - [anon_sym_RPAREN] = ACTIONS(196), - [anon_sym__] = ACTIONS(200), - [anon_sym_in] = ACTIONS(200), + [anon_sym_RPAREN] = ACTIONS(83), + [anon_sym__] = ACTIONS(87), + [anon_sym_in] = ACTIONS(87), [anon_sym_PIPE] = ACTIONS(260), [anon_sym_BANG] = ACTIONS(262), [anon_sym_LBRACK] = ACTIONS(264), - [anon_sym_RBRACK] = ACTIONS(196), + [anon_sym_RBRACK] = ACTIONS(83), [anon_sym_match] = ACTIONS(266), [anon_sym_if] = ACTIONS(268), [anon_sym_handle] = ACTIONS(270), + [anon_sym_do] = ACTIONS(87), [anon_sym_kernel] = ACTIONS(272), [anon_sym_select] = ACTIONS(274), - [anon_sym_QMARK] = ACTIONS(196), - [anon_sym_PIPE_PIPE] = ACTIONS(196), - [anon_sym_AMP_AMP] = ACTIONS(196), - [anon_sym_EQ_EQ] = ACTIONS(196), - [anon_sym_BANG_EQ] = ACTIONS(196), - [anon_sym_LT_EQ] = ACTIONS(196), - [anon_sym_GT_EQ] = ACTIONS(196), + [anon_sym_QMARK] = ACTIONS(83), + [anon_sym_PIPE_PIPE] = ACTIONS(83), + [anon_sym_AMP_AMP] = ACTIONS(83), + [anon_sym_EQ_EQ] = ACTIONS(83), + [anon_sym_BANG_EQ] = ACTIONS(83), + [anon_sym_LT_EQ] = ACTIONS(83), + [anon_sym_GT_EQ] = ACTIONS(83), [anon_sym_PLUS] = ACTIONS(276), [anon_sym_DASH] = ACTIONS(276), - [anon_sym_SLASH] = ACTIONS(200), - [anon_sym_PERCENT] = ACTIONS(196), + [anon_sym_SLASH] = ACTIONS(87), + [anon_sym_PERCENT] = ACTIONS(83), [anon_sym_await] = ACTIONS(278), - [anon_sym_PIPE_GT] = ACTIONS(196), - [anon_sym_LBRACK2] = ACTIONS(196), + [anon_sym_PIPE_GT] = ACTIONS(83), + [anon_sym_LBRACK2] = ACTIONS(83), [anon_sym_spawn] = ACTIONS(280), [anon_sym_yield] = ACTIONS(282), [anon_sym_send] = ACTIONS(284), @@ -8904,47 +9091,48 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_string] = ACTIONS(296), [sym_interpolated_string] = ACTIONS(296), [sym_line_comment] = ACTIONS(298), - [sym__call_open_gap] = ACTIONS(196), + [sym__call_open_gap] = ACTIONS(83), + [sym__type_application_ahead] = ACTIONS(83), }, [19] = { - [sym_expression] = STATE(495), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_expression] = STATE(444), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_identifier] = ACTIONS(300), - [anon_sym_DOT] = ACTIONS(196), + [anon_sym_DOT] = ACTIONS(83), [anon_sym_LBRACE] = ACTIONS(11), - [anon_sym_RBRACE] = ACTIONS(196), - [anon_sym_STAR] = ACTIONS(196), - [anon_sym_COLON] = ACTIONS(196), + [anon_sym_RBRACE] = ACTIONS(83), + [anon_sym_STAR] = ACTIONS(83), + [anon_sym_COLON] = ACTIONS(83), [anon_sym_fn] = ACTIONS(302), - [anon_sym_LT] = ACTIONS(200), - [anon_sym_GT] = ACTIONS(200), + [anon_sym_LT] = ACTIONS(87), + [anon_sym_GT] = ACTIONS(87), [anon_sym_LPAREN] = ACTIONS(19), [anon_sym_PIPE] = ACTIONS(304), [anon_sym_BANG] = ACTIONS(306), @@ -8954,20 +9142,20 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_handle] = ACTIONS(39), [anon_sym_kernel] = ACTIONS(41), [anon_sym_select] = ACTIONS(43), - [anon_sym_QMARK] = ACTIONS(196), - [anon_sym_PIPE_PIPE] = ACTIONS(196), - [anon_sym_AMP_AMP] = ACTIONS(196), - [anon_sym_EQ_EQ] = ACTIONS(196), - [anon_sym_BANG_EQ] = ACTIONS(196), - [anon_sym_LT_EQ] = ACTIONS(196), - [anon_sym_GT_EQ] = ACTIONS(196), + [anon_sym_QMARK] = ACTIONS(83), + [anon_sym_PIPE_PIPE] = ACTIONS(83), + [anon_sym_AMP_AMP] = ACTIONS(83), + [anon_sym_EQ_EQ] = ACTIONS(83), + [anon_sym_BANG_EQ] = ACTIONS(83), + [anon_sym_LT_EQ] = ACTIONS(83), + [anon_sym_GT_EQ] = ACTIONS(83), [anon_sym_PLUS] = ACTIONS(31), [anon_sym_DASH] = ACTIONS(31), - [anon_sym_SLASH] = ACTIONS(200), - [anon_sym_PERCENT] = ACTIONS(196), + [anon_sym_SLASH] = ACTIONS(87), + [anon_sym_PERCENT] = ACTIONS(83), [anon_sym_await] = ACTIONS(45), - [anon_sym_PIPE_GT] = ACTIONS(196), - [anon_sym_LBRACK2] = ACTIONS(196), + [anon_sym_PIPE_GT] = ACTIONS(83), + [anon_sym_LBRACK2] = ACTIONS(83), [anon_sym_spawn] = ACTIONS(47), [anon_sym_yield] = ACTIONS(49), [anon_sym_send] = ACTIONS(51), @@ -8981,39 +9169,40 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_string] = ACTIONS(69), [sym_interpolated_string] = ACTIONS(69), [sym_line_comment] = ACTIONS(298), - [sym__call_open_gap] = ACTIONS(196), - [sym__statement_break] = ACTIONS(196), + [sym__call_open_gap] = ACTIONS(83), + [sym__statement_break] = ACTIONS(83), + [sym__type_application_ahead] = ACTIONS(83), }, [20] = { - [sym_expression] = STATE(565), - [sym_match_expression] = STATE(456), - [sym_if_expression] = STATE(456), - [sym_handler_expression] = STATE(456), - [sym_kernel_expression] = STATE(456), - [sym_select_expression] = STATE(456), - [sym_ternary_expression] = STATE(456), - [sym_binary_expression] = STATE(456), - [sym_unary_expression] = STATE(456), - [sym_pipe_expression] = STATE(456), - [sym_call_expression] = STATE(456), - [sym_primary_expression] = STATE(456), - [sym_spawn_expression] = STATE(458), - [sym_yield_expression] = STATE(458), - [sym_await_call] = STATE(458), - [sym_send_call] = STATE(458), - [sym_recv_call] = STATE(458), - [sym_perform_expression] = STATE(458), - [sym_resume_expression] = STATE(458), - [sym_type_constructor] = STATE(458), - [sym_update_expression] = STATE(458), - [sym_block] = STATE(458), - [sym_object_literal] = STATE(458), - [sym_lambda_expression] = STATE(458), - [sym_literal] = STATE(458), - [sym_list_literal] = STATE(489), - [sym_map_literal] = STATE(489), - [sym_qualified_path] = STATE(433), - [sym_boolean] = STATE(489), + [sym_expression] = STATE(537), + [sym_match_expression] = STATE(502), + [sym_if_expression] = STATE(502), + [sym_handler_expression] = STATE(502), + [sym_kernel_expression] = STATE(502), + [sym_select_expression] = STATE(502), + [sym_ternary_expression] = STATE(502), + [sym_binary_expression] = STATE(502), + [sym_unary_expression] = STATE(502), + [sym_pipe_expression] = STATE(502), + [sym_call_expression] = STATE(502), + [sym_primary_expression] = STATE(502), + [sym_spawn_expression] = STATE(525), + [sym_yield_expression] = STATE(525), + [sym_await_call] = STATE(525), + [sym_send_call] = STATE(525), + [sym_recv_call] = STATE(525), + [sym_perform_expression] = STATE(525), + [sym_resume_expression] = STATE(525), + [sym_type_constructor] = STATE(525), + [sym_update_expression] = STATE(525), + [sym_block] = STATE(525), + [sym_object_literal] = STATE(525), + [sym_lambda_expression] = STATE(525), + [sym_literal] = STATE(525), + [sym_list_literal] = STATE(510), + [sym_map_literal] = STATE(510), + [sym_qualified_path] = STATE(450), + [sym_boolean] = STATE(510), [sym_identifier] = ACTIONS(300), [anon_sym_LBRACE] = ACTIONS(11), [anon_sym_namespace] = ACTIONS(310), @@ -9099,15 +9288,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1495), 1, + STATE(1521), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9120,11 +9309,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9136,7 +9325,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9193,15 +9382,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(338), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1491), 1, + STATE(1386), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9214,11 +9403,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9230,7 +9419,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9287,16 +9476,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(340), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1425), 1, - sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, + STATE(1732), 1, + sym_argument_list, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -9308,11 +9497,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9324,7 +9513,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9381,15 +9570,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(342), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1362), 1, + STATE(1430), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9402,11 +9591,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9418,7 +9607,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9475,15 +9664,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(344), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1453), 1, + STATE(1387), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9496,11 +9685,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9512,7 +9701,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9569,15 +9758,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(346), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1405), 1, + STATE(1450), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9590,11 +9779,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9606,7 +9795,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9663,15 +9852,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(348), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1638), 1, + STATE(1388), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9684,11 +9873,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9700,7 +9889,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9757,15 +9946,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(350), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1505), 1, + STATE(1532), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9778,11 +9967,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9794,7 +9983,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9851,15 +10040,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(352), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(469), 1, + STATE(441), 1, sym_expression, - STATE(1242), 1, + STATE(1262), 1, sym_named_argument, - STATE(1509), 1, + STATE(1568), 1, sym_argument_list, - STATE(1659), 1, + STATE(1577), 1, sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, @@ -9872,11 +10061,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9888,7 +10077,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9902,9 +10091,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1134] = 29, - ACTIONS(252), 1, - sym_identifier, + [1134] = 32, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -9939,16 +10126,24 @@ static const uint16_t ts_small_parse_table[] = { sym_float, ACTIONS(298), 1, sym_line_comment, + ACTIONS(330), 1, + sym_identifier, ACTIONS(334), 1, anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, ACTIONS(354), 1, - anon_sym_RBRACK, - STATE(230), 1, + anon_sym_RPAREN, + STATE(235), 1, sym_qualified_path, - STATE(475), 1, + STATE(441), 1, sym_expression, + STATE(1262), 1, + sym_named_argument, + STATE(1522), 1, + sym_argument_list, + STATE(1577), 1, + sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -9960,11 +10155,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -9976,7 +10171,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -9990,9 +10185,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1251] = 29, - ACTIONS(252), 1, - sym_identifier, + [1260] = 32, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -10027,16 +10220,24 @@ static const uint16_t ts_small_parse_table[] = { sym_float, ACTIONS(298), 1, sym_line_comment, + ACTIONS(330), 1, + sym_identifier, ACTIONS(334), 1, anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, ACTIONS(356), 1, anon_sym_RPAREN, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(578), 1, + STATE(441), 1, sym_expression, + STATE(1262), 1, + sym_named_argument, + STATE(1536), 1, + sym_argument_list, + STATE(1577), 1, + sym_named_argument_list, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -10048,11 +10249,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10064,7 +10265,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10078,9 +10279,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1368] = 29, - ACTIONS(252), 1, - sym_identifier, + [1386] = 32, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -10115,16 +10314,24 @@ static const uint16_t ts_small_parse_table[] = { sym_float, ACTIONS(298), 1, sym_line_comment, + ACTIONS(330), 1, + sym_identifier, ACTIONS(334), 1, anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, ACTIONS(358), 1, - anon_sym_COLON, - STATE(230), 1, + anon_sym_RPAREN, + STATE(235), 1, sym_qualified_path, - STATE(538), 1, + STATE(441), 1, sym_expression, + STATE(1262), 1, + sym_named_argument, + STATE(1577), 1, + sym_named_argument_list, + STATE(1627), 1, + sym_argument_list, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -10136,11 +10343,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10152,7 +10359,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10166,7 +10373,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1485] = 29, + [1512] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -10208,10 +10415,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(336), 1, anon_sym_LBRACK, ACTIONS(360), 1, - anon_sym_COLON, - STATE(230), 1, + anon_sym_RPAREN, + STATE(235), 1, sym_qualified_path, - STATE(580), 1, + STATE(574), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -10224,11 +10431,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10240,7 +10447,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10254,7 +10461,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1602] = 29, + [1629] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -10296,10 +10503,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(336), 1, anon_sym_LBRACK, ACTIONS(362), 1, - anon_sym_RBRACK, - STATE(230), 1, + anon_sym_RPAREN, + STATE(235), 1, sym_qualified_path, - STATE(509), 1, + STATE(550), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -10312,11 +10519,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10328,7 +10535,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10342,7 +10549,9 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1719] = 29, + [1746] = 29, + ACTIONS(252), 1, + sym_identifier, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -10381,14 +10590,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(364), 1, - sym_identifier, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(541), 1, + STATE(544), 1, sym_expression, - STATE(1700), 1, - sym_field_pattern, + STATE(1343), 1, + sym_map_entry, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -10400,11 +10607,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10416,7 +10623,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10430,7 +10637,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1836] = 29, + [1863] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -10471,11 +10678,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(366), 1, - anon_sym_RPAREN, - STATE(230), 1, + ACTIONS(364), 1, + anon_sym_RBRACK, + STATE(235), 1, sym_qualified_path, - STATE(596), 1, + STATE(469), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -10488,11 +10695,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10504,7 +10711,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10518,7 +10725,9 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [1953] = 29, + [1980] = 29, + ACTIONS(252), 1, + sym_identifier, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -10557,14 +10766,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(364), 1, - sym_identifier, - STATE(230), 1, + ACTIONS(366), 1, + anon_sym_COLON, + STATE(235), 1, sym_qualified_path, - STATE(613), 1, + STATE(552), 1, sym_expression, - STATE(1700), 1, - sym_field_pattern, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -10576,11 +10783,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10592,7 +10799,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10606,7 +10813,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2070] = 29, + [2097] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -10648,10 +10855,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(336), 1, anon_sym_LBRACK, ACTIONS(368), 1, - anon_sym_COLON, - STATE(230), 1, + anon_sym_RBRACK, + STATE(235), 1, sym_qualified_path, - STATE(597), 1, + STATE(463), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -10664,11 +10871,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10680,7 +10887,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10694,7 +10901,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2187] = 29, + [2214] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -10736,10 +10943,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(336), 1, anon_sym_LBRACK, ACTIONS(370), 1, - anon_sym_RPAREN, - STATE(230), 1, + anon_sym_COLON, + STATE(235), 1, sym_qualified_path, - STATE(586), 1, + STATE(541), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -10752,11 +10959,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10768,7 +10975,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10782,7 +10989,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2304] = 29, + [2331] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -10823,12 +11030,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + ACTIONS(372), 1, + anon_sym_RPAREN, + STATE(235), 1, sym_qualified_path, - STATE(570), 1, + STATE(578), 1, sym_expression, - STATE(1313), 1, - sym_map_entry, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -10840,11 +11047,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10856,7 +11063,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10870,7 +11077,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2421] = 29, + [2448] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -10911,11 +11118,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(372), 1, - anon_sym_RBRACK, - STATE(230), 1, + ACTIONS(374), 1, + anon_sym_COLON, + STATE(235), 1, sym_qualified_path, - STATE(503), 1, + STATE(580), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -10928,11 +11135,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -10944,7 +11151,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -10958,7 +11165,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2538] = 29, + [2565] = 29, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -10997,13 +11204,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(364), 1, + ACTIONS(376), 1, sym_identifier, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(610), 1, + STATE(565), 1, sym_expression, - STATE(1700), 1, + STATE(1729), 1, sym_field_pattern, ACTIONS(292), 2, anon_sym_true, @@ -11016,11 +11223,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11032,7 +11239,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11046,7 +11253,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2655] = 28, + [2682] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -11087,9 +11294,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + ACTIONS(378), 1, + anon_sym_RBRACK, + STATE(235), 1, sym_qualified_path, - STATE(603), 1, + STATE(457), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -11102,11 +11311,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11118,7 +11327,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11132,9 +11341,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2769] = 28, - ACTIONS(252), 1, - sym_identifier, + [2799] = 29, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -11173,10 +11380,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + ACTIONS(376), 1, + sym_identifier, + STATE(235), 1, sym_qualified_path, - STATE(529), 1, + STATE(527), 1, sym_expression, + STATE(1729), 1, + sym_field_pattern, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -11188,11 +11399,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11204,7 +11415,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11218,9 +11429,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2883] = 28, - ACTIONS(252), 1, - sym_identifier, + [2916] = 29, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, @@ -11259,10 +11468,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + ACTIONS(376), 1, + sym_identifier, + STATE(235), 1, sym_qualified_path, - STATE(387), 1, + STATE(605), 1, sym_expression, + STATE(1729), 1, + sym_field_pattern, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -11274,11 +11487,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11290,7 +11503,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11304,7 +11517,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [2997] = 28, + [3033] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -11345,9 +11558,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(547), 1, + STATE(586), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -11360,11 +11573,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11376,7 +11589,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11390,239 +11603,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [3111] = 28, - ACTIONS(11), 1, - anon_sym_LBRACE, - ACTIONS(19), 1, - anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, - anon_sym_match, - ACTIONS(37), 1, - anon_sym_if, - ACTIONS(39), 1, - anon_sym_handle, - ACTIONS(41), 1, - anon_sym_kernel, - ACTIONS(43), 1, - anon_sym_select, - ACTIONS(45), 1, - anon_sym_await, - ACTIONS(47), 1, - anon_sym_spawn, - ACTIONS(49), 1, - anon_sym_yield, - ACTIONS(51), 1, - anon_sym_send, - ACTIONS(53), 1, - anon_sym_recv, - ACTIONS(55), 1, - anon_sym_perform, - ACTIONS(57), 1, - anon_sym_resume, - ACTIONS(67), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(300), 1, + [3147] = 28, + ACTIONS(252), 1, sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, - sym_qualified_path, - STATE(486), 1, - sym_expression, - ACTIONS(65), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(31), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(69), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(489), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(456), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(458), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [3225] = 28, - ACTIONS(11), 1, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, - sym_qualified_path, - STATE(553), 1, - sym_expression, - ACTIONS(65), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(31), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(69), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(489), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(456), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(458), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [3339] = 28, - ACTIONS(11), 1, - anon_sym_LBRACE, - ACTIONS(19), 1, - anon_sym_LPAREN, - ACTIONS(25), 1, + ACTIONS(334), 1, anon_sym_PIPE, - ACTIONS(33), 1, + ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(35), 1, - anon_sym_match, - ACTIONS(37), 1, - anon_sym_if, - ACTIONS(39), 1, - anon_sym_handle, - ACTIONS(41), 1, - anon_sym_kernel, - ACTIONS(43), 1, - anon_sym_select, - ACTIONS(45), 1, - anon_sym_await, - ACTIONS(47), 1, - anon_sym_spawn, - ACTIONS(49), 1, - anon_sym_yield, - ACTIONS(51), 1, - anon_sym_send, - ACTIONS(53), 1, - anon_sym_recv, - ACTIONS(55), 1, - anon_sym_perform, - ACTIONS(57), 1, - anon_sym_resume, - ACTIONS(67), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + STATE(235), 1, sym_qualified_path, - STATE(554), 1, + STATE(558), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11634,7 +11675,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11648,7 +11689,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [3453] = 28, + [3261] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -11689,9 +11730,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(487), 1, + STATE(456), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -11704,11 +11745,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11720,7 +11761,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11734,7 +11775,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [3567] = 28, + [3375] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -11775,9 +11816,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(490), 1, + STATE(533), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -11790,11 +11831,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11806,7 +11847,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11820,7 +11861,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [3681] = 28, + [3489] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -11861,9 +11902,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(555), 1, + STATE(540), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -11876,11 +11917,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11892,7 +11933,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11906,7 +11947,93 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [3795] = 28, + [3603] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, + anon_sym_match, + ACTIONS(37), 1, + anon_sym_if, + ACTIONS(39), 1, + anon_sym_handle, + ACTIONS(41), 1, + anon_sym_kernel, + ACTIONS(43), 1, + anon_sym_select, + ACTIONS(45), 1, + anon_sym_await, + ACTIONS(47), 1, + anon_sym_spawn, + ACTIONS(49), 1, + anon_sym_yield, + ACTIONS(51), 1, + anon_sym_send, + ACTIONS(53), 1, + anon_sym_recv, + ACTIONS(55), 1, + anon_sym_perform, + ACTIONS(57), 1, + anon_sym_resume, + ACTIONS(67), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(443), 1, + sym_expression, + STATE(450), 1, + sym_qualified_path, + ACTIONS(65), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(31), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(69), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(510), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(502), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(525), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [3717] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -11947,9 +12074,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(388), 1, + STATE(570), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -11962,11 +12089,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -11978,7 +12105,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -11992,7 +12119,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [3909] = 28, + [3831] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -12033,9 +12160,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(491), 1, + STATE(564), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -12048,11 +12175,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12064,7 +12191,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12078,7 +12205,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4023] = 28, + [3945] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -12119,9 +12246,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(519), 1, + STATE(394), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -12134,11 +12261,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12150,7 +12277,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12164,7 +12291,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4137] = 28, + [4059] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -12205,10 +12332,10 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, - sym_qualified_path, - STATE(492), 1, + STATE(449), 1, sym_expression, + STATE(450), 1, + sym_qualified_path, ACTIONS(65), 2, anon_sym_true, anon_sym_false, @@ -12220,11 +12347,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12236,7 +12363,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12250,7 +12377,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4251] = 28, + [4173] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -12291,9 +12418,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(521), 1, + STATE(453), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -12306,11 +12433,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12322,7 +12449,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12336,7 +12463,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4365] = 28, + [4287] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -12377,9 +12504,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(606), 1, + STATE(455), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -12392,11 +12519,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12408,7 +12535,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12422,7 +12549,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4479] = 28, + [4401] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -12463,9 +12590,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(525), 1, + STATE(498), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -12478,11 +12605,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12494,7 +12621,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12508,67 +12635,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4593] = 28, - ACTIONS(252), 1, - sym_identifier, - ACTIONS(254), 1, + [4515] = 28, + ACTIONS(11), 1, anon_sym_LBRACE, - ACTIONS(256), 1, - anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(19), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(37), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(39), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(41), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(43), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(45), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(47), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(49), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(51), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(53), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(55), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(57), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(67), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, - anon_sym_PIPE, - ACTIONS(336), 1, - anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(564), 1, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(448), 1, sym_expression, - ACTIONS(292), 2, + STATE(450), 1, + sym_qualified_path, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(31), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12580,7 +12707,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12594,67 +12721,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4707] = 28, - ACTIONS(11), 1, + [4629] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, sym_qualified_path, - STATE(496), 1, + STATE(480), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12666,7 +12793,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12680,67 +12807,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4821] = 28, - ACTIONS(11), 1, + [4743] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, sym_qualified_path, - STATE(568), 1, + STATE(551), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12752,7 +12879,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12766,7 +12893,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [4935] = 28, + [4857] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -12807,9 +12934,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(569), 1, + STATE(461), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -12822,11 +12949,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12838,7 +12965,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12852,7 +12979,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5049] = 28, + [4971] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -12893,9 +13020,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(499), 1, + STATE(610), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -12908,11 +13035,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -12924,7 +13051,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -12938,67 +13065,239 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5163] = 28, - ACTIONS(252), 1, - sym_identifier, - ACTIONS(254), 1, + [5085] = 28, + ACTIONS(11), 1, anon_sym_LBRACE, - ACTIONS(256), 1, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, + anon_sym_match, + ACTIONS(37), 1, + anon_sym_if, + ACTIONS(39), 1, + anon_sym_handle, + ACTIONS(41), 1, + anon_sym_kernel, + ACTIONS(43), 1, + anon_sym_select, + ACTIONS(45), 1, + anon_sym_await, + ACTIONS(47), 1, + anon_sym_spawn, + ACTIONS(49), 1, + anon_sym_yield, + ACTIONS(51), 1, + anon_sym_send, + ACTIONS(53), 1, + anon_sym_recv, + ACTIONS(55), 1, + anon_sym_perform, + ACTIONS(57), 1, + anon_sym_resume, + ACTIONS(67), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, anon_sym_fn, - ACTIONS(258), 1, + STATE(450), 1, + sym_qualified_path, + STATE(572), 1, + sym_expression, + ACTIONS(65), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(31), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(69), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(510), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(502), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(525), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [5199] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(19), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(37), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(39), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(41), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(43), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(45), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(47), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(49), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(51), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(53), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(55), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(57), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(67), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, + sym_qualified_path, + STATE(464), 1, + sym_expression, + ACTIONS(65), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(31), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(69), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(510), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(502), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(525), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [5313] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, anon_sym_PIPE, - ACTIONS(336), 1, + ACTIONS(33), 1, anon_sym_LBRACK, - STATE(230), 1, + ACTIONS(35), 1, + anon_sym_match, + ACTIONS(37), 1, + anon_sym_if, + ACTIONS(39), 1, + anon_sym_handle, + ACTIONS(41), 1, + anon_sym_kernel, + ACTIONS(43), 1, + anon_sym_select, + ACTIONS(45), 1, + anon_sym_await, + ACTIONS(47), 1, + anon_sym_spawn, + ACTIONS(49), 1, + anon_sym_yield, + ACTIONS(51), 1, + anon_sym_send, + ACTIONS(53), 1, + anon_sym_recv, + ACTIONS(55), 1, + anon_sym_perform, + ACTIONS(57), 1, + anon_sym_resume, + ACTIONS(67), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, sym_qualified_path, - STATE(627), 1, + STATE(596), 1, sym_expression, - ACTIONS(292), 2, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(31), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13010,7 +13309,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13024,7 +13323,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5277] = 28, + [5427] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13065,9 +13364,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(582), 1, + STATE(591), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13080,11 +13379,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13096,7 +13395,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13110,7 +13409,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5391] = 28, + [5541] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13151,9 +13450,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(583), 1, + STATE(592), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13166,11 +13465,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13182,7 +13481,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13196,7 +13495,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5505] = 28, + [5655] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13237,9 +13536,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(507), 1, + STATE(468), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13252,11 +13551,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13268,7 +13567,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13282,7 +13581,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5619] = 28, + [5769] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13323,9 +13622,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(588), 1, + STATE(597), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13338,11 +13637,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13354,7 +13653,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13368,7 +13667,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5733] = 28, + [5883] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13409,9 +13708,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(590), 1, + STATE(599), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13424,11 +13723,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13440,7 +13739,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13454,7 +13753,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5847] = 28, + [5997] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -13495,9 +13794,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(601), 1, + STATE(600), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -13510,11 +13809,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13526,7 +13825,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13540,7 +13839,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [5961] = 28, + [6111] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13581,9 +13880,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(440), 1, + STATE(470), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13596,11 +13895,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13612,7 +13911,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13626,7 +13925,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6075] = 28, + [6225] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13667,9 +13966,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(607), 1, + STATE(606), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13682,11 +13981,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13698,7 +13997,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13712,7 +14011,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6189] = 28, + [6339] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13753,9 +14052,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(608), 1, + STATE(607), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13768,11 +14067,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13784,7 +14083,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13798,7 +14097,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6303] = 28, + [6453] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13839,9 +14138,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(611), 1, + STATE(609), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13854,11 +14153,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13870,7 +14169,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13884,7 +14183,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6417] = 28, + [6567] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -13925,9 +14224,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(539), 1, + STATE(602), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -13940,11 +14239,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -13956,7 +14255,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -13970,7 +14269,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6531] = 28, + [6681] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14011,7 +14310,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, STATE(571), 1, sym_expression, @@ -14026,11 +14325,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14042,7 +14341,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14056,7 +14355,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6645] = 29, + [6795] = 29, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -14097,11 +14396,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(514), 1, + STATE(536), 1, sym_call_expression, - STATE(621), 1, + STATE(612), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -14114,11 +14413,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 10, + STATE(280), 10, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14129,7 +14428,7 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_pipe_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14143,7 +14442,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6761] = 28, + [6911] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14184,9 +14483,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(542), 1, + STATE(535), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14199,11 +14498,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14215,7 +14514,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14229,7 +14528,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6875] = 28, + [7025] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14270,9 +14569,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(593), 1, + STATE(545), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14285,11 +14584,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14301,7 +14600,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14315,7 +14614,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [6989] = 28, + [7139] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14356,9 +14655,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(604), 1, + STATE(590), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14371,11 +14670,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14387,7 +14686,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14401,7 +14700,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7103] = 28, + [7253] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14442,9 +14741,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(605), 1, + STATE(593), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14457,11 +14756,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14473,7 +14772,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14487,7 +14786,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7217] = 28, + [7367] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14528,9 +14827,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(552), 1, + STATE(532), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14543,11 +14842,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14559,7 +14858,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14573,7 +14872,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7331] = 28, + [7481] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14614,9 +14913,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(563), 1, + STATE(534), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14629,11 +14928,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14645,7 +14944,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14659,7 +14958,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7445] = 28, + [7595] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14700,9 +14999,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(572), 1, + STATE(538), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14715,11 +15014,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14731,7 +15030,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14745,7 +15044,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7559] = 28, + [7709] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14786,9 +15085,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(574), 1, + STATE(539), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14801,11 +15100,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14817,7 +15116,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14831,7 +15130,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7673] = 28, + [7823] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14872,9 +15171,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(599), 1, + STATE(543), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14887,11 +15186,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14903,7 +15202,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -14917,7 +15216,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7787] = 28, + [7937] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -14958,9 +15257,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(540), 1, + STATE(546), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -14973,11 +15272,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -14989,7 +15288,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15003,7 +15302,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [7901] = 28, + [8051] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15044,9 +15343,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(543), 1, + STATE(559), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15059,11 +15358,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15075,7 +15374,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15089,7 +15388,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8015] = 28, + [8165] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15130,9 +15429,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(544), 1, + STATE(563), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15145,11 +15444,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15161,7 +15460,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15175,7 +15474,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8129] = 28, + [8279] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15216,9 +15515,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(548), 1, + STATE(579), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15231,11 +15530,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15247,7 +15546,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15261,7 +15560,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8243] = 28, + [8393] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15302,9 +15601,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(549), 1, + STATE(582), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15317,11 +15616,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15333,7 +15632,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15347,7 +15646,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8357] = 28, + [8507] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15388,9 +15687,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(550), 1, + STATE(587), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15403,11 +15702,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15419,7 +15718,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15433,7 +15732,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8471] = 28, + [8621] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15474,9 +15773,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(551), 1, + STATE(589), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15489,11 +15788,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15505,7 +15804,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15519,7 +15818,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8585] = 28, + [8735] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15560,9 +15859,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(556), 1, + STATE(594), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15575,11 +15874,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15591,7 +15890,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15605,7 +15904,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8699] = 28, + [8849] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15646,9 +15945,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(557), 1, + STATE(595), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15661,11 +15960,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15677,7 +15976,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15691,7 +15990,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8813] = 28, + [8963] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15732,9 +16031,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(559), 1, + STATE(608), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15747,11 +16046,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15763,7 +16062,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15777,7 +16076,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [8927] = 28, + [9077] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15818,9 +16117,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(562), 1, + STATE(528), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15833,11 +16132,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15849,7 +16148,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15863,7 +16162,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9041] = 28, + [9191] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -15904,9 +16203,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(566), 1, + STATE(531), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -15919,11 +16218,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -15935,7 +16234,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -15949,67 +16248,239 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9155] = 28, - ACTIONS(11), 1, + [9305] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, + ACTIONS(266), 1, + anon_sym_match, + ACTIONS(268), 1, + anon_sym_if, + ACTIONS(270), 1, + anon_sym_handle, + ACTIONS(272), 1, + anon_sym_kernel, + ACTIONS(274), 1, + anon_sym_select, + ACTIONS(278), 1, + anon_sym_await, + ACTIONS(280), 1, + anon_sym_spawn, + ACTIONS(282), 1, + anon_sym_yield, + ACTIONS(284), 1, + anon_sym_send, + ACTIONS(286), 1, + anon_sym_recv, + ACTIONS(288), 1, + anon_sym_perform, + ACTIONS(290), 1, + anon_sym_resume, + ACTIONS(294), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(334), 1, anon_sym_PIPE, - ACTIONS(33), 1, + ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(35), 1, + STATE(235), 1, + sym_qualified_path, + STATE(240), 1, + sym_expression, + ACTIONS(292), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(276), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(296), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(273), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(280), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(293), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [9419] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, + anon_sym_LBRACE, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, + anon_sym_LPAREN, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, + sym_qualified_path, + STATE(241), 1, + sym_expression, + ACTIONS(292), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(276), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(296), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(273), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(280), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(293), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [9533] = 28, + ACTIONS(252), 1, sym_identifier, - ACTIONS(302), 1, + ACTIONS(254), 1, + anon_sym_LBRACE, + ACTIONS(256), 1, anon_sym_fn, - STATE(433), 1, + ACTIONS(258), 1, + anon_sym_LPAREN, + ACTIONS(266), 1, + anon_sym_match, + ACTIONS(268), 1, + anon_sym_if, + ACTIONS(270), 1, + anon_sym_handle, + ACTIONS(272), 1, + anon_sym_kernel, + ACTIONS(274), 1, + anon_sym_select, + ACTIONS(278), 1, + anon_sym_await, + ACTIONS(280), 1, + anon_sym_spawn, + ACTIONS(282), 1, + anon_sym_yield, + ACTIONS(284), 1, + anon_sym_send, + ACTIONS(286), 1, + anon_sym_recv, + ACTIONS(288), 1, + anon_sym_perform, + ACTIONS(290), 1, + anon_sym_resume, + ACTIONS(294), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, sym_qualified_path, - STATE(439), 1, + STATE(242), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16021,7 +16492,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16035,7 +16506,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9269] = 28, + [9647] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -16076,9 +16547,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(252), 1, + STATE(243), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -16091,11 +16562,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16107,7 +16578,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16121,7 +16592,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9383] = 28, + [9761] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -16162,9 +16633,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(253), 1, + STATE(244), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -16177,11 +16648,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16193,7 +16664,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16207,7 +16678,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9497] = 28, + [9875] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -16248,9 +16719,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(254), 1, + STATE(245), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -16263,11 +16734,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16279,7 +16750,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16293,67 +16764,153 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9611] = 28, - ACTIONS(252), 1, + [9989] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, + anon_sym_match, + ACTIONS(37), 1, + anon_sym_if, + ACTIONS(39), 1, + anon_sym_handle, + ACTIONS(41), 1, + anon_sym_kernel, + ACTIONS(43), 1, + anon_sym_select, + ACTIONS(45), 1, + anon_sym_await, + ACTIONS(47), 1, + anon_sym_spawn, + ACTIONS(49), 1, + anon_sym_yield, + ACTIONS(51), 1, + anon_sym_send, + ACTIONS(53), 1, + anon_sym_recv, + ACTIONS(55), 1, + anon_sym_perform, + ACTIONS(57), 1, + anon_sym_resume, + ACTIONS(67), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(300), 1, sym_identifier, - ACTIONS(254), 1, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, + sym_qualified_path, + STATE(471), 1, + sym_expression, + ACTIONS(65), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(31), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(69), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(510), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(502), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(525), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [10103] = 28, + ACTIONS(81), 1, + sym_identifier, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(256), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(336), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(255), 1, + STATE(320), 1, sym_expression, - ACTIONS(292), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16365,7 +16922,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16379,7 +16936,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9725] = 28, + [10217] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -16420,9 +16977,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(232), 1, + STATE(246), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -16435,11 +16992,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16451,7 +17008,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16465,7 +17022,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9839] = 28, + [10331] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -16506,9 +17063,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(257), 1, + STATE(247), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -16521,11 +17078,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16537,7 +17094,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16551,67 +17108,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [9953] = 28, - ACTIONS(11), 1, + [10445] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, sym_qualified_path, - STATE(443), 1, + STATE(248), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16623,7 +17180,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16637,67 +17194,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10067] = 28, - ACTIONS(194), 1, + [10559] = 28, + ACTIONS(252), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(256), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(334), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(336), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(235), 1, sym_qualified_path, - STATE(339), 1, + STATE(249), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16709,7 +17266,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16723,7 +17280,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10181] = 28, + [10673] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -16764,9 +17321,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(261), 1, + STATE(250), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -16779,11 +17336,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16795,7 +17352,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16809,7 +17366,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10295] = 28, + [10787] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -16850,9 +17407,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(264), 1, + STATE(251), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -16865,11 +17422,97 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(280), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(293), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [10901] = 28, + ACTIONS(81), 1, + sym_identifier, + ACTIONS(85), 1, + anon_sym_LBRACE, + ACTIONS(89), 1, + anon_sym_fn, + ACTIONS(91), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_match, + ACTIONS(101), 1, + anon_sym_if, + ACTIONS(103), 1, + anon_sym_handle, + ACTIONS(105), 1, + anon_sym_kernel, + ACTIONS(107), 1, + anon_sym_select, + ACTIONS(111), 1, + anon_sym_await, + ACTIONS(113), 1, + anon_sym_spawn, + ACTIONS(115), 1, + anon_sym_yield, + ACTIONS(117), 1, + anon_sym_send, + ACTIONS(119), 1, + anon_sym_recv, + ACTIONS(121), 1, + anon_sym_perform, + ACTIONS(123), 1, + anon_sym_resume, + ACTIONS(127), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(380), 1, + anon_sym_PIPE, + ACTIONS(382), 1, + anon_sym_LBRACK, + STATE(302), 1, + sym_expression, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(109), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(129), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16881,7 +17524,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16895,67 +17538,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10409] = 28, - ACTIONS(252), 1, + [11015] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(254), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(256), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(336), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(271), 1, + STATE(308), 1, sym_expression, - ACTIONS(292), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -16967,7 +17610,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -16981,7 +17624,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10523] = 28, + [11129] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -17022,9 +17665,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(275), 1, + STATE(252), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -17037,11 +17680,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17053,7 +17696,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17067,67 +17710,153 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10637] = 28, - ACTIONS(252), 1, + [11243] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(254), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(256), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(336), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(330), 1, sym_qualified_path, - STATE(277), 1, + STATE(331), 1, sym_expression, - ACTIONS(292), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(129), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(393), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(377), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(382), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [11357] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, + anon_sym_match, + ACTIONS(37), 1, + anon_sym_if, + ACTIONS(39), 1, + anon_sym_handle, + ACTIONS(41), 1, + anon_sym_kernel, + ACTIONS(43), 1, + anon_sym_select, + ACTIONS(45), 1, + anon_sym_await, + ACTIONS(47), 1, + anon_sym_spawn, + ACTIONS(49), 1, + anon_sym_yield, + ACTIONS(51), 1, + anon_sym_send, + ACTIONS(53), 1, + anon_sym_recv, + ACTIONS(55), 1, + anon_sym_perform, + ACTIONS(57), 1, + anon_sym_resume, + ACTIONS(67), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, + sym_qualified_path, + STATE(472), 1, + sym_expression, + ACTIONS(65), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(31), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17139,7 +17868,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17153,7 +17882,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10751] = 28, + [11471] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -17194,9 +17923,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(280), 1, + STATE(253), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -17209,11 +17938,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17225,7 +17954,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17239,67 +17968,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10865] = 28, - ACTIONS(194), 1, + [11585] = 28, + ACTIONS(252), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(256), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(334), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(336), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(374), 1, + STATE(233), 1, sym_expression, - ACTIONS(238), 2, + STATE(235), 1, + sym_qualified_path, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17311,7 +18040,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17325,67 +18054,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [10979] = 28, - ACTIONS(194), 1, + [11699] = 28, + ACTIONS(252), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(256), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(334), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(336), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(235), 1, sym_qualified_path, - STATE(375), 1, + STATE(254), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17397,7 +18126,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17411,67 +18140,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [11093] = 28, - ACTIONS(252), 1, + [11813] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(254), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(256), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(336), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(281), 1, + STATE(298), 1, sym_expression, - ACTIONS(292), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17483,7 +18212,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17497,67 +18226,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [11207] = 28, - ACTIONS(194), 1, + [11927] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(377), 1, + STATE(301), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17569,7 +18298,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17583,7 +18312,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [11321] = 28, + [12041] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -17624,9 +18353,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(282), 1, + STATE(255), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -17639,11 +18368,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17655,7 +18384,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17669,7 +18398,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [11435] = 28, + [12155] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -17710,9 +18439,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(283), 1, + STATE(611), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -17725,11 +18454,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17741,7 +18470,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17755,67 +18484,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [11549] = 28, - ACTIONS(252), 1, + [12269] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(254), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(256), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(336), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(330), 1, sym_qualified_path, - STATE(286), 1, + STATE(354), 1, sym_expression, - ACTIONS(292), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17827,7 +18556,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17841,67 +18570,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [11663] = 28, - ACTIONS(194), 1, + [12383] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(382), 1, + STATE(337), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -17913,7 +18642,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -17927,93 +18656,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [11777] = 28, - ACTIONS(194), 1, - sym_identifier, - ACTIONS(198), 1, - anon_sym_LBRACE, - ACTIONS(202), 1, - anon_sym_fn, - ACTIONS(204), 1, - anon_sym_LPAREN, - ACTIONS(212), 1, - anon_sym_match, - ACTIONS(214), 1, - anon_sym_if, - ACTIONS(216), 1, - anon_sym_handle, - ACTIONS(218), 1, - anon_sym_kernel, - ACTIONS(220), 1, - anon_sym_select, - ACTIONS(224), 1, - anon_sym_await, - ACTIONS(226), 1, - anon_sym_spawn, - ACTIONS(228), 1, - anon_sym_yield, - ACTIONS(230), 1, - anon_sym_send, - ACTIONS(232), 1, - anon_sym_recv, - ACTIONS(234), 1, - anon_sym_perform, - ACTIONS(236), 1, - anon_sym_resume, - ACTIONS(240), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(374), 1, - anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(383), 1, - sym_expression, - ACTIONS(238), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(222), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(242), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(379), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(380), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(381), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [11891] = 28, + [12497] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -18054,9 +18697,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(288), 1, + STATE(256), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -18069,11 +18712,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18085,7 +18728,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18099,67 +18742,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [12005] = 28, - ACTIONS(194), 1, + [12611] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(356), 1, + STATE(299), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18171,7 +18814,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18185,67 +18828,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [12119] = 28, - ACTIONS(194), 1, + [12725] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(359), 1, + STATE(300), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18257,7 +18900,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18271,7 +18914,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [12233] = 28, + [12839] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -18312,10 +18955,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(241), 1, + STATE(234), 1, sym_expression, + STATE(235), 1, + sym_qualified_path, ACTIONS(292), 2, anon_sym_true, anon_sym_false, @@ -18327,11 +18970,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18343,7 +18986,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18357,153 +19000,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [12347] = 28, - ACTIONS(194), 1, + [12953] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(369), 1, + STATE(303), 1, sym_expression, - ACTIONS(238), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(222), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(242), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(379), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(380), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(381), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [12461] = 28, - ACTIONS(194), 1, - sym_identifier, - ACTIONS(198), 1, - anon_sym_LBRACE, - ACTIONS(202), 1, - anon_sym_fn, - ACTIONS(204), 1, - anon_sym_LPAREN, - ACTIONS(212), 1, - anon_sym_match, - ACTIONS(214), 1, - anon_sym_if, - ACTIONS(216), 1, - anon_sym_handle, - ACTIONS(218), 1, - anon_sym_kernel, - ACTIONS(220), 1, - anon_sym_select, - ACTIONS(224), 1, - anon_sym_await, - ACTIONS(226), 1, - anon_sym_spawn, - ACTIONS(228), 1, - anon_sym_yield, - ACTIONS(230), 1, - anon_sym_send, - ACTIONS(232), 1, - anon_sym_recv, - ACTIONS(234), 1, - anon_sym_perform, - ACTIONS(236), 1, - anon_sym_resume, - ACTIONS(240), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(374), 1, - anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(364), 1, - sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18515,7 +19072,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18529,153 +19086,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [12575] = 28, - ACTIONS(252), 1, + [13067] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(254), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(256), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(336), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(234), 1, + STATE(304), 1, sym_expression, - ACTIONS(292), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(276), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(296), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(250), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(240), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(249), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [12689] = 28, - ACTIONS(194), 1, - sym_identifier, - ACTIONS(198), 1, - anon_sym_LBRACE, - ACTIONS(202), 1, - anon_sym_fn, - ACTIONS(204), 1, - anon_sym_LPAREN, - ACTIONS(212), 1, - anon_sym_match, - ACTIONS(214), 1, - anon_sym_if, - ACTIONS(216), 1, - anon_sym_handle, - ACTIONS(218), 1, - anon_sym_kernel, - ACTIONS(220), 1, - anon_sym_select, - ACTIONS(224), 1, - anon_sym_await, - ACTIONS(226), 1, - anon_sym_spawn, - ACTIONS(228), 1, - anon_sym_yield, - ACTIONS(230), 1, - anon_sym_send, - ACTIONS(232), 1, - anon_sym_recv, - ACTIONS(234), 1, - anon_sym_perform, - ACTIONS(236), 1, - anon_sym_resume, - ACTIONS(240), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(374), 1, - anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(299), 1, - sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18687,7 +19158,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18701,67 +19172,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [12803] = 28, - ACTIONS(194), 1, + [13181] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(301), 1, + STATE(305), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18773,7 +19244,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18787,67 +19258,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [12917] = 28, - ACTIONS(194), 1, + [13295] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(361), 1, + STATE(306), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18859,7 +19330,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18873,67 +19344,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13031] = 28, - ACTIONS(194), 1, + [13409] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(376), 1, + STATE(307), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -18945,7 +19416,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -18959,67 +19430,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13145] = 28, - ACTIONS(194), 1, + [13523] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(384), 1, + STATE(309), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19031,7 +19502,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19045,67 +19516,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13259] = 28, - ACTIONS(194), 1, + [13637] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(300), 1, + STATE(310), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19117,7 +19588,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19131,67 +19602,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13373] = 28, - ACTIONS(194), 1, + [13751] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(306), 1, + STATE(311), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19203,7 +19674,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19217,67 +19688,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13487] = 28, - ACTIONS(194), 1, + [13865] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(319), 1, + STATE(312), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19289,7 +19760,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19303,7 +19774,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13601] = 28, + [13979] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -19344,9 +19815,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(558), 1, + STATE(567), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -19359,11 +19830,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19375,7 +19846,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19389,67 +19860,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13715] = 28, - ACTIONS(194), 1, + [14093] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(333), 1, + STATE(314), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19461,7 +19932,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19475,67 +19946,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13829] = 28, - ACTIONS(194), 1, + [14207] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(334), 1, + STATE(315), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19547,7 +20018,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19561,67 +20032,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [13943] = 28, - ACTIONS(194), 1, + [14321] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(349), 1, + STATE(316), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19633,7 +20104,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19647,67 +20118,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14057] = 28, - ACTIONS(194), 1, + [14435] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(357), 1, + STATE(317), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19719,7 +20190,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19733,67 +20204,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14171] = 28, - ACTIONS(194), 1, + [14549] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(358), 1, + STATE(318), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19805,7 +20276,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19819,67 +20290,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14285] = 28, - ACTIONS(194), 1, + [14663] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(360), 1, + STATE(319), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19891,7 +20362,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19905,67 +20376,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14399] = 28, - ACTIONS(194), 1, + [14777] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(362), 1, + STATE(297), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -19977,7 +20448,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -19991,67 +20462,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14513] = 28, - ACTIONS(194), 1, + [14891] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(363), 1, + STATE(321), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20063,7 +20534,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20077,67 +20548,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14627] = 28, - ACTIONS(194), 1, + [15005] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(365), 1, + STATE(322), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20149,7 +20620,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20163,67 +20634,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14741] = 28, - ACTIONS(194), 1, + [15119] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(366), 1, + STATE(323), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20235,7 +20706,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20249,67 +20720,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14855] = 28, - ACTIONS(194), 1, + [15233] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(367), 1, + STATE(324), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20321,7 +20792,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20335,67 +20806,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [14969] = 28, - ACTIONS(194), 1, + [15347] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(368), 1, + STATE(325), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20407,7 +20878,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20421,67 +20892,153 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [15083] = 28, - ACTIONS(194), 1, + [15461] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(326), 1, + sym_expression, + STATE(330), 1, sym_qualified_path, - STATE(370), 1, + ACTIONS(125), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(109), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(129), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(393), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(377), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(382), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [15575] = 28, + ACTIONS(81), 1, + sym_identifier, + ACTIONS(85), 1, + anon_sym_LBRACE, + ACTIONS(89), 1, + anon_sym_fn, + ACTIONS(91), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_match, + ACTIONS(101), 1, + anon_sym_if, + ACTIONS(103), 1, + anon_sym_handle, + ACTIONS(105), 1, + anon_sym_kernel, + ACTIONS(107), 1, + anon_sym_select, + ACTIONS(111), 1, + anon_sym_await, + ACTIONS(113), 1, + anon_sym_spawn, + ACTIONS(115), 1, + anon_sym_yield, + ACTIONS(117), 1, + anon_sym_send, + ACTIONS(119), 1, + anon_sym_recv, + ACTIONS(121), 1, + anon_sym_perform, + ACTIONS(123), 1, + anon_sym_resume, + ACTIONS(127), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(380), 1, + anon_sym_PIPE, + ACTIONS(382), 1, + anon_sym_LBRACK, + STATE(327), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20493,7 +21050,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20507,67 +21064,153 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [15197] = 28, - ACTIONS(194), 1, + [15689] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(328), 1, + sym_expression, + STATE(330), 1, sym_qualified_path, - STATE(371), 1, + ACTIONS(125), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(109), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(129), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(393), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(377), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(382), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [15803] = 28, + ACTIONS(81), 1, + sym_identifier, + ACTIONS(85), 1, + anon_sym_LBRACE, + ACTIONS(89), 1, + anon_sym_fn, + ACTIONS(91), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_match, + ACTIONS(101), 1, + anon_sym_if, + ACTIONS(103), 1, + anon_sym_handle, + ACTIONS(105), 1, + anon_sym_kernel, + ACTIONS(107), 1, + anon_sym_select, + ACTIONS(111), 1, + anon_sym_await, + ACTIONS(113), 1, + anon_sym_spawn, + ACTIONS(115), 1, + anon_sym_yield, + ACTIONS(117), 1, + anon_sym_send, + ACTIONS(119), 1, + anon_sym_recv, + ACTIONS(121), 1, + anon_sym_perform, + ACTIONS(123), 1, + anon_sym_resume, + ACTIONS(127), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(380), 1, + anon_sym_PIPE, + ACTIONS(382), 1, + anon_sym_LBRACK, + STATE(329), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20579,7 +21222,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20593,153 +21236,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [15311] = 28, - ACTIONS(194), 1, - sym_identifier, - ACTIONS(198), 1, + [15917] = 28, + ACTIONS(11), 1, anon_sym_LBRACE, - ACTIONS(202), 1, - anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(19), 1, anon_sym_LPAREN, - ACTIONS(212), 1, - anon_sym_match, - ACTIONS(214), 1, - anon_sym_if, - ACTIONS(216), 1, - anon_sym_handle, - ACTIONS(218), 1, - anon_sym_kernel, - ACTIONS(220), 1, - anon_sym_select, - ACTIONS(224), 1, - anon_sym_await, - ACTIONS(226), 1, - anon_sym_spawn, - ACTIONS(228), 1, - anon_sym_yield, - ACTIONS(230), 1, - anon_sym_send, - ACTIONS(232), 1, - anon_sym_recv, - ACTIONS(234), 1, - anon_sym_perform, - ACTIONS(236), 1, - anon_sym_resume, - ACTIONS(240), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(374), 1, + ACTIONS(25), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(33), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(372), 1, - sym_expression, - ACTIONS(238), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(222), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(242), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(379), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(380), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(381), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [15425] = 28, - ACTIONS(194), 1, - sym_identifier, - ACTIONS(198), 1, - anon_sym_LBRACE, - ACTIONS(202), 1, - anon_sym_fn, - ACTIONS(204), 1, - anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(35), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(37), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(39), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(41), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(43), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(45), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(47), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(49), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(51), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(53), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(55), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(57), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(67), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, - anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(373), 1, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(442), 1, sym_expression, - ACTIONS(238), 2, + STATE(450), 1, + sym_qualified_path, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(31), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20751,7 +21308,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20765,153 +21322,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [15539] = 28, - ACTIONS(194), 1, + [16031] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, - anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(378), 1, - sym_expression, - ACTIONS(238), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(222), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(242), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(379), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(380), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(381), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [15653] = 28, - ACTIONS(11), 1, - anon_sym_LBRACE, - ACTIONS(19), 1, - anon_sym_LPAREN, - ACTIONS(25), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(33), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - ACTIONS(35), 1, - anon_sym_match, - ACTIONS(37), 1, - anon_sym_if, - ACTIONS(39), 1, - anon_sym_handle, - ACTIONS(41), 1, - anon_sym_kernel, - ACTIONS(43), 1, - anon_sym_select, - ACTIONS(45), 1, - anon_sym_await, - ACTIONS(47), 1, - anon_sym_spawn, - ACTIONS(49), 1, - anon_sym_yield, - ACTIONS(51), 1, - anon_sym_send, - ACTIONS(53), 1, - anon_sym_recv, - ACTIONS(55), 1, - anon_sym_perform, - ACTIONS(57), 1, - anon_sym_resume, - ACTIONS(67), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + STATE(330), 1, sym_qualified_path, - STATE(471), 1, + STATE(335), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -20923,7 +21394,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -20937,67 +21408,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [15767] = 28, - ACTIONS(194), 1, + [16145] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(309), 1, + STATE(336), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21009,7 +21480,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21023,67 +21494,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [15881] = 28, - ACTIONS(194), 1, + [16259] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(310), 1, + STATE(356), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21095,7 +21566,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21109,67 +21580,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [15995] = 28, - ACTIONS(194), 1, + [16373] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(311), 1, + STATE(338), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21181,7 +21652,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21195,67 +21666,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16109] = 28, - ACTIONS(194), 1, + [16487] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(312), 1, + STATE(339), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21267,7 +21738,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21281,67 +21752,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16223] = 28, - ACTIONS(194), 1, + [16601] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(313), 1, + STATE(340), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21353,7 +21824,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21367,67 +21838,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16337] = 28, - ACTIONS(194), 1, + [16715] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(314), 1, + STATE(341), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21439,7 +21910,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21453,67 +21924,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16451] = 28, - ACTIONS(194), 1, + [16829] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(316), 1, + STATE(342), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21525,7 +21996,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21539,67 +22010,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16565] = 28, - ACTIONS(194), 1, + [16943] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(320), 1, + STATE(343), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21611,7 +22082,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21625,67 +22096,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16679] = 28, - ACTIONS(194), 1, + [17057] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(327), 1, + STATE(344), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21697,7 +22168,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21711,67 +22182,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16793] = 28, - ACTIONS(194), 1, + [17171] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(331), 1, + STATE(345), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21783,7 +22254,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21797,67 +22268,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [16907] = 28, - ACTIONS(194), 1, + [17285] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(335), 1, + STATE(346), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21869,7 +22340,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21883,67 +22354,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17021] = 28, - ACTIONS(194), 1, + [17399] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(338), 1, + STATE(347), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -21955,7 +22426,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -21969,67 +22440,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17135] = 28, - ACTIONS(194), 1, + [17513] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(340), 1, + STATE(348), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22041,7 +22512,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22055,67 +22526,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17249] = 28, - ACTIONS(194), 1, + [17627] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(341), 1, + STATE(349), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22127,7 +22598,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22141,67 +22612,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17363] = 28, - ACTIONS(194), 1, + [17741] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(294), 1, + STATE(350), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22213,7 +22684,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22227,67 +22698,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17477] = 28, - ACTIONS(194), 1, + [17855] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(344), 1, + STATE(351), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22299,7 +22770,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22313,67 +22784,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17591] = 28, - ACTIONS(194), 1, + [17969] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(346), 1, + STATE(352), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22385,7 +22856,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22399,67 +22870,153 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17705] = 28, - ACTIONS(194), 1, + [18083] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(350), 1, + STATE(353), 1, + sym_expression, + ACTIONS(125), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(109), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(129), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(393), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(377), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(382), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [18197] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, + anon_sym_match, + ACTIONS(37), 1, + anon_sym_if, + ACTIONS(39), 1, + anon_sym_handle, + ACTIONS(41), 1, + anon_sym_kernel, + ACTIONS(43), 1, + anon_sym_select, + ACTIONS(45), 1, + anon_sym_await, + ACTIONS(47), 1, + anon_sym_spawn, + ACTIONS(49), 1, + anon_sym_yield, + ACTIONS(51), 1, + anon_sym_send, + ACTIONS(53), 1, + anon_sym_recv, + ACTIONS(55), 1, + anon_sym_perform, + ACTIONS(57), 1, + anon_sym_resume, + ACTIONS(67), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, + sym_qualified_path, + STATE(458), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(31), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22471,7 +23028,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22485,67 +23042,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17819] = 28, - ACTIONS(194), 1, + [18311] = 28, + ACTIONS(252), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(256), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(334), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(336), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(235), 1, sym_qualified_path, - STATE(352), 1, + STATE(236), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22557,7 +23114,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22571,7 +23128,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [17933] = 28, + [18425] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -22612,9 +23169,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(444), 1, + STATE(459), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -22627,11 +23184,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22643,7 +23200,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22657,15 +23214,13 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [18047] = 28, + [18539] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, anon_sym_LBRACE, ACTIONS(256), 1, anon_sym_fn, - ACTIONS(258), 1, - anon_sym_LPAREN, ACTIONS(266), 1, anon_sym_match, ACTIONS(268), 1, @@ -22698,9 +23253,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, + ACTIONS(384), 1, + anon_sym_LPAREN, STATE(235), 1, + sym_qualified_path, + STATE(236), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -22713,11 +23270,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22729,7 +23286,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22743,67 +23300,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [18161] = 28, - ACTIONS(11), 1, + [18653] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, sym_qualified_path, - STATE(445), 1, + STATE(237), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22815,7 +23372,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22829,67 +23386,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [18275] = 28, - ACTIONS(252), 1, - sym_identifier, - ACTIONS(254), 1, + [18767] = 28, + ACTIONS(11), 1, anon_sym_LBRACE, - ACTIONS(256), 1, - anon_sym_fn, - ACTIONS(266), 1, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(37), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(39), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(41), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(43), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(45), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(47), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(49), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(51), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(53), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(55), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(57), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(67), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, - anon_sym_PIPE, - ACTIONS(336), 1, - anon_sym_LBRACK, - ACTIONS(378), 1, - anon_sym_LPAREN, - STATE(230), 1, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, sym_qualified_path, - STATE(235), 1, + STATE(465), 1, sym_expression, - ACTIONS(292), 2, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(31), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -22901,7 +23458,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -22915,93 +23472,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [18389] = 28, - ACTIONS(252), 1, - sym_identifier, - ACTIONS(254), 1, - anon_sym_LBRACE, - ACTIONS(256), 1, - anon_sym_fn, - ACTIONS(258), 1, - anon_sym_LPAREN, - ACTIONS(266), 1, - anon_sym_match, - ACTIONS(268), 1, - anon_sym_if, - ACTIONS(270), 1, - anon_sym_handle, - ACTIONS(272), 1, - anon_sym_kernel, - ACTIONS(274), 1, - anon_sym_select, - ACTIONS(278), 1, - anon_sym_await, - ACTIONS(280), 1, - anon_sym_spawn, - ACTIONS(282), 1, - anon_sym_yield, - ACTIONS(284), 1, - anon_sym_send, - ACTIONS(286), 1, - anon_sym_recv, - ACTIONS(288), 1, - anon_sym_perform, - ACTIONS(290), 1, - anon_sym_resume, - ACTIONS(294), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(334), 1, - anon_sym_PIPE, - ACTIONS(336), 1, - anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(237), 1, - sym_expression, - ACTIONS(292), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(276), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(296), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(250), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(240), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(249), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [18503] = 28, + [18881] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -23042,95 +23513,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, - sym_qualified_path, - STATE(446), 1, - sym_expression, - ACTIONS(65), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(31), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(69), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(489), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(456), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(458), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [18617] = 28, - ACTIONS(11), 1, - anon_sym_LBRACE, - ACTIONS(19), 1, - anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, - anon_sym_match, - ACTIONS(37), 1, - anon_sym_if, - ACTIONS(39), 1, - anon_sym_handle, - ACTIONS(41), 1, - anon_sym_kernel, - ACTIONS(43), 1, - anon_sym_select, - ACTIONS(45), 1, - anon_sym_await, - ACTIONS(47), 1, - anon_sym_spawn, - ACTIONS(49), 1, - anon_sym_yield, - ACTIONS(51), 1, - anon_sym_send, - ACTIONS(53), 1, - anon_sym_recv, - ACTIONS(55), 1, - anon_sym_perform, - ACTIONS(57), 1, - anon_sym_resume, - ACTIONS(67), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(447), 1, + STATE(466), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -23143,11 +23528,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23159,7 +23544,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23173,7 +23558,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [18731] = 28, + [18995] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -23214,9 +23599,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(545), 1, + STATE(529), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -23229,11 +23614,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23245,7 +23630,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23259,7 +23644,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [18845] = 28, + [19109] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -23300,9 +23685,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(624), 1, + STATE(620), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -23315,11 +23700,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23331,7 +23716,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23345,7 +23730,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [18959] = 28, + [19223] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -23386,9 +23771,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(516), 1, + STATE(477), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -23401,11 +23786,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23417,7 +23802,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23431,7 +23816,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19073] = 28, + [19337] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -23472,9 +23857,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(517), 1, + STATE(496), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -23487,11 +23872,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23503,7 +23888,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23517,7 +23902,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19187] = 28, + [19451] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -23558,9 +23943,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(620), 1, + STATE(615), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -23573,11 +23958,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23589,7 +23974,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23603,67 +23988,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19301] = 28, - ACTIONS(194), 1, + [19565] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + STATE(330), 1, sym_qualified_path, - STATE(295), 1, + STATE(332), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23675,7 +24060,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23689,67 +24074,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19415] = 28, - ACTIONS(194), 1, - sym_identifier, - ACTIONS(198), 1, + [19679] = 28, + ACTIONS(11), 1, anon_sym_LBRACE, - ACTIONS(202), 1, - anon_sym_fn, - ACTIONS(212), 1, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(37), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(39), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(41), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(43), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(45), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(47), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(49), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(51), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(53), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(55), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(57), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(67), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, - anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_LBRACK, - ACTIONS(380), 1, - anon_sym_LPAREN, - STATE(293), 1, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, sym_qualified_path, - STATE(295), 1, + STATE(588), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(31), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23761,7 +24146,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23775,67 +24160,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19529] = 28, - ACTIONS(194), 1, + [19793] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, - anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + STATE(330), 1, sym_qualified_path, - STATE(297), 1, + STATE(332), 1, sym_expression, - ACTIONS(238), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23847,7 +24232,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23861,67 +24246,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19643] = 28, - ACTIONS(11), 1, + [19907] = 28, + ACTIONS(81), 1, + sym_identifier, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(89), 1, + anon_sym_fn, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + ACTIONS(380), 1, + anon_sym_PIPE, + ACTIONS(382), 1, + anon_sym_LBRACK, + STATE(330), 1, sym_qualified_path, - STATE(573), 1, + STATE(333), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -23933,7 +24318,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -23947,7 +24332,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19757] = 28, + [20021] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -23988,9 +24373,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, - sym_qualified_path, STATE(450), 1, + sym_qualified_path, + STATE(452), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -24003,11 +24388,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24019,7 +24404,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24033,7 +24418,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19871] = 28, + [20135] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -24074,9 +24459,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(451), 1, + STATE(473), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -24089,11 +24474,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24105,7 +24490,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24119,7 +24504,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [19985] = 28, + [20249] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(25), 1, @@ -24158,12 +24543,12 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - ACTIONS(382), 1, + ACTIONS(388), 1, anon_sym_LPAREN, - STATE(433), 1, - sym_qualified_path, - STATE(471), 1, + STATE(442), 1, sym_expression, + STATE(450), 1, + sym_qualified_path, ACTIONS(65), 2, anon_sym_true, anon_sym_false, @@ -24175,11 +24560,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24191,7 +24576,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24205,7 +24590,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [20099] = 28, + [20363] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -24246,9 +24631,9 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, + STATE(450), 1, sym_qualified_path, - STATE(459), 1, + STATE(451), 1, sym_expression, ACTIONS(65), 2, anon_sym_true, @@ -24261,11 +24646,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24277,7 +24662,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24291,179 +24676,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [20213] = 28, - ACTIONS(252), 1, - sym_identifier, - ACTIONS(254), 1, - anon_sym_LBRACE, - ACTIONS(256), 1, - anon_sym_fn, - ACTIONS(258), 1, - anon_sym_LPAREN, - ACTIONS(266), 1, - anon_sym_match, - ACTIONS(268), 1, - anon_sym_if, - ACTIONS(270), 1, - anon_sym_handle, - ACTIONS(272), 1, - anon_sym_kernel, - ACTIONS(274), 1, - anon_sym_select, - ACTIONS(278), 1, - anon_sym_await, - ACTIONS(280), 1, - anon_sym_spawn, - ACTIONS(282), 1, - anon_sym_yield, - ACTIONS(284), 1, - anon_sym_send, - ACTIONS(286), 1, - anon_sym_recv, - ACTIONS(288), 1, - anon_sym_perform, - ACTIONS(290), 1, - anon_sym_resume, - ACTIONS(294), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(334), 1, - anon_sym_PIPE, - ACTIONS(336), 1, - anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(614), 1, - sym_expression, - ACTIONS(292), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(276), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(296), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(250), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(240), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(249), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [20327] = 28, - ACTIONS(252), 1, - sym_identifier, - ACTIONS(254), 1, - anon_sym_LBRACE, - ACTIONS(256), 1, - anon_sym_fn, - ACTIONS(258), 1, - anon_sym_LPAREN, - ACTIONS(266), 1, - anon_sym_match, - ACTIONS(268), 1, - anon_sym_if, - ACTIONS(270), 1, - anon_sym_handle, - ACTIONS(272), 1, - anon_sym_kernel, - ACTIONS(274), 1, - anon_sym_select, - ACTIONS(278), 1, - anon_sym_await, - ACTIONS(280), 1, - anon_sym_spawn, - ACTIONS(282), 1, - anon_sym_yield, - ACTIONS(284), 1, - anon_sym_send, - ACTIONS(286), 1, - anon_sym_recv, - ACTIONS(288), 1, - anon_sym_perform, - ACTIONS(290), 1, - anon_sym_resume, - ACTIONS(294), 1, - sym_float, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(334), 1, - anon_sym_PIPE, - ACTIONS(336), 1, - anon_sym_LBRACK, - STATE(230), 1, - sym_qualified_path, - STATE(579), 1, - sym_expression, - ACTIONS(292), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(276), 3, - anon_sym_BANG, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(296), 3, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(250), 3, - sym_list_literal, - sym_map_literal, - sym_boolean, - STATE(240), 11, - sym_match_expression, - sym_if_expression, - sym_handler_expression, - sym_kernel_expression, - sym_select_expression, - sym_ternary_expression, - sym_binary_expression, - sym_unary_expression, - sym_pipe_expression, - sym_call_expression, - sym_primary_expression, - STATE(249), 13, - sym_spawn_expression, - sym_yield_expression, - sym_await_call, - sym_send_call, - sym_recv_call, - sym_perform_expression, - sym_resume_expression, - sym_type_constructor, - sym_update_expression, - sym_block, - sym_object_literal, - sym_lambda_expression, - sym_literal, - [20441] = 28, + [20477] = 28, ACTIONS(11), 1, anon_sym_LBRACE, ACTIONS(19), 1, @@ -24504,10 +24717,10 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(302), 1, anon_sym_fn, - STATE(433), 1, - sym_qualified_path, - STATE(470), 1, + STATE(446), 1, sym_expression, + STATE(450), 1, + sym_qualified_path, ACTIONS(65), 2, anon_sym_true, anon_sym_false, @@ -24519,11 +24732,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24535,7 +24748,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24549,7 +24762,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [20555] = 28, + [20591] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -24590,9 +24803,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(584), 1, + STATE(556), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -24605,11 +24818,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24621,7 +24834,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24635,7 +24848,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [20669] = 28, + [20705] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -24676,9 +24889,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(575), 1, + STATE(569), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -24691,11 +24904,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24707,7 +24920,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24721,67 +24934,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [20783] = 28, - ACTIONS(252), 1, - sym_identifier, - ACTIONS(254), 1, + [20819] = 28, + ACTIONS(11), 1, anon_sym_LBRACE, - ACTIONS(256), 1, - anon_sym_fn, - ACTIONS(258), 1, + ACTIONS(19), 1, anon_sym_LPAREN, - ACTIONS(266), 1, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, anon_sym_match, - ACTIONS(268), 1, + ACTIONS(37), 1, anon_sym_if, - ACTIONS(270), 1, + ACTIONS(39), 1, anon_sym_handle, - ACTIONS(272), 1, + ACTIONS(41), 1, anon_sym_kernel, - ACTIONS(274), 1, + ACTIONS(43), 1, anon_sym_select, - ACTIONS(278), 1, + ACTIONS(45), 1, anon_sym_await, - ACTIONS(280), 1, + ACTIONS(47), 1, anon_sym_spawn, - ACTIONS(282), 1, + ACTIONS(49), 1, anon_sym_yield, - ACTIONS(284), 1, + ACTIONS(51), 1, anon_sym_send, - ACTIONS(286), 1, + ACTIONS(53), 1, anon_sym_recv, - ACTIONS(288), 1, + ACTIONS(55), 1, anon_sym_perform, - ACTIONS(290), 1, + ACTIONS(57), 1, anon_sym_resume, - ACTIONS(294), 1, + ACTIONS(67), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(334), 1, - anon_sym_PIPE, - ACTIONS(336), 1, - anon_sym_LBRACK, - STATE(230), 1, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(450), 1, sym_qualified_path, - STATE(576), 1, + STATE(460), 1, sym_expression, - ACTIONS(292), 2, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - ACTIONS(276), 3, + ACTIONS(31), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(296), 3, + ACTIONS(69), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24793,7 +25006,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24807,7 +25020,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [20897] = 28, + [20933] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -24848,9 +25061,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(577), 1, + STATE(542), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -24863,11 +25076,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24879,7 +25092,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24893,7 +25106,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21011] = 28, + [21047] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -24934,9 +25147,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(581), 1, + STATE(548), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -24949,11 +25162,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -24965,7 +25178,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -24979,7 +25192,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21125] = 28, + [21161] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25020,9 +25233,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(585), 1, + STATE(549), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25035,11 +25248,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25051,7 +25264,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25065,7 +25278,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21239] = 28, + [21275] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25106,9 +25319,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(587), 1, + STATE(553), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25121,11 +25334,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25137,7 +25350,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25151,7 +25364,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21353] = 28, + [21389] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25192,9 +25405,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(589), 1, + STATE(557), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25207,11 +25420,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25223,7 +25436,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25237,7 +25450,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21467] = 28, + [21503] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25278,9 +25491,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(592), 1, + STATE(562), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25293,11 +25506,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25309,7 +25522,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25323,7 +25536,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21581] = 28, + [21617] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25364,9 +25577,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(594), 1, + STATE(566), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25379,11 +25592,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25395,7 +25608,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25409,7 +25622,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21695] = 28, + [21731] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25450,9 +25663,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(595), 1, + STATE(573), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25465,11 +25678,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25481,7 +25694,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25495,7 +25708,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21809] = 28, + [21845] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25536,9 +25749,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(598), 1, + STATE(576), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25551,11 +25764,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25567,7 +25780,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25581,7 +25794,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [21923] = 28, + [21959] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25622,9 +25835,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(600), 1, + STATE(577), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25637,11 +25850,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25653,7 +25866,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25667,7 +25880,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22037] = 28, + [22073] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25708,9 +25921,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(602), 1, + STATE(581), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25723,11 +25936,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25739,7 +25952,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25753,67 +25966,239 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22151] = 28, - ACTIONS(11), 1, + [22187] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, + ACTIONS(266), 1, + anon_sym_match, + ACTIONS(268), 1, + anon_sym_if, + ACTIONS(270), 1, + anon_sym_handle, + ACTIONS(272), 1, + anon_sym_kernel, + ACTIONS(274), 1, + anon_sym_select, + ACTIONS(278), 1, + anon_sym_await, + ACTIONS(280), 1, + anon_sym_spawn, + ACTIONS(282), 1, + anon_sym_yield, + ACTIONS(284), 1, + anon_sym_send, + ACTIONS(286), 1, + anon_sym_recv, + ACTIONS(288), 1, + anon_sym_perform, + ACTIONS(290), 1, + anon_sym_resume, + ACTIONS(294), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(334), 1, anon_sym_PIPE, - ACTIONS(33), 1, + ACTIONS(336), 1, anon_sym_LBRACK, - ACTIONS(35), 1, + STATE(235), 1, + sym_qualified_path, + STATE(584), 1, + sym_expression, + ACTIONS(292), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(276), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(296), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(273), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(280), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(293), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [22301] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, + anon_sym_LBRACE, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, + anon_sym_LPAREN, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, + sym_qualified_path, + STATE(585), 1, + sym_expression, + ACTIONS(292), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(276), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(296), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(273), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(280), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(293), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [22415] = 28, + ACTIONS(252), 1, sym_identifier, - ACTIONS(302), 1, + ACTIONS(254), 1, + anon_sym_LBRACE, + ACTIONS(256), 1, anon_sym_fn, - STATE(433), 1, + ACTIONS(258), 1, + anon_sym_LPAREN, + ACTIONS(266), 1, + anon_sym_match, + ACTIONS(268), 1, + anon_sym_if, + ACTIONS(270), 1, + anon_sym_handle, + ACTIONS(272), 1, + anon_sym_kernel, + ACTIONS(274), 1, + anon_sym_select, + ACTIONS(278), 1, + anon_sym_await, + ACTIONS(280), 1, + anon_sym_spawn, + ACTIONS(282), 1, + anon_sym_yield, + ACTIONS(284), 1, + anon_sym_send, + ACTIONS(286), 1, + anon_sym_recv, + ACTIONS(288), 1, + anon_sym_perform, + ACTIONS(290), 1, + anon_sym_resume, + ACTIONS(294), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, sym_qualified_path, - STATE(476), 1, + STATE(454), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25825,7 +26210,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25839,7 +26224,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22265] = 28, + [22529] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25880,9 +26265,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(622), 1, + STATE(614), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25895,11 +26280,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25911,7 +26296,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -25925,7 +26310,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22379] = 28, + [22643] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -25966,9 +26351,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(623), 1, + STATE(618), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -25981,11 +26366,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -25997,7 +26382,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -26011,7 +26396,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22493] = 28, + [22757] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -26052,9 +26437,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(609), 1, + STATE(601), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -26067,11 +26452,97 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, + sym_list_literal, + sym_map_literal, + sym_boolean, + STATE(280), 11, + sym_match_expression, + sym_if_expression, + sym_handler_expression, + sym_kernel_expression, + sym_select_expression, + sym_ternary_expression, + sym_binary_expression, + sym_unary_expression, + sym_pipe_expression, + sym_call_expression, + sym_primary_expression, + STATE(293), 13, + sym_spawn_expression, + sym_yield_expression, + sym_await_call, + sym_send_call, + sym_recv_call, + sym_perform_expression, + sym_resume_expression, + sym_type_constructor, + sym_update_expression, + sym_block, + sym_object_literal, + sym_lambda_expression, + sym_literal, + [22871] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(19), 1, + anon_sym_LPAREN, + ACTIONS(25), 1, + anon_sym_PIPE, + ACTIONS(33), 1, + anon_sym_LBRACK, + ACTIONS(35), 1, + anon_sym_match, + ACTIONS(37), 1, + anon_sym_if, + ACTIONS(39), 1, + anon_sym_handle, + ACTIONS(41), 1, + anon_sym_kernel, + ACTIONS(43), 1, + anon_sym_select, + ACTIONS(45), 1, + anon_sym_await, + ACTIONS(47), 1, + anon_sym_spawn, + ACTIONS(49), 1, + anon_sym_yield, + ACTIONS(51), 1, + anon_sym_send, + ACTIONS(53), 1, + anon_sym_recv, + ACTIONS(55), 1, + anon_sym_perform, + ACTIONS(57), 1, + anon_sym_resume, + ACTIONS(67), 1, + sym_float, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(300), 1, + sym_identifier, + ACTIONS(302), 1, + anon_sym_fn, + STATE(447), 1, + sym_expression, + STATE(450), 1, + sym_qualified_path, + ACTIONS(65), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(31), 3, + anon_sym_BANG, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(69), 3, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(510), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(502), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -26083,7 +26554,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(525), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -26097,7 +26568,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22607] = 28, + [22985] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -26138,9 +26609,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(520), 1, + STATE(604), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -26153,11 +26624,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -26169,7 +26640,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -26183,7 +26654,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22721] = 28, + [23099] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -26224,9 +26695,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, - STATE(612), 1, + STATE(492), 1, sym_expression, ACTIONS(292), 2, anon_sym_true, @@ -26239,11 +26710,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -26255,7 +26726,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -26269,67 +26740,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22835] = 28, - ACTIONS(11), 1, + [23213] = 28, + ACTIONS(252), 1, + sym_identifier, + ACTIONS(254), 1, anon_sym_LBRACE, - ACTIONS(19), 1, + ACTIONS(256), 1, + anon_sym_fn, + ACTIONS(258), 1, anon_sym_LPAREN, - ACTIONS(25), 1, - anon_sym_PIPE, - ACTIONS(33), 1, - anon_sym_LBRACK, - ACTIONS(35), 1, + ACTIONS(266), 1, anon_sym_match, - ACTIONS(37), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(39), 1, + ACTIONS(270), 1, anon_sym_handle, - ACTIONS(41), 1, + ACTIONS(272), 1, anon_sym_kernel, - ACTIONS(43), 1, + ACTIONS(274), 1, anon_sym_select, - ACTIONS(45), 1, + ACTIONS(278), 1, anon_sym_await, - ACTIONS(47), 1, + ACTIONS(280), 1, anon_sym_spawn, - ACTIONS(49), 1, + ACTIONS(282), 1, anon_sym_yield, - ACTIONS(51), 1, + ACTIONS(284), 1, anon_sym_send, - ACTIONS(53), 1, + ACTIONS(286), 1, anon_sym_recv, - ACTIONS(55), 1, + ACTIONS(288), 1, anon_sym_perform, - ACTIONS(57), 1, + ACTIONS(290), 1, anon_sym_resume, - ACTIONS(67), 1, + ACTIONS(294), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(300), 1, - sym_identifier, - ACTIONS(302), 1, - anon_sym_fn, - STATE(433), 1, + ACTIONS(334), 1, + anon_sym_PIPE, + ACTIONS(336), 1, + anon_sym_LBRACK, + STATE(235), 1, sym_qualified_path, - STATE(513), 1, + STATE(395), 1, sym_expression, - ACTIONS(65), 2, + ACTIONS(292), 2, anon_sym_true, anon_sym_false, - ACTIONS(31), 3, + ACTIONS(276), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(69), 3, + ACTIONS(296), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(489), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(456), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -26341,7 +26812,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(458), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -26355,7 +26826,7 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [22949] = 28, + [23327] = 28, ACTIONS(252), 1, sym_identifier, ACTIONS(254), 1, @@ -26396,7 +26867,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(336), 1, anon_sym_LBRACK, - STATE(230), 1, + STATE(235), 1, sym_qualified_path, STATE(626), 1, sym_expression, @@ -26411,11 +26882,11 @@ static const uint16_t ts_small_parse_table[] = { sym_integer, sym_string, sym_interpolated_string, - STATE(250), 3, + STATE(273), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(240), 11, + STATE(280), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -26427,7 +26898,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(249), 13, + STATE(293), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -26441,67 +26912,67 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [23063] = 28, - ACTIONS(194), 1, + [23441] = 28, + ACTIONS(81), 1, sym_identifier, - ACTIONS(198), 1, + ACTIONS(85), 1, anon_sym_LBRACE, - ACTIONS(202), 1, + ACTIONS(89), 1, anon_sym_fn, - ACTIONS(204), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(212), 1, + ACTIONS(99), 1, anon_sym_match, - ACTIONS(214), 1, + ACTIONS(101), 1, anon_sym_if, - ACTIONS(216), 1, + ACTIONS(103), 1, anon_sym_handle, - ACTIONS(218), 1, + ACTIONS(105), 1, anon_sym_kernel, - ACTIONS(220), 1, + ACTIONS(107), 1, anon_sym_select, - ACTIONS(224), 1, + ACTIONS(111), 1, anon_sym_await, - ACTIONS(226), 1, + ACTIONS(113), 1, anon_sym_spawn, - ACTIONS(228), 1, + ACTIONS(115), 1, anon_sym_yield, - ACTIONS(230), 1, + ACTIONS(117), 1, anon_sym_send, - ACTIONS(232), 1, + ACTIONS(119), 1, anon_sym_recv, - ACTIONS(234), 1, + ACTIONS(121), 1, anon_sym_perform, - ACTIONS(236), 1, + ACTIONS(123), 1, anon_sym_resume, - ACTIONS(240), 1, + ACTIONS(127), 1, sym_float, ACTIONS(298), 1, sym_line_comment, - ACTIONS(374), 1, + ACTIONS(380), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(382), 1, anon_sym_LBRACK, - STATE(293), 1, - sym_qualified_path, - STATE(328), 1, + STATE(313), 1, sym_expression, - ACTIONS(238), 2, + STATE(330), 1, + sym_qualified_path, + ACTIONS(125), 2, anon_sym_true, anon_sym_false, - ACTIONS(222), 3, + ACTIONS(109), 3, anon_sym_BANG, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(242), 3, + ACTIONS(129), 3, sym_integer, sym_string, sym_interpolated_string, - STATE(379), 3, + STATE(393), 3, sym_list_literal, sym_map_literal, sym_boolean, - STATE(380), 11, + STATE(377), 11, sym_match_expression, sym_if_expression, sym_handler_expression, @@ -26513,7 +26984,7 @@ static const uint16_t ts_small_parse_table[] = { sym_pipe_expression, sym_call_expression, sym_primary_expression, - STATE(381), 13, + STATE(382), 13, sym_spawn_expression, sym_yield_expression, sym_await_call, @@ -26527,14 +26998,14 @@ static const uint16_t ts_small_parse_table[] = { sym_object_literal, sym_lambda_expression, sym_literal, - [23177] = 5, + [23555] = 5, ACTIONS(3), 1, sym_line_comment, - ACTIONS(388), 1, + ACTIONS(394), 1, sym__doc_comment_line, - STATE(223), 1, + STATE(226), 1, aux_sym_doc_comment_repeat1, - ACTIONS(386), 8, + ACTIONS(392), 8, anon_sym_LBRACE, anon_sym_LPAREN, anon_sym_PIPE, @@ -26543,7 +27014,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_DASH, sym_float, - ACTIONS(384), 34, + ACTIONS(390), 34, anon_sym_namespace, anon_sym_let, anon_sym_mut, @@ -26578,14 +27049,14 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - [23233] = 5, + [23611] = 5, ACTIONS(3), 1, sym_line_comment, - ACTIONS(395), 1, + ACTIONS(401), 1, sym__doc_comment_line, - STATE(223), 1, + STATE(226), 1, aux_sym_doc_comment_repeat1, - ACTIONS(393), 8, + ACTIONS(399), 8, anon_sym_LBRACE, anon_sym_LPAREN, anon_sym_PIPE, @@ -26594,7 +27065,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_DASH, sym_float, - ACTIONS(391), 34, + ACTIONS(397), 34, anon_sym_namespace, anon_sym_let, anon_sym_mut, @@ -26629,12 +27100,62 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - [23289] = 3, + [23667] = 8, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(407), 1, + anon_sym_COLON_COLON, + ACTIONS(409), 1, + anon_sym_LBRACE, + ACTIONS(412), 1, + anon_sym_LT, + STATE(232), 1, + aux_sym_qualified_path_repeat1, + STATE(1683), 1, + sym_type_arguments, + ACTIONS(403), 13, + anon_sym_COLON, + anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(405), 22, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + sym_float, + [23725] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(397), 10, - ts_builtin_sym_end, + ACTIONS(417), 10, anon_sym_LBRACE, + anon_sym_RBRACE, anon_sym_LPAREN, anon_sym_PIPE, anon_sym_BANG, @@ -26643,7 +27164,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, sym_float, sym__doc_comment_line, - ACTIONS(399), 30, + ACTIONS(415), 30, anon_sym_import, anon_sym_namespace, anon_sym_let, @@ -26674,12 +27195,12 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - [23337] = 3, + [23773] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(397), 10, + ACTIONS(417), 10, + ts_builtin_sym_end, anon_sym_LBRACE, - anon_sym_RBRACE, anon_sym_LPAREN, anon_sym_PIPE, anon_sym_BANG, @@ -26688,7 +27209,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, sym_float, sym__doc_comment_line, - ACTIONS(399), 30, + ACTIONS(415), 30, anon_sym_import, anon_sym_namespace, anon_sym_let, @@ -26719,25 +27240,21 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - [23385] = 8, + [23821] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(405), 1, + ACTIONS(423), 1, anon_sym_COLON_COLON, - ACTIONS(407), 1, - anon_sym_LBRACE, - ACTIONS(410), 1, - anon_sym_LT, - STATE(228), 1, + STATE(231), 1, aux_sym_qualified_path_repeat1, - STATE(1654), 1, - sym_type_arguments, - ACTIONS(401), 12, + ACTIONS(419), 14, anon_sym_COLON, + anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -26745,9 +27262,11 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(403), 21, + ACTIONS(421), 23, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, anon_sym_COMMA, @@ -26767,20 +27286,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [23441] = 5, + [23872] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(405), 1, + ACTIONS(407), 1, anon_sym_COLON_COLON, - STATE(229), 1, + STATE(231), 1, aux_sym_qualified_path_repeat1, - ACTIONS(413), 13, + ACTIONS(426), 14, anon_sym_COLON, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -26788,8 +27308,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(415), 22, + ACTIONS(428), 23, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -26811,257 +27332,104 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [23490] = 5, + [23923] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(421), 1, - anon_sym_COLON_COLON, - STATE(229), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(417), 13, - anon_sym_COLON, - anon_sym_LT, - anon_sym_GT, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_SLASH, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - ACTIONS(419), 22, - sym__call_open_gap, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, anon_sym_PIPE_GT, + ACTIONS(456), 1, anon_sym_LBRACK2, - sym_float, - [23539] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(410), 1, - anon_sym_LT, - ACTIONS(424), 1, - anon_sym_LBRACE, - STATE(1654), 1, - sym_type_arguments, - ACTIONS(401), 11, - anon_sym_GT, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_SLASH, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - ACTIONS(403), 22, + ACTIONS(458), 1, sym__call_open_gap, - anon_sym_DOT, - anon_sym_RBRACE, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - sym_float, - [23589] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(417), 13, - anon_sym_COLON, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_SLASH, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - ACTIONS(419), 23, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_COLON_COLON, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - sym_float, - [23633] = 9, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(427), 11, - anon_sym_LT, - anon_sym_GT, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - ACTIONS(431), 17, - anon_sym_LBRACE, + ACTIONS(436), 7, anon_sym_RBRACE, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, sym_float, - [23688] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(443), 12, - anon_sym_LT, - anon_sym_GT, + ACTIONS(430), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(445), 23, - sym__call_open_gap, + [23999] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - sym_float, - [23731] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(433), 2, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(451), 7, + ACTIONS(464), 7, anon_sym_RBRACE, anon_sym_COMMA, anon_sym_COLON, @@ -27069,31 +27437,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, sym_float, - ACTIONS(447), 9, + ACTIONS(462), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [23800] = 6, + [24075] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(465), 12, + ACTIONS(412), 1, anon_sym_LT, + ACTIONS(466), 1, + anon_sym_LBRACE, + STATE(1683), 1, + sym_type_arguments, + ACTIONS(403), 12, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -27101,8 +27470,10 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(467), 20, - anon_sym_LBRACE, + ACTIONS(405), 23, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_RBRACE, anon_sym_STAR, anon_sym_COMMA, @@ -27121,16 +27492,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PERCENT, anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - [23849] = 3, + [24127] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(469), 12, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(469), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -27138,9 +27521,7 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(471), 23, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(471), 20, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -27160,39 +27541,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PERCENT, anon_sym_PIPE_GT, - anon_sym_LBRACK2, sym_float, - [23892] = 16, + [24183] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, @@ -27205,47 +27589,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, sym_float, - ACTIONS(473), 9, + ACTIONS(473), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [23961] = 16, + [24259] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, @@ -27258,25 +27647,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, sym_float, - ACTIONS(477), 9, + ACTIONS(477), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [24030] = 3, + [24335] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(481), 12, + ACTIONS(419), 14, + anon_sym_COLON, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -27284,14 +27676,15 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(483), 23, + ACTIONS(421), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, + anon_sym_COLON_COLON, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, anon_sym_COMMA, - anon_sym_COLON, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, @@ -27308,15 +27701,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [24073] = 3, + [24381] = 9, ACTIONS(298), 1, sym_line_comment, - ACTIONS(485), 12, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(481), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -27324,9 +27730,7 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(487), 23, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(483), 19, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -27345,84 +27749,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_DASH, anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, sym_float, - [24116] = 16, + [24439] = 12, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(491), 1, - anon_sym_LBRACE, - ACTIONS(433), 2, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(494), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - sym_float, - ACTIONS(489), 9, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - [24185] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(496), 12, + ACTIONS(481), 12, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(498), 23, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(483), 15, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, @@ -27435,34 +27801,54 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, sym_float, - [24228] = 3, + [24503] = 15, ACTIONS(298), 1, sym_line_comment, - ACTIONS(500), 12, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(481), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(502), 23, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(483), 10, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, @@ -27470,39 +27856,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_QMARK, anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, sym_float, - [24271] = 3, + [24573] = 14, ACTIONS(298), 1, sym_line_comment, - ACTIONS(504), 12, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(481), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(506), 23, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(483), 11, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, @@ -27511,38 +27910,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, sym_float, - [24314] = 3, + [24641] = 11, ACTIONS(298), 1, sym_line_comment, - ACTIONS(508), 12, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(481), 12, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(510), 23, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(483), 17, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, @@ -27557,19 +27961,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_PLUS, anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, sym_float, - [24357] = 3, + [24703] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(512), 12, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(485), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -27577,9 +27989,7 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(514), 23, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(487), 20, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -27599,575 +28009,653 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PERCENT, anon_sym_PIPE_GT, - anon_sym_LBRACK2, sym_float, - [24400] = 8, - ACTIONS(3), 1, + [24759] = 18, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(410), 1, - anon_sym_LT, - ACTIONS(516), 1, - anon_sym_COLON_COLON, - ACTIONS(518), 1, - anon_sym_LBRACE, - STATE(291), 1, - aux_sym_qualified_path_repeat1, - STATE(1681), 1, - sym_type_arguments, - ACTIONS(401), 2, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(403), 28, - sym__call_open_gap, + ACTIONS(432), 1, anon_sym_DOT, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, anon_sym_PIPE_GT, + ACTIONS(456), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [24453] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(521), 12, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(491), 1, + anon_sym_LBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(494), 7, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + sym_float, + ACTIONS(489), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(523), 23, - sym__call_open_gap, + [24835] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, + ACTIONS(498), 7, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, sym_float, - [24496] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(401), 12, - anon_sym_LT, - anon_sym_GT, + ACTIONS(496), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(403), 23, - sym__call_open_gap, + [24911] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, + ACTIONS(502), 8, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, sym_float, - [24539] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(525), 12, - anon_sym_LT, - anon_sym_GT, + ACTIONS(500), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(527), 23, - sym__call_open_gap, + [24985] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(506), 1, + anon_sym_LBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, + ACTIONS(509), 7, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, sym_float, - [24582] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(529), 12, - anon_sym_LT, - anon_sym_GT, + ACTIONS(504), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(531), 23, - sym__call_open_gap, + [25061] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - sym_float, - [24625] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(437), 1, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(427), 12, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(513), 7, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + sym_float, + ACTIONS(511), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(431), 19, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - sym_float, - [24676] = 10, + [25137] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(433), 2, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(427), 11, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(517), 8, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + sym_float, + ACTIONS(515), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(431), 15, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - sym_float, - [24733] = 13, + [25211] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(433), 2, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(521), 1, + anon_sym_LBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(427), 9, + ACTIONS(524), 7, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + sym_float, + ACTIONS(519), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(431), 10, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - sym_float, - [24796] = 12, + [25287] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(433), 2, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(427), 9, + ACTIONS(528), 7, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + sym_float, + ACTIONS(526), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(431), 11, + [25363] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(532), 1, anon_sym_LBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(535), 7, anon_sym_RBRACE, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, sym_float, - [24857] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(533), 12, - anon_sym_LT, - anon_sym_GT, + ACTIONS(530), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(535), 23, - sym__call_open_gap, + [25439] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, anon_sym_PIPE_GT, + ACTIONS(456), 1, anon_sym_LBRACK2, - sym_float, - [24900] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(537), 12, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_SLASH, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - ACTIONS(539), 20, - anon_sym_LBRACE, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(539), 7, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, sym_float, - [24949] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(541), 12, - anon_sym_LT, - anon_sym_GT, + ACTIONS(537), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(543), 23, - sym__call_open_gap, + [25515] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(543), 1, + anon_sym_LBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, + ACTIONS(546), 7, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, sym_float, - [24992] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(545), 12, - anon_sym_LT, - anon_sym_GT, + ACTIONS(541), 10, anon_sym__, anon_sym_in, anon_sym_LBRACK, - anon_sym_SLASH, + anon_sym_do, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(547), 23, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - sym_float, - [25035] = 3, + [25591] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(549), 12, + ACTIONS(548), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28175,8 +28663,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(551), 23, + ACTIONS(550), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28199,68 +28688,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25078] = 16, + [25636] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(558), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - sym_float, - ACTIONS(553), 9, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - [25147] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(560), 12, + ACTIONS(552), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28268,8 +28705,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(562), 23, + ACTIONS(554), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28292,15 +28730,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25190] = 3, + [25681] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(564), 12, + ACTIONS(556), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28308,8 +28747,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(566), 23, + ACTIONS(558), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28332,68 +28772,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25233] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(570), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - sym_float, - ACTIONS(568), 9, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - [25302] = 3, + [25726] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(572), 12, + ACTIONS(560), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28401,8 +28789,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(574), 23, + ACTIONS(562), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28425,15 +28814,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25345] = 3, + [25771] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(576), 12, + ACTIONS(564), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28441,8 +28831,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(579), 23, + ACTIONS(566), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28465,15 +28856,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25388] = 3, + [25816] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(582), 12, + ACTIONS(568), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28481,8 +28873,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(584), 23, + ACTIONS(570), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28505,15 +28898,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25431] = 3, + [25861] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(586), 12, + ACTIONS(572), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28521,8 +28915,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(588), 23, + ACTIONS(574), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28545,15 +28940,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25474] = 3, + [25906] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(590), 12, + ACTIONS(576), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28561,8 +28957,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(593), 23, + ACTIONS(579), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28585,15 +28982,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25517] = 3, + [25951] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(596), 12, + ACTIONS(582), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28601,8 +28999,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(598), 23, + ACTIONS(584), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28625,67 +29024,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25560] = 15, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(602), 8, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - sym_float, - ACTIONS(600), 9, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - [25627] = 3, + [25996] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(604), 12, + ACTIONS(586), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28693,8 +29041,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(607), 23, + ACTIONS(588), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28717,15 +29066,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25670] = 3, + [26041] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(610), 12, + ACTIONS(590), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28733,8 +29083,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(612), 23, + ACTIONS(593), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28757,15 +29108,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25713] = 3, + [26086] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(614), 12, + ACTIONS(596), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28773,8 +29125,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(616), 23, + ACTIONS(598), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28797,68 +29150,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25756] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(620), 1, - anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(623), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - sym_float, - ACTIONS(618), 9, - anon_sym__, - anon_sym_in, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - [25825] = 3, + [26131] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(625), 12, + ACTIONS(600), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28866,8 +29167,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(627), 23, + ACTIONS(602), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28890,68 +29192,100 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25868] = 16, + [26176] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(604), 13, + anon_sym_LT, + anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(606), 24, sym__call_open_gap, - ACTIONS(449), 1, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(631), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - ACTIONS(629), 9, + [26221] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(608), 13, + anon_sym_LT, + anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [25937] = 3, + ACTIONS(610), 24, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + sym_float, + [26266] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(633), 12, + ACTIONS(612), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28959,8 +29293,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(635), 23, + ACTIONS(614), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -28983,15 +29318,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [25980] = 3, + [26311] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(637), 12, + ACTIONS(616), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -28999,8 +29335,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(639), 23, + ACTIONS(618), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -29023,226 +29360,226 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [26023] = 15, + [26356] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(620), 13, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(643), 8, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(622), 24, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - ACTIONS(641), 9, + [26401] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(624), 13, + anon_sym_LT, + anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [26090] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(626), 24, sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(647), 1, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(650), 7, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - ACTIONS(645), 9, + [26446] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(628), 13, + anon_sym_LT, + anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [26159] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(630), 24, sym__call_open_gap, - ACTIONS(449), 1, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(654), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - ACTIONS(652), 9, + [26491] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(632), 13, + anon_sym_LT, + anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [26228] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(634), 24, sym__call_open_gap, - ACTIONS(449), 1, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(658), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - ACTIONS(656), 9, + [26536] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(636), 13, + anon_sym_LT, + anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [26297] = 3, + ACTIONS(638), 24, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + sym_float, + [26581] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(660), 12, + ACTIONS(640), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -29250,8 +29587,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(662), 23, + ACTIONS(642), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -29274,15 +29612,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [26340] = 3, + [26626] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(664), 12, + ACTIONS(644), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -29290,8 +29629,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(666), 23, + ACTIONS(646), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -29314,68 +29654,100 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [26383] = 16, + [26671] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(648), 13, + anon_sym_LT, + anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(651), 24, sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(670), 1, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(673), 7, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COMMA, anon_sym_COLON, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - ACTIONS(668), 9, + [26716] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(654), 13, + anon_sym_LT, + anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [26452] = 3, + ACTIONS(656), 24, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + sym_float, + [26761] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(675), 12, + ACTIONS(658), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -29383,8 +29755,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(677), 23, + ACTIONS(660), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -29407,68 +29780,100 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [26495] = 16, + [26806] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(662), 13, + anon_sym_LT, + anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(664), 24, sym__call_open_gap, - ACTIONS(449), 1, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(681), 7, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, sym_float, - ACTIONS(679), 9, + [26851] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(666), 13, + anon_sym_LT, + anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, anon_sym_true, anon_sym_false, sym_integer, sym_string, sym_interpolated_string, sym_identifier, - [26564] = 3, + ACTIONS(668), 24, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + sym_float, + [26896] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(683), 12, + ACTIONS(670), 13, anon_sym_LT, anon_sym_GT, anon_sym__, anon_sym_in, anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, anon_sym_true, anon_sym_false, @@ -29476,8 +29881,9 @@ static const uint16_t ts_small_parse_table[] = { sym_string, sym_interpolated_string, sym_identifier, - ACTIONS(685), 23, + ACTIONS(672), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -29500,30 +29906,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_GT, anon_sym_LBRACK2, sym_float, - [26607] = 5, - ACTIONS(3), 1, + [26941] = 3, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(687), 1, - anon_sym_COLON_COLON, - STATE(290), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(417), 3, + ACTIONS(674), 13, anon_sym_LT, anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, - ACTIONS(419), 29, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(676), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, @@ -29536,35 +29947,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [26653] = 5, - ACTIONS(3), 1, + sym_float, + [26986] = 3, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(516), 1, - anon_sym_COLON_COLON, - STATE(290), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(413), 3, + ACTIONS(678), 13, anon_sym_LT, anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, - ACTIONS(415), 29, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(680), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, @@ -29577,32 +29989,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [26699] = 3, - ACTIONS(3), 1, + sym_float, + [27031] = 3, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(417), 3, + ACTIONS(682), 13, anon_sym_LT, anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, - ACTIONS(419), 30, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(684), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, - anon_sym_COLON_COLON, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, @@ -29615,35 +30031,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [26740] = 6, - ACTIONS(3), 1, + sym_float, + [27076] = 3, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(410), 1, + ACTIONS(686), 13, anon_sym_LT, - ACTIONS(690), 1, - anon_sym_LBRACE, - STATE(1681), 1, - sym_type_arguments, - ACTIONS(401), 2, anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, anon_sym_SLASH, - ACTIONS(403), 28, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(688), 24, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, @@ -29656,48 +30073,155 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [26787] = 15, - ACTIONS(3), 1, + sym_float, + [27121] = 3, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(690), 13, + anon_sym_LT, + anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(692), 24, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_QMARK, - ACTIONS(703), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(715), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + sym_float, + [27166] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(694), 13, + anon_sym_LT, + anon_sym_GT, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(696), 24, sym__call_open_gap, - ACTIONS(697), 2, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, anon_sym_PERCENT, - ACTIONS(699), 2, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + sym_float, + [27211] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(403), 13, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, + anon_sym__, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_do, + anon_sym_SLASH, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + ACTIONS(405), 24, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(658), 13, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + sym_float, + [27256] = 8, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(412), 1, + anon_sym_LT, + ACTIONS(698), 1, + anon_sym_COLON_COLON, + ACTIONS(700), 1, + anon_sym_LBRACE, + STATE(296), 1, + aux_sym_qualified_path_repeat1, + STATE(1710), 1, + sym_type_arguments, + ACTIONS(403), 2, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 29, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -29705,25 +30229,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [26851] = 6, + [27310] = 5, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(465), 3, + ACTIONS(703), 1, + anon_sym_COLON_COLON, + STATE(295), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(419), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(467), 26, + ACTIONS(421), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -29745,20 +30282,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PERCENT, anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [26897] = 3, + [27357] = 5, ACTIONS(3), 1, sym_line_comment, - ACTIONS(469), 3, + ACTIONS(698), 1, + anon_sym_COLON_COLON, + STATE(295), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(426), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(471), 29, + ACTIONS(428), 30, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -29787,42 +30330,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [26937] = 15, + [27404] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(475), 13, + ACTIONS(710), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -29836,42 +30383,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27001] = 15, + [27474] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(479), 13, + ACTIONS(734), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -29885,42 +30436,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27065] = 15, + [27544] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(719), 13, + ACTIONS(736), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -29934,42 +30489,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27129] = 15, + [27614] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(721), 13, + ACTIONS(738), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -29983,42 +30542,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27193] = 15, + [27684] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(723), 13, + ACTIONS(740), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30032,56 +30595,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27257] = 3, + [27754] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(500), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(502), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [27297] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(504), 3, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(506), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(742), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30089,73 +30643,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27337] = 3, + [27824] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(508), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(510), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [27377] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(512), 3, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(514), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(744), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30163,59 +30696,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27417] = 15, + [27894] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(725), 13, + ACTIONS(746), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30229,56 +30754,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27481] = 3, + [27964] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(521), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(523), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [27521] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(529), 3, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(531), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(748), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30286,42 +30802,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27561] = 7, + [28034] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(713), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(427), 3, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(431), 25, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(750), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30329,45 +30855,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27609] = 10, + [28104] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(711), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(427), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(709), 2, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(431), 21, - anon_sym_LBRACE, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(752), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30376,49 +30908,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27663] = 12, + [28174] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(705), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(431), 16, - anon_sym_LBRACE, + ACTIONS(754), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30427,42 +30961,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27721] = 11, + [28244] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(711), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(431), 17, - anon_sym_LBRACE, + ACTIONS(756), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30471,35 +31014,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27777] = 9, + [28314] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(711), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(427), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(431), 23, - anon_sym_LBRACE, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(758), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30508,37 +31067,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27829] = 6, + [28384] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(715), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(537), 3, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(539), 26, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(760), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30546,35 +31120,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27875] = 3, + [28454] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(541), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(543), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(762), 13, + anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30582,59 +31173,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27915] = 15, + [28524] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(701), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(727), 1, - anon_sym_LBRACE, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(558), 13, + ACTIONS(764), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30648,56 +31231,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [27979] = 3, + [28594] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(560), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(562), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [28019] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(564), 3, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(566), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(766), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30705,59 +31279,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28059] = 15, + [28664] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(730), 13, + ACTIONS(768), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30771,42 +31337,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28123] = 15, + [28734] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(570), 13, + ACTIONS(770), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -30820,56 +31390,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28187] = 3, + [28804] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(572), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(574), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [28227] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(576), 3, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(579), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(772), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30877,73 +31438,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28267] = 3, + [28874] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(582), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(584), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [28307] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(586), 3, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(588), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(774), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -30951,73 +31491,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28347] = 3, + [28944] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(590), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(593), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [28387] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(596), 3, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(598), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(776), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31025,58 +31544,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28427] = 14, + [29014] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(701), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(602), 14, - anon_sym_LBRACE, + ACTIONS(778), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31090,42 +31602,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28489] = 15, + [29084] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(732), 13, + ACTIONS(780), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31139,19 +31655,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28553] = 3, + [29154] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(610), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(612), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(782), 13, + anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31159,36 +31703,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28593] = 3, + [29224] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(614), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(616), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(784), 13, + anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31196,59 +31756,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28633] = 15, + [29294] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(701), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(734), 1, - anon_sym_LBRACE, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(623), 13, + ACTIONS(786), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31262,19 +31814,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28697] = 3, + [29364] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(625), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(627), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(788), 13, + anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31282,59 +31862,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28737] = 15, + [29434] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(737), 13, + ACTIONS(790), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31348,42 +31920,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28801] = 15, + [29504] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(739), 13, + ACTIONS(792), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31397,42 +31973,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28865] = 15, + [29574] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(631), 13, + ACTIONS(794), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31446,19 +32026,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28929] = 3, + [29644] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(633), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(635), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, + ACTIONS(708), 1, anon_sym_LBRACE, - anon_sym_RBRACE, + ACTIONS(716), 1, + anon_sym_QMARK, + ACTIONS(718), 1, + anon_sym_PIPE_PIPE, + ACTIONS(720), 1, + anon_sym_AMP_AMP, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(796), 13, + anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31466,34 +32074,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [28969] = 3, + [29714] = 6, ACTIONS(3), 1, sym_line_comment, - ACTIONS(637), 3, + ACTIONS(412), 1, anon_sym_LT, + ACTIONS(798), 1, + anon_sym_LBRACE, + STATE(1710), 1, + sym_type_arguments, + ACTIONS(403), 2, anon_sym_GT, anon_sym_SLASH, - ACTIONS(639), 29, + ACTIONS(405), 29, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, - anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, anon_sym_let, @@ -31520,41 +32121,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29009] = 14, + [29762] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(701), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(643), 14, - anon_sym_LBRACE, + ACTIONS(801), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31568,43 +32174,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29071] = 15, + [29832] = 8, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(469), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(741), 13, + anon_sym_SLASH, + ACTIONS(471), 26, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31612,47 +32202,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29135] = 15, + [29884] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(701), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(743), 1, - anon_sym_LBRACE, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(650), 13, + ACTIONS(475), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31666,42 +32271,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29199] = 15, + [29954] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(654), 13, + ACTIONS(479), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31715,16 +32324,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29263] = 3, + [30024] = 9, ACTIONS(3), 1, sym_line_comment, - ACTIONS(660), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, + anon_sym_DOT, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(481), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(662), 29, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(483), 25, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -31745,26 +32364,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_DASH, anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29303] = 3, + [30078] = 12, ACTIONS(3), 1, sym_line_comment, - ACTIONS(664), 3, - anon_sym_LT, - anon_sym_GT, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, + anon_sym_DOT, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(666), 29, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, sym__call_open_gap, - anon_sym_DOT, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(481), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(483), 21, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31779,52 +32412,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29343] = 15, + [30138] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(701), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(746), 1, - anon_sym_LBRACE, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(673), 13, + ACTIONS(803), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31838,79 +32470,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29407] = 3, + [30208] = 13, ACTIONS(3), 1, sym_line_comment, - ACTIONS(675), 3, - anon_sym_LT, - anon_sym_GT, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, + anon_sym_DOT, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(677), 29, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [29447] = 15, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(681), 13, + ACTIONS(483), 17, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -31919,24 +32511,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29511] = 3, + [30270] = 11, ACTIONS(3), 1, sym_line_comment, - ACTIONS(549), 3, - anon_sym_LT, - anon_sym_GT, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, + anon_sym_DOT, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(551), 29, + ACTIONS(728), 1, + anon_sym_PIPE_GT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, sym__call_open_gap, - anon_sym_DOT, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(481), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(712), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(483), 23, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -31953,24 +32561,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_PLUS, anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29551] = 3, + [30328] = 8, ACTIONS(3), 1, sym_line_comment, - ACTIONS(533), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, + anon_sym_DOT, + ACTIONS(730), 1, + anon_sym_LBRACK2, + ACTIONS(732), 1, + sym__call_open_gap, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(485), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(535), 29, - sym__call_open_gap, - anon_sym_DOT, + ACTIONS(487), 26, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -31992,48 +32605,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PERCENT, anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29591] = 15, + [30380] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + ACTIONS(805), 1, + anon_sym_LBRACE, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(749), 13, + ACTIONS(494), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32047,68 +32663,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29655] = 15, + [30450] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(701), 1, + ACTIONS(708), 1, + anon_sym_LBRACE, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(751), 1, - anon_sym_LBRACE, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(494), 13, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [29719] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(443), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(445), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(498), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -32116,59 +32711,50 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29759] = 15, + [30520] = 16, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(451), 13, + ACTIONS(502), 14, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32182,93 +32768,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29823] = 3, + [30588] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(481), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(483), 29, - sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, + ACTIONS(716), 1, anon_sym_QMARK, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, + ACTIONS(720), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(726), 1, + anon_sym_SLASH, + ACTIONS(728), 1, anon_sym_PIPE_GT, + ACTIONS(730), 1, anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [29863] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(545), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(547), 29, + ACTIONS(732), 1, sym__call_open_gap, - anon_sym_DOT, + ACTIONS(808), 1, anon_sym_LBRACE, - anon_sym_RBRACE, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + anon_sym_PERCENT, + ACTIONS(714), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(724), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [29903] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(496), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(498), 29, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(509), 13, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -32276,59 +32816,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [29943] = 15, + [30658] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(754), 13, + ACTIONS(513), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32342,42 +32874,45 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30007] = 15, + [30728] = 16, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(756), 13, + ACTIONS(517), 14, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32391,42 +32926,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30071] = 15, + [30796] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + ACTIONS(811), 1, + anon_sym_LBRACE, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(758), 13, + ACTIONS(524), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32440,42 +32979,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30135] = 15, + [30866] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(760), 13, + ACTIONS(528), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32489,42 +33032,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30199] = 15, + [30936] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(762), 13, + ACTIONS(436), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32538,42 +33085,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30263] = 15, + [31006] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + ACTIONS(814), 1, + anon_sym_LBRACE, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(764), 13, + ACTIONS(535), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32587,42 +33138,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30327] = 15, + [31076] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(766), 13, + ACTIONS(539), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32636,42 +33191,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30391] = 15, + [31146] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + ACTIONS(817), 1, + anon_sym_LBRACE, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(768), 13, + ACTIONS(546), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32685,42 +33244,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30455] = 15, + [31216] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(770), 13, + ACTIONS(464), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32734,42 +33297,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30519] = 15, + [31286] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, + ACTIONS(708), 1, anon_sym_LBRACE, - ACTIONS(701), 1, + ACTIONS(716), 1, anon_sym_QMARK, - ACTIONS(703), 1, + ACTIONS(718), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(772), 13, + ACTIONS(820), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32783,43 +33350,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30583] = 15, + [31356] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(419), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(774), 13, + anon_sym_SLASH, + ACTIONS(421), 31, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_COLON_COLON, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -32827,47 +33372,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30647] = 15, + [31398] = 14, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(706), 1, anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, + ACTIONS(720), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, + ACTIONS(726), 1, anon_sym_SLASH, - ACTIONS(713), 1, + ACTIONS(728), 1, anon_sym_PIPE_GT, - ACTIONS(715), 1, + ACTIONS(730), 1, anon_sym_LBRACK2, - ACTIONS(717), 1, + ACTIONS(732), 1, sym__call_open_gap, - ACTIONS(697), 2, + STATE(1647), 1, + sym__call_type_arguments, + ACTIONS(712), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(714), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, + ACTIONS(724), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(707), 4, + ACTIONS(722), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(776), 13, + ACTIONS(483), 16, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -32876,48 +33432,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30711] = 15, + [31462] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(648), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(778), 13, + anon_sym_SLASH, + ACTIONS(651), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -32925,48 +33460,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30775] = 15, + [31503] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(572), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(780), 13, + anon_sym_SLASH, + ACTIONS(574), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -32974,48 +33498,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30839] = 15, + [31544] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(576), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(782), 13, + anon_sym_SLASH, + ACTIONS(579), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33023,48 +33536,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30903] = 15, + [31585] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(582), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(784), 13, + anon_sym_SLASH, + ACTIONS(584), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33072,48 +33574,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [30967] = 15, + [31626] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(586), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(786), 13, + anon_sym_SLASH, + ACTIONS(588), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33121,48 +33612,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31031] = 15, + [31667] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(590), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(788), 13, + anon_sym_SLASH, + ACTIONS(593), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33170,48 +33650,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [31095] = 15, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, anon_sym_QMARK, - ACTIONS(703), 1, anon_sym_PIPE_PIPE, - ACTIONS(705), 1, anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(790), 13, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [31708] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(596), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(598), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33219,48 +33688,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31159] = 15, + [31749] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(556), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(792), 13, + anon_sym_SLASH, + ACTIONS(558), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33268,48 +33726,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31223] = 15, + [31790] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(604), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(794), 13, + anon_sym_SLASH, + ACTIONS(606), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33317,48 +33764,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31287] = 15, + [31831] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(608), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(796), 13, + anon_sym_SLASH, + ACTIONS(610), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33366,48 +33802,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31351] = 15, + [31872] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(612), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(798), 13, + anon_sym_SLASH, + ACTIONS(614), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33415,20 +33840,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31415] = 3, + [31913] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(525), 3, + ACTIONS(568), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(527), 29, + ACTIONS(570), 30, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -33457,15 +33895,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31455] = 3, + [31954] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(485), 3, + ACTIONS(620), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(487), 29, + ACTIONS(622), 30, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -33494,15 +33933,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31495] = 3, + [31995] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(401), 3, + ACTIONS(600), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(403), 29, + ACTIONS(602), 30, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -33531,43 +33971,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31535] = 15, + [32036] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(628), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(800), 13, + anon_sym_SLASH, + ACTIONS(630), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33575,48 +33992,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31599] = 15, + [32077] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(632), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(802), 13, + anon_sym_SLASH, + ACTIONS(634), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33624,48 +34030,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31663] = 15, + [32118] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(693), 1, - anon_sym_DOT, - ACTIONS(695), 1, - anon_sym_LBRACE, - ACTIONS(701), 1, - anon_sym_QMARK, - ACTIONS(703), 1, - anon_sym_PIPE_PIPE, - ACTIONS(705), 1, - anon_sym_AMP_AMP, - ACTIONS(711), 1, - anon_sym_SLASH, - ACTIONS(713), 1, - anon_sym_PIPE_GT, - ACTIONS(715), 1, - anon_sym_LBRACK2, - ACTIONS(717), 1, - sym__call_open_gap, - ACTIONS(697), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(699), 2, + ACTIONS(624), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(709), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(707), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - ACTIONS(804), 13, + anon_sym_SLASH, + ACTIONS(626), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -33673,20 +34068,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31727] = 3, + [32159] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(604), 3, + ACTIONS(640), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(607), 29, + ACTIONS(642), 30, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -33715,15 +34123,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31767] = 3, + [32200] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(683), 3, + ACTIONS(548), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(685), 29, + ACTIONS(550), 30, sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -33752,287 +34161,973 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [31807] = 16, - ACTIONS(298), 1, + [32241] = 3, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(682), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(684), 30, sym__call_open_gap, - ACTIONS(455), 1, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(808), 1, - anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(811), 3, - anon_sym_RBRACE, - anon_sym_LPAREN, - sym_float, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(806), 8, - anon_sym__, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - [31871] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(439), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32282] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(644), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(646), 30, sym__call_open_gap, - ACTIONS(455), 1, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(815), 1, - anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(818), 3, - anon_sym_RBRACE, - anon_sym_LPAREN, - sym_float, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(813), 8, - anon_sym__, - anon_sym_LBRACK, - anon_sym_true, - anon_sym_false, - sym_integer, - sym_string, - sym_interpolated_string, - sym_identifier, - [31935] = 5, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32323] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(820), 1, - anon_sym_COLON_COLON, - STATE(389), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(419), 9, + ACTIONS(654), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(656), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_LT, - anon_sym_LPAREN, - anon_sym_PIPE, - anon_sym_BANG, - anon_sym_LBRACK, - anon_sym_PLUS, - sym__doc_comment_line, - ACTIONS(417), 18, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_where, sym_static_stage, anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, - anon_sym_opaque, anon_sym_signature, - sym_identifier, - [31976] = 5, + sym__doc_comment_line, + [32364] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(823), 1, - anon_sym_COLON_COLON, - STATE(389), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(415), 8, + ACTIONS(658), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(660), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_LT, - anon_sym_LPAREN, - anon_sym_PIPE, - anon_sym_BANG, - anon_sym_LBRACK, - sym__doc_comment_line, - ACTIONS(413), 18, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_where, sym_static_stage, anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, - anon_sym_opaque, anon_sym_signature, - sym_identifier, - [32016] = 3, + sym__doc_comment_line, + [32405] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(419), 10, - anon_sym_COLON_COLON, + ACTIONS(636), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(638), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_LT, - anon_sym_LPAREN, - anon_sym_PIPE, - anon_sym_BANG, - anon_sym_LBRACK, - anon_sym_PLUS, - sym__doc_comment_line, - ACTIONS(417), 18, + anon_sym_STAR, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_where, sym_static_stage, anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, anon_sym_state, anon_sym_module, anon_sym_export, - anon_sym_opaque, anon_sym_signature, - sym_identifier, - [32052] = 17, + sym__doc_comment_line, + [32446] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(825), 1, + ACTIONS(666), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(668), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, - ACTIONS(829), 1, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, anon_sym_fn, - ACTIONS(831), 1, anon_sym_extern, - ACTIONS(833), 1, anon_sym_type, - ACTIONS(835), 1, sym_static_stage, - ACTIONS(837), 1, anon_sym_effect, - ACTIONS(839), 1, - anon_sym_state, - ACTIONS(841), 1, - anon_sym_module, - ACTIONS(843), 1, - anon_sym_export, - ACTIONS(845), 1, - anon_sym_signature, - STATE(224), 1, - aux_sym_doc_comment_repeat1, - STATE(795), 1, - sym_doc_comment, - ACTIONS(827), 2, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32487] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(403), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, anon_sym_let, anon_sym_mut, - STATE(412), 2, - sym_module_item, - aux_sym_module_declaration_repeat1, - STATE(708), 9, - sym_let_declaration, - sym_function_declaration, - sym_extern_declaration, - sym_type_declaration, - sym_effect_declaration, - sym_module_declaration, - sym_export_declaration, - sym__module_declaration, - sym_signature_declaration, - [32114] = 17, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32528] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(71), 1, + ACTIONS(674), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(676), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, sym__doc_comment_line, - ACTIONS(829), 1, + [32569] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(678), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(680), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32610] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(686), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(688), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32651] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(690), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(692), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32692] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(694), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(696), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32733] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(564), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(566), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32774] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(662), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(664), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32815] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(552), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(554), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32856] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(670), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(672), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32897] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(560), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(562), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32938] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(616), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(618), 30, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [32979] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(824), 1, + anon_sym_LBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(827), 3, + anon_sym_RBRACE, + anon_sym_LPAREN, + sym_float, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(822), 8, + anon_sym__, + anon_sym_LBRACK, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + [33049] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, ACTIONS(831), 1, + anon_sym_LBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(834), 3, + anon_sym_RBRACE, + anon_sym_LPAREN, + sym_float, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(829), 8, + anon_sym__, + anon_sym_LBRACK, + anon_sym_true, + anon_sym_false, + sym_integer, + sym_string, + sym_interpolated_string, + sym_identifier, + [33119] = 5, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(836), 1, + anon_sym_COLON_COLON, + STATE(396), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(421), 9, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_LT, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_BANG, + anon_sym_LBRACK, + anon_sym_PLUS, + sym__doc_comment_line, + ACTIONS(419), 18, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, anon_sym_extern, - ACTIONS(833), 1, anon_sym_type, - ACTIONS(835), 1, + anon_sym_where, sym_static_stage, - ACTIONS(837), 1, anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_opaque, + anon_sym_signature, + sym_identifier, + [33160] = 5, + ACTIONS(3), 1, + sym_line_comment, ACTIONS(839), 1, + anon_sym_COLON_COLON, + STATE(396), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(428), 8, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_LT, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_BANG, + anon_sym_LBRACK, + sym__doc_comment_line, + ACTIONS(426), 18, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_opaque, + anon_sym_signature, + sym_identifier, + [33200] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(421), 10, + anon_sym_COLON_COLON, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_LT, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_BANG, + anon_sym_LBRACK, + anon_sym_PLUS, + sym__doc_comment_line, + ACTIONS(419), 18, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, anon_sym_state, - ACTIONS(841), 1, anon_sym_module, - ACTIONS(843), 1, anon_sym_export, - ACTIONS(845), 1, + anon_sym_opaque, anon_sym_signature, - ACTIONS(847), 1, + sym_identifier, + [33236] = 10, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(412), 1, + anon_sym_LT, + ACTIONS(841), 1, + anon_sym_COLON_COLON, + ACTIONS(843), 1, + anon_sym_LBRACE, + ACTIONS(846), 1, + anon_sym_COLON, + ACTIONS(849), 1, + anon_sym_EQ, + STATE(439), 1, + aux_sym_qualified_path_repeat1, + STATE(1598), 1, + sym_type_arguments, + ACTIONS(403), 2, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 18, + sym__call_open_gap, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [33285] = 17, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(851), 1, anon_sym_RBRACE, - STATE(224), 1, + ACTIONS(855), 1, + anon_sym_fn, + ACTIONS(857), 1, + anon_sym_extern, + ACTIONS(859), 1, + anon_sym_type, + ACTIONS(861), 1, + sym_static_stage, + ACTIONS(863), 1, + anon_sym_effect, + ACTIONS(865), 1, + anon_sym_state, + ACTIONS(867), 1, + anon_sym_module, + ACTIONS(869), 1, + anon_sym_export, + ACTIONS(871), 1, + anon_sym_signature, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(398), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34042,42 +35137,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32176] = 17, + [33347] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(849), 1, + ACTIONS(873), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34087,42 +35182,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32238] = 17, + [33409] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(851), 1, + ACTIONS(875), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(400), 2, + STATE(432), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34132,42 +35227,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32300] = 17, + [33471] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(853), 1, + ACTIONS(877), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(410), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34177,42 +35272,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32362] = 17, + [33533] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(855), 1, + ACTIONS(879), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(412), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34222,42 +35317,191 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32424] = 17, + [33595] = 9, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(407), 1, + anon_sym_COLON_COLON, + ACTIONS(409), 1, + anon_sym_LBRACE, + ACTIONS(412), 1, + anon_sym_LT, + ACTIONS(881), 1, + anon_sym_COLON, + STATE(232), 1, + aux_sym_qualified_path_repeat1, + STATE(1683), 1, + sym_type_arguments, + ACTIONS(403), 2, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 18, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_STAR, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [33641] = 8, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(412), 1, + anon_sym_LT, + ACTIONS(841), 1, + anon_sym_COLON_COLON, + ACTIONS(843), 1, + anon_sym_LBRACE, + STATE(439), 1, + aux_sym_qualified_path_repeat1, + STATE(1598), 1, + sym_type_arguments, + ACTIONS(403), 3, + anon_sym_COLON, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 18, + sym__call_open_gap, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [33685] = 11, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(407), 1, + anon_sym_COLON_COLON, + ACTIONS(409), 1, + anon_sym_LBRACE, + ACTIONS(412), 1, + anon_sym_LT, + ACTIONS(883), 1, + anon_sym_RBRACE, + ACTIONS(886), 1, + anon_sym_COMMA, + STATE(232), 1, + aux_sym_qualified_path_repeat1, + STATE(1162), 1, + aux_sym_field_pattern_repeat1, + STATE(1683), 1, + sym_type_arguments, + ACTIONS(403), 2, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 16, + sym__call_open_gap, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [33735] = 9, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(412), 1, + anon_sym_LT, + ACTIONS(841), 1, + anon_sym_COLON_COLON, + ACTIONS(843), 1, + anon_sym_LBRACE, + ACTIONS(849), 1, + anon_sym_EQ, + STATE(439), 1, + aux_sym_qualified_path_repeat1, + STATE(1598), 1, + sym_type_arguments, + ACTIONS(403), 2, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 18, + sym__call_open_gap, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [33781] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(857), 1, + ACTIONS(888), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34267,42 +35511,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32486] = 17, + [33843] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(859), 1, + ACTIONS(890), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(401), 2, + STATE(436), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34312,42 +35556,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32548] = 17, + [33905] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(892), 1, + anon_sym_RBRACE, + ACTIONS(897), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(900), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(903), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(906), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(909), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(912), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(915), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(918), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(921), 1, anon_sym_signature, - ACTIONS(861), 1, - anon_sym_RBRACE, - STATE(224), 1, + ACTIONS(924), 1, + sym__doc_comment_line, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(894), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34357,42 +35601,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32610] = 17, + [33967] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(863), 1, + ACTIONS(927), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34402,42 +35646,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32672] = 17, + [34029] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(865), 1, + ACTIONS(929), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(401), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34447,42 +35691,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32734] = 17, + [34091] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(867), 1, + ACTIONS(931), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(402), 2, + STATE(419), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34492,42 +35736,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32796] = 17, + [34153] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(869), 1, + ACTIONS(933), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(400), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34537,42 +35781,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32858] = 17, + [34215] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, - anon_sym_signature, ACTIONS(871), 1, + anon_sym_signature, + ACTIONS(935), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(397), 2, + STATE(420), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34582,42 +35826,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32920] = 17, + [34277] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(873), 1, + ACTIONS(937), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(422), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34627,42 +35871,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [32982] = 17, + [34339] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(875), 1, + ACTIONS(939), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(394), 2, + STATE(424), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34672,42 +35916,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33044] = 17, + [34401] = 17, ACTIONS(3), 1, sym_line_comment, - ACTIONS(877), 1, - anon_sym_RBRACE, - ACTIONS(882), 1, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(885), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(888), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(891), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(894), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(897), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(900), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(903), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(906), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(909), 1, - sym__doc_comment_line, - STATE(224), 1, + ACTIONS(941), 1, + anon_sym_RBRACE, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(879), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34717,42 +35961,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33106] = 17, + [34463] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(912), 1, + ACTIONS(943), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(415), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34762,42 +36006,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33168] = 17, + [34525] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(914), 1, + ACTIONS(945), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(427), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34807,42 +36051,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33230] = 17, + [34587] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(916), 1, + ACTIONS(947), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34852,42 +36096,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33292] = 17, + [34649] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(918), 1, + ACTIONS(949), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(428), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34897,42 +36141,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33354] = 17, + [34711] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(920), 1, + ACTIONS(951), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34942,42 +36186,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33416] = 17, + [34773] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(922), 1, + ACTIONS(953), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(421), 2, + STATE(430), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -34987,42 +36231,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33478] = 17, + [34835] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(924), 1, + ACTIONS(955), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(435), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35032,42 +36276,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33540] = 17, + [34897] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(926), 1, + ACTIONS(957), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(413), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35077,42 +36321,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33602] = 17, + [34959] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(928), 1, + ACTIONS(959), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(406), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35122,42 +36366,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33664] = 17, + [35021] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(930), 1, + ACTIONS(961), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(425), 2, + STATE(431), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35167,80 +36411,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33726] = 10, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(410), 1, - anon_sym_LT, - ACTIONS(932), 1, - anon_sym_COLON_COLON, - ACTIONS(934), 1, - anon_sym_LBRACE, - ACTIONS(937), 1, - anon_sym_COLON, - ACTIONS(940), 1, - anon_sym_EQ, - STATE(431), 1, - aux_sym_qualified_path_repeat1, - STATE(1461), 1, - sym_type_arguments, - ACTIONS(401), 2, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(403), 17, - sym__call_open_gap, - sym__statement_break, - anon_sym_DOT, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [33774] = 17, + [35083] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(942), 1, + ACTIONS(963), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(424), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35250,42 +36456,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33836] = 17, + [35145] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(944), 1, + ACTIONS(965), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35295,42 +36501,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33898] = 17, + [35207] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(946), 1, + ACTIONS(967), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35340,42 +36546,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [33960] = 17, + [35269] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(948), 1, + ACTIONS(969), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(404), 2, + STATE(403), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35385,42 +36591,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [34022] = 17, + [35331] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(950), 1, + ACTIONS(971), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(409), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35430,42 +36636,42 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [34084] = 17, + [35393] = 17, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(829), 1, + ACTIONS(855), 1, anon_sym_fn, - ACTIONS(831), 1, + ACTIONS(857), 1, anon_sym_extern, - ACTIONS(833), 1, + ACTIONS(859), 1, anon_sym_type, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(839), 1, + ACTIONS(865), 1, anon_sym_state, - ACTIONS(841), 1, + ACTIONS(867), 1, anon_sym_module, - ACTIONS(843), 1, + ACTIONS(869), 1, anon_sym_export, - ACTIONS(845), 1, + ACTIONS(871), 1, anon_sym_signature, - ACTIONS(952), 1, + ACTIONS(973), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(795), 1, + STATE(804), 1, sym_doc_comment, - ACTIONS(827), 2, + ACTIONS(853), 2, anon_sym_let, anon_sym_mut, - STATE(408), 2, + STATE(411), 2, sym_module_item, aux_sym_module_declaration_repeat1, - STATE(708), 9, + STATE(751), 9, sym_let_declaration, sym_function_declaration, sym_extern_declaration, @@ -35475,95 +36681,67 @@ static const uint16_t ts_small_parse_table[] = { sym_export_declaration, sym__module_declaration, sym_signature_declaration, - [34146] = 8, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(410), 1, - anon_sym_LT, - ACTIONS(932), 1, - anon_sym_COLON_COLON, - ACTIONS(934), 1, - anon_sym_LBRACE, - STATE(431), 1, - aux_sym_qualified_path_repeat1, - STATE(1461), 1, - sym_type_arguments, - ACTIONS(401), 3, - anon_sym_COLON, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(403), 17, - sym__call_open_gap, - sym__statement_break, - anon_sym_DOT, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [34189] = 11, - ACTIONS(298), 1, + [35455] = 17, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(405), 1, - anon_sym_COLON_COLON, - ACTIONS(407), 1, - anon_sym_LBRACE, - ACTIONS(410), 1, - anon_sym_LT, - ACTIONS(954), 1, - anon_sym_RBRACE, - ACTIONS(957), 1, - anon_sym_COMMA, - STATE(228), 1, - aux_sym_qualified_path_repeat1, - STATE(1243), 1, - aux_sym_field_pattern_repeat1, - STATE(1654), 1, - sym_type_arguments, - ACTIONS(401), 2, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(403), 15, - sym__call_open_gap, - anon_sym_DOT, - anon_sym_STAR, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [34238] = 7, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(855), 1, + anon_sym_fn, + ACTIONS(857), 1, + anon_sym_extern, + ACTIONS(859), 1, + anon_sym_type, + ACTIONS(861), 1, + sym_static_stage, + ACTIONS(863), 1, + anon_sym_effect, + ACTIONS(865), 1, + anon_sym_state, + ACTIONS(867), 1, + anon_sym_module, + ACTIONS(869), 1, + anon_sym_export, + ACTIONS(871), 1, + anon_sym_signature, + ACTIONS(975), 1, + anon_sym_RBRACE, + STATE(227), 1, + aux_sym_doc_comment_repeat1, + STATE(804), 1, + sym_doc_comment, + ACTIONS(853), 2, + anon_sym_let, + anon_sym_mut, + STATE(411), 2, + sym_module_item, + aux_sym_module_declaration_repeat1, + STATE(751), 9, + sym_let_declaration, + sym_function_declaration, + sym_extern_declaration, + sym_type_declaration, + sym_effect_declaration, + sym_module_declaration, + sym_export_declaration, + sym__module_declaration, + sym_signature_declaration, + [35517] = 7, ACTIONS(3), 1, sym_line_comment, - ACTIONS(823), 1, + ACTIONS(839), 1, anon_sym_COLON_COLON, - ACTIONS(963), 1, + ACTIONS(981), 1, anon_sym_LT, - ACTIONS(965), 1, + ACTIONS(983), 1, anon_sym_LBRACK, - STATE(390), 1, + STATE(397), 1, aux_sym_qualified_path_repeat1, - ACTIONS(961), 3, + ACTIONS(979), 3, anon_sym_RBRACE, anon_sym_BANG, sym__doc_comment_line, - ACTIONS(959), 18, + ACTIONS(977), 18, anon_sym_let, anon_sym_mut, anon_sym_fn, @@ -35582,28 +36760,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym_identifier, - [34279] = 9, + [35558] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(410), 1, - anon_sym_LT, - ACTIONS(932), 1, + ACTIONS(985), 1, anon_sym_COLON_COLON, - ACTIONS(934), 1, - anon_sym_LBRACE, - ACTIONS(940), 1, - anon_sym_EQ, - STATE(431), 1, + STATE(438), 1, aux_sym_qualified_path_repeat1, - STATE(1461), 1, - sym_type_arguments, - ACTIONS(401), 2, + ACTIONS(419), 4, + anon_sym_COLON, + anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(403), 17, + ACTIONS(421), 19, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, anon_sym_QMARK, @@ -35618,30 +36792,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [34324] = 9, + [35595] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(405), 1, + ACTIONS(841), 1, anon_sym_COLON_COLON, - ACTIONS(407), 1, - anon_sym_LBRACE, - ACTIONS(410), 1, - anon_sym_LT, - ACTIONS(967), 1, - anon_sym_COLON, - STATE(228), 1, + STATE(438), 1, aux_sym_qualified_path_repeat1, - STATE(1654), 1, - sym_type_arguments, - ACTIONS(401), 2, + ACTIONS(426), 4, + anon_sym_COLON, + anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(403), 17, + ACTIONS(428), 19, sym__call_open_gap, + sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, anon_sym_STAR, - anon_sym_COMMA, - anon_sym_RPAREN, anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, @@ -35654,22 +36824,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [34369] = 5, + [35632] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(932), 1, - anon_sym_COLON_COLON, - STATE(432), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(413), 4, + ACTIONS(419), 4, anon_sym_COLON, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(415), 18, + ACTIONS(421), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, + anon_sym_COLON_COLON, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -35685,53 +36853,71 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [34405] = 5, + [35664] = 19, ACTIONS(298), 1, sym_line_comment, - ACTIONS(969), 1, - anon_sym_COLON_COLON, - STATE(432), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(417), 4, - anon_sym_COLON, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(419), 18, - sym__call_open_gap, - sym__statement_break, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(988), 1, + anon_sym_COMMA, + ACTIONS(990), 1, + anon_sym_RPAREN, + STATE(1202), 1, + aux_sym_argument_list_repeat1, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [34441] = 6, + [35728] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(410), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(469), 3, anon_sym_LT, - ACTIONS(972), 1, - anon_sym_LBRACE, - STATE(1461), 1, - sym_type_arguments, - ACTIONS(401), 2, anon_sym_GT, anon_sym_SLASH, - ACTIONS(403), 18, - sym__call_open_gap, + ACTIONS(471), 16, sym__statement_break, - anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, anon_sym_COLON, @@ -35746,294 +36932,325 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PERCENT, anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [34478] = 3, + [35770] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(417), 4, - anon_sym_COLON, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(419), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - anon_sym_COLON_COLON, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(998), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, + ACTIONS(1005), 1, anon_sym_QMARK, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(524), 3, + sym__statement_break, + anon_sym_RBRACE, + anon_sym_COLON, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [34509] = 15, + [35830] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(975), 1, - sym_identifier, - ACTIONS(977), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, anon_sym_LBRACE, - ACTIONS(979), 1, - anon_sym_RBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - STATE(1267), 1, - sym_qualified_path, - STATE(1390), 1, - sym_pattern, - STATE(1700), 1, - sym_field_pattern, - ACTIONS(987), 2, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(505), 2, - sym_match_arm, - aux_sym_match_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [34564] = 15, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(975), 1, - sym_identifier, - ACTIONS(977), 1, - anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(993), 1, + ACTIONS(479), 3, + sym__statement_break, + anon_sym_RBRACE, + anon_sym_COLON, + ACTIONS(1011), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [35890] = 19, + ACTIONS(234), 1, anon_sym_RBRACE, - STATE(1267), 1, - sym_qualified_path, - STATE(1390), 1, - sym_pattern, - STATE(1700), 1, - sym_field_pattern, - ACTIONS(987), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(454), 2, - sym_match_arm, - aux_sym_match_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [34619] = 15, ACTIONS(298), 1, sym_line_comment, - ACTIONS(975), 1, - sym_identifier, - ACTIONS(977), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(995), 1, - anon_sym_RBRACE, - STATE(1267), 1, - sym_qualified_path, - STATE(1390), 1, - sym_pattern, - STATE(1700), 1, - sym_field_pattern, - ACTIONS(987), 2, + ACTIONS(1021), 1, + anon_sym_COLON, + ACTIONS(1023), 1, + sym__statement_break, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(511), 2, - sym_match_arm, - aux_sym_match_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [34674] = 5, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(963), 1, - anon_sym_LT, - ACTIONS(965), 1, - anon_sym_LBRACK, - ACTIONS(961), 3, - anon_sym_RBRACE, - anon_sym_BANG, - sym__doc_comment_line, - ACTIONS(959), 18, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym_identifier, - [34709] = 7, + ACTIONS(1011), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [35954] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(427), 3, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(431), 15, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(502), 4, sym__statement_break, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - [34747] = 15, + [36012] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(451), 3, + ACTIONS(513), 3, sym__statement_break, anon_sym_RBRACE, anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [34801] = 3, + [36072] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(481), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(483), 19, - sym__call_open_gap, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(475), 3, sym__statement_break, - anon_sym_DOT, - anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, + ACTIONS(1011), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [36132] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, anon_sym_QMARK, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(528), 3, + sym__statement_break, + anon_sym_RBRACE, + anon_sym_COLON, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [34831] = 3, + [36192] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(529), 3, + ACTIONS(412), 1, anon_sym_LT, + ACTIONS(1025), 1, + anon_sym_LBRACE, + STATE(1598), 1, + sym_type_arguments, + ACTIONS(403), 2, anon_sym_GT, anon_sym_SLASH, - ACTIONS(531), 19, + ACTIONS(405), 19, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, - anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, anon_sym_COLON, @@ -36049,573 +37266,633 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [34861] = 10, + [36230] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(1021), 1, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(427), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1019), 2, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(431), 11, + ACTIONS(498), 3, sym__statement_break, - anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [34905] = 12, + [36290] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(1015), 1, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1028), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(494), 3, + sym__statement_break, + anon_sym_RBRACE, + anon_sym_COLON, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(431), 6, - sym__statement_break, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - [34953] = 11, + [36350] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1031), 3, + anon_sym_in, + anon_sym_do, + sym_identifier, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - ACTIONS(431), 7, - sym__statement_break, + [36410] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COLON, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - [34999] = 9, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(427), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1007), 2, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(431), 13, - sym__statement_break, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1033), 3, + anon_sym_in, + anon_sym_do, + sym_identifier, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - [35041] = 6, + [36470] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(537), 3, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(539), 16, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(436), 3, sym__statement_break, - anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - [35077] = 3, + [36530] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(541), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(543), 19, - sym__call_open_gap, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(517), 4, sym__statement_break, - anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35107] = 3, + [36588] = 19, ACTIONS(298), 1, sym_line_comment, - ACTIONS(683), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(685), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(988), 1, + anon_sym_COMMA, + ACTIONS(1035), 1, + anon_sym_RBRACK, + STATE(1170), 1, + aux_sym_argument_list_repeat1, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35137] = 15, + [36652] = 14, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1023), 1, - anon_sym_LBRACE, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(558), 3, - sym__statement_break, - anon_sym_RBRACE, - anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [35191] = 15, + ACTIONS(483), 6, + sym__statement_break, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COLON, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + [36706] = 13, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1026), 3, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_RBRACK, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [35245] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(560), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(562), 19, - sym__call_open_gap, + ACTIONS(483), 7, sym__statement_break, - anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35275] = 3, + [36758] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(564), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(566), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, anon_sym_QMARK, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35305] = 14, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1037), 1, anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(1028), 1, - sym_identifier, - ACTIONS(1030), 1, - anon_sym_RBRACE, - STATE(1267), 1, - sym_qualified_path, - STATE(1390), 1, - sym_pattern, - ACTIONS(987), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(481), 2, - sym_match_arm, - aux_sym_match_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [35357] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(604), 3, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(607), 19, - sym__call_open_gap, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(509), 3, sym__statement_break, - anon_sym_DOT, - anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35387] = 3, + [36818] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(485), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1040), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(487), 19, - sym__call_open_gap, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(535), 3, sym__statement_break, - anon_sym_DOT, - anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35417] = 17, - ACTIONS(184), 1, + [36878] = 19, + ACTIONS(250), 1, anon_sym_RBRACE, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1032), 1, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1021), 1, anon_sym_COLON, - ACTIONS(1034), 1, + ACTIONS(1023), 1, sym__statement_break, - ACTIONS(1007), 2, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [35475] = 3, + [36942] = 19, ACTIONS(298), 1, sym_line_comment, - ACTIONS(401), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(403), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(988), 1, + anon_sym_COMMA, + ACTIONS(1043), 1, + anon_sym_RBRACK, + STATE(1132), 1, + aux_sym_argument_list_repeat1, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35505] = 15, + [37006] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(570), 3, + ACTIONS(539), 3, sym__statement_break, anon_sym_RBRACE, anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [35559] = 3, + [37066] = 11, ACTIONS(298), 1, sym_line_comment, - ACTIONS(572), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(481), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(574), 19, - sym__call_open_gap, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(483), 13, sym__statement_break, - anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, anon_sym_QMARK, anon_sym_PIPE_PIPE, @@ -36626,58 +37903,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_PLUS, anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35589] = 14, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1036), 1, - sym_identifier, - ACTIONS(1039), 1, - anon_sym_LBRACE, - ACTIONS(1042), 1, - anon_sym_RBRACE, - ACTIONS(1044), 1, - anon_sym_LPAREN, - ACTIONS(1050), 1, - anon_sym_LBRACK, - ACTIONS(1059), 1, - sym_float, - STATE(1267), 1, - sym_qualified_path, - STATE(1504), 1, - sym_pattern, - ACTIONS(1053), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1056), 2, - anon_sym_true, - anon_sym_false, - STATE(461), 2, - sym_select_arm, - aux_sym_select_expression_repeat1, - ACTIONS(1047), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [35641] = 3, + [37114] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(576), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(485), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(579), 19, - sym__call_open_gap, + ACTIONS(487), 16, sym__statement_break, - anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_STAR, @@ -36693,274 +37937,202 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PERCENT, anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35671] = 3, + [37156] = 19, + ACTIONS(244), 1, + anon_sym_RBRACE, ACTIONS(298), 1, sym_line_comment, - ACTIONS(545), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(547), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, anon_sym_QMARK, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35701] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(582), 3, - anon_sym_LT, - anon_sym_GT, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(584), 19, - sym__call_open_gap, - sym__statement_break, - anon_sym_DOT, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, + ACTIONS(1021), 1, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1023), 1, + sym__statement_break, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35731] = 3, + [37220] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(586), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(588), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, anon_sym_QMARK, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35761] = 15, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(829), 1, - anon_sym_fn, - ACTIONS(831), 1, - anon_sym_extern, - ACTIONS(833), 1, - anon_sym_type, - ACTIONS(835), 1, - sym_static_stage, - ACTIONS(837), 1, - anon_sym_effect, - ACTIONS(839), 1, - anon_sym_state, - ACTIONS(841), 1, - anon_sym_module, - ACTIONS(845), 1, - anon_sym_signature, - ACTIONS(1062), 1, - anon_sym_opaque, - STATE(224), 1, - aux_sym_doc_comment_repeat1, - STATE(820), 1, - sym_doc_comment, - ACTIONS(827), 2, - anon_sym_let, - anon_sym_mut, - STATE(698), 8, - sym_let_declaration, - sym_function_declaration, - sym_extern_declaration, - sym_type_declaration, - sym_effect_declaration, - sym_module_declaration, - sym__module_declaration, - sym_signature_declaration, - [35815] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(590), 3, + ACTIONS(1045), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(593), 19, - sym__call_open_gap, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(546), 3, sym__statement_break, - anon_sym_DOT, - anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35845] = 3, + [37280] = 19, ACTIONS(298), 1, sym_line_comment, - ACTIONS(596), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(598), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [35875] = 17, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1064), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(988), 1, anon_sym_COMMA, - ACTIONS(1066), 1, - anon_sym_RPAREN, - STATE(1147), 1, + ACTIONS(1048), 1, + anon_sym_RBRACK, + STATE(1239), 1, aux_sym_argument_list_repeat1, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [35933] = 14, + [37344] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(1011), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(602), 4, + ACTIONS(464), 3, sym__statement_break, - anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [35985] = 6, + [37404] = 9, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(465), 3, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(481), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(467), 16, + ACTIONS(483), 15, sym__statement_break, anon_sym_LBRACE, anon_sym_RBRACE, @@ -36976,21 +38148,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_DASH, anon_sym_PERCENT, - anon_sym_PIPE_GT, - [36021] = 3, + [37448] = 12, ACTIONS(298), 1, sym_line_comment, - ACTIONS(610), 3, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(481), 2, anon_sym_LT, anon_sym_GT, - anon_sym_SLASH, - ACTIONS(612), 19, - sym__call_open_gap, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(483), 11, sym__statement_break, - anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_STAR, anon_sym_COLON, anon_sym_QMARK, anon_sym_PIPE_PIPE, @@ -36999,21 +38186,60 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, + [37498] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, anon_sym_PIPE_GT, + ACTIONS(456), 1, anon_sym_LBRACK2, - [36051] = 3, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1050), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [37558] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(614), 3, + ACTIONS(674), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(616), 19, + ACTIONS(676), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37031,16 +38257,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36081] = 3, + [37589] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(469), 3, + ACTIONS(654), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(471), 19, + ACTIONS(656), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37058,123 +38285,87 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36111] = 17, + [37620] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(658), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(660), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(1064), 1, - anon_sym_COMMA, - ACTIONS(1068), 1, - anon_sym_RBRACK, - STATE(1180), 1, - aux_sym_argument_list_repeat1, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [36169] = 15, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [37651] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1011), 1, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1070), 1, - anon_sym_LBRACE, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(623), 3, - sym__statement_break, - anon_sym_RBRACE, - anon_sym_COLON, - ACTIONS(1017), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [36223] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(496), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(498), 19, - sym__call_open_gap, - sym__statement_break, - anon_sym_DOT, - anon_sym_LBRACE, + ACTIONS(1052), 2, anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, - anon_sym_QMARK, - anon_sym_PIPE_PIPE, - anon_sym_AMP_AMP, + anon_sym_COMMA, + ACTIONS(448), 4, anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - anon_sym_PLUS, - anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [36253] = 3, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [37710] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(500), 3, + ACTIONS(576), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(502), 19, + ACTIONS(579), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37192,16 +38383,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36283] = 3, + [37741] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(504), 3, + ACTIONS(582), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(506), 19, + ACTIONS(584), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37219,81 +38411,142 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36313] = 3, + [37772] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(625), 3, - anon_sym_LT, - anon_sym_GT, - anon_sym_SLASH, - ACTIONS(627), 19, - sym__call_open_gap, - sym__statement_break, + ACTIONS(432), 1, anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_STAR, - anon_sym_COLON, + ACTIONS(442), 1, anon_sym_QMARK, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1054), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, + [37831] = 18, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1023), 1, + sym__statement_break, + ACTIONS(1056), 1, + anon_sym_RBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - anon_sym_PERCENT, - anon_sym_PIPE_GT, - anon_sym_LBRACK2, - [36343] = 14, + ACTIONS(1011), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [37892] = 15, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1073), 1, + ACTIONS(1058), 1, sym_identifier, - ACTIONS(1076), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(1079), 1, + ACTIONS(1062), 1, anon_sym_RBRACE, - ACTIONS(1081), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(1087), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(1096), 1, + ACTIONS(1074), 1, sym_float, - STATE(1267), 1, + STATE(1282), 1, sym_qualified_path, - STATE(1390), 1, + STATE(1682), 1, sym_pattern, - ACTIONS(1090), 2, + STATE(1729), 1, + sym_field_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1093), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - STATE(481), 2, + STATE(555), 2, sym_match_arm, aux_sym_match_expression_repeat1, - ACTIONS(1084), 4, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [36395] = 3, + [37947] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(508), 3, + ACTIONS(596), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(510), 19, + ACTIONS(598), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37311,55 +38564,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36425] = 15, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(829), 1, - anon_sym_fn, - ACTIONS(831), 1, - anon_sym_extern, - ACTIONS(833), 1, - anon_sym_type, - ACTIONS(835), 1, - sym_static_stage, - ACTIONS(837), 1, - anon_sym_effect, - ACTIONS(839), 1, - anon_sym_state, - ACTIONS(841), 1, - anon_sym_module, - ACTIONS(845), 1, - anon_sym_signature, - ACTIONS(1099), 1, - anon_sym_opaque, - STATE(224), 1, - aux_sym_doc_comment_repeat1, - STATE(820), 1, - sym_doc_comment, - ACTIONS(827), 2, - anon_sym_let, - anon_sym_mut, - STATE(721), 8, - sym_let_declaration, - sym_function_declaration, - sym_extern_declaration, - sym_type_declaration, - sym_effect_declaration, - sym_module_declaration, - sym__module_declaration, - sym_signature_declaration, - [36479] = 3, + [37978] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(633), 3, + ACTIONS(670), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(635), 19, + ACTIONS(672), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37377,16 +38592,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36509] = 3, + [38009] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(637), 3, + ACTIONS(640), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(639), 19, + ACTIONS(642), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37404,93 +38620,88 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36539] = 14, + [38040] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, - anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(604), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(643), 4, + anon_sym_SLASH, + ACTIONS(606), 20, + sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COLON, - ACTIONS(1017), 4, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [36591] = 15, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [38071] = 18, + ACTIONS(248), 1, + anon_sym_RBRACE, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(1011), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1101), 1, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, anon_sym_LBRACE, - ACTIONS(1007), 2, + ACTIONS(1023), 1, + sym__statement_break, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(650), 3, - sym__statement_break, - anon_sym_RBRACE, - anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [36645] = 3, + [38132] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(512), 3, + ACTIONS(636), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(514), 19, + ACTIONS(638), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37508,16 +38719,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36675] = 3, + [38163] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(525), 3, + ACTIONS(682), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(527), 19, + ACTIONS(684), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37535,133 +38747,115 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36705] = 15, + [38194] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, - anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(568), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(475), 3, + anon_sym_SLASH, + ACTIONS(570), 20, + sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COLON, - ACTIONS(1017), 4, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [36759] = 15, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, - anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, + [38225] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(608), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(654), 3, + anon_sym_SLASH, + ACTIONS(610), 20, + sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COLON, - ACTIONS(1017), 4, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [36813] = 15, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [38256] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(658), 3, - sym__statement_break, - anon_sym_RBRACE, - anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1076), 2, + anon_sym_in, + sym_identifier, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [36867] = 3, + [38315] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(660), 3, + ACTIONS(620), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(662), 19, + ACTIONS(622), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37679,16 +38873,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36897] = 3, + [38346] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(664), 3, + ACTIONS(612), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(666), 19, + ACTIONS(614), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37706,132 +38901,102 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [36927] = 15, + [38377] = 18, + ACTIONS(242), 1, + anon_sym_RBRACE, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1023), 1, + sym__statement_break, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(479), 3, - sym__statement_break, - anon_sym_RBRACE, - anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [36981] = 15, + [38438] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1011), 1, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1104), 1, - anon_sym_LBRACE, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(673), 3, - sym__statement_break, + ACTIONS(1078), 2, anon_sym_RBRACE, - anon_sym_COLON, - ACTIONS(1017), 4, + anon_sym_COMMA, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37035] = 14, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(977), 1, - anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(1028), 1, - sym_identifier, - ACTIONS(1107), 1, - anon_sym_RBRACE, - STATE(1267), 1, - sym_qualified_path, - STATE(1504), 1, - sym_pattern, - ACTIONS(987), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(461), 2, - sym_select_arm, - aux_sym_select_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [37087] = 3, + [38497] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(675), 3, + ACTIONS(628), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(677), 19, + ACTIONS(630), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37849,55 +39014,59 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [37117] = 15, + [38528] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(681), 3, - sym__statement_break, - anon_sym_RBRACE, - anon_sym_COLON, - ACTIONS(1017), 4, + ACTIONS(1080), 2, + anon_sym_in, + sym_identifier, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37171] = 3, + [38587] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(549), 3, + ACTIONS(586), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(551), 19, + ACTIONS(588), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37915,16 +39084,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [37201] = 3, + [38618] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(533), 3, + ACTIONS(690), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(535), 19, + ACTIONS(692), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -37942,174 +39112,73 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [37231] = 17, - ACTIONS(192), 1, - anon_sym_RBRACE, + [38649] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(552), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(554), 20, sym__call_open_gap, - ACTIONS(1005), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(1011), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(1013), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1032), 1, - anon_sym_COLON, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1017), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37289] = 17, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [38680] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(644), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(646), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(1064), 1, - anon_sym_COMMA, - ACTIONS(1109), 1, - anon_sym_RBRACK, - STATE(1156), 1, - aux_sym_argument_list_repeat1, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37347] = 14, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(977), 1, - anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(1028), 1, - sym_identifier, - ACTIONS(1111), 1, - anon_sym_RBRACE, - STATE(1267), 1, - sym_qualified_path, - STATE(1504), 1, - sym_pattern, - ACTIONS(987), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(461), 2, - sym_select_arm, - aux_sym_select_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [37399] = 14, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(977), 1, - anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(1028), 1, - sym_identifier, - ACTIONS(1113), 1, - anon_sym_RBRACE, - STATE(1267), 1, - sym_qualified_path, - STATE(1390), 1, - sym_pattern, - ACTIONS(987), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(481), 2, - sym_match_arm, - aux_sym_match_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [37451] = 3, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [38711] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(521), 3, + ACTIONS(560), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(523), 19, + ACTIONS(562), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -38127,213 +39196,184 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [37481] = 15, + [38742] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, - anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1115), 1, - anon_sym_LBRACE, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(632), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(494), 3, + anon_sym_SLASH, + ACTIONS(634), 20, + sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COLON, - ACTIONS(1017), 4, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37535] = 17, - ACTIONS(248), 1, - anon_sym_RBRACE, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + [38773] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(548), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(550), 20, sym__call_open_gap, - ACTIONS(1005), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(1011), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(1013), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1032), 1, - anon_sym_COLON, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1017), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37593] = 17, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [38804] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(600), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(602), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(1064), 1, - anon_sym_COMMA, - ACTIONS(1118), 1, - anon_sym_RBRACK, - STATE(1202), 1, - aux_sym_argument_list_repeat1, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37651] = 14, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [38835] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, + sym__call_open_gap, + ACTIONS(1005), 1, + anon_sym_QMARK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(1028), 1, - sym_identifier, - ACTIONS(1120), 1, - anon_sym_RBRACE, - STATE(1267), 1, - sym_qualified_path, - STATE(1504), 1, - sym_pattern, - ACTIONS(987), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(461), 2, - sym_select_arm, - aux_sym_select_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [37703] = 14, + ACTIONS(1023), 1, + sym__statement_break, + ACTIONS(1082), 1, + anon_sym_RBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1011), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [38896] = 15, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1058), 1, + sym_identifier, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1074), 1, sym_float, - ACTIONS(1028), 1, - sym_identifier, - ACTIONS(1122), 1, + ACTIONS(1084), 1, anon_sym_RBRACE, - STATE(1267), 1, + STATE(1282), 1, sym_qualified_path, - STATE(1390), 1, + STATE(1682), 1, sym_pattern, - ACTIONS(987), 2, + STATE(1729), 1, + sym_field_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - STATE(481), 2, + STATE(583), 2, sym_match_arm, aux_sym_match_expression_repeat1, - ACTIONS(983), 4, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [37755] = 3, + [38951] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(443), 3, + ACTIONS(666), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(445), 19, + ACTIONS(668), 20, sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, anon_sym_RBRACE, @@ -38351,60 +39391,50 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [37785] = 15, + [38982] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, - anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(616), 3, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(631), 3, + anon_sym_SLASH, + ACTIONS(618), 20, + sym__call_open_gap, sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, + anon_sym_STAR, anon_sym_COLON, - ACTIONS(1017), 4, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37839] = 4, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [39013] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1124), 2, - anon_sym_RBRACE, - anon_sym_COMMA, - ACTIONS(485), 3, + ACTIONS(694), 3, anon_sym_LT, anon_sym_GT, anon_sym_SLASH, - ACTIONS(487), 16, + ACTIONS(696), 20, sym__call_open_gap, + sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, anon_sym_LBRACE, + anon_sym_RBRACE, anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, anon_sym_PIPE_PIPE, anon_sym_AMP_AMP, @@ -38417,4082 +39447,4633 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENT, anon_sym_PIPE_GT, anon_sym_LBRACK2, - [37870] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1128), 3, - anon_sym_RBRACE, - anon_sym_BANG, - sym__doc_comment_line, - ACTIONS(1126), 18, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym_identifier, - [37899] = 15, + [39044] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(678), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(680), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1130), 2, - anon_sym_RBRACE, - anon_sym_COMMA, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [37952] = 15, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [39075] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1023), 1, + sym__statement_break, + ACTIONS(1086), 1, + anon_sym_RBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1132), 2, - anon_sym_RBRACE, - anon_sym_COMMA, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38005] = 8, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(823), 1, - anon_sym_COLON_COLON, - ACTIONS(963), 1, - anon_sym_LT, - ACTIONS(965), 1, - anon_sym_LBRACK, - ACTIONS(1134), 1, - anon_sym_LBRACE, - ACTIONS(1138), 1, - anon_sym_LPAREN, - STATE(390), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(1136), 15, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - anon_sym_PIPE, - anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [38044] = 15, + [39136] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(590), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(593), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1140), 2, - anon_sym_in, - sym_identifier, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38097] = 15, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [39167] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1023), 1, + sym__statement_break, + ACTIONS(1088), 1, + anon_sym_RBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1142), 2, - anon_sym_in, - sym_identifier, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38150] = 15, + [39228] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(572), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(574), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1144), 2, - anon_sym_in, - sym_identifier, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38203] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + [39259] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(556), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(558), 20, sym__call_open_gap, - ACTIONS(1005), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(1011), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(1013), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1146), 1, - anon_sym_RBRACE, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1017), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38258] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, - anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1148), 1, - anon_sym_RBRACE, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, + [39290] = 5, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(981), 1, anon_sym_LT, - anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1017), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [38313] = 13, + ACTIONS(983), 1, + anon_sym_LBRACK, + ACTIONS(979), 3, + anon_sym_RBRACE, + anon_sym_BANG, + sym__doc_comment_line, + ACTIONS(977), 18, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_opaque, + anon_sym_signature, + sym_identifier, + [39325] = 15, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1058), 1, + sym_identifier, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1074), 1, sym_float, - ACTIONS(1028), 1, - sym_identifier, - STATE(1267), 1, + ACTIONS(1090), 1, + anon_sym_RBRACE, + STATE(1282), 1, sym_qualified_path, - STATE(1504), 1, + STATE(1682), 1, sym_pattern, - ACTIONS(987), 2, + STATE(1729), 1, + sym_field_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - STATE(497), 2, - sym_select_arm, - aux_sym_select_expression_repeat1, - ACTIONS(983), 4, + STATE(560), 2, + sym_match_arm, + aux_sym_match_expression_repeat1, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [38362] = 15, + [39380] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(648), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(651), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1150), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38415] = 13, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(977), 1, - anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(1028), 1, - sym_identifier, - STATE(1267), 1, - sym_qualified_path, - STATE(1504), 1, - sym_pattern, - ACTIONS(987), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - STATE(510), 2, - sym_select_arm, - aux_sym_select_expression_repeat1, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [38464] = 16, - ACTIONS(250), 1, - anon_sym_RBRACE, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + [39411] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(686), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(688), 20, sym__call_open_gap, - ACTIONS(1005), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(1011), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(1013), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1017), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38519] = 16, - ACTIONS(246), 1, - anon_sym_RBRACE, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [39442] = 18, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1034), 1, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1023), 1, sym__statement_break, - ACTIONS(1007), 2, + ACTIONS(1092), 1, + anon_sym_RBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38574] = 15, + [39503] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(624), 3, + anon_sym_LT, + anon_sym_GT, anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(626), 20, sym__call_open_gap, - ACTIONS(449), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(455), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(457), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1152), 2, - anon_sym_in, - sym_identifier, - ACTIONS(461), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38627] = 16, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + [39534] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(662), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(664), 20, sym__call_open_gap, - ACTIONS(1005), 1, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, anon_sym_LBRACE, - ACTIONS(1011), 1, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, anon_sym_QMARK, - ACTIONS(1013), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1154), 1, - anon_sym_RBRACE, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1019), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(1017), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38682] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1158), 3, - anon_sym_RBRACE, - anon_sym_BANG, - sym__doc_comment_line, - ACTIONS(1156), 18, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym_identifier, - [38711] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1162), 3, - anon_sym_RBRACE, - anon_sym_BANG, - sym__doc_comment_line, - ACTIONS(1160), 18, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym_identifier, - [38740] = 3, - ACTIONS(3), 1, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [39565] = 3, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(1166), 3, + ACTIONS(403), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(405), 20, + sym__call_open_gap, + sym__statement_break, + sym__type_application_ahead, + anon_sym_DOT, + anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_BANG, - sym__doc_comment_line, - ACTIONS(1164), 18, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym_identifier, - [38769] = 16, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_PIPE_GT, + anon_sym_LBRACK2, + [39596] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(564), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(566), 20, + sym__call_open_gap, + sym__statement_break, + sym__type_application_ahead, anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + [39627] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1168), 1, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1094), 1, anon_sym_RBRACE, - ACTIONS(1007), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38824] = 16, + [39685] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(794), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, + ACTIONS(1009), 1, + anon_sym_AMP_AMP, ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(1003), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1013), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1011), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [39743] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1170), 1, - anon_sym_RBRACE, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1096), 1, + anon_sym_RBRACK, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [38879] = 13, + [39801] = 14, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1098), 1, + sym_identifier, + ACTIONS(1101), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1104), 1, + anon_sym_RBRACE, + ACTIONS(1106), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1112), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1121), 1, sym_float, - ACTIONS(1028), 1, - sym_identifier, - STATE(1267), 1, + STATE(1282), 1, sym_qualified_path, - STATE(1504), 1, + STATE(1682), 1, sym_pattern, - ACTIONS(987), 2, + ACTIONS(1115), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1118), 2, anon_sym_true, anon_sym_false, - STATE(504), 2, - sym_select_arm, - aux_sym_select_expression_repeat1, - ACTIONS(983), 4, + STATE(530), 2, + sym_match_arm, + aux_sym_match_expression_repeat1, + ACTIONS(1109), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [38928] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1174), 3, - anon_sym_RBRACE, - anon_sym_BANG, - sym__doc_comment_line, - ACTIONS(1172), 18, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - sym_replayable, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym_identifier, - [38957] = 15, + [39853] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(796), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1176), 1, - anon_sym_COLON, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39009] = 15, + [39911] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(794), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(764), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39061] = 15, + [39969] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(762), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(742), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39113] = 15, + [40027] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(766), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1178), 1, - anon_sym_RBRACE, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39165] = 15, + [40085] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(721), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(756), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39217] = 15, + [40143] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(766), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(1124), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + ACTIONS(644), 3, + anon_sym_LT, + anon_sym_GT, + anon_sym_SLASH, + ACTIONS(646), 17, + sym__call_open_gap, + sym__type_application_ahead, anon_sym_DOT, - ACTIONS(999), 1, + anon_sym_LBRACE, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, anon_sym_PIPE_GT, - ACTIONS(1001), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + [40175] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, + anon_sym_DOT, + ACTIONS(994), 1, + anon_sym_LBRACK2, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1126), 1, + sym__statement_break, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39269] = 15, + [40233] = 17, ACTIONS(298), 1, sym_line_comment, + ACTIONS(460), 1, + sym__type_application_ahead, ACTIONS(768), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39321] = 15, + [40291] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(770), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1180), 1, - anon_sym_RBRACK, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39373] = 13, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(977), 1, - anon_sym_LBRACE, - ACTIONS(981), 1, - anon_sym_LPAREN, - ACTIONS(985), 1, - anon_sym_LBRACK, - ACTIONS(991), 1, - sym_float, - ACTIONS(1028), 1, - sym_identifier, - ACTIONS(1182), 1, - anon_sym_DOT_DOT_DOT, - STATE(1259), 1, - sym_pattern, - STATE(1267), 1, - sym_qualified_path, - ACTIONS(987), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(989), 2, - anon_sym_true, - anon_sym_false, - ACTIONS(983), 4, - anon_sym__, - sym_integer, - sym_string, - sym_interpolated_string, - STATE(1091), 4, - sym_structural_pattern, - sym_tuple_pattern, - sym_list_pattern, - sym_boolean, - [39421] = 15, + [40349] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(754), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1184), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39473] = 15, + [40407] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(772), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1128), 1, + anon_sym_COLON, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39525] = 15, + [40465] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(774), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1130), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39577] = 15, + [40523] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(776), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(772), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39629] = 15, + [40581] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(778), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1021), 1, + anon_sym_COLON, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39681] = 15, + [40639] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(737), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(758), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39733] = 15, + [40697] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(790), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(774), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39785] = 15, + [40755] = 14, ACTIONS(298), 1, sym_line_comment, - ACTIONS(792), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(1060), 1, + anon_sym_LBRACE, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + ACTIONS(1134), 1, + anon_sym_RBRACE, + STATE(1282), 1, + sym_qualified_path, + STATE(1537), 1, + sym_pattern, + ACTIONS(1070), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + STATE(603), 2, + sym_select_arm, + aux_sym_select_expression_repeat1, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [40807] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1136), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39837] = 15, + [40865] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(796), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1138), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39889] = 15, + [40923] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(782), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1140), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39941] = 15, + [40981] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(784), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1142), 1, + anon_sym_COLON, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [39993] = 15, + [41039] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1186), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1144), 1, + anon_sym_COLON, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40045] = 15, + [41097] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(786), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1146), 1, + anon_sym_RBRACK, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40097] = 13, + [41155] = 14, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1074), 1, sym_float, - ACTIONS(1028), 1, + ACTIONS(1132), 1, sym_identifier, - ACTIONS(1188), 1, - anon_sym_DOT_DOT_DOT, - STATE(1259), 1, - sym_pattern, - STATE(1267), 1, + ACTIONS(1148), 1, + anon_sym_RBRACE, + STATE(1282), 1, sym_qualified_path, - ACTIONS(987), 2, + STATE(1537), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - ACTIONS(983), 4, + STATE(603), 2, + sym_select_arm, + aux_sym_select_expression_repeat1, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [40145] = 5, + [41207] = 14, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1190), 1, - anon_sym_COLON_COLON, - STATE(561), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(417), 4, - anon_sym_COLON, - anon_sym_EQ, - anon_sym_where, - sym_identifier, - ACTIONS(419), 14, - anon_sym_DOT, + ACTIONS(1060), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_LT, - anon_sym_GT, + ACTIONS(1064), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_PIPE, - anon_sym_BANG, + ACTIONS(1068), 1, anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_EQ_GT, - anon_sym_PLUS, - [40177] = 15, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(788), 1, - sym__statement_break, - ACTIONS(997), 1, - anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, - anon_sym_QMARK, - ACTIONS(1013), 1, - anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, - anon_sym_AMP_AMP, - ACTIONS(1021), 1, - anon_sym_SLASH, - ACTIONS(1007), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(1009), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + ACTIONS(1150), 1, + anon_sym_RBRACE, + STATE(1282), 1, + sym_qualified_path, + STATE(1682), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [40229] = 15, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + STATE(530), 2, + sym_match_arm, + aux_sym_match_expression_repeat1, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [41259] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(739), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1152), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40281] = 15, + [41317] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1193), 1, - anon_sym_COLON, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1154), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40333] = 15, + [41375] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1195), 1, - sym__statement_break, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1156), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40385] = 15, + [41433] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(798), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(776), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40437] = 13, + [41491] = 14, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1074), 1, sym_float, - ACTIONS(1028), 1, + ACTIONS(1132), 1, sym_identifier, - ACTIONS(1197), 1, - anon_sym_RBRACK, - STATE(1194), 1, - sym_pattern, - STATE(1267), 1, + ACTIONS(1158), 1, + anon_sym_RBRACE, + STATE(1282), 1, sym_qualified_path, - ACTIONS(987), 2, + STATE(1682), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - ACTIONS(983), 4, + STATE(530), 2, + sym_match_arm, + aux_sym_match_expression_repeat1, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [40485] = 15, + [41543] = 15, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(855), 1, + anon_sym_fn, + ACTIONS(857), 1, + anon_sym_extern, + ACTIONS(859), 1, + anon_sym_type, + ACTIONS(861), 1, + sym_static_stage, + ACTIONS(863), 1, + anon_sym_effect, + ACTIONS(865), 1, + anon_sym_state, + ACTIONS(867), 1, + anon_sym_module, + ACTIONS(871), 1, + anon_sym_signature, + ACTIONS(1160), 1, + anon_sym_opaque, + STATE(227), 1, + aux_sym_doc_comment_repeat1, + STATE(832), 1, + sym_doc_comment, + ACTIONS(853), 2, + anon_sym_let, + anon_sym_mut, + STATE(712), 8, + sym_let_declaration, + sym_function_declaration, + sym_extern_declaration, + sym_type_declaration, + sym_effect_declaration, + sym_module_declaration, + sym__module_declaration, + sym_signature_declaration, + [41597] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(800), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1162), 1, + anon_sym_COLON, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40537] = 15, + [41655] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(802), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(710), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40589] = 15, + [41713] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(801), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1032), 1, - anon_sym_COLON, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40641] = 15, + [41771] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(804), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1164), 1, + anon_sym_RBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40693] = 15, + [41829] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(749), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1166), 1, + anon_sym_RBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40745] = 15, + [41887] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(741), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1168), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40797] = 15, + [41945] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(756), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1023), 1, + sym__statement_break, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40849] = 15, + [42003] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1170), 1, + anon_sym_COMMA, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [42061] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1199), 1, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1172), 1, anon_sym_RPAREN, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40901] = 15, + [42119] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(752), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1201), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [40953] = 15, + [42177] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(740), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1203), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41005] = 15, + [42235] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1205), 1, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1174), 1, anon_sym_RPAREN, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41057] = 15, + [42293] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1207), 1, - anon_sym_COMMA, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1176), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41109] = 15, + [42351] = 14, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1060), 1, + anon_sym_LBRACE, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + ACTIONS(1178), 1, + anon_sym_RBRACE, + STATE(1282), 1, + sym_qualified_path, + STATE(1537), 1, + sym_pattern, + ACTIONS(1070), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + STATE(603), 2, + sym_select_arm, + aux_sym_select_expression_repeat1, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [42403] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1209), 1, - anon_sym_COLON, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1180), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41161] = 15, + [42461] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1211), 1, - anon_sym_RBRACK, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1182), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41213] = 15, + [42519] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(754), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1184), 1, + anon_sym_RPAREN, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41265] = 15, + [42577] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(760), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(780), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41317] = 15, + [42635] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1186), 1, + anon_sym_COLON, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [42693] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1213), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1188), 1, + anon_sym_RBRACK, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41369] = 15, + [42751] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(782), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1215), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41421] = 15, + [42809] = 14, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1060), 1, + anon_sym_LBRACE, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + ACTIONS(1190), 1, + anon_sym_RBRACE, + STATE(1282), 1, + sym_qualified_path, + STATE(1682), 1, + sym_pattern, + ACTIONS(1070), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + STATE(530), 2, + sym_match_arm, + aux_sym_match_expression_repeat1, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [42861] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1217), 1, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1192), 1, anon_sym_RPAREN, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41473] = 15, + [42919] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(434), 1, + anon_sym_LBRACE, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1194), 1, + anon_sym_COLON, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [42977] = 17, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1219), 1, - anon_sym_COLON, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1196), 1, + anon_sym_RBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41525] = 15, + [43035] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(780), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(784), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41577] = 15, + [43093] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(778), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1221), 1, - anon_sym_RBRACE, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41629] = 15, + [43151] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(770), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(786), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41681] = 15, + [43209] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(760), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1034), 1, - sym__statement_break, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41733] = 15, + [43267] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(820), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1223), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41785] = 15, + [43325] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(725), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(803), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41837] = 15, + [43383] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(762), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1225), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41889] = 15, + [43441] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(788), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1227), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41941] = 15, + [43499] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(790), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1229), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [41993] = 15, + [43557] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1231), 1, - anon_sym_COLON, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + ACTIONS(1198), 1, + sym__statement_break, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42045] = 15, + [43615] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(736), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1233), 1, - anon_sym_RBRACK, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42097] = 15, + [43673] = 15, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(855), 1, + anon_sym_fn, + ACTIONS(857), 1, + anon_sym_extern, + ACTIONS(859), 1, + anon_sym_type, + ACTIONS(861), 1, + sym_static_stage, + ACTIONS(863), 1, + anon_sym_effect, + ACTIONS(865), 1, + anon_sym_state, + ACTIONS(867), 1, + anon_sym_module, + ACTIONS(871), 1, + anon_sym_signature, + ACTIONS(1200), 1, + anon_sym_opaque, + STATE(227), 1, + aux_sym_doc_comment_repeat1, + STATE(832), 1, + sym_doc_comment, + ACTIONS(853), 2, + anon_sym_let, + anon_sym_mut, + STATE(758), 8, + sym_let_declaration, + sym_function_declaration, + sym_extern_declaration, + sym_type_declaration, + sym_effect_declaration, + sym_module_declaration, + sym__module_declaration, + sym_signature_declaration, + [43727] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(758), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(738), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42149] = 15, + [43785] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1235), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1202), 1, + anon_sym_RBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42201] = 15, + [43843] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1237), 1, - anon_sym_RBRACE, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1204), 1, + anon_sym_COMMA, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42253] = 15, + [43901] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(750), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1239), 1, - anon_sym_COLON, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42305] = 15, + [43959] = 14, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1206), 1, + sym_identifier, + ACTIONS(1209), 1, + anon_sym_LBRACE, + ACTIONS(1212), 1, + anon_sym_RBRACE, + ACTIONS(1214), 1, + anon_sym_LPAREN, + ACTIONS(1220), 1, + anon_sym_LBRACK, + ACTIONS(1229), 1, + sym_float, + STATE(1282), 1, + sym_qualified_path, + STATE(1537), 1, + sym_pattern, + ACTIONS(1223), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1226), 2, + anon_sym_true, + anon_sym_false, + STATE(603), 2, + sym_select_arm, + aux_sym_select_expression_repeat1, + ACTIONS(1217), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [44011] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1241), 1, - anon_sym_RBRACE, - ACTIONS(433), 2, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1232), 1, + anon_sym_COMMA, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42357] = 15, + [44069] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(730), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1234), 1, + anon_sym_RBRACE, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42409] = 15, + [44127] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(732), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(744), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42461] = 15, + [44185] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(997), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(746), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1243), 1, - sym__statement_break, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42513] = 15, + [44243] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(719), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(792), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42565] = 15, + [44301] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(723), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(748), 1, sym__statement_break, - ACTIONS(997), 1, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(1003), 1, + ACTIONS(996), 1, sym__call_open_gap, ACTIONS(1005), 1, - anon_sym_LBRACE, - ACTIONS(1011), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(1015), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42617] = 15, + [44359] = 17, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(734), 1, + sym__statement_break, + ACTIONS(992), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(994), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(996), 1, sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(1005), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(1007), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(1009), 1, anon_sym_AMP_AMP, - ACTIONS(1245), 1, - anon_sym_COMMA, - ACTIONS(433), 2, + ACTIONS(1015), 1, + anon_sym_SLASH, + ACTIONS(1017), 1, + anon_sym_PIPE_GT, + ACTIONS(1019), 1, + anon_sym_LBRACE, + STATE(1370), 1, + sym__call_type_arguments, + ACTIONS(1001), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(1003), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1013), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(1011), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42669] = 15, + [44417] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1236), 1, anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1247), 1, - anon_sym_RBRACE, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42721] = 15, + [44472] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(764), 1, - sym__statement_break, - ACTIONS(997), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(999), 1, - anon_sym_PIPE_GT, - ACTIONS(1001), 1, - anon_sym_LBRACK2, - ACTIONS(1003), 1, - sym__call_open_gap, - ACTIONS(1005), 1, + ACTIONS(434), 1, anon_sym_LBRACE, - ACTIONS(1011), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(1013), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(1015), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(1021), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(1007), 2, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(1009), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1019), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(1017), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42773] = 15, + [44527] = 8, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(839), 1, + anon_sym_COLON_COLON, + ACTIONS(981), 1, + anon_sym_LT, + ACTIONS(983), 1, + anon_sym_LBRACK, + ACTIONS(1238), 1, + anon_sym_LBRACE, + ACTIONS(1242), 1, + anon_sym_LPAREN, + STATE(397), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(1240), 15, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_PIPE, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [44566] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1244), 1, anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1249), 1, - anon_sym_COMMA, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42825] = 15, + [44621] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1246), 1, anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1251), 1, - anon_sym_RBRACE, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42877] = 15, + [44676] = 13, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1060), 1, + anon_sym_LBRACE, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + STATE(1282), 1, + sym_qualified_path, + STATE(1537), 1, + sym_pattern, + ACTIONS(1070), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + STATE(547), 2, + sym_select_arm, + aux_sym_select_expression_repeat1, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [44725] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1250), 3, + anon_sym_RBRACE, + anon_sym_BANG, + sym__doc_comment_line, + ACTIONS(1248), 18, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_opaque, + anon_sym_signature, + sym_identifier, + [44754] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(449), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1252), 1, anon_sym_LBRACE, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1253), 1, - anon_sym_RPAREN, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [42929] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(417), 4, - anon_sym_COLON, - anon_sym_EQ, - anon_sym_where, - sym_identifier, - ACTIONS(419), 15, - anon_sym_DOT, - anon_sym_COLON_COLON, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_LT, - anon_sym_GT, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_PIPE, - anon_sym_BANG, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_EQ_GT, - anon_sym_PLUS, - [42956] = 12, + [44809] = 13, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1074), 1, sym_float, - ACTIONS(1028), 1, + ACTIONS(1132), 1, sym_identifier, - STATE(1135), 1, - sym_pattern, - STATE(1267), 1, + STATE(1282), 1, sym_qualified_path, - ACTIONS(987), 2, + STATE(1537), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - ACTIONS(983), 4, + STATE(575), 2, + sym_select_arm, + aux_sym_select_expression_repeat1, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [43001] = 6, - ACTIONS(3), 1, + [44858] = 16, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(963), 1, - anon_sym_LT, - ACTIONS(965), 1, - anon_sym_LBRACK, - ACTIONS(1134), 1, + ACTIONS(432), 1, + anon_sym_DOT, + ACTIONS(442), 1, + anon_sym_QMARK, + ACTIONS(444), 1, + anon_sym_PIPE_PIPE, + ACTIONS(446), 1, + anon_sym_AMP_AMP, + ACTIONS(452), 1, + anon_sym_SLASH, + ACTIONS(454), 1, + anon_sym_PIPE_GT, + ACTIONS(456), 1, + anon_sym_LBRACK2, + ACTIONS(458), 1, + sym__call_open_gap, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1254), 1, anon_sym_LBRACE, - ACTIONS(1138), 1, - anon_sym_LPAREN, - ACTIONS(1136), 15, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(440), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(450), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(448), 4, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [44913] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1258), 3, anon_sym_RBRACE, + anon_sym_BANG, + sym__doc_comment_line, + ACTIONS(1256), 18, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_PIPE, anon_sym_where, sym_static_stage, anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, anon_sym_state, anon_sym_module, anon_sym_export, + anon_sym_opaque, anon_sym_signature, - sym__doc_comment_line, - [43034] = 6, + sym_identifier, + [44942] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(823), 1, - anon_sym_COLON_COLON, - ACTIONS(1134), 1, - anon_sym_LBRACE, - ACTIONS(1138), 1, - anon_sym_LPAREN, - STATE(390), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(1136), 15, + ACTIONS(1262), 3, anon_sym_RBRACE, + anon_sym_BANG, + sym__doc_comment_line, + ACTIONS(1260), 18, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_PIPE, anon_sym_where, sym_static_stage, anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, anon_sym_state, anon_sym_module, anon_sym_export, + anon_sym_opaque, anon_sym_signature, - sym__doc_comment_line, - [43067] = 12, + sym_identifier, + [44971] = 13, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1074), 1, sym_float, - ACTIONS(1028), 1, + ACTIONS(1132), 1, sym_identifier, - STATE(1255), 1, - sym_pattern, - STATE(1267), 1, + STATE(1282), 1, sym_qualified_path, - ACTIONS(987), 2, + STATE(1537), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - ACTIONS(983), 4, + STATE(554), 2, + sym_select_arm, + aux_sym_select_expression_repeat1, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [43112] = 14, - ACTIONS(298), 1, + [45020] = 3, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1255), 1, - anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [43161] = 14, + ACTIONS(1266), 3, + anon_sym_RBRACE, + anon_sym_BANG, + sym__doc_comment_line, + ACTIONS(1264), 18, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_opaque, + anon_sym_signature, + sym_identifier, + [45049] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1270), 3, + anon_sym_RBRACE, + anon_sym_BANG, + sym__doc_comment_line, + ACTIONS(1268), 18, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_opaque, + anon_sym_signature, + sym_identifier, + [45078] = 16, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(432), 1, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(449), 1, - anon_sym_LBRACE, - ACTIONS(455), 1, + ACTIONS(442), 1, anon_sym_QMARK, - ACTIONS(457), 1, + ACTIONS(444), 1, anon_sym_PIPE_PIPE, - ACTIONS(459), 1, + ACTIONS(446), 1, anon_sym_AMP_AMP, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, - anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [43210] = 14, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, + ACTIONS(452), 1, anon_sym_SLASH, - ACTIONS(437), 1, + ACTIONS(454), 1, anon_sym_PIPE_GT, - ACTIONS(439), 1, + ACTIONS(456), 1, anon_sym_LBRACK2, - ACTIONS(441), 1, + ACTIONS(458), 1, sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1257), 1, + ACTIONS(460), 1, + sym__type_application_ahead, + ACTIONS(1272), 1, anon_sym_LBRACE, - ACTIONS(433), 2, + STATE(1567), 1, + sym__call_type_arguments, + ACTIONS(438), 2, anon_sym_STAR, anon_sym_PERCENT, - ACTIONS(453), 2, + ACTIONS(440), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(450), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, + ACTIONS(448), 4, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_LT_EQ, anon_sym_GT_EQ, - [43259] = 14, + [45133] = 13, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1259), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + ACTIONS(1274), 1, + anon_sym_DOT_DOT_DOT, + STATE(1282), 1, + sym_qualified_path, + STATE(1354), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [43308] = 14, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [45181] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, + ACTIONS(1276), 1, + anon_sym_COLON_COLON, + STATE(628), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(419), 4, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_where, + sym_identifier, + ACTIONS(421), 14, anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1261), 1, anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, + anon_sym_RBRACE, + anon_sym_COMMA, anon_sym_LT, anon_sym_GT, - ACTIONS(463), 2, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_PIPE, + anon_sym_BANG, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_EQ_GT, anon_sym_PLUS, - anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [43357] = 12, + [45213] = 13, ACTIONS(298), 1, sym_line_comment, - ACTIONS(977), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(981), 1, + ACTIONS(1064), 1, anon_sym_LPAREN, - ACTIONS(985), 1, + ACTIONS(1068), 1, anon_sym_LBRACK, - ACTIONS(991), 1, + ACTIONS(1074), 1, sym_float, - ACTIONS(1028), 1, + ACTIONS(1132), 1, sym_identifier, - STATE(1259), 1, - sym_pattern, - STATE(1267), 1, + ACTIONS(1279), 1, + anon_sym_DOT_DOT_DOT, + STATE(1282), 1, sym_qualified_path, - ACTIONS(987), 2, + STATE(1354), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(989), 2, + ACTIONS(1072), 2, anon_sym_true, anon_sym_false, - ACTIONS(983), 4, + ACTIONS(1066), 4, anon_sym__, sym_integer, sym_string, sym_interpolated_string, - STATE(1091), 4, + STATE(1072), 4, sym_structural_pattern, sym_tuple_pattern, sym_list_pattern, sym_boolean, - [43402] = 14, + [45261] = 13, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1263), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + ACTIONS(1281), 1, + anon_sym_RBRACK, + STATE(1185), 1, + sym_pattern, + STATE(1282), 1, + sym_qualified_path, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [43451] = 14, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [45309] = 6, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(981), 1, + anon_sym_LT, + ACTIONS(983), 1, + anon_sym_LBRACK, + ACTIONS(1238), 1, + anon_sym_LBRACE, + ACTIONS(1242), 1, + anon_sym_LPAREN, + ACTIONS(1240), 15, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_PIPE, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [45342] = 12, ACTIONS(298), 1, sym_line_comment, - ACTIONS(429), 1, - anon_sym_DOT, - ACTIONS(435), 1, - anon_sym_SLASH, - ACTIONS(437), 1, - anon_sym_PIPE_GT, - ACTIONS(439), 1, - anon_sym_LBRACK2, - ACTIONS(441), 1, - sym__call_open_gap, - ACTIONS(455), 1, - anon_sym_QMARK, - ACTIONS(457), 1, - anon_sym_PIPE_PIPE, - ACTIONS(459), 1, - anon_sym_AMP_AMP, - ACTIONS(1265), 1, + ACTIONS(1060), 1, anon_sym_LBRACE, - ACTIONS(433), 2, - anon_sym_STAR, - anon_sym_PERCENT, - ACTIONS(453), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(463), 2, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + STATE(1282), 1, + sym_qualified_path, + STATE(1295), 1, + sym_pattern, + ACTIONS(1070), 2, anon_sym_PLUS, anon_sym_DASH, - ACTIONS(461), 4, - anon_sym_EQ_EQ, - anon_sym_BANG_EQ, - anon_sym_LT_EQ, - anon_sym_GT_EQ, - [43500] = 5, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [45387] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - STATE(561), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(413), 3, + ACTIONS(419), 4, + anon_sym_COLON, anon_sym_EQ, anon_sym_where, sym_identifier, - ACTIONS(415), 13, + ACTIONS(421), 15, anon_sym_DOT, + anon_sym_COLON_COLON, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_COMMA, @@ -42505,320 +44086,439 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_EQ_GT, - [43530] = 14, + anon_sym_PLUS, + [45414] = 12, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1060), 1, + anon_sym_LBRACE, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + STATE(1232), 1, + sym_pattern, + STATE(1282), 1, + sym_qualified_path, + ACTIONS(1070), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [45459] = 12, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1060), 1, + anon_sym_LBRACE, + ACTIONS(1064), 1, + anon_sym_LPAREN, + ACTIONS(1068), 1, + anon_sym_LBRACK, + ACTIONS(1074), 1, + sym_float, + ACTIONS(1132), 1, + sym_identifier, + STATE(1282), 1, + sym_qualified_path, + STATE(1354), 1, + sym_pattern, + ACTIONS(1070), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1072), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(1066), 4, + anon_sym__, + sym_integer, + sym_string, + sym_interpolated_string, + STATE(1072), 4, + sym_structural_pattern, + sym_tuple_pattern, + sym_list_pattern, + sym_boolean, + [45504] = 6, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(839), 1, + anon_sym_COLON_COLON, + ACTIONS(1238), 1, + anon_sym_LBRACE, + ACTIONS(1242), 1, + anon_sym_LPAREN, + STATE(397), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(1240), 15, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + anon_sym_PIPE, + anon_sym_where, + sym_static_stage, + anon_sym_effect, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [45537] = 14, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(1269), 1, + ACTIONS(1283), 1, anon_sym_RBRACE, - ACTIONS(1271), 1, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1279), 1, + ACTIONS(1293), 1, anon_sym_opaque, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(636), 2, + STATE(642), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43578] = 14, + [45585] = 14, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(1271), 1, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1279), 1, + ACTIONS(1293), 1, anon_sym_opaque, - ACTIONS(1281), 1, + ACTIONS(1295), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(633), 2, + STATE(637), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43626] = 14, + [45633] = 14, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(1271), 1, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1279), 1, + ACTIONS(1293), 1, anon_sym_opaque, - ACTIONS(1283), 1, + ACTIONS(1297), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(635), 2, + STATE(646), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43674] = 14, + [45681] = 14, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(1271), 1, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1279), 1, + ACTIONS(1293), 1, anon_sym_opaque, - ACTIONS(1285), 1, + ACTIONS(1299), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(637), 2, + STATE(642), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43722] = 14, + [45729] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + STATE(628), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(426), 3, + anon_sym_EQ, + anon_sym_where, + sym_identifier, + ACTIONS(428), 13, + anon_sym_DOT, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LT, + anon_sym_GT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_PIPE, + anon_sym_BANG, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [45759] = 14, ACTIONS(3), 1, sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(835), 1, - sym_static_stage, - ACTIONS(837), 1, - anon_sym_effect, - ACTIONS(1271), 1, + ACTIONS(1303), 1, + anon_sym_RBRACE, + ACTIONS(1305), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1308), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1311), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1314), 1, + sym_static_stage, + ACTIONS(1317), 1, + anon_sym_effect, + ACTIONS(1320), 1, anon_sym_module, - ACTIONS(1279), 1, + ACTIONS(1323), 1, anon_sym_opaque, - ACTIONS(1287), 1, - anon_sym_RBRACE, - STATE(224), 1, + ACTIONS(1326), 1, + sym__doc_comment_line, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(637), 2, + STATE(642), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43770] = 14, + [45807] = 14, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(1271), 1, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1279), 1, + ACTIONS(1293), 1, anon_sym_opaque, - ACTIONS(1289), 1, + ACTIONS(1329), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(632), 2, + STATE(645), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43818] = 14, + [45855] = 14, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(1271), 1, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1279), 1, + ACTIONS(1293), 1, anon_sym_opaque, - ACTIONS(1291), 1, + ACTIONS(1331), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(637), 2, + STATE(640), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43866] = 14, + [45903] = 14, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(835), 1, + ACTIONS(861), 1, sym_static_stage, - ACTIONS(837), 1, + ACTIONS(863), 1, anon_sym_effect, - ACTIONS(1271), 1, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1273), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1275), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1277), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1279), 1, - anon_sym_opaque, ACTIONS(1293), 1, + anon_sym_opaque, + ACTIONS(1333), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(637), 2, + STATE(642), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43914] = 14, + [45951] = 14, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1295), 1, - anon_sym_RBRACE, - ACTIONS(1297), 1, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(861), 1, + sym_static_stage, + ACTIONS(863), 1, + anon_sym_effect, + ACTIONS(1285), 1, anon_sym_let, - ACTIONS(1300), 1, + ACTIONS(1287), 1, anon_sym_fn, - ACTIONS(1303), 1, + ACTIONS(1289), 1, anon_sym_type, - ACTIONS(1306), 1, - sym_static_stage, - ACTIONS(1309), 1, - anon_sym_effect, - ACTIONS(1312), 1, + ACTIONS(1291), 1, anon_sym_module, - ACTIONS(1315), 1, + ACTIONS(1293), 1, anon_sym_opaque, - ACTIONS(1318), 1, - sym__doc_comment_line, - STATE(224), 1, + ACTIONS(1335), 1, + anon_sym_RBRACE, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(1289), 1, + STATE(1321), 1, sym_doc_comment, - STATE(637), 2, + STATE(642), 2, sym_signature_item, aux_sym_signature_declaration_repeat1, - STATE(859), 5, + STATE(838), 5, sym_effect_declaration, sym_signature_value, sym_signature_function, sym_signature_type, sym_signature_module, - [43962] = 4, + [45999] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1134), 1, + ACTIONS(1238), 1, anon_sym_LBRACE, - ACTIONS(1138), 1, + ACTIONS(1242), 1, anon_sym_LPAREN, - ACTIONS(1136), 15, + ACTIONS(1240), 15, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -42834,14 +44534,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [43989] = 4, + [46026] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1323), 1, + ACTIONS(1339), 1, anon_sym_PIPE, - STATE(639), 1, + STATE(648), 1, aux_sym_union_type_repeat1, - ACTIONS(1321), 14, + ACTIONS(1337), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -42856,14 +44556,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44015] = 4, + [46052] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1328), 1, + ACTIONS(1344), 1, anon_sym_PIPE, - STATE(639), 1, + STATE(650), 1, aux_sym_union_type_repeat1, - ACTIONS(1326), 14, + ACTIONS(1342), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -42878,14 +44578,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44041] = 4, + [46078] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1328), 1, + ACTIONS(1344), 1, anon_sym_PIPE, - STATE(640), 1, + STATE(648), 1, aux_sym_union_type_repeat1, - ACTIONS(1330), 14, + ACTIONS(1346), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -42900,33 +44600,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44067] = 2, - ACTIONS(3), 1, + [46104] = 7, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(1332), 15, + ACTIONS(977), 1, + anon_sym_EQ, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + ACTIONS(1348), 1, + anon_sym_LT, + ACTIONS(1350), 1, + anon_sym_LBRACK, + STATE(641), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(979), 10, + anon_sym_LBRACE, anon_sym_RBRACE, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, + anon_sym_COMMA, + anon_sym_GT, + anon_sym_RPAREN, anon_sym_PIPE, anon_sym_where, - sym_static_stage, - anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [44088] = 4, + anon_sym_BANG, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [46135] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1336), 1, + ACTIONS(1354), 1, anon_sym_where, - STATE(703), 1, + STATE(690), 1, sym_type_validation, - ACTIONS(1334), 13, + ACTIONS(1352), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -42940,18 +44645,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44113] = 2, + [46160] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1338), 15, + ACTIONS(1354), 1, + anon_sym_where, + STATE(727), 1, + sym_type_validation, + ACTIONS(1356), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_PIPE, - anon_sym_where, sym_static_stage, anon_sym_effect, anon_sym_state, @@ -42959,14 +44666,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44134] = 4, + [46185] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1336), 1, + ACTIONS(1354), 1, anon_sym_where, - STATE(689), 1, + STATE(732), 1, sym_type_validation, - ACTIONS(1340), 13, + ACTIONS(1358), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -42980,10 +44687,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44159] = 2, + [46210] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1321), 15, + ACTIONS(1337), 15, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -42999,20 +44706,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44180] = 4, + [46231] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1336), 1, - anon_sym_where, - STATE(722), 1, - sym_type_validation, - ACTIONS(1342), 13, + ACTIONS(1360), 15, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, + anon_sym_PIPE, + anon_sym_where, sym_static_stage, anon_sym_effect, anon_sym_state, @@ -43020,20 +44725,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44205] = 4, + [46252] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1336), 1, - anon_sym_where, - STATE(741), 1, - sym_type_validation, - ACTIONS(1344), 13, + ACTIONS(1362), 15, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, + anon_sym_PIPE, + anon_sym_where, sym_static_stage, anon_sym_effect, anon_sym_state, @@ -43041,34 +44744,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44230] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(959), 1, - anon_sym_EQ, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(1346), 1, - anon_sym_LT, - ACTIONS(1348), 1, - anon_sym_LBRACK, - STATE(628), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(961), 10, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_GT, - anon_sym_RPAREN, - anon_sym_PIPE, - anon_sym_where, - anon_sym_BANG, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [44261] = 2, + [46273] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1350), 14, + ACTIONS(1354), 1, + anon_sym_where, + STATE(716), 1, + sym_type_validation, + ACTIONS(1364), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43080,56 +44763,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_state, anon_sym_module, anon_sym_export, - anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44281] = 2, + [46298] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1352), 14, + ACTIONS(1366), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_where, sym_static_stage, anon_sym_effect, anon_sym_state, anon_sym_module, anon_sym_export, + anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44301] = 9, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1354), 1, - sym_identifier, - ACTIONS(1356), 1, - anon_sym_LBRACE, - ACTIONS(1358), 1, - anon_sym_fn, - ACTIONS(1360), 1, - anon_sym_LPAREN, - STATE(617), 1, - sym_qualified_path, - STATE(641), 1, - sym_variant, - STATE(643), 3, - sym_union_type, - sym_type_alias, - sym_record_type, - STATE(651), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [44335] = 2, + [46318] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1362), 14, + ACTIONS(1368), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43144,111 +44801,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44355] = 9, + [46338] = 9, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1354), 1, + ACTIONS(1370), 1, sym_identifier, - ACTIONS(1356), 1, + ACTIONS(1372), 1, anon_sym_LBRACE, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(617), 1, + STATE(631), 1, sym_qualified_path, - STATE(641), 1, + STATE(649), 1, sym_variant, - STATE(648), 3, + STATE(652), 3, sym_union_type, sym_type_alias, sym_record_type, - STATE(651), 5, + STATE(684), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [44389] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1364), 14, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym__doc_comment_line, - [44409] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1368), 1, - anon_sym_DASH_GT, - ACTIONS(1366), 13, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [44431] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1372), 1, - anon_sym_DASH_GT, - ACTIONS(1370), 13, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_signature, - sym__doc_comment_line, - [44453] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1374), 14, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_mut, - anon_sym_fn, - anon_sym_extern, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_state, - anon_sym_module, - anon_sym_export, - anon_sym_opaque, - anon_sym_signature, - sym__doc_comment_line, - [44473] = 3, + [46372] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1378), 1, + ACTIONS(1380), 1, anon_sym_DASH_GT, - ACTIONS(1376), 13, + ACTIONS(1378), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43262,10 +44845,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44495] = 2, + [46394] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1380), 14, + ACTIONS(1382), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43280,35 +44863,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44515] = 9, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1382), 1, - sym_identifier, - ACTIONS(1384), 1, - anon_sym_LBRACE, - ACTIONS(1386), 1, - anon_sym_fn, - ACTIONS(1388), 1, - anon_sym_LPAREN, - STATE(935), 1, - sym_qualified_path, - STATE(1101), 1, - sym_variant, - STATE(1124), 3, - sym_union_type, - sym_type_alias, - sym_record_type, - STATE(1312), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [44549] = 2, + [46414] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1390), 14, + ACTIONS(1384), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43323,37 +44881,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44569] = 9, + [46434] = 9, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1382), 1, + ACTIONS(1386), 1, sym_identifier, - ACTIONS(1384), 1, + ACTIONS(1388), 1, anon_sym_LBRACE, - ACTIONS(1386), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - STATE(935), 1, + STATE(936), 1, sym_qualified_path, - STATE(1101), 1, + STATE(1069), 1, sym_variant, - STATE(1241), 3, + STATE(1163), 3, sym_union_type, sym_type_alias, sym_record_type, - STATE(1312), 5, + STATE(1273), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [44603] = 3, + [46468] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1394), 1, + ACTIONS(1396), 1, anon_sym_DASH_GT, - ACTIONS(1392), 13, + ACTIONS(1394), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43367,78 +44925,53 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44625] = 2, + [46490] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1396), 14, + ACTIONS(1398), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, + anon_sym_where, sym_static_stage, anon_sym_effect, anon_sym_state, anon_sym_module, anon_sym_export, - anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44645] = 9, + [46510] = 9, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1354), 1, - sym_identifier, - ACTIONS(1356), 1, - anon_sym_LBRACE, - ACTIONS(1358), 1, - anon_sym_fn, - ACTIONS(1360), 1, - anon_sym_LPAREN, - STATE(617), 1, - sym_qualified_path, - STATE(641), 1, - sym_variant, - STATE(645), 3, - sym_union_type, - sym_type_alias, - sym_record_type, - STATE(651), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [44679] = 9, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1354), 1, + ACTIONS(1370), 1, sym_identifier, - ACTIONS(1356), 1, + ACTIONS(1372), 1, anon_sym_LBRACE, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(617), 1, + STATE(631), 1, sym_qualified_path, - STATE(641), 1, + STATE(649), 1, sym_variant, - STATE(647), 3, + STATE(658), 3, sym_union_type, sym_type_alias, sym_record_type, - STATE(651), 5, + STATE(684), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [44713] = 2, + [46544] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1398), 14, + ACTIONS(1400), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43453,17 +44986,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44733] = 2, + [46564] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1400), 14, + ACTIONS(1404), 1, + anon_sym_DASH_GT, + ACTIONS(1402), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, - anon_sym_where, sym_static_stage, anon_sym_effect, anon_sym_state, @@ -43471,10 +45005,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [44753] = 2, + [46586] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1402), 14, + ACTIONS(1406), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43489,10 +45023,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44773] = 2, + [46606] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1404), 14, + ACTIONS(1408), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43507,10 +45041,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44793] = 2, + [46626] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1406), 14, + ACTIONS(1410), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43525,35 +45059,54 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44813] = 9, + [46646] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1414), 1, + anon_sym_DASH_GT, + ACTIONS(1412), 13, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [46668] = 9, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1382), 1, + ACTIONS(1370), 1, sym_identifier, - ACTIONS(1384), 1, + ACTIONS(1372), 1, anon_sym_LBRACE, - ACTIONS(1386), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(935), 1, + STATE(631), 1, sym_qualified_path, - STATE(1101), 1, + STATE(649), 1, sym_variant, - STATE(1151), 3, + STATE(654), 3, sym_union_type, sym_type_alias, sym_record_type, - STATE(1312), 5, + STATE(684), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [44847] = 2, + [46702] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1408), 14, + ACTIONS(1416), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43568,10 +45121,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44867] = 2, + [46722] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1410), 14, + ACTIONS(1418), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43586,10 +45139,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44887] = 2, + [46742] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1412), 14, + ACTIONS(1420), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43604,10 +45157,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44907] = 2, + [46762] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1414), 14, + ACTIONS(1422), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43622,10 +45175,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44927] = 2, + [46782] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1416), 14, + ACTIONS(1424), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43640,35 +45193,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [44947] = 9, - ACTIONS(298), 1, + [46802] = 2, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1382), 1, - sym_identifier, - ACTIONS(1384), 1, - anon_sym_LBRACE, - ACTIONS(1386), 1, + ACTIONS(1426), 14, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_mut, anon_sym_fn, - ACTIONS(1388), 1, - anon_sym_LPAREN, - STATE(935), 1, - sym_qualified_path, - STATE(1101), 1, - sym_variant, - STATE(1153), 3, - sym_union_type, - sym_type_alias, - sym_record_type, - STATE(1312), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [44981] = 2, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_opaque, + anon_sym_signature, + sym__doc_comment_line, + [46822] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1418), 13, + ACTIONS(1428), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43680,12 +45226,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_state, anon_sym_module, anon_sym_export, + anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [45000] = 2, + [46842] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1420), 13, + ACTIONS(1430), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43697,18 +45244,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_state, anon_sym_module, anon_sym_export, + anon_sym_opaque, anon_sym_signature, sym__doc_comment_line, - [45019] = 2, + [46862] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1422), 13, + ACTIONS(1432), 14, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, anon_sym_fn, anon_sym_extern, anon_sym_type, + anon_sym_where, sym_static_stage, anon_sym_effect, anon_sym_state, @@ -43716,10 +45265,110 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45038] = 2, + [46882] = 9, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1386), 1, + sym_identifier, + ACTIONS(1388), 1, + anon_sym_LBRACE, + ACTIONS(1390), 1, + anon_sym_fn, + ACTIONS(1392), 1, + anon_sym_LPAREN, + STATE(936), 1, + sym_qualified_path, + STATE(1069), 1, + sym_variant, + STATE(1229), 3, + sym_union_type, + sym_type_alias, + sym_record_type, + STATE(1273), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [46916] = 9, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1370), 1, + sym_identifier, + ACTIONS(1372), 1, + anon_sym_LBRACE, + ACTIONS(1374), 1, + anon_sym_fn, + ACTIONS(1376), 1, + anon_sym_LPAREN, + STATE(631), 1, + sym_qualified_path, + STATE(649), 1, + sym_variant, + STATE(653), 3, + sym_union_type, + sym_type_alias, + sym_record_type, + STATE(684), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [46950] = 9, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1386), 1, + sym_identifier, + ACTIONS(1388), 1, + anon_sym_LBRACE, + ACTIONS(1390), 1, + anon_sym_fn, + ACTIONS(1392), 1, + anon_sym_LPAREN, + STATE(936), 1, + sym_qualified_path, + STATE(1069), 1, + sym_variant, + STATE(1173), 3, + sym_union_type, + sym_type_alias, + sym_record_type, + STATE(1273), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [46984] = 9, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1386), 1, + sym_identifier, + ACTIONS(1388), 1, + anon_sym_LBRACE, + ACTIONS(1390), 1, + anon_sym_fn, + ACTIONS(1392), 1, + anon_sym_LPAREN, + STATE(936), 1, + sym_qualified_path, + STATE(1069), 1, + sym_variant, + STATE(1240), 3, + sym_union_type, + sym_type_alias, + sym_record_type, + STATE(1273), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [47018] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1424), 13, + ACTIONS(1434), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43733,10 +45382,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45057] = 2, + [47037] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1426), 13, + ACTIONS(1436), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43750,10 +45399,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45076] = 2, + [47056] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1428), 13, + ACTIONS(1438), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43767,10 +45416,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45095] = 2, + [47075] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1430), 13, + ACTIONS(1440), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43784,10 +45433,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45114] = 2, + [47094] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1432), 13, + ACTIONS(1442), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43801,10 +45450,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45133] = 2, + [47113] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1434), 13, + ACTIONS(1444), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43818,10 +45467,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45152] = 2, + [47132] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1436), 13, + ACTIONS(1446), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43835,10 +45484,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45171] = 2, + [47151] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1438), 13, + ACTIONS(1448), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43852,10 +45501,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45190] = 2, + [47170] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1440), 13, + ACTIONS(1450), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43869,10 +45518,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45209] = 2, + [47189] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1442), 13, + ACTIONS(1452), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43886,10 +45535,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45228] = 2, + [47208] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1444), 13, + ACTIONS(1454), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43903,10 +45552,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45247] = 2, + [47227] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1446), 13, + ACTIONS(1456), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43920,10 +45569,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45266] = 2, + [47246] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1448), 13, + ACTIONS(1458), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43937,30 +45586,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45285] = 5, - ACTIONS(298), 1, + [47265] = 2, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(959), 1, - anon_sym_EQ, - ACTIONS(1346), 1, - anon_sym_LT, - ACTIONS(1348), 1, - anon_sym_LBRACK, - ACTIONS(961), 10, - anon_sym_LBRACE, + ACTIONS(1460), 13, anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_GT, - anon_sym_RPAREN, - anon_sym_PIPE, - anon_sym_where, - anon_sym_BANG, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [45310] = 2, + anon_sym_let, + anon_sym_mut, + anon_sym_fn, + anon_sym_extern, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_state, + anon_sym_module, + anon_sym_export, + anon_sym_signature, + sym__doc_comment_line, + [47284] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1450), 13, + ACTIONS(1462), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43974,10 +45620,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45329] = 2, + [47303] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1452), 13, + ACTIONS(1464), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -43991,10 +45637,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45348] = 2, + [47322] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1454), 13, + ACTIONS(1466), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44008,10 +45654,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45367] = 2, + [47341] = 6, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1456), 13, + ACTIONS(839), 1, + anon_sym_COLON_COLON, + ACTIONS(1470), 1, + anon_sym_LT, + STATE(397), 1, + aux_sym_qualified_path_repeat1, + STATE(835), 1, + sym_type_arguments, + ACTIONS(1468), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [47368] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1472), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44025,10 +45692,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45386] = 2, + [47387] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1458), 13, + ACTIONS(1474), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44042,10 +45709,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45405] = 2, + [47406] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1460), 13, + ACTIONS(1476), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44059,10 +45726,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45424] = 2, + [47425] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1462), 13, + ACTIONS(1478), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44076,10 +45743,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45443] = 2, + [47444] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1464), 13, + ACTIONS(1480), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44093,10 +45760,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45462] = 2, + [47463] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1466), 13, + ACTIONS(1482), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44110,10 +45777,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45481] = 2, + [47482] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1468), 13, + ACTIONS(1484), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44127,10 +45794,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45500] = 2, + [47501] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1470), 13, + ACTIONS(1486), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44144,10 +45811,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45519] = 2, + [47520] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1472), 13, + ACTIONS(1488), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44161,10 +45828,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45538] = 2, + [47539] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1474), 13, + ACTIONS(1490), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44178,10 +45845,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45557] = 2, + [47558] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1476), 13, + ACTIONS(1492), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44195,10 +45862,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45576] = 2, + [47577] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1478), 13, + ACTIONS(1494), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44212,10 +45879,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45595] = 2, + [47596] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1480), 13, + ACTIONS(1496), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44229,10 +45896,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45614] = 2, + [47615] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1482), 13, + ACTIONS(1498), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44246,10 +45913,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45633] = 2, + [47634] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1484), 13, + ACTIONS(1500), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44263,10 +45930,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45652] = 2, + [47653] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1486), 13, + ACTIONS(1502), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44280,10 +45947,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45671] = 2, + [47672] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1488), 13, + ACTIONS(1504), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44297,10 +45964,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45690] = 2, + [47691] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1490), 13, + ACTIONS(1506), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44314,10 +45981,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45709] = 2, + [47710] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1492), 13, + ACTIONS(1508), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44331,10 +45998,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45728] = 2, + [47729] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1494), 13, + ACTIONS(1510), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44348,10 +46015,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45747] = 2, + [47748] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1496), 13, + ACTIONS(1512), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44365,10 +46032,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45766] = 2, + [47767] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1498), 13, + ACTIONS(1514), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44382,10 +46049,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45785] = 2, + [47786] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1500), 13, + ACTIONS(1516), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44399,10 +46066,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45804] = 2, + [47805] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1502), 13, + ACTIONS(1518), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44416,10 +46083,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45823] = 2, + [47824] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1504), 13, + ACTIONS(1520), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44433,10 +46100,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45842] = 2, + [47843] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1506), 13, + ACTIONS(1522), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44450,10 +46117,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45861] = 2, + [47862] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1508), 13, + ACTIONS(1524), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44467,10 +46134,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45880] = 2, + [47881] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(498), 13, + ACTIONS(1526), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44484,10 +46151,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45899] = 2, + [47900] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(685), 13, + ACTIONS(1528), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44501,10 +46168,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45918] = 2, + [47919] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1510), 13, + ACTIONS(1530), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44518,10 +46185,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45937] = 2, + [47938] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1512), 13, + ACTIONS(1532), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44535,10 +46202,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45956] = 2, + [47957] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1514), 13, + ACTIONS(1534), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44552,10 +46219,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45975] = 2, + [47976] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1516), 13, + ACTIONS(1536), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44569,31 +46236,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [45994] = 6, + [47995] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(823), 1, - anon_sym_COLON_COLON, - ACTIONS(1520), 1, - anon_sym_LT, - STATE(390), 1, - aux_sym_qualified_path_repeat1, - STATE(887), 1, - sym_type_arguments, - ACTIONS(1518), 9, + ACTIONS(1538), 13, anon_sym_RBRACE, anon_sym_let, + anon_sym_mut, anon_sym_fn, + anon_sym_extern, anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_state, anon_sym_module, - anon_sym_opaque, + anon_sym_export, + anon_sym_signature, sym__doc_comment_line, - [46021] = 2, + [48014] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1522), 13, + ACTIONS(1540), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44607,10 +46270,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46040] = 2, + [48033] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1524), 13, + ACTIONS(1542), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44624,10 +46287,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46059] = 2, + [48052] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1526), 13, + ACTIONS(1544), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44641,10 +46304,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46078] = 2, + [48071] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1528), 13, + ACTIONS(1546), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44658,10 +46321,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46097] = 2, + [48090] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1530), 13, + ACTIONS(1548), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44675,10 +46338,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46116] = 2, + [48109] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1532), 13, + ACTIONS(1550), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44692,10 +46355,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46135] = 2, + [48128] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1534), 13, + ACTIONS(1552), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44709,10 +46372,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46154] = 2, + [48147] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1536), 13, + ACTIONS(1554), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44726,10 +46389,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46173] = 2, + [48166] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1538), 13, + ACTIONS(1556), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44743,10 +46406,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46192] = 2, + [48185] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1540), 13, + ACTIONS(1558), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44760,10 +46423,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46211] = 2, + [48204] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1542), 13, + ACTIONS(1560), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44777,10 +46440,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46230] = 2, + [48223] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1544), 13, + ACTIONS(664), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44794,10 +46457,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46249] = 2, + [48242] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1546), 13, + ACTIONS(554), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44811,10 +46474,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46268] = 2, + [48261] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(977), 1, + anon_sym_EQ, + ACTIONS(1348), 1, + anon_sym_LT, + ACTIONS(1350), 1, + anon_sym_LBRACK, + ACTIONS(979), 10, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_GT, + anon_sym_RPAREN, + anon_sym_PIPE, + anon_sym_where, + anon_sym_BANG, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [48286] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1548), 13, + ACTIONS(1562), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44828,10 +46511,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46287] = 2, + [48305] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1550), 13, + ACTIONS(1564), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44845,10 +46528,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46306] = 2, + [48324] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1552), 13, + ACTIONS(1566), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44862,10 +46545,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46325] = 2, + [48343] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1554), 13, + ACTIONS(1568), 13, anon_sym_RBRACE, anon_sym_let, anon_sym_mut, @@ -44879,509 +46562,479 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_export, anon_sym_signature, sym__doc_comment_line, - [46344] = 10, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(1556), 1, - sym_identifier, - ACTIONS(1558), 1, - anon_sym_RBRACE, - ACTIONS(1562), 1, - sym_replayable, - STATE(224), 1, - aux_sym_doc_comment_repeat1, - STATE(934), 1, - sym_multiplicity, - STATE(963), 1, - sym_doc_comment, - STATE(770), 2, - sym_operation_declaration, - aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - [46378] = 5, + [48362] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1566), 1, - anon_sym_DASH_GT, - ACTIONS(1568), 1, - anon_sym_BANG, - STATE(889), 1, - sym_effect_set, - ACTIONS(1564), 9, + ACTIONS(1570), 13, anon_sym_RBRACE, anon_sym_let, + anon_sym_mut, anon_sym_fn, + anon_sym_extern, anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_state, anon_sym_module, - anon_sym_opaque, + anon_sym_export, + anon_sym_signature, sym__doc_comment_line, - [46402] = 10, + [48381] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, - sym_replayable, - ACTIONS(1570), 1, + ACTIONS(1574), 1, anon_sym_RBRACE, - STATE(224), 1, + ACTIONS(1578), 1, + sym_replayable, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(774), 2, + STATE(795), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46436] = 10, + [48415] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1572), 1, + ACTIONS(1580), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(757), 2, + STATE(767), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46470] = 10, + [48449] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1574), 1, + ACTIONS(1582), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(767), 2, + STATE(764), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46504] = 10, + [48483] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1576), 1, + ACTIONS(1584), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(761), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46538] = 10, + [48517] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, - sym_replayable, ACTIONS(1578), 1, + sym_replayable, + ACTIONS(1586), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46572] = 4, + [48551] = 5, ACTIONS(3), 1, sym_line_comment, - ACTIONS(823), 1, - anon_sym_COLON_COLON, - STATE(787), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(1580), 10, + ACTIONS(1590), 1, + anon_sym_DASH_GT, + ACTIONS(1592), 1, + anon_sym_BANG, + STATE(844), 1, + sym_effect_set, + ACTIONS(1588), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, anon_sym_type, sym_static_stage, anon_sym_effect, - anon_sym_PLUS, anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [46594] = 10, + [48575] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1582), 1, + ACTIONS(1594), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(779), 2, + STATE(770), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46628] = 10, + [48609] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1584), 1, + ACTIONS(1596), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(764), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46662] = 10, + [48643] = 5, ACTIONS(3), 1, sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(1556), 1, - sym_identifier, - ACTIONS(1562), 1, - sym_replayable, - ACTIONS(1586), 1, + ACTIONS(1592), 1, + anon_sym_BANG, + ACTIONS(1600), 1, + anon_sym_DASH_GT, + STATE(864), 1, + sym_effect_set, + ACTIONS(1598), 9, anon_sym_RBRACE, - STATE(224), 1, - aux_sym_doc_comment_repeat1, - STATE(934), 1, - sym_multiplicity, - STATE(963), 1, - sym_doc_comment, - STATE(786), 2, - sym_operation_declaration, - aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - [46696] = 10, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [48667] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1588), 1, + ACTIONS(1602), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(780), 2, + STATE(775), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46730] = 10, + [48701] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1590), 1, + ACTIONS(1604), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(768), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46764] = 10, + [48735] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1592), 1, + ACTIONS(1606), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(799), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46798] = 10, + [48769] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1594), 1, + ACTIONS(1608), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(784), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46832] = 10, + [48803] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1596), 1, + ACTIONS(1610), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(778), 2, + STATE(763), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46866] = 10, + [48837] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1598), 1, + ACTIONS(1612), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(778), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46900] = 10, + [48871] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1600), 1, + ACTIONS(1614), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46934] = 10, + [48905] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1602), 1, + ACTIONS(1616), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(773), 2, + STATE(772), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [46968] = 10, + [48939] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1604), 1, + ACTIONS(1618), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(781), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47002] = 10, + [48973] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1606), 1, + ACTIONS(1620), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(776), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47036] = 5, + [49007] = 5, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1568), 1, + ACTIONS(1592), 1, anon_sym_BANG, - ACTIONS(1610), 1, + ACTIONS(1624), 1, anon_sym_DASH_GT, - STATE(908), 1, + STATE(884), 1, sym_effect_set, - ACTIONS(1608), 9, + ACTIONS(1622), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -45391,345 +47044,415 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [47060] = 10, + [49031] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1612), 1, + ACTIONS(1626), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(783), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47094] = 10, + [49065] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1614), 1, + ACTIONS(1628), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47128] = 10, + [49099] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1616), 1, + ACTIONS(1630), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(777), 2, + STATE(786), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47162] = 10, + [49133] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1618), 1, + ACTIONS(1632), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47196] = 10, + [49167] = 8, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + STATE(754), 1, + sym_qualified_path, + STATE(1604), 1, + sym__call_type_list, + ACTIONS(1640), 2, + anon_sym_in, + anon_sym_out, + STATE(1119), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [49197] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1620), 1, + ACTIONS(1642), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(789), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47230] = 10, + [49231] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1622), 1, + ACTIONS(1644), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47264] = 10, + [49265] = 5, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1592), 1, + anon_sym_BANG, + ACTIONS(1648), 1, + anon_sym_DASH_GT, + STATE(898), 1, + sym_effect_set, + ACTIONS(1646), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [49289] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1624), 1, + ACTIONS(1650), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(791), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47298] = 10, + [49323] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1626), 1, + ACTIONS(1652), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47332] = 5, + [49357] = 10, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1568), 1, - anon_sym_BANG, - ACTIONS(1630), 1, - anon_sym_DASH_GT, - STATE(856), 1, - sym_effect_set, - ACTIONS(1628), 9, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(1572), 1, + sym_identifier, + ACTIONS(1578), 1, + sym_replayable, + ACTIONS(1654), 1, anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, + STATE(227), 1, + aux_sym_doc_comment_repeat1, + STATE(940), 1, + sym_multiplicity, + STATE(982), 1, + sym_doc_comment, + STATE(793), 2, + sym_operation_declaration, + aux_sym_effect_declaration_repeat1, + ACTIONS(1576), 3, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + [49391] = 10, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(71), 1, sym__doc_comment_line, - [47356] = 10, + ACTIONS(1572), 1, + sym_identifier, + ACTIONS(1578), 1, + sym_replayable, + ACTIONS(1656), 1, + anon_sym_RBRACE, + STATE(227), 1, + aux_sym_doc_comment_repeat1, + STATE(940), 1, + sym_multiplicity, + STATE(982), 1, + sym_doc_comment, + STATE(796), 2, + sym_operation_declaration, + aux_sym_effect_declaration_repeat1, + ACTIONS(1576), 3, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + [49425] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1632), 1, + ACTIONS(1658), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(789), 2, + STATE(794), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47390] = 10, + [49459] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1634), 1, + ACTIONS(1660), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(785), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47424] = 10, + [49493] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1636), 1, + ACTIONS(1662), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47458] = 10, + [49527] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1638), 1, + ACTIONS(1664), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47492] = 10, + [49561] = 10, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1640), 1, + ACTIONS(1666), 1, sym_identifier, - ACTIONS(1643), 1, + ACTIONS(1669), 1, anon_sym_RBRACE, - ACTIONS(1648), 1, + ACTIONS(1674), 1, sym_replayable, - ACTIONS(1651), 1, + ACTIONS(1677), 1, sym__doc_comment_line, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1645), 3, + ACTIONS(1671), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47526] = 4, + [49595] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(823), 1, + ACTIONS(839), 1, anon_sym_COLON_COLON, - STATE(389), 1, + STATE(798), 1, aux_sym_qualified_path_repeat1, - ACTIONS(1654), 10, + ACTIONS(1680), 10, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -45740,55 +47463,54 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [47548] = 5, + [49617] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1568), 1, - anon_sym_BANG, - ACTIONS(1658), 1, - anon_sym_DASH_GT, - STATE(920), 1, - sym_effect_set, - ACTIONS(1656), 9, + ACTIONS(839), 1, + anon_sym_COLON_COLON, + STATE(396), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(1682), 10, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, anon_sym_type, sym_static_stage, anon_sym_effect, + anon_sym_PLUS, anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [47572] = 10, + [49639] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(71), 1, sym__doc_comment_line, - ACTIONS(1556), 1, + ACTIONS(1572), 1, sym_identifier, - ACTIONS(1562), 1, + ACTIONS(1578), 1, sym_replayable, - ACTIONS(1660), 1, + ACTIONS(1684), 1, anon_sym_RBRACE, - STATE(224), 1, + STATE(227), 1, aux_sym_doc_comment_repeat1, - STATE(934), 1, + STATE(940), 1, sym_multiplicity, - STATE(963), 1, + STATE(982), 1, sym_doc_comment, - STATE(786), 2, + STATE(796), 2, sym_operation_declaration, aux_sym_effect_declaration_repeat1, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [47606] = 3, + [49673] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1160), 1, + ACTIONS(1248), 1, anon_sym_EQ, - ACTIONS(1162), 10, + ACTIONS(1250), 10, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_COMMA, @@ -45799,46 +47521,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_RBRACK, anon_sym_EQ_GT, - [47625] = 4, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1664), 1, - anon_sym_EQ, - ACTIONS(1666), 1, - anon_sym_LT, - ACTIONS(1662), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [47646] = 4, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1568), 1, - anon_sym_BANG, - STATE(876), 1, - sym_effect_set, - ACTIONS(1668), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [47667] = 3, + [49692] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1156), 1, + ACTIONS(1268), 1, anon_sym_EQ, - ACTIONS(1158), 10, + ACTIONS(1270), 10, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_COMMA, @@ -45849,14 +47537,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_RBRACK, anon_sym_EQ_GT, - [47686] = 4, + [49711] = 8, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + ACTIONS(1686), 1, + anon_sym_RPAREN, + STATE(754), 1, + sym_qualified_path, + STATE(1546), 1, + sym_type_list, + STATE(1086), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [49740] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1568), 1, + ACTIONS(1592), 1, anon_sym_BANG, - STATE(832), 1, + STATE(872), 1, sym_effect_set, - ACTIONS(1670), 9, + ACTIONS(1688), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -45866,36 +47575,94 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [47707] = 11, + [49761] = 11, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1674), 1, + ACTIONS(1692), 1, anon_sym_fn, - ACTIONS(1676), 1, + ACTIONS(1694), 1, anon_sym_extern, - ACTIONS(1678), 1, + ACTIONS(1696), 1, anon_sym_type, - ACTIONS(1680), 1, + ACTIONS(1698), 1, sym_static_stage, - ACTIONS(1682), 1, + ACTIONS(1700), 1, anon_sym_effect, - ACTIONS(1684), 1, + ACTIONS(1702), 1, anon_sym_state, - ACTIONS(1686), 1, + ACTIONS(1704), 1, anon_sym_module, - ACTIONS(1688), 1, + ACTIONS(1706), 1, anon_sym_export, - ACTIONS(1690), 1, + ACTIONS(1708), 1, anon_sym_signature, - ACTIONS(1672), 2, + ACTIONS(1690), 2, anon_sym_let, anon_sym_mut, - [47742] = 3, + [49796] = 7, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + STATE(754), 1, + sym_qualified_path, + ACTIONS(1710), 2, + anon_sym_in, + anon_sym_out, + STATE(1272), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [49823] = 4, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1714), 1, + anon_sym_EQ, + ACTIONS(1716), 1, + anon_sym_LT, + ACTIONS(1712), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [49844] = 8, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + ACTIONS(1718), 1, + anon_sym_RPAREN, + STATE(754), 1, + sym_qualified_path, + STATE(1441), 1, + sym_type_list, + STATE(1086), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [49873] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1164), 1, + ACTIONS(1264), 1, anon_sym_EQ, - ACTIONS(1166), 10, + ACTIONS(1266), 10, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_COMMA, @@ -45906,14 +47673,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_RBRACK, anon_sym_EQ_GT, - [47761] = 4, + [49892] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1568), 1, + ACTIONS(1592), 1, anon_sym_BANG, - STATE(827), 1, + STATE(899), 1, sym_effect_set, - ACTIONS(1692), 9, + ACTIONS(1720), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -45923,14 +47690,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [47782] = 4, + [49913] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1568), 1, + ACTIONS(1592), 1, anon_sym_BANG, - STATE(917), 1, + STATE(903), 1, sym_effect_set, - ACTIONS(1694), 9, + ACTIONS(1722), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -45940,33 +47707,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [47803] = 8, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, - anon_sym_fn, - ACTIONS(1700), 1, - anon_sym_LPAREN, - ACTIONS(1702), 1, - anon_sym_RPAREN, - STATE(696), 1, - sym_qualified_path, - STATE(1567), 1, - sym_type_list, - STATE(1092), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [47832] = 3, + [49934] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1126), 1, + ACTIONS(1256), 1, anon_sym_EQ, - ACTIONS(1128), 10, + ACTIONS(1258), 10, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_COMMA, @@ -45977,98 +47723,131 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_RBRACK, anon_sym_EQ_GT, - [47851] = 8, + [49953] = 4, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1592), 1, + anon_sym_BANG, + STATE(887), 1, + sym_effect_set, + ACTIONS(1724), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [49974] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1704), 1, + ACTIONS(1726), 1, anon_sym_RPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1583), 1, + STATE(1595), 1, sym_type_list, - STATE(1092), 5, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [47880] = 8, + [50003] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1706), 1, + ACTIONS(1728), 1, anon_sym_RPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1597), 1, + STATE(1611), 1, sym_type_list, - STATE(1092), 5, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [47909] = 8, + [50032] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1708), 1, + ACTIONS(1730), 1, anon_sym_RPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1631), 1, + STATE(1660), 1, sym_type_list, - STATE(1092), 5, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [47938] = 8, + [50061] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1710), 1, + ACTIONS(1732), 1, anon_sym_RPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1554), 1, + STATE(1666), 1, sym_type_list, - STATE(1092), 5, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [47967] = 4, - ACTIONS(3), 1, + [50090] = 3, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(1714), 1, + ACTIONS(1260), 1, anon_sym_EQ, - ACTIONS(1716), 1, + ACTIONS(1262), 10, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_GT, + anon_sym_RPAREN, + anon_sym_PIPE, + anon_sym_where, + anon_sym_BANG, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [50109] = 4, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1470), 1, anon_sym_LT, - ACTIONS(1712), 9, + STATE(835), 1, + sym_type_arguments, + ACTIONS(1468), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46078,51 +47857,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [47988] = 3, - ACTIONS(298), 1, + [50130] = 4, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1172), 1, + ACTIONS(1736), 1, anon_sym_EQ, - ACTIONS(1174), 10, - anon_sym_LBRACE, + ACTIONS(1738), 1, + anon_sym_LT, + ACTIONS(1734), 9, anon_sym_RBRACE, - anon_sym_COMMA, - anon_sym_GT, - anon_sym_RPAREN, - anon_sym_PIPE, - anon_sym_where, - anon_sym_BANG, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [48007] = 8, - ACTIONS(298), 1, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [50151] = 3, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1742), 1, + anon_sym_EQ, + ACTIONS(1740), 9, + anon_sym_RBRACE, + anon_sym_let, anon_sym_fn, - ACTIONS(1700), 1, - anon_sym_LPAREN, - ACTIONS(1718), 1, - anon_sym_RPAREN, - STATE(696), 1, - sym_qualified_path, - STATE(1637), 1, - sym_type_list, - STATE(1092), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [48036] = 4, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [50169] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1520), 1, - anon_sym_LT, - STATE(887), 1, - sym_type_arguments, - ACTIONS(1518), 9, + ACTIONS(1746), 1, + anon_sym_EQ, + ACTIONS(1744), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46132,70 +47904,69 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [48057] = 7, + [50187] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1720), 1, - anon_sym_LBRACE, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1096), 5, + STATE(1597), 1, + sym_positional_payload, + STATE(1251), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48083] = 8, + [50213] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(1722), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1724), 1, - anon_sym_LBRACE, - ACTIONS(1728), 1, - anon_sym_COLON, - ACTIONS(1730), 1, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(628), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(1726), 4, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [48111] = 7, + STATE(754), 1, + sym_qualified_path, + STATE(1410), 1, + sym_type_list, + STATE(1086), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [50239] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1414), 1, + STATE(1427), 1, sym_positional_payload, - STATE(1173), 5, + STATE(1251), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48137] = 3, + [50265] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1734), 1, - anon_sym_EQ, - ACTIONS(1732), 9, + ACTIONS(1750), 1, + anon_sym_PLUS, + ACTIONS(1748), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46205,186 +47976,234 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [48155] = 11, + [50283] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(957), 1, - anon_sym_COMMA, - ACTIONS(1267), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(1722), 1, + ACTIONS(1752), 1, sym_identifier, - ACTIONS(1724), 1, + ACTIONS(1754), 1, anon_sym_LBRACE, - ACTIONS(1726), 1, - anon_sym_EQ_GT, - ACTIONS(1728), 1, + ACTIONS(1758), 1, anon_sym_COLON, - ACTIONS(1730), 1, + ACTIONS(1760), 1, anon_sym_LPAREN, - ACTIONS(1736), 1, - anon_sym_RBRACE, - STATE(628), 1, + STATE(641), 1, aux_sym_qualified_path_repeat1, - STATE(1243), 1, - aux_sym_field_pattern_repeat1, - [48189] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1740), 1, - anon_sym_EQ, - ACTIONS(1738), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [48207] = 7, + ACTIONS(1756), 4, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [50311] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1713), 1, + STATE(1528), 1, sym_type_list, - STATE(1092), 5, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48233] = 7, + [50337] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1402), 1, - sym_positional_payload, - STATE(1173), 5, + STATE(1415), 1, + sym_type_list, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48259] = 7, + [50363] = 11, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(886), 1, + anon_sym_COMMA, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + ACTIONS(1752), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1754), 1, + anon_sym_LBRACE, + ACTIONS(1756), 1, + anon_sym_EQ_GT, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_RBRACE, + STATE(641), 1, + aux_sym_qualified_path_repeat1, + STATE(1162), 1, + aux_sym_field_pattern_repeat1, + [50397] = 7, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1385), 1, + STATE(1749), 1, sym_type_list, - STATE(1092), 5, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48285] = 7, + [50423] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1501), 1, + STATE(1444), 1, sym_type_list, - STATE(1092), 5, + STATE(1086), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48311] = 7, + [50449] = 10, ACTIONS(298), 1, sym_line_comment, + ACTIONS(1692), 1, + anon_sym_fn, + ACTIONS(1694), 1, + anon_sym_extern, ACTIONS(1696), 1, - sym_identifier, + anon_sym_type, ACTIONS(1698), 1, - anon_sym_fn, + sym_static_stage, ACTIONS(1700), 1, + anon_sym_effect, + ACTIONS(1702), 1, + anon_sym_state, + ACTIONS(1704), 1, + anon_sym_module, + ACTIONS(1708), 1, + anon_sym_signature, + ACTIONS(1690), 2, + anon_sym_let, + anon_sym_mut, + [50481] = 7, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1764), 1, + anon_sym_LBRACE, + STATE(754), 1, sym_qualified_path, - STATE(1448), 1, - sym_type_list, - STATE(1092), 5, + STATE(1065), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48337] = 10, + [50507] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1674), 1, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + STATE(754), 1, + sym_qualified_path, + STATE(1411), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [50530] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1766), 9, + anon_sym_RBRACE, + anon_sym_let, anon_sym_fn, - ACTIONS(1676), 1, - anon_sym_extern, - ACTIONS(1678), 1, anon_sym_type, - ACTIONS(1680), 1, sym_static_stage, - ACTIONS(1682), 1, anon_sym_effect, - ACTIONS(1684), 1, - anon_sym_state, - ACTIONS(1686), 1, anon_sym_module, - ACTIONS(1690), 1, - anon_sym_signature, - ACTIONS(1672), 2, - anon_sym_let, - anon_sym_mut, - [48369] = 7, + anon_sym_opaque, + sym__doc_comment_line, + [50545] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1562), 1, - sym_type_list, - STATE(1092), 5, + STATE(1055), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48395] = 3, + [50568] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1374), 1, + anon_sym_fn, + ACTIONS(1376), 1, + anon_sym_LPAREN, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, + sym_qualified_path, + STATE(954), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [50591] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1744), 1, - anon_sym_PLUS, - ACTIONS(1742), 9, + ACTIONS(1770), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46394,61 +48213,95 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [48413] = 6, + [50606] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(797), 5, + STATE(957), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48436] = 6, + [50629] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(851), 5, + STATE(939), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48459] = 6, + [50652] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, + sym_qualified_path, + STATE(941), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [50675] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1374), 1, + anon_sym_fn, + ACTIONS(1376), 1, + anon_sym_LPAREN, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, + sym_qualified_path, + STATE(622), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [50698] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1374), 1, + anon_sym_fn, + ACTIONS(1376), 1, + anon_sym_LPAREN, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, sym_qualified_path, - STATE(853), 5, + STATE(803), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48482] = 2, + [50721] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1748), 9, + ACTIONS(1772), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46458,10 +48311,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [48497] = 2, + [50736] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + STATE(754), 1, + sym_qualified_path, + STATE(1298), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [50759] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + STATE(754), 1, + sym_qualified_path, + STATE(1196), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [50782] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1750), 9, + ACTIONS(1774), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46471,389 +48358,408 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [48512] = 6, + [50797] = 8, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1776), 1, + anon_sym_COLON_COLON, + ACTIONS(1778), 1, + anon_sym_LBRACE, + ACTIONS(1780), 1, + anon_sym_LT, + ACTIONS(1782), 1, + anon_sym_LPAREN, + ACTIONS(1784), 1, + anon_sym_LBRACK, + STATE(857), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(1240), 3, + sym__statement_break, + anon_sym_PIPE, + anon_sym_where, + [50824] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(806), 5, + STATE(1446), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48535] = 6, + [50847] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, sym_qualified_path, - STATE(793), 5, + STATE(617), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48558] = 6, + [50870] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(990), 5, + STATE(1151), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48581] = 6, + [50893] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1786), 1, + sym_identifier, + STATE(1078), 1, sym_qualified_path, - STATE(1155), 5, + STATE(1588), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48604] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1752), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [48619] = 6, + [50916] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1786), 1, sym_identifier, - STATE(438), 1, + STATE(1078), 1, sym_qualified_path, - STATE(531), 5, + STATE(1318), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48642] = 6, + [50939] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1009), 5, + STATE(1014), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48665] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1754), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [48680] = 6, + [50962] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, sym_qualified_path, - STATE(1022), 5, + STATE(621), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48703] = 6, + [50985] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1703), 5, + STATE(996), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48726] = 6, + [51008] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1386), 1, - anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1776), 1, + anon_sym_COLON_COLON, + STATE(859), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(428), 7, + sym__statement_break, + anon_sym_LBRACE, + anon_sym_LT, anon_sym_LPAREN, - ACTIONS(1756), 1, + anon_sym_PIPE, + anon_sym_where, + anon_sym_LBRACK, + [51027] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1634), 1, sym_identifier, - STATE(1068), 1, + ACTIONS(1636), 1, + anon_sym_fn, + ACTIONS(1638), 1, + anon_sym_LPAREN, + STATE(754), 1, sym_qualified_path, - STATE(1555), 5, + STATE(1259), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48749] = 6, + [51050] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1788), 1, + anon_sym_COLON_COLON, + STATE(859), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(421), 7, + sym__statement_break, + anon_sym_LBRACE, + anon_sym_LT, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_where, + anon_sym_LBRACK, + [51069] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(537), 5, + STATE(960), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48772] = 6, + [51092] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(940), 5, + STATE(965), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48795] = 6, + [51115] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(942), 5, + STATE(938), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48818] = 6, + [51138] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(515), 5, + STATE(812), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48841] = 6, + [51161] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1791), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [51176] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(944), 5, + STATE(874), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48864] = 6, + [51199] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1386), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1756), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(1068), 1, + STATE(518), 1, sym_qualified_path, - STATE(1295), 5, + STATE(945), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48887] = 6, + [51222] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, + STATE(754), 1, sym_qualified_path, - STATE(945), 5, + STATE(1005), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48910] = 6, + [51245] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, + STATE(754), 1, sym_qualified_path, - STATE(946), 5, + STATE(1473), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48933] = 4, - ACTIONS(298), 1, + [51268] = 2, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1758), 1, - anon_sym_COLON_COLON, - STATE(849), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(415), 7, - sym__statement_break, - anon_sym_LBRACE, - anon_sym_LT, - anon_sym_LPAREN, - anon_sym_PIPE, - anon_sym_where, - anon_sym_LBRACK, - [48952] = 6, + ACTIONS(1793), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [51283] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1786), 1, sym_identifier, - STATE(438), 1, + STATE(1078), 1, sym_qualified_path, - STATE(924), 5, + STATE(1313), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [48975] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1760), 1, - anon_sym_COLON_COLON, - STATE(849), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(419), 7, - sym__statement_break, - anon_sym_LBRACE, - anon_sym_LT, - anon_sym_LPAREN, - anon_sym_PIPE, - anon_sym_where, - anon_sym_LBRACK, - [48994] = 6, + [51306] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1623), 5, + STATE(1027), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49017] = 2, + [51329] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1763), 9, + ACTIONS(1795), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46863,23 +48769,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49032] = 2, - ACTIONS(3), 1, + [51344] = 6, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(1765), 9, - anon_sym_RBRACE, - anon_sym_let, + ACTIONS(1374), 1, anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [49047] = 2, + ACTIONS(1376), 1, + anon_sym_LPAREN, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, + sym_qualified_path, + STATE(917), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [51367] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1767), 9, + ACTIONS(1797), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46889,46 +48799,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49062] = 8, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1758), 1, - anon_sym_COLON_COLON, - ACTIONS(1769), 1, - anon_sym_LBRACE, - ACTIONS(1771), 1, - anon_sym_LT, - ACTIONS(1773), 1, - anon_sym_LPAREN, - ACTIONS(1775), 1, - anon_sym_LBRACK, - STATE(847), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(1136), 3, - sym__statement_break, - anon_sym_PIPE, - anon_sym_where, - [49089] = 6, + [51382] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(891), 5, + STATE(888), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49112] = 2, + [51405] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1777), 9, + ACTIONS(1799), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46938,10 +48829,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49127] = 2, + [51420] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1779), 9, + ACTIONS(1801), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -46951,142 +48842,155 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49142] = 6, + [51435] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(800), 5, + STATE(1021), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49165] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1781), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [49180] = 6, + [51458] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1786), 1, + sym_identifier, + STATE(1078), 1, sym_qualified_path, - STATE(1469), 5, + STATE(1461), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49203] = 6, + [51481] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1015), 5, + STATE(1734), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49226] = 6, + [51504] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1386), 1, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1756), 1, - sym_identifier, - STATE(1068), 1, + STATE(754), 1, sym_qualified_path, - STATE(1391), 5, + STATE(1525), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49249] = 6, + [51527] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1786), 1, + sym_identifier, + STATE(1078), 1, sym_qualified_path, - STATE(1359), 5, + STATE(1505), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49272] = 6, + [51550] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(748), 5, + STATE(809), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49295] = 6, + [51573] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1803), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [51588] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1805), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [51603] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1786), 1, + sym_identifier, + STATE(1078), 1, sym_qualified_path, - STATE(1027), 5, + STATE(1303), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49318] = 2, + [51626] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1783), 9, + ACTIONS(1807), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -47096,10 +49000,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49333] = 2, + [51641] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1785), 9, + ACTIONS(1809), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -47109,129 +49013,159 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49348] = 6, + [51656] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(688), 5, + STATE(715), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49371] = 6, + [51679] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, sym_qualified_path, - STATE(983), 5, + STATE(926), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49394] = 6, + [51702] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(692), 5, + STATE(721), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49417] = 6, + [51725] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1386), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1756), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(1068), 1, + STATE(518), 1, sym_qualified_path, - STATE(1642), 5, + STATE(731), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49440] = 6, + [51748] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1374), 1, + anon_sym_fn, + ACTIONS(1376), 1, + anon_sym_LPAREN, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1698), 1, + STATE(518), 1, + sym_qualified_path, + STATE(950), 5, + sym__type, + sym_function_type, + sym_generic_type, + sym_array_type, + sym_type_identifier, + [51771] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, sym_qualified_path, - STATE(1320), 5, + STATE(951), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49463] = 6, + [51794] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1234), 5, + STATE(1003), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49486] = 6, + [51817] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1811), 9, + anon_sym_RBRACE, + anon_sym_let, + anon_sym_fn, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [51832] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(702), 5, + STATE(810), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49509] = 2, + [51855] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1787), 9, + ACTIONS(1813), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -47241,10 +49175,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49524] = 2, + [51870] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1789), 9, + ACTIONS(1815), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -47254,525 +49188,444 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [49539] = 6, + [51885] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1386), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1756), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(1068), 1, + STATE(518), 1, sym_qualified_path, - STATE(1333), 5, + STATE(953), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49562] = 6, + [51908] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(926), 5, + STATE(955), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49585] = 6, + [51931] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(950), 5, + STATE(964), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49608] = 6, - ACTIONS(298), 1, + [51954] = 2, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1817), 9, + anon_sym_RBRACE, + anon_sym_let, anon_sym_fn, - ACTIONS(1360), 1, - anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, - sym_qualified_path, - STATE(928), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [49631] = 6, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [51969] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(923), 5, + STATE(949), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49654] = 6, + [51992] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, + STATE(754), 1, sym_qualified_path, - STATE(933), 5, + STATE(1699), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49677] = 6, + [52015] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(943), 5, + STATE(961), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49700] = 6, + [52038] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(925), 5, + STATE(947), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49723] = 6, + [52061] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, - anon_sym_fn, - ACTIONS(1700), 1, - anon_sym_LPAREN, - STATE(696), 1, - sym_qualified_path, - STATE(991), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [49746] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, + STATE(754), 1, sym_qualified_path, - STATE(931), 5, + STATE(1371), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49769] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1791), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [49784] = 6, + [52084] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1390), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1392), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, - sym_qualified_path, - STATE(794), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [49807] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1793), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [49822] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1786), 1, sym_identifier, - ACTIONS(1698), 1, - anon_sym_fn, - ACTIONS(1700), 1, - anon_sym_LPAREN, - STATE(696), 1, + STATE(1078), 1, sym_qualified_path, - STATE(1563), 5, + STATE(1552), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49845] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1795), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [49860] = 6, + [52107] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1347), 5, + STATE(1391), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49883] = 6, + [52130] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1144), 5, + STATE(1281), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49906] = 6, + [52153] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1366), 5, + STATE(800), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49929] = 6, + [52176] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1386), 5, + STATE(817), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49952] = 6, + [52199] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1387), 5, + STATE(1412), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49975] = 6, + [52222] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1396), 5, + STATE(1421), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [49998] = 6, + [52245] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1004), 5, + STATE(1008), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50021] = 6, - ACTIONS(298), 1, + [52268] = 2, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1819), 9, + anon_sym_RBRACE, + anon_sym_let, anon_sym_fn, - ACTIONS(1360), 1, - anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, - sym_qualified_path, - STATE(852), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [50044] = 6, + anon_sym_type, + sym_static_stage, + anon_sym_effect, + anon_sym_module, + anon_sym_opaque, + sym__doc_comment_line, + [52283] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1018), 5, + STATE(1011), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50067] = 6, + [52306] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1021), 5, + STATE(1013), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50090] = 6, + [52329] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1034), 5, + STATE(1016), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50113] = 6, + [52352] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(975), 5, + STATE(1017), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50136] = 6, + [52375] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(976), 5, + STATE(1018), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50159] = 6, + [52398] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(977), 5, + STATE(1019), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50182] = 6, + [52421] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(978), 5, + STATE(1020), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50205] = 6, + [52444] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, + STATE(754), 1, sym_qualified_path, - STATE(792), 5, + STATE(1523), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50228] = 2, + [52467] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1797), 9, + ACTIONS(1821), 9, anon_sym_RBRACE, anon_sym_let, anon_sym_fn, @@ -47782,222 +49635,145 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_module, anon_sym_opaque, sym__doc_comment_line, - [50243] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, - anon_sym_fn, - ACTIONS(1700), 1, - anon_sym_LPAREN, - STATE(696), 1, - sym_qualified_path, - STATE(1496), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [50266] = 6, + [52482] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1768), 1, sym_identifier, - STATE(438), 1, + STATE(518), 1, sym_qualified_path, - STATE(866), 5, + STATE(847), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50289] = 6, + [52505] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1502), 5, + STATE(1529), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50312] = 6, + [52528] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, + ACTIONS(1634), 1, sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - STATE(696), 1, + STATE(754), 1, sym_qualified_path, - STATE(1503), 5, + STATE(1530), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50335] = 6, + [52551] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1386), 1, - anon_sym_fn, - ACTIONS(1388), 1, - anon_sym_LPAREN, - ACTIONS(1756), 1, + ACTIONS(1634), 1, sym_identifier, - STATE(1068), 1, - sym_qualified_path, - STATE(1472), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [50358] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, + STATE(754), 1, sym_qualified_path, - STATE(798), 5, + STATE(811), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50381] = 6, + [52574] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1358), 1, - anon_sym_fn, - ACTIONS(1360), 1, - anon_sym_LPAREN, - ACTIONS(1746), 1, + ACTIONS(1634), 1, sym_identifier, - STATE(438), 1, - sym_qualified_path, - STATE(939), 5, - sym__type, - sym_function_type, - sym_generic_type, - sym_array_type, - sym_type_identifier, - [50404] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1358), 1, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1360), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1746), 1, - sym_identifier, - STATE(438), 1, + STATE(754), 1, sym_qualified_path, - STATE(951), 5, + STATE(1227), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50427] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1799), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [50442] = 6, + [52597] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1386), 1, + ACTIONS(1634), 1, + sym_identifier, + ACTIONS(1636), 1, anon_sym_fn, - ACTIONS(1388), 1, + ACTIONS(1638), 1, anon_sym_LPAREN, - ACTIONS(1756), 1, - sym_identifier, - STATE(1068), 1, + STATE(754), 1, sym_qualified_path, - STATE(1287), 5, + STATE(1049), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50465] = 6, + [52620] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1696), 1, - sym_identifier, - ACTIONS(1698), 1, + ACTIONS(1374), 1, anon_sym_fn, - ACTIONS(1700), 1, + ACTIONS(1376), 1, anon_sym_LPAREN, - STATE(696), 1, + ACTIONS(1768), 1, + sym_identifier, + STATE(518), 1, sym_qualified_path, - STATE(997), 5, + STATE(699), 5, sym__type, sym_function_type, sym_generic_type, sym_array_type, sym_type_identifier, - [50488] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(1801), 9, - anon_sym_RBRACE, - anon_sym_let, - anon_sym_fn, - anon_sym_type, - sym_static_stage, - anon_sym_effect, - anon_sym_module, - anon_sym_opaque, - sym__doc_comment_line, - [50503] = 6, + [52643] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(1803), 1, + ACTIONS(1823), 1, anon_sym_LT, - STATE(628), 1, + STATE(641), 1, aux_sym_qualified_path_repeat1, - STATE(1100), 1, + STATE(1097), 1, sym_type_arguments, - ACTIONS(1518), 4, + ACTIONS(1468), 4, anon_sym_LBRACE, anon_sym_COMMA, anon_sym_EQ, anon_sym_RBRACK, - [50525] = 2, + [52665] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(419), 8, + ACTIONS(421), 8, sym__statement_break, anon_sym_COLON_COLON, anon_sym_LBRACE, @@ -48006,5952 +49782,6067 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_where, anon_sym_LBRACK, - [50539] = 3, + [52679] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1778), 1, + anon_sym_LBRACE, + ACTIONS(1780), 1, + anon_sym_LT, + ACTIONS(1782), 1, + anon_sym_LPAREN, + ACTIONS(1784), 1, + anon_sym_LBRACK, + ACTIONS(1240), 3, + sym__statement_break, + anon_sym_PIPE, + anon_sym_where, + [52700] = 7, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, + sym_identifier, + STATE(641), 1, + aux_sym_qualified_path_repeat1, + STATE(1126), 1, + sym_type_arguments, + STATE(1024), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [52723] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1807), 2, + ACTIONS(1829), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1805), 5, + ACTIONS(1827), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50554] = 3, + [52738] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1811), 2, + ACTIONS(1833), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1809), 5, + ACTIONS(1831), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50569] = 3, - ACTIONS(3), 1, + [52753] = 6, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(1815), 2, - anon_sym_RBRACE, - sym__doc_comment_line, - ACTIONS(1813), 5, + ACTIONS(1835), 1, + sym_identifier, + ACTIONS(1837), 1, + anon_sym_COLON, + ACTIONS(1839), 1, + sym_replayable, + STATE(1518), 1, + sym_multiplicity, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - sym_replayable, - sym_identifier, - [50584] = 3, + [52774] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1819), 2, + ACTIONS(1843), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1817), 5, + ACTIONS(1841), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50599] = 6, + [52789] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1821), 1, + ACTIONS(1845), 1, sym_identifier, - ACTIONS(1823), 1, + ACTIONS(1847), 1, anon_sym_COLON, - ACTIONS(1825), 1, + ACTIONS(1849), 1, sym_replayable, - STATE(1552), 1, + STATE(1631), 1, sym_multiplicity, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [50620] = 3, - ACTIONS(3), 1, + [52810] = 6, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(1829), 2, - anon_sym_RBRACE, - sym__doc_comment_line, - ACTIONS(1827), 5, + ACTIONS(1851), 1, + sym_identifier, + ACTIONS(1853), 1, + anon_sym_COLON, + ACTIONS(1855), 1, + sym_replayable, + STATE(1638), 1, + sym_multiplicity, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - sym_replayable, - sym_identifier, - [50635] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, - sym_identifier, - STATE(628), 1, - aux_sym_qualified_path_repeat1, - STATE(1211), 1, - sym_type_arguments, - STATE(1055), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [50658] = 7, + [52831] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(1853), 1, + anon_sym_COLON, + ACTIONS(1857), 1, sym_identifier, - STATE(628), 1, - aux_sym_qualified_path_repeat1, - STATE(1174), 1, - sym_type_arguments, - STATE(1064), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [50681] = 3, + ACTIONS(1859), 1, + sym_replayable, + STATE(1648), 1, + sym_multiplicity, + ACTIONS(1576), 3, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + [52852] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1835), 2, + ACTIONS(1863), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1833), 5, + ACTIONS(1861), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50696] = 7, + [52867] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(1803), 1, + ACTIONS(1823), 1, anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(1825), 1, sym_identifier, - STATE(628), 1, + STATE(641), 1, aux_sym_qualified_path_repeat1, - STATE(1216), 1, + STATE(1176), 1, sym_type_arguments, - STATE(1090), 2, + STATE(992), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [50719] = 3, + [52890] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1839), 2, + ACTIONS(1867), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1837), 5, + ACTIONS(1865), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50734] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1841), 1, - sym_identifier, - ACTIONS(1843), 1, - anon_sym_COLON, - ACTIONS(1845), 1, - sym_replayable, - STATE(1349), 1, - sym_multiplicity, - ACTIONS(1560), 3, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - [50755] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1769), 1, - anon_sym_LBRACE, - ACTIONS(1771), 1, - anon_sym_LT, - ACTIONS(1773), 1, - anon_sym_LPAREN, - ACTIONS(1775), 1, - anon_sym_LBRACK, - ACTIONS(1136), 3, - sym__statement_break, - anon_sym_PIPE, - anon_sym_where, - [50776] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1758), 1, - anon_sym_COLON_COLON, - ACTIONS(1769), 1, - anon_sym_LBRACE, - ACTIONS(1773), 1, - anon_sym_LPAREN, - STATE(847), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(1136), 3, - sym__statement_break, - anon_sym_PIPE, - anon_sym_where, - [50797] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, - sym_identifier, - STATE(628), 1, - aux_sym_qualified_path_repeat1, - STATE(1196), 1, - sym_type_arguments, - STATE(1076), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [50820] = 7, + [52905] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(1803), 1, + ACTIONS(1823), 1, anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(1825), 1, sym_identifier, - STATE(628), 1, + STATE(641), 1, aux_sym_qualified_path_repeat1, - STATE(1226), 1, + STATE(1183), 1, sym_type_arguments, - STATE(1082), 2, + STATE(1000), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [50843] = 3, + [52928] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1849), 2, + ACTIONS(1871), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1847), 5, + ACTIONS(1869), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50858] = 3, + [52943] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1853), 2, + ACTIONS(1875), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1851), 5, + ACTIONS(1873), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50873] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, - sym_identifier, - STATE(628), 1, - aux_sym_qualified_path_repeat1, - STATE(1228), 1, - sym_type_arguments, - STATE(1048), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [50896] = 3, + [52958] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1857), 2, + ACTIONS(1879), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1855), 5, + ACTIONS(1877), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50911] = 3, - ACTIONS(3), 1, + [52973] = 6, + ACTIONS(298), 1, sym_line_comment, - ACTIONS(1861), 2, - anon_sym_RBRACE, - sym__doc_comment_line, - ACTIONS(1859), 5, + ACTIONS(1881), 1, + sym_identifier, + ACTIONS(1883), 1, + anon_sym_COLON, + ACTIONS(1885), 1, + sym_replayable, + STATE(1744), 1, + sym_multiplicity, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - sym_replayable, - sym_identifier, - [50926] = 3, + [52994] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1865), 2, + ACTIONS(1889), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1863), 5, + ACTIONS(1887), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50941] = 3, + [53009] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1869), 2, + ACTIONS(1893), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1867), 5, + ACTIONS(1891), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50956] = 3, + [53024] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1873), 2, + ACTIONS(1897), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1871), 5, + ACTIONS(1895), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [50971] = 6, + [53039] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1843), 1, - anon_sym_COLON, - ACTIONS(1875), 1, - sym_identifier, - ACTIONS(1877), 1, - sym_replayable, - STATE(1692), 1, - sym_multiplicity, - ACTIONS(1560), 3, + ACTIONS(1776), 1, + anon_sym_COLON_COLON, + ACTIONS(1778), 1, + anon_sym_LBRACE, + ACTIONS(1782), 1, + anon_sym_LPAREN, + STATE(857), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(1240), 3, + sym__statement_break, + anon_sym_PIPE, + anon_sym_where, + [53060] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(1901), 2, + anon_sym_RBRACE, + sym__doc_comment_line, + ACTIONS(1899), 5, anon_sym_abort, anon_sym_once, anon_sym_many, - [50992] = 6, + sym_replayable, + sym_identifier, + [53075] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1879), 1, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, sym_identifier, - ACTIONS(1881), 1, - anon_sym_COLON, - ACTIONS(1883), 1, - sym_replayable, - STATE(1436), 1, - sym_multiplicity, - ACTIONS(1560), 3, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - [51013] = 6, + STATE(641), 1, + aux_sym_qualified_path_repeat1, + STATE(1222), 1, + sym_type_arguments, + STATE(1023), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [53098] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1885), 1, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, sym_identifier, - ACTIONS(1887), 1, - anon_sym_COLON, - ACTIONS(1889), 1, - sym_replayable, - STATE(1441), 1, - sym_multiplicity, - ACTIONS(1560), 3, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - [51034] = 3, + STATE(641), 1, + aux_sym_qualified_path_repeat1, + STATE(1226), 1, + sym_type_arguments, + STATE(1025), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [53121] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1893), 2, + ACTIONS(1905), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1891), 5, + ACTIONS(1903), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [51049] = 3, + [53136] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(1897), 2, + ACTIONS(1909), 2, anon_sym_RBRACE, sym__doc_comment_line, - ACTIONS(1895), 5, + ACTIONS(1907), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [51064] = 6, + [53151] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1887), 1, + ACTIONS(1837), 1, anon_sym_COLON, - ACTIONS(1899), 1, + ACTIONS(1911), 1, sym_identifier, - ACTIONS(1901), 1, + ACTIONS(1913), 1, sym_replayable, - STATE(1450), 1, + STATE(1472), 1, sym_multiplicity, - ACTIONS(1560), 3, + ACTIONS(1576), 3, anon_sym_abort, anon_sym_once, anon_sym_many, - [51085] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1905), 1, - anon_sym_EQ, - ACTIONS(1907), 1, - anon_sym_DASH_GT, - ACTIONS(1909), 1, - anon_sym_BANG, - STATE(1112), 1, - sym_effect_set, - STATE(1451), 1, - sym_block, - [51107] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1911), 1, - anon_sym_EQ, - ACTIONS(1913), 1, - anon_sym_DASH_GT, - STATE(1165), 1, - sym_effect_set, - STATE(1392), 1, - sym_block, - [51129] = 6, + [53172] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1758), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(1771), 1, + ACTIONS(1823), 1, anon_sym_LT, - ACTIONS(1775), 1, - anon_sym_LBRACK, - STATE(847), 1, + ACTIONS(1825), 1, + sym_identifier, + STATE(641), 1, aux_sym_qualified_path_repeat1, - ACTIONS(961), 2, - sym__statement_break, - anon_sym_where, - [51149] = 7, - ACTIONS(298), 1, + STATE(1204), 1, + sym_type_arguments, + STATE(1051), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [53195] = 3, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(1917), 1, - anon_sym_EQ, - ACTIONS(1919), 1, - anon_sym_DASH_GT, - STATE(685), 1, - sym_block, - STATE(1181), 1, - sym_effect_set, - [51171] = 7, - ACTIONS(298), 1, + ACTIONS(1917), 2, + anon_sym_RBRACE, + sym__doc_comment_line, + ACTIONS(1915), 5, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + sym_identifier, + [53210] = 3, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1921), 1, - anon_sym_EQ, - ACTIONS(1923), 1, - anon_sym_DASH_GT, - STATE(1217), 1, - sym_effect_set, - STATE(1569), 1, - sym_block, - [51193] = 7, + ACTIONS(1921), 2, + anon_sym_RBRACE, + sym__doc_comment_line, + ACTIONS(1919), 5, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + sym_replayable, + sym_identifier, + [53225] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, ACTIONS(1925), 1, anon_sym_EQ, ACTIONS(1927), 1, anon_sym_DASH_GT, - STATE(1113), 1, - sym_effect_set, - STATE(1454), 1, - sym_block, - [51215] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, ACTIONS(1929), 1, - anon_sym_EQ, - ACTIONS(1931), 1, - anon_sym_DASH_GT, - STATE(1110), 1, - sym_effect_set, - STATE(1416), 1, + anon_sym_BANG, + STATE(703), 1, sym_block, - [51237] = 7, + STATE(1201), 1, + sym_effect_set, + [53247] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, ACTIONS(1933), 1, anon_sym_EQ, ACTIONS(1935), 1, anon_sym_DASH_GT, - STATE(719), 1, - sym_block, - STATE(1162), 1, + STATE(1257), 1, sym_effect_set, - [51259] = 7, + STATE(1533), 1, + sym_block, + [53269] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, ACTIONS(1937), 1, anon_sym_EQ, ACTIONS(1939), 1, anon_sym_DASH_GT, - STATE(681), 1, + STATE(722), 1, sym_block, - STATE(1178), 1, + STATE(1160), 1, sym_effect_set, - [51281] = 2, + [53291] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1785), 6, + ACTIONS(1805), 6, anon_sym_DOT, anon_sym_LBRACE, anon_sym_COMMA, anon_sym_EQ, anon_sym_RBRACK, sym_identifier, - [51293] = 5, + [53303] = 7, ACTIONS(298), 1, sym_line_comment, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1931), 1, + anon_sym_LBRACE, ACTIONS(1941), 1, - sym_identifier, + anon_sym_EQ, ACTIONS(1943), 1, - sym_replayable, - STATE(952), 1, - sym_multiplicity, - ACTIONS(1560), 3, - anon_sym_abort, - anon_sym_once, - anon_sym_many, - [51311] = 7, + anon_sym_DASH_GT, + STATE(1194), 1, + sym_effect_set, + STATE(1573), 1, + sym_block, + [53325] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, ACTIONS(1945), 1, anon_sym_EQ, ACTIONS(1947), 1, anon_sym_DASH_GT, - STATE(695), 1, - sym_block, - STATE(1185), 1, + STATE(1124), 1, sym_effect_set, - [51333] = 4, + STATE(1576), 1, + sym_block, + [53347] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - STATE(1100), 1, - sym_type_arguments, - ACTIONS(1518), 4, + ACTIONS(1923), 1, anon_sym_LBRACE, - anon_sym_COMMA, - anon_sym_EQ, - anon_sym_RBRACK, - [51349] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, - anon_sym_LBRACE, ACTIONS(1949), 1, anon_sym_EQ, ACTIONS(1951), 1, anon_sym_DASH_GT, - STATE(699), 1, + STATE(757), 1, sym_block, - STATE(1186), 1, + STATE(1175), 1, + sym_effect_set, + [53369] = 7, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(1953), 1, + anon_sym_EQ, + ACTIONS(1955), 1, + anon_sym_DASH_GT, + STATE(1152), 1, sym_effect_set, - [51371] = 3, + STATE(1737), 1, + sym_block, + [53391] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1955), 1, + ACTIONS(1959), 1, anon_sym_COLON, - ACTIONS(1953), 5, + ACTIONS(1957), 5, anon_sym_abort, anon_sym_once, anon_sym_many, sym_replayable, sym_identifier, - [51385] = 7, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1957), 1, - anon_sym_EQ, - ACTIONS(1959), 1, - anon_sym_DASH_GT, - STATE(1137), 1, - sym_effect_set, - STATE(1456), 1, - sym_block, - [51407] = 7, + [53405] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, ACTIONS(1961), 1, anon_sym_EQ, ACTIONS(1963), 1, anon_sym_DASH_GT, - STATE(1143), 1, - sym_effect_set, - STATE(1550), 1, + STATE(759), 1, sym_block, - [51429] = 7, + STATE(1242), 1, + sym_effect_set, + [53427] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, ACTIONS(1965), 1, anon_sym_EQ, ACTIONS(1967), 1, anon_sym_DASH_GT, - STATE(740), 1, - sym_block, - STATE(1171), 1, + STATE(1225), 1, sym_effect_set, - [51451] = 7, + STATE(1564), 1, + sym_block, + [53449] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, ACTIONS(1969), 1, anon_sym_EQ, ACTIONS(1971), 1, anon_sym_DASH_GT, - STATE(1128), 1, - sym_effect_set, - STATE(1418), 1, + STATE(728), 1, sym_block, - [51473] = 7, + STATE(1243), 1, + sym_effect_set, + [53471] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, ACTIONS(1973), 1, anon_sym_EQ, ACTIONS(1975), 1, anon_sym_DASH_GT, - STATE(707), 1, - sym_block, - STATE(1189), 1, + STATE(1127), 1, sym_effect_set, - [51495] = 7, + STATE(1634), 1, + sym_block, + [53493] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, ACTIONS(1977), 1, anon_sym_EQ, ACTIONS(1979), 1, anon_sym_DASH_GT, - STATE(735), 1, + STATE(692), 1, sym_block, - STATE(1168), 1, + STATE(1249), 1, sym_effect_set, - [51517] = 5, + [53515] = 7, ACTIONS(298), 1, sym_line_comment, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1931), 1, + anon_sym_LBRACE, ACTIONS(1981), 1, - sym_identifier, - STATE(1142), 1, - sym_type_parameter, - STATE(1672), 1, - sym_type_parameter_list, - ACTIONS(1983), 2, - anon_sym_in, - anon_sym_out, - [51534] = 6, + anon_sym_EQ, + ACTIONS(1983), 1, + anon_sym_DASH_GT, + STATE(1236), 1, + sym_effect_set, + STATE(1423), 1, + sym_block, + [53537] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, ACTIONS(1985), 1, anon_sym_EQ, - STATE(704), 1, - sym_block, - STATE(1188), 1, + ACTIONS(1987), 1, + anon_sym_DASH_GT, + STATE(1129), 1, sym_effect_set, - [51553] = 6, + STATE(1448), 1, + sym_block, + [53559] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1989), 1, + sym_identifier, + ACTIONS(1991), 1, + sym_replayable, + STATE(944), 1, + sym_multiplicity, + ACTIONS(1576), 3, + anon_sym_abort, + anon_sym_once, + anon_sym_many, + [53577] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1776), 1, + anon_sym_COLON_COLON, + ACTIONS(1780), 1, + anon_sym_LT, + ACTIONS(1784), 1, + anon_sym_LBRACK, + STATE(857), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(979), 2, + sym__statement_break, + anon_sym_where, + [53597] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1823), 1, + anon_sym_LT, + STATE(1097), 1, + sym_type_arguments, + ACTIONS(1468), 4, anon_sym_LBRACE, - ACTIONS(1987), 1, + anon_sym_COMMA, anon_sym_EQ, - STATE(711), 1, - sym_block, - STATE(1190), 1, - sym_effect_set, - [51572] = 6, + anon_sym_RBRACK, + [53613] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(1989), 1, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1993), 1, anon_sym_EQ, - STATE(712), 1, + ACTIONS(1995), 1, + anon_sym_DASH_GT, + STATE(738), 1, sym_block, - STATE(1191), 1, + STATE(1255), 1, sym_effect_set, - [51591] = 6, + [53635] = 7, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(1991), 1, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1997), 1, anon_sym_EQ, - STATE(717), 1, + ACTIONS(1999), 1, + anon_sym_DASH_GT, + STATE(711), 1, sym_block, - STATE(1193), 1, + STATE(1213), 1, sym_effect_set, - [51610] = 5, + [53657] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1377), 1, + STATE(1695), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [51627] = 5, + [53674] = 6, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(859), 1, + anon_sym_type, + STATE(227), 1, + aux_sym_doc_comment_repeat1, + STATE(749), 1, + sym_type_declaration, + STATE(1742), 1, + sym_doc_comment, + [53693] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2007), 1, + anon_sym_RPAREN, + STATE(1073), 1, + sym_parameter, + STATE(1485), 1, + sym_parameter_list, + ACTIONS(2005), 2, + anon_sym__, + sym_identifier, + [53710] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1702), 1, + STATE(1457), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [51644] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1993), 1, - sym_identifier, - ACTIONS(1995), 1, - sym_string, - STATE(1042), 1, - sym_namespace_name, - STATE(1070), 1, - sym_import_target, - STATE(1358), 1, - sym_legacy_import_path, - [51663] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1997), 1, - anon_sym_DOT, - STATE(1111), 1, - aux_sym_legacy_import_path_repeat1, - ACTIONS(1999), 3, - sym__statement_break, - anon_sym_COLON_COLON, - anon_sym_as, - [51678] = 6, + [53727] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, ACTIONS(2001), 1, - anon_sym_EQ, - STATE(1117), 1, - sym_effect_set, - STATE(1547), 1, - sym_block, - [51697] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1981), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1527), 1, + STATE(1393), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [51714] = 5, + [53744] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(2003), 1, - anon_sym_COLON, - STATE(1007), 1, - aux_sym_qualified_path_repeat1, - ACTIONS(1580), 2, - anon_sym_LBRACE, - anon_sym_PLUS, - [51731] = 5, + ACTIONS(2009), 1, + sym_identifier, + ACTIONS(2011), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [53759] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2007), 1, + ACTIONS(2013), 1, anon_sym_RPAREN, - STATE(1087), 1, + STATE(1073), 1, sym_parameter, - STATE(1618), 1, + STATE(1484), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [51748] = 5, + [53776] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1606), 1, + STATE(1476), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [51765] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2009), 1, - anon_sym_RPAREN, - STATE(1087), 1, - sym_parameter, - STATE(1357), 1, - sym_parameter_list, - ACTIONS(2005), 2, - anon_sym__, - sym_identifier, - [51782] = 5, + [53793] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2011), 1, + ACTIONS(2015), 1, anon_sym_RPAREN, - STATE(1087), 1, + STATE(1073), 1, sym_parameter, - STATE(1717), 1, + STATE(1479), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [51799] = 6, + [53810] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(2013), 1, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2017), 1, anon_sym_EQ, - STATE(1122), 1, + STATE(1157), 1, sym_effect_set, - STATE(1369), 1, + STATE(1650), 1, sym_block, - [51818] = 6, + [53829] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(2015), 1, - anon_sym_EQ, - STATE(1225), 1, - sym_effect_set, - STATE(1624), 1, - sym_block, - [51837] = 5, + ACTIONS(2001), 1, + sym_identifier, + STATE(1203), 1, + sym_type_parameter, + STATE(1483), 1, + sym_type_parameter_list, + ACTIONS(2003), 2, + anon_sym_in, + anon_sym_out, + [53846] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2017), 1, + ACTIONS(1778), 1, + anon_sym_LBRACE, + ACTIONS(1782), 1, + anon_sym_LPAREN, + ACTIONS(1240), 3, + sym__statement_break, anon_sym_PIPE, - STATE(1087), 1, - sym_parameter, - STATE(1526), 1, - sym_parameter_list, - ACTIONS(2005), 2, - anon_sym__, - sym_identifier, - [51854] = 5, + anon_sym_where, + [53861] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2019), 1, - anon_sym_RPAREN, - STATE(1087), 1, - sym_parameter, - STATE(1544), 1, - sym_parameter_list, - ACTIONS(2005), 2, - anon_sym__, + ACTIONS(2001), 1, sym_identifier, - [51871] = 5, + STATE(1203), 1, + sym_type_parameter, + STATE(1401), 1, + sym_type_parameter_list, + ACTIONS(2003), 2, + anon_sym_in, + anon_sym_out, + [53878] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(2009), 1, sym_identifier, - STATE(1211), 1, - sym_type_arguments, - STATE(1055), 2, + ACTIONS(2019), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [51888] = 5, + [53893] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(2009), 1, sym_identifier, - STATE(1196), 1, - sym_type_arguments, - STATE(1076), 2, + ACTIONS(2021), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [51905] = 5, + [53908] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1667), 1, + STATE(1652), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [51922] = 6, + [53925] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(2021), 1, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2023), 1, anon_sym_EQ, - STATE(1145), 1, + STATE(1205), 1, sym_effect_set, - STATE(1574), 1, + STATE(1508), 1, sym_block, - [51941] = 5, + [53944] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2023), 1, - anon_sym_RPAREN, - STATE(1087), 1, - sym_parameter, - STATE(1559), 1, - sym_parameter_list, - ACTIONS(2005), 2, - anon_sym__, + ACTIONS(2001), 1, sym_identifier, - [51958] = 5, + STATE(1203), 1, + sym_type_parameter, + STATE(1490), 1, + sym_type_parameter_list, + ACTIONS(2003), 2, + anon_sym_in, + anon_sym_out, + [53961] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2025), 1, + anon_sym_EQ, + STATE(1223), 1, + sym_effect_set, + STATE(1661), 1, + sym_block, + [53980] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2009), 1, sym_identifier, - STATE(1216), 1, - sym_type_arguments, - STATE(1090), 2, + ACTIONS(2027), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [51975] = 5, + [53995] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2025), 1, - anon_sym_RPAREN, - STATE(1087), 1, - sym_parameter, - STATE(1585), 1, - sym_parameter_list, - ACTIONS(2005), 2, - anon_sym__, - sym_identifier, - [51992] = 5, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(2029), 1, + anon_sym_DOT, + STATE(641), 1, + aux_sym_qualified_path_repeat1, + STATE(1663), 1, + sym_type_arguments, + [54014] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2031), 1, + anon_sym_EQ, + STATE(697), 1, + sym_block, + STATE(1189), 1, + sym_effect_set, + [54033] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1534), 1, + STATE(1486), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52009] = 5, + [54050] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1633), 1, + STATE(1417), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52026] = 5, + [54067] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2033), 1, + anon_sym_EQ, + STATE(714), 1, + sym_block, + STATE(1220), 1, + sym_effect_set, + [54086] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2027), 1, + ACTIONS(2035), 1, anon_sym_RPAREN, - STATE(1087), 1, + STATE(1073), 1, sym_parameter, - STATE(1594), 1, + STATE(1492), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [52043] = 6, + [54103] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2037), 1, + anon_sym_EQ, + STATE(719), 1, + sym_block, + STATE(1230), 1, + sym_effect_set, + [54122] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2029), 1, + ACTIONS(2039), 1, anon_sym_EQ, - STATE(746), 1, + STATE(1206), 1, + sym_effect_set, + STATE(1497), 1, sym_block, - STATE(1175), 1, + [54141] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, + sym_identifier, + STATE(1204), 1, + sym_type_arguments, + STATE(1051), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54158] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2041), 1, + anon_sym_EQ, + STATE(730), 1, + sym_block, + STATE(1247), 1, + sym_effect_set, + [54177] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2043), 1, + anon_sym_EQ, + STATE(735), 1, + sym_block, + STATE(1250), 1, + sym_effect_set, + [54196] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2045), 1, + anon_sym_EQ, + STATE(742), 1, + sym_block, + STATE(1256), 1, + sym_effect_set, + [54215] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2047), 1, + anon_sym_EQ, + STATE(743), 1, + sym_block, + STATE(1258), 1, + sym_effect_set, + [54234] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(2049), 1, + anon_sym_EQ, + STATE(689), 1, + sym_block, + STATE(1116), 1, + sym_effect_set, + [54253] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2051), 1, + anon_sym_EQ, + STATE(1136), 1, + sym_effect_set, + STATE(1731), 1, + sym_block, + [54272] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2053), 1, + anon_sym_DOT, + STATE(1248), 1, + aux_sym_legacy_import_path_repeat1, + ACTIONS(2055), 3, + sym__statement_break, + anon_sym_COLON_COLON, + anon_sym_as, + [54287] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2009), 1, + sym_identifier, + ACTIONS(2057), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54302] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2009), 1, + sym_identifier, + ACTIONS(2059), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54317] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2009), 1, + sym_identifier, + ACTIONS(2061), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54332] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2009), 1, + sym_identifier, + ACTIONS(2063), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54347] = 6, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1929), 1, + anon_sym_BANG, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2065), 1, + anon_sym_EQ, + STATE(1148), 1, sym_effect_set, - [52062] = 5, + STATE(1459), 1, + sym_block, + [54366] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1301), 1, + anon_sym_COLON_COLON, + ACTIONS(2067), 1, + anon_sym_COLON, + STATE(1036), 1, + aux_sym_qualified_path_repeat1, + ACTIONS(1680), 2, + anon_sym_LBRACE, + anon_sym_PLUS, + [54383] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2009), 1, + sym_identifier, + ACTIONS(2069), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54398] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2071), 1, + anon_sym_PIPE, + STATE(1073), 1, + sym_parameter, + STATE(1553), 1, + sym_parameter_list, + ACTIONS(2005), 2, + anon_sym__, + sym_identifier, + [54415] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2073), 1, + anon_sym_RPAREN, + STATE(1073), 1, + sym_parameter, + STATE(1572), 1, + sym_parameter_list, + ACTIONS(2005), 2, + anon_sym__, + sym_identifier, + [54432] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2031), 1, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, + sym_identifier, + STATE(1176), 1, + sym_type_arguments, + STATE(992), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54449] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2075), 1, anon_sym_RPAREN, - STATE(1087), 1, + STATE(1073), 1, sym_parameter, - STATE(1653), 1, + STATE(1587), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [52079] = 5, + [54466] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2033), 1, - anon_sym_RPAREN, - STATE(1087), 1, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, + sym_identifier, + STATE(1183), 1, + sym_type_arguments, + STATE(1000), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54483] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2077), 1, + anon_sym_PIPE, + STATE(1073), 1, sym_parameter, - STATE(1600), 1, + STATE(1624), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [52096] = 5, + [54500] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(2035), 1, + ACTIONS(2079), 1, anon_sym_COLON, - STATE(561), 1, + STATE(628), 1, aux_sym_qualified_path_repeat1, - ACTIONS(1654), 2, + ACTIONS(1682), 2, anon_sym_LBRACE, anon_sym_PLUS, - [52113] = 5, + [54517] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1589), 1, + STATE(1580), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52130] = 6, + [54534] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(2037), 1, - anon_sym_EQ, - STATE(1157), 1, - sym_effect_set, - STATE(1693), 1, - sym_block, - [52149] = 4, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, + sym_identifier, + STATE(1126), 1, + sym_type_arguments, + STATE(1024), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54551] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1769), 1, - anon_sym_LBRACE, - ACTIONS(1773), 1, - anon_sym_LPAREN, - ACTIONS(1136), 3, - sym__statement_break, - anon_sym_PIPE, - anon_sym_where, - [52164] = 5, + ACTIONS(2009), 1, + sym_identifier, + ACTIONS(2081), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54566] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2039), 1, + ACTIONS(2083), 1, anon_sym_RPAREN, - STATE(1087), 1, + STATE(1073), 1, sym_parameter, - STATE(1620), 1, + STATE(1613), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [52181] = 5, + [54583] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2041), 1, + ACTIONS(2085), 1, anon_sym_RPAREN, - STATE(1087), 1, + STATE(1073), 1, sym_parameter, - STATE(1578), 1, + STATE(1500), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [52198] = 5, + [54600] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(2087), 1, + anon_sym_RPAREN, + STATE(1073), 1, + sym_parameter, + STATE(1622), 1, + sym_parameter_list, + ACTIONS(2005), 2, + anon_sym__, sym_identifier, - STATE(1226), 1, - sym_type_arguments, - STATE(1082), 2, + [54617] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2089), 1, + sym_identifier, + ACTIONS(2092), 2, + anon_sym_in, + anon_sym_do, + STATE(1043), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [52215] = 5, + [54632] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2043), 1, - anon_sym_PIPE, - STATE(1087), 1, + ACTIONS(2094), 1, + anon_sym_RPAREN, + STATE(1073), 1, sym_parameter, - STATE(1365), 1, + STATE(1628), 1, sym_parameter_list, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [52232] = 6, + [54649] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(2045), 1, - anon_sym_EQ, - STATE(1139), 1, - sym_effect_set, - STATE(1468), 1, - sym_block, - [52251] = 6, + ACTIONS(2096), 1, + anon_sym_PIPE, + STATE(1073), 1, + sym_parameter, + STATE(1637), 1, + sym_parameter_list, + ACTIONS(2005), 2, + anon_sym__, + sym_identifier, + [54666] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, - anon_sym_COLON_COLON, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(2047), 1, - anon_sym_DOT, - STATE(628), 1, - aux_sym_qualified_path_repeat1, - STATE(1566), 1, - sym_type_arguments, - [52270] = 5, + ACTIONS(2098), 1, + anon_sym_RPAREN, + STATE(1073), 1, + sym_parameter, + STATE(1649), 1, + sym_parameter_list, + ACTIONS(2005), 2, + anon_sym__, + sym_identifier, + [54683] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, + ACTIONS(1823), 1, anon_sym_LT, - ACTIONS(1831), 1, + ACTIONS(1825), 1, sym_identifier, - STATE(1228), 1, + STATE(1222), 1, sym_type_arguments, - STATE(1048), 2, + STATE(1023), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [52287] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2049), 1, - anon_sym_EQ, - STATE(750), 1, - sym_block, - STATE(1183), 1, - sym_effect_set, - [52306] = 6, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(833), 1, - anon_sym_type, - STATE(224), 1, - aux_sym_doc_comment_repeat1, - STATE(720), 1, - sym_type_declaration, - STATE(1506), 1, - sym_doc_comment, - [52325] = 5, + [54700] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(1825), 1, sym_identifier, - STATE(1142), 1, - sym_type_parameter, - STATE(1656), 1, - sym_type_parameter_list, - ACTIONS(1983), 2, - anon_sym_in, - anon_sym_out, - [52342] = 6, + STATE(1226), 1, + sym_type_arguments, + STATE(1025), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54717] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2051), 1, - anon_sym_EQ, - STATE(690), 1, - sym_block, - STATE(1184), 1, - sym_effect_set, - [52361] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(2053), 1, + ACTIONS(2100), 1, anon_sym_EQ, - STATE(1149), 1, + STATE(1122), 1, sym_effect_set, - STATE(1612), 1, + STATE(1584), 1, sym_block, - [52380] = 5, + [54736] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1561), 1, + STATE(1733), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52397] = 5, + [54753] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2009), 1, sym_identifier, - STATE(1142), 1, - sym_type_parameter, - STATE(1586), 1, - sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2102), 2, anon_sym_in, - anon_sym_out, - [52414] = 5, + anon_sym_do, + STATE(1043), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [54768] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1348), 1, + STATE(1589), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52431] = 5, + [54785] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1670), 1, + STATE(1614), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52448] = 6, + [54802] = 6, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(71), 1, + sym__doc_comment_line, + ACTIONS(859), 1, + anon_sym_type, + STATE(227), 1, + aux_sym_doc_comment_repeat1, + STATE(710), 1, + sym_type_declaration, + STATE(1742), 1, + sym_doc_comment, + [54821] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(1909), 1, + ACTIONS(1929), 1, anon_sym_BANG, - ACTIONS(2055), 1, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2104), 1, anon_sym_EQ, - STATE(1140), 1, + STATE(1144), 1, sym_effect_set, - STATE(1481), 1, + STATE(1599), 1, sym_block, - [52467] = 6, + [54840] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(1803), 1, + ACTIONS(1823), 1, anon_sym_LT, - ACTIONS(2057), 1, + ACTIONS(2106), 1, anon_sym_DOT, - STATE(628), 1, + STATE(641), 1, aux_sym_qualified_path_repeat1, - STATE(1699), 1, + STATE(1728), 1, sym_type_arguments, - [52486] = 5, + [54859] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2108), 1, + sym_identifier, + ACTIONS(2110), 1, + sym_string, + STATE(1087), 1, + sym_import_target, + STATE(1110), 1, + sym_namespace_name, + STATE(1727), 1, + sym_legacy_import_path, + [54878] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1666), 1, + STATE(1701), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52503] = 6, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(71), 1, - sym__doc_comment_line, - ACTIONS(833), 1, - anon_sym_type, - STATE(224), 1, - aux_sym_doc_comment_repeat1, - STATE(729), 1, - sym_type_declaration, - STATE(1506), 1, - sym_doc_comment, - [52522] = 5, + [54895] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1673), 1, + STATE(1702), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52539] = 5, + [54912] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1675), 1, + STATE(1704), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52556] = 6, + [54929] = 6, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1267), 1, + ACTIONS(1301), 1, anon_sym_COLON_COLON, - ACTIONS(1803), 1, + ACTIONS(1823), 1, anon_sym_LT, - ACTIONS(2059), 1, + ACTIONS(2112), 1, anon_sym_DOT, - STATE(628), 1, + STATE(641), 1, aux_sym_qualified_path_repeat1, - STATE(1710), 1, + STATE(1739), 1, sym_type_arguments, - [52575] = 6, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1909), 1, - anon_sym_BANG, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2061), 1, - anon_sym_EQ, - STATE(701), 1, - sym_block, - STATE(1187), 1, - sym_effect_set, - [52594] = 5, + [54948] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1701), 1, + STATE(1668), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52611] = 5, + [54965] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2001), 1, sym_identifier, - STATE(1142), 1, + STATE(1203), 1, sym_type_parameter, - STATE(1704), 1, + STATE(1730), 1, sym_type_parameter_list, - ACTIONS(1983), 2, + ACTIONS(2003), 2, anon_sym_in, anon_sym_out, - [52628] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(1831), 1, - sym_identifier, - STATE(1174), 1, - sym_type_arguments, - STATE(1064), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [52645] = 5, + [54982] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2063), 1, - anon_sym_PIPE, - STATE(1087), 1, - sym_parameter, - STATE(1609), 1, - sym_parameter_list, - ACTIONS(2005), 2, - anon_sym__, - sym_identifier, - [52662] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2065), 1, - sym_identifier, - STATE(965), 1, - sym_qualified_path, - STATE(1229), 1, - sym_effect_ref, - STATE(1626), 1, - sym_effect_list, - [52678] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, + ACTIONS(2009), 1, sym_identifier, - ACTIONS(2069), 1, + ACTIONS(2114), 2, anon_sym_in, - STATE(1089), 2, + anon_sym_do, + STATE(1043), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [52692] = 4, + [54997] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2071), 1, - anon_sym_COLON_COLON, - STATE(1053), 1, - aux_sym_import_target_repeat1, - ACTIONS(2074), 2, - sym__statement_break, - anon_sym_as, - [52706] = 4, + ACTIONS(2116), 4, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [55007] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2076), 1, - anon_sym_COLON_COLON, - STATE(1041), 1, - aux_sym_import_target_repeat1, - ACTIONS(2079), 2, - sym__statement_break, - anon_sym_as, - [52720] = 2, + ACTIONS(2118), 1, + anon_sym_COMMA, + STATE(1066), 1, + aux_sym_positional_payload_repeat1, + ACTIONS(2121), 2, + anon_sym_GT, + anon_sym_RPAREN, + [55021] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2081), 4, + ACTIONS(566), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [52730] = 4, + [55031] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2067), 1, + ACTIONS(2123), 1, sym_identifier, - ACTIONS(2083), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [52744] = 4, + ACTIONS(2125), 1, + anon_sym_RPAREN, + STATE(1131), 1, + sym_extern_parameter, + STATE(1455), 1, + sym_extern_parameter_list, + [55047] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2085), 1, + ACTIONS(2127), 1, anon_sym_PIPE, - STATE(1045), 1, + STATE(1106), 1, aux_sym_union_type_repeat1, - ACTIONS(1321), 2, + ACTIONS(1342), 2, sym__statement_break, anon_sym_where, - [52758] = 5, + [55061] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2065), 1, - sym_identifier, - STATE(965), 1, - sym_qualified_path, - STATE(1229), 1, - sym_effect_ref, - STATE(1420), 1, - sym_effect_list, - [52774] = 2, + ACTIONS(2131), 1, + anon_sym_COLON, + ACTIONS(2129), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_PIPE, + [55073] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2088), 4, + ACTIONS(2133), 1, anon_sym_COMMA, + STATE(1071), 1, + aux_sym_argument_list_repeat1, + ACTIONS(1050), 2, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_EQ_GT, - [52784] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, - sym_identifier, - ACTIONS(2090), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [52798] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, - sym_identifier, - ACTIONS(2092), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [52812] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, - sym_identifier, - ACTIONS(2094), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [52826] = 2, + [55087] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2096), 4, + ACTIONS(2136), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [52836] = 2, + [55097] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2098), 4, + ACTIONS(2138), 1, anon_sym_COMMA, + STATE(1083), 1, + aux_sym_parameter_list_repeat1, + ACTIONS(2140), 2, anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [52846] = 4, + anon_sym_PIPE, + [55111] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2100), 1, + ACTIONS(2142), 1, anon_sym_COLON_COLON, - STATE(1053), 1, + STATE(1101), 1, aux_sym_import_target_repeat1, - ACTIONS(2103), 2, + ACTIONS(2145), 2, sym__statement_break, anon_sym_as, - [52860] = 5, + [55125] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2105), 1, - sym_identifier, - ACTIONS(2107), 1, + ACTIONS(2147), 4, + anon_sym_COMMA, anon_sym_RPAREN, - STATE(1116), 1, - sym_extern_parameter, - STATE(1465), 1, - sym_extern_parameter_list, - [52876] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, - sym_identifier, - ACTIONS(2109), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [52890] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2111), 1, - sym_identifier, - ACTIONS(2113), 1, - anon_sym_RBRACE, - STATE(1108), 1, - sym_import_member, - STATE(1610), 1, - sym_import_member_list, - [52906] = 2, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [55135] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2115), 4, + ACTIONS(2149), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [52916] = 5, + [55145] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2065), 1, - sym_identifier, - ACTIONS(2117), 1, + ACTIONS(2151), 1, + anon_sym_PIPE, + STATE(1077), 1, + aux_sym_union_type_repeat1, + ACTIONS(1337), 2, + sym__statement_break, + anon_sym_where, + [55159] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1780), 1, + anon_sym_LT, + ACTIONS(1784), 1, anon_sym_LBRACK, - STATE(965), 1, - sym_qualified_path, - STATE(1263), 1, - sym_effect_ref, - [52932] = 2, + ACTIONS(979), 2, + sym__statement_break, + anon_sym_where, + [55173] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2119), 4, + ACTIONS(2154), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [52942] = 4, + [55183] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2121), 1, + ACTIONS(2001), 1, sym_identifier, - ACTIONS(2123), 1, + STATE(1323), 1, + sym_type_parameter, + ACTIONS(2003), 2, anon_sym_in, - STATE(1086), 2, - sym_kernel_arm, - aux_sym_kernel_expression_repeat1, - [52956] = 5, + anon_sym_out, + [55197] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2105), 1, + ACTIONS(2156), 1, sym_identifier, - ACTIONS(2125), 1, - anon_sym_RPAREN, - STATE(1116), 1, - sym_extern_parameter, - STATE(1536), 1, - sym_extern_parameter_list, - [52972] = 4, + ACTIONS(2158), 1, + anon_sym_in, + STATE(1109), 2, + sym_kernel_arm, + aux_sym_kernel_expression_repeat1, + [55211] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1981), 1, + ACTIONS(2160), 1, sym_identifier, - STATE(1252), 1, - sym_type_parameter, - ACTIONS(1983), 2, - anon_sym_in, - anon_sym_out, - [52986] = 4, + ACTIONS(2162), 1, + anon_sym_EQ_GT, + STATE(1187), 1, + aux_sym_handler_params_repeat1, + STATE(1374), 1, + sym_handler_params, + [55227] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2127), 1, + ACTIONS(2138), 1, anon_sym_COMMA, - STATE(1063), 1, + STATE(1111), 1, aux_sym_parameter_list_repeat1, - ACTIONS(2130), 2, + ACTIONS(2164), 2, anon_sym_RPAREN, anon_sym_PIPE, - [53000] = 4, + [55241] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2067), 1, + ACTIONS(2156), 1, sym_identifier, - ACTIONS(2132), 1, + ACTIONS(2166), 1, anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [53014] = 5, + STATE(1109), 2, + sym_kernel_arm, + aux_sym_kernel_expression_repeat1, + [55255] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2134), 1, + ACTIONS(2168), 1, sym_identifier, - ACTIONS(2136), 1, - anon_sym_LBRACK, - STATE(808), 1, + STATE(984), 1, sym_qualified_path, - STATE(857), 1, + STATE(1212), 1, sym_effect_ref, - [53030] = 4, + STATE(1445), 1, + sym_effect_list, + [55271] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2138), 1, + ACTIONS(2170), 1, anon_sym_COMMA, - STATE(1066), 1, + STATE(1093), 1, aux_sym_positional_payload_repeat1, - ACTIONS(2141), 2, + ACTIONS(2172), 2, anon_sym_GT, anon_sym_RPAREN, - [53044] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2143), 4, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [53054] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1771), 1, - anon_sym_LT, - ACTIONS(1775), 1, - anon_sym_LBRACK, - ACTIONS(961), 2, - sym__statement_break, - anon_sym_where, - [53068] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2147), 1, - anon_sym_COLON, - ACTIONS(2145), 3, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_PIPE, - [53080] = 5, + [55285] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2149), 1, + ACTIONS(2174), 1, anon_sym_COLON_COLON, - ACTIONS(2151), 1, + ACTIONS(2176), 1, anon_sym_as, - ACTIONS(2153), 1, + ACTIONS(2178), 1, sym__statement_break, - STATE(1444), 1, + STATE(1375), 1, sym_import_tail, - [53096] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2155), 4, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [53106] = 2, + [55301] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2157), 4, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [53116] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2105), 1, - sym_identifier, - ACTIONS(2159), 1, - anon_sym_RPAREN, - STATE(1116), 1, - sym_extern_parameter, - STATE(1371), 1, - sym_extern_parameter_list, - [53132] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2161), 1, - anon_sym_PIPE, - STATE(1045), 1, - aux_sym_union_type_repeat1, - ACTIONS(1326), 2, - sym__statement_break, - anon_sym_where, - [53146] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, - sym_identifier, - ACTIONS(2163), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [53160] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, - sym_identifier, - ACTIONS(2165), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [53174] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2105), 1, - sym_identifier, - ACTIONS(2167), 1, - anon_sym_RPAREN, - STATE(1116), 1, - sym_extern_parameter, - STATE(1576), 1, - sym_extern_parameter_list, - [53190] = 5, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2105), 1, - sym_identifier, - ACTIONS(2169), 1, - anon_sym_RPAREN, - STATE(1116), 1, - sym_extern_parameter, - STATE(1521), 1, - sym_extern_parameter_list, - [53206] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2121), 1, + ACTIONS(2180), 1, sym_identifier, - ACTIONS(2171), 1, - anon_sym_in, - STATE(1086), 2, - sym_kernel_arm, - aux_sym_kernel_expression_repeat1, - [53220] = 4, + ACTIONS(2182), 1, + anon_sym_LBRACK, + STATE(818), 1, + sym_qualified_path, + STATE(876), 1, + sym_effect_ref, + [55317] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2121), 1, + ACTIONS(2168), 1, sym_identifier, - ACTIONS(2173), 1, - anon_sym_in, - STATE(1086), 2, - sym_kernel_arm, - aux_sym_kernel_expression_repeat1, - [53234] = 2, + STATE(984), 1, + sym_qualified_path, + STATE(1212), 1, + sym_effect_ref, + STATE(1512), 1, + sym_effect_list, + [55333] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2175), 4, + ACTIONS(2184), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [53244] = 4, + [55343] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2067), 1, - sym_identifier, - ACTIONS(2177), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [53258] = 2, + ACTIONS(2186), 4, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [55353] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(547), 4, + ACTIONS(2188), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [53268] = 4, + [55363] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2179), 1, + ACTIONS(2170), 1, anon_sym_COMMA, - STATE(1084), 1, - aux_sym_argument_list_repeat1, - ACTIONS(1026), 2, + STATE(1066), 1, + aux_sym_positional_payload_repeat1, + ACTIONS(2190), 2, + anon_sym_GT, anon_sym_RPAREN, - anon_sym_RBRACK, - [53282] = 5, + [55377] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2182), 1, + ACTIONS(2123), 1, sym_identifier, - ACTIONS(2184), 1, + ACTIONS(2192), 1, + anon_sym_RPAREN, + STATE(1131), 1, + sym_extern_parameter, + STATE(1617), 1, + sym_extern_parameter_list, + [55393] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2160), 1, + sym_identifier, + ACTIONS(2194), 1, anon_sym_EQ_GT, - STATE(1179), 1, + STATE(1187), 1, aux_sym_handler_params_repeat1, - STATE(1439), 1, + STATE(1392), 1, sym_handler_params, - [53298] = 4, + [55409] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2186), 1, + ACTIONS(2123), 1, sym_identifier, - ACTIONS(2189), 1, - anon_sym_in, - STATE(1086), 2, - sym_kernel_arm, - aux_sym_kernel_expression_repeat1, - [53312] = 4, + ACTIONS(2196), 1, + anon_sym_RPAREN, + STATE(1131), 1, + sym_extern_parameter, + STATE(1396), 1, + sym_extern_parameter_list, + [55425] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2191), 1, + ACTIONS(1766), 4, + anon_sym_LBRACE, anon_sym_COMMA, - STATE(1088), 1, - aux_sym_parameter_list_repeat1, - ACTIONS(2193), 2, - anon_sym_RPAREN, - anon_sym_PIPE, - [53326] = 4, + anon_sym_EQ, + anon_sym_RBRACK, + [55435] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2191), 1, + ACTIONS(2198), 4, anon_sym_COMMA, - STATE(1063), 1, - aux_sym_parameter_list_repeat1, - ACTIONS(2195), 2, anon_sym_RPAREN, - anon_sym_PIPE, - [53340] = 4, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [55445] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2197), 1, - sym_identifier, ACTIONS(2200), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [53354] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2067), 1, sym_identifier, ACTIONS(2202), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [53368] = 2, + anon_sym_RBRACE, + STATE(1146), 1, + sym_import_member, + STATE(1720), 1, + sym_import_member_list, + [55461] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2204), 4, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_EQ_GT, - [53378] = 4, + ACTIONS(2168), 1, + sym_identifier, + ACTIONS(2204), 1, + anon_sym_LBRACK, + STATE(984), 1, + sym_qualified_path, + STATE(1329), 1, + sym_effect_ref, + [55477] = 4, ACTIONS(298), 1, sym_line_comment, ACTIONS(2206), 1, - anon_sym_COMMA, - STATE(1094), 1, - aux_sym_positional_payload_repeat1, - ACTIONS(2208), 2, - anon_sym_GT, - anon_sym_RPAREN, - [53392] = 5, + anon_sym_COLON_COLON, + STATE(1101), 1, + aux_sym_import_target_repeat1, + ACTIONS(2209), 2, + sym__statement_break, + anon_sym_as, + [55491] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2105), 1, + ACTIONS(2156), 1, sym_identifier, - ACTIONS(2210), 1, - anon_sym_RPAREN, - STATE(1116), 1, - sym_extern_parameter, - STATE(1412), 1, - sym_extern_parameter_list, - [53408] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2206), 1, - anon_sym_COMMA, - STATE(1066), 1, - aux_sym_positional_payload_repeat1, - ACTIONS(2212), 2, - anon_sym_GT, - anon_sym_RPAREN, - [53422] = 4, + ACTIONS(2211), 1, + anon_sym_in, + STATE(1109), 2, + sym_kernel_arm, + aux_sym_kernel_expression_repeat1, + [55505] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2067), 1, + ACTIONS(2123), 1, sym_identifier, - ACTIONS(2214), 1, - anon_sym_in, - STATE(1089), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [53436] = 2, + ACTIONS(2213), 1, + anon_sym_RPAREN, + STATE(1131), 1, + sym_extern_parameter, + STATE(1437), 1, + sym_extern_parameter_list, + [55521] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2216), 4, + ACTIONS(2215), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [53446] = 2, + [55531] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2218), 4, + ACTIONS(2217), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [53456] = 2, + [55541] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2127), 1, + anon_sym_PIPE, + STATE(1077), 1, + aux_sym_union_type_repeat1, + ACTIONS(1346), 2, + sym__statement_break, + anon_sym_where, + [55555] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2220), 4, + ACTIONS(2219), 4, anon_sym_COMMA, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_EQ_GT, - [53466] = 5, + [55565] = 5, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2182), 1, + ACTIONS(2123), 1, sym_identifier, - ACTIONS(2222), 1, - anon_sym_EQ_GT, - STATE(1179), 1, - aux_sym_handler_params_repeat1, - STATE(1424), 1, - sym_handler_params, - [53482] = 2, + ACTIONS(2221), 1, + anon_sym_RPAREN, + STATE(1131), 1, + sym_extern_parameter, + STATE(1395), 1, + sym_extern_parameter_list, + [55581] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1791), 4, - anon_sym_LBRACE, - anon_sym_COMMA, - anon_sym_EQ, - anon_sym_RBRACK, - [53492] = 4, + ACTIONS(2223), 1, + sym_identifier, + ACTIONS(2226), 1, + anon_sym_in, + STATE(1109), 2, + sym_kernel_arm, + aux_sym_kernel_expression_repeat1, + [55595] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2161), 1, - anon_sym_PIPE, + ACTIONS(2228), 1, + anon_sym_COLON_COLON, STATE(1074), 1, - aux_sym_union_type_repeat1, - ACTIONS(1330), 2, + aux_sym_import_target_repeat1, + ACTIONS(2231), 2, sym__statement_break, - anon_sym_where, - [53506] = 4, + anon_sym_as, + [55609] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2224), 1, - anon_sym_LBRACE, - ACTIONS(2226), 1, - anon_sym_if, - STATE(345), 1, - sym_if_expression, - [53519] = 4, + ACTIONS(2233), 1, + anon_sym_COMMA, + STATE(1111), 1, + aux_sym_parameter_list_repeat1, + ACTIONS(2236), 2, + anon_sym_RPAREN, + anon_sym_PIPE, + [55623] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, + ACTIONS(2238), 4, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [55633] = 5, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2123), 1, sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1630), 1, - sym_field_assignments, - [53532] = 4, + ACTIONS(2240), 1, + anon_sym_RPAREN, + STATE(1131), 1, + sym_extern_parameter, + STATE(1372), 1, + sym_extern_parameter_list, + [55649] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2230), 1, + ACTIONS(2242), 4, anon_sym_COMMA, - ACTIONS(2233), 1, anon_sym_RPAREN, - STATE(1104), 1, - aux_sym_pattern_repeat1, - [53545] = 4, + anon_sym_RBRACK, + anon_sym_EQ_GT, + [55659] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2235), 1, + ACTIONS(2244), 1, anon_sym_LBRACE, - ACTIONS(2237), 1, + ACTIONS(2246), 1, anon_sym_COLON, - STATE(1706), 1, + STATE(1469), 1, sym_signature_ascription, - [53558] = 4, + [55672] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(957), 1, - anon_sym_COMMA, - ACTIONS(1736), 1, - anon_sym_RBRACE, - STATE(1243), 1, - aux_sym_field_pattern_repeat1, - [53571] = 3, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(2248), 1, + anon_sym_EQ, + STATE(748), 1, + sym_block, + [55685] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2239), 1, - anon_sym_as, - ACTIONS(2241), 2, - anon_sym_RBRACE, + ACTIONS(2250), 1, anon_sym_COMMA, - [53582] = 4, + ACTIONS(2252), 1, + anon_sym_GT, + STATE(1188), 1, + aux_sym_type_parameter_list_repeat1, + [55698] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2243), 1, + ACTIONS(2254), 1, anon_sym_RBRACE, - ACTIONS(2245), 1, + ACTIONS(2256), 1, anon_sym_COMMA, - STATE(1160), 1, - aux_sym_import_member_list_repeat1, - [53595] = 4, + STATE(1252), 1, + aux_sym_field_assignments_repeat1, + [55711] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2247), 1, + ACTIONS(2258), 1, anon_sym_COMMA, - ACTIONS(2249), 1, + ACTIONS(2260), 1, anon_sym_GT, - STATE(1161), 1, - aux_sym_type_parameter_list_repeat1, - [53608] = 4, + STATE(1245), 1, + aux_sym__call_type_list_repeat1, + [55724] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2055), 3, + sym__statement_break, + anon_sym_COLON_COLON, + anon_sym_as, + [55733] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2256), 1, + anon_sym_COMMA, + ACTIONS(2262), 1, + anon_sym_RBRACE, + STATE(1118), 1, + aux_sym_field_assignments_repeat1, + [55746] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2251), 1, + ACTIONS(2264), 1, anon_sym_EQ, - STATE(1389), 1, + STATE(1640), 1, sym_block, - [53621] = 4, + [55759] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1997), 1, - anon_sym_DOT, - ACTIONS(2253), 1, - sym__statement_break, - STATE(1125), 1, - aux_sym_legacy_import_path_repeat1, - [53634] = 4, + ACTIONS(2266), 1, + anon_sym_RBRACE, + ACTIONS(2268), 1, + anon_sym_COMMA, + STATE(1130), 1, + aux_sym_map_literal_repeat1, + [55772] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2255), 1, + ACTIONS(2270), 1, anon_sym_EQ, - STATE(1388), 1, + STATE(1559), 1, sym_block, - [53647] = 4, + [55785] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2272), 1, + sym_identifier, + STATE(1121), 1, + sym_field_assignment, + STATE(1531), 1, + sym_field_assignments, + [55798] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1825), 1, + sym_identifier, + STATE(1029), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [55809] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2257), 1, + ACTIONS(2274), 1, anon_sym_EQ, - STATE(1409), 1, + STATE(1671), 1, sym_block, - [53660] = 4, + [55822] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2065), 1, - sym_identifier, - STATE(965), 1, - sym_qualified_path, - STATE(1294), 1, - sym_effect_ref, - [53673] = 4, + ACTIONS(2276), 1, + anon_sym_COMMA, + ACTIONS(2279), 1, + anon_sym_RBRACK, + STATE(1128), 1, + aux_sym_list_pattern_repeat1, + [55835] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2281), 1, + anon_sym_EQ, + STATE(1524), 1, + sym_block, + [55848] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2259), 1, + ACTIONS(2268), 1, anon_sym_COMMA, - ACTIONS(2261), 1, - anon_sym_RBRACK, - STATE(1129), 1, - aux_sym_effect_list_repeat1, - [53686] = 4, + ACTIONS(2283), 1, + anon_sym_RBRACE, + STATE(1261), 1, + aux_sym_map_literal_repeat1, + [55861] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2263), 1, + ACTIONS(2285), 1, anon_sym_COMMA, - ACTIONS(2265), 1, + ACTIONS(2287), 1, anon_sym_RPAREN, - STATE(1167), 1, + STATE(1231), 1, aux_sym_extern_parameter_list_repeat1, - [53699] = 4, + [55874] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(2267), 1, - anon_sym_EQ, - STATE(1429), 1, - sym_block, - [53712] = 4, + ACTIONS(988), 1, + anon_sym_COMMA, + ACTIONS(2289), 1, + anon_sym_RBRACK, + STATE(1071), 1, + aux_sym_argument_list_repeat1, + [55887] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2269), 1, + ACTIONS(2291), 1, anon_sym_RBRACE, - ACTIONS(2271), 1, + ACTIONS(2293), 1, anon_sym_COMMA, - STATE(1170), 1, + STATE(1198), 1, aux_sym_field_declarations_repeat1, - [53725] = 4, + [55900] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2273), 1, + ACTIONS(2272), 1, sym_identifier, - STATE(1118), 1, - sym_field_declaration, - STATE(1411), 1, - sym_field_declarations, - [53738] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2275), 1, - anon_sym_LBRACE, - ACTIONS(2277), 1, - anon_sym_SEMI, - STATE(1722), 1, - sym_namespace_body, - [53751] = 4, + STATE(1121), 1, + sym_field_assignment, + STATE(1560), 1, + sym_field_assignments, + [55913] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2279), 1, + ACTIONS(2295), 1, sym_identifier, - STATE(1010), 1, - sym_qualified_path, - STATE(1176), 1, - sym_variant, - [53764] = 4, + STATE(1133), 1, + sym_field_declaration, + STATE(1594), 1, + sym_field_declarations, + [55926] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2281), 1, + ACTIONS(2297), 1, anon_sym_EQ, - STATE(1463), 1, + STATE(1743), 1, sym_block, - [53777] = 4, + [55939] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2237), 1, - anon_sym_COLON, - ACTIONS(2283), 1, - anon_sym_LBRACE, - STATE(1486), 1, - sym_signature_ascription, - [53790] = 4, + ACTIONS(2299), 1, + anon_sym_as, + ACTIONS(2301), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [55950] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2303), 1, + sym_identifier, + STATE(998), 1, + sym_qualified_path, + STATE(1158), 1, + sym_variant, + [55963] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1334), 1, + ACTIONS(1362), 3, sym__statement_break, - ACTIONS(2285), 1, + anon_sym_PIPE, anon_sym_where, - STATE(1473), 1, - sym_type_validation, - [53803] = 4, + [55972] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2287), 1, - anon_sym_DOT, - ACTIONS(2290), 1, - sym__statement_break, - STATE(1125), 1, - aux_sym_legacy_import_path_repeat1, - [53816] = 2, + STATE(1200), 1, + sym_namespace_name, + ACTIONS(2305), 2, + sym_string, + sym_identifier, + [55983] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2292), 3, + ACTIONS(1360), 3, sym__statement_break, - anon_sym_COLON_COLON, - anon_sym_as, - [53825] = 4, + anon_sym_PIPE, + anon_sym_where, + [55992] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2294), 1, + ACTIONS(2168), 1, sym_identifier, - ACTIONS(2297), 1, - anon_sym_EQ_GT, - STATE(1127), 1, - aux_sym_handler_params_repeat1, - [53838] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(2299), 1, - anon_sym_EQ, - STATE(1516), 1, - sym_block, - [53851] = 4, + STATE(984), 1, + sym_qualified_path, + STATE(1324), 1, + sym_effect_ref, + [56005] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2301), 1, + ACTIONS(2307), 1, anon_sym_COMMA, - ACTIONS(2304), 1, + ACTIONS(2309), 1, anon_sym_RBRACK, - STATE(1129), 1, + STATE(1195), 1, aux_sym_effect_list_repeat1, - [53864] = 4, + [56018] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2306), 1, - anon_sym_RBRACE, - ACTIONS(2308), 1, - anon_sym_COMMA, - STATE(1130), 1, - aux_sym_field_assignments_repeat1, - [53877] = 4, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2311), 1, + anon_sym_EQ, + STATE(1644), 1, + sym_block, + [56031] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2311), 1, + ACTIONS(2170), 1, anon_sym_COMMA, ACTIONS(2313), 1, anon_sym_RPAREN, - STATE(1200), 1, - aux_sym_tuple_pattern_repeat1, - [53890] = 4, + STATE(1066), 1, + aux_sym_positional_payload_repeat1, + [56044] = 4, ACTIONS(298), 1, sym_line_comment, ACTIONS(2315), 1, - sym_identifier, + anon_sym_RBRACE, ACTIONS(2317), 1, - sym_static_stage, - STATE(995), 1, - sym_qualified_path, - [53903] = 4, + anon_sym_COMMA, + STATE(1184), 1, + aux_sym_import_member_list_repeat1, + [56057] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2319), 1, + ACTIONS(2268), 1, anon_sym_COMMA, + ACTIONS(2319), 1, + anon_sym_RBRACE, + STATE(1155), 1, + aux_sym_map_literal_repeat1, + [56070] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1931), 1, + anon_sym_LBRACE, ACTIONS(2321), 1, - anon_sym_RBRACK, - STATE(1203), 1, - aux_sym_list_pattern_repeat1, - [53916] = 3, + anon_sym_EQ, + STATE(1543), 1, + sym_block, + [56083] = 4, ACTIONS(298), 1, sym_line_comment, ACTIONS(2323), 1, - sym_identifier, - STATE(1080), 2, - sym_kernel_arm, - aux_sym_kernel_expression_repeat1, - [53927] = 4, + anon_sym_LBRACE, + ACTIONS(2325), 1, + anon_sym_if, + STATE(381), 1, + sym_if_expression, + [56096] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2325), 1, - anon_sym_COMMA, ACTIONS(2327), 1, + anon_sym_COMMA, + ACTIONS(2330), 1, anon_sym_RPAREN, - STATE(1204), 1, + STATE(1150), 1, aux_sym_pattern_repeat1, - [53940] = 4, + [56109] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2329), 1, - anon_sym_RBRACE, - ACTIONS(2331), 1, + ACTIONS(2121), 3, anon_sym_COMMA, - STATE(1136), 1, - aux_sym_map_literal_repeat1, - [53953] = 4, + anon_sym_GT, + anon_sym_RPAREN, + [56118] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2334), 1, + ACTIONS(2332), 1, anon_sym_EQ, - STATE(1540), 1, + STATE(1418), 1, sym_block, - [53966] = 4, + [56131] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(2029), 1, + anon_sym_DOT, + STATE(1663), 1, + sym_type_arguments, + [56144] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2334), 1, + sym_identifier, + STATE(1084), 2, + sym_kernel_arm, + aux_sym_kernel_expression_repeat1, + [56155] = 4, ACTIONS(298), 1, sym_line_comment, + ACTIONS(2268), 1, + anon_sym_COMMA, ACTIONS(2336), 1, anon_sym_RBRACE, + STATE(1261), 1, + aux_sym_map_literal_repeat1, + [56168] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2246), 1, + anon_sym_COLON, ACTIONS(2338), 1, - anon_sym_COMMA, - STATE(1130), 1, - aux_sym_field_assignments_repeat1, - [53979] = 4, + anon_sym_LBRACE, + STATE(1750), 1, + sym_signature_ascription, + [56181] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, ACTIONS(2340), 1, anon_sym_EQ, - STATE(1556), 1, + STATE(1705), 1, sym_block, - [53992] = 4, + [56194] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1337), 3, + sym__statement_break, + anon_sym_PIPE, + anon_sym_where, + [56203] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(2334), 1, + sym_identifier, + STATE(1081), 2, + sym_kernel_arm, + aux_sym_kernel_expression_repeat1, + [56214] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1923), 1, anon_sym_LBRACE, ACTIONS(2342), 1, anon_sym_EQ, - STATE(1568), 1, + STATE(698), 1, sym_block, - [54005] = 4, + [56227] = 4, ACTIONS(298), 1, sym_line_comment, + ACTIONS(2272), 1, + sym_identifier, + STATE(1121), 1, + sym_field_assignment, + STATE(1379), 1, + sym_field_assignments, + [56240] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(886), 1, + anon_sym_COMMA, ACTIONS(2344), 1, anon_sym_RBRACE, + STATE(1172), 1, + aux_sym_field_pattern_repeat1, + [56253] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1364), 1, + sym__statement_break, ACTIONS(2346), 1, - anon_sym_COMMA, - STATE(1136), 1, - aux_sym_map_literal_repeat1, - [54018] = 4, + anon_sym_where, + STATE(1463), 1, + sym_type_validation, + [56266] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2247), 1, - anon_sym_COMMA, ACTIONS(2348), 1, - anon_sym_GT, - STATE(1109), 1, - aux_sym_type_parameter_list_repeat1, - [54031] = 4, + anon_sym_COMMA, + ACTIONS(2350), 1, + anon_sym_RPAREN, + STATE(1150), 1, + aux_sym_pattern_repeat1, + [56279] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(2352), 1, anon_sym_LBRACE, - ACTIONS(2350), 1, - anon_sym_EQ, - STATE(1622), 1, - sym_block, - [54044] = 2, + ACTIONS(2354), 1, + anon_sym_if, + STATE(285), 1, + sym_if_expression, + [56292] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2141), 3, - anon_sym_COMMA, - anon_sym_GT, - anon_sym_RPAREN, - [54053] = 4, + ACTIONS(2356), 1, + sym_identifier, + ACTIONS(2359), 1, + anon_sym_EQ_GT, + STATE(1166), 1, + aux_sym_handler_params_repeat1, + [56305] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(2246), 1, + anon_sym_COLON, + ACTIONS(2361), 1, anon_sym_LBRACE, - ACTIONS(2352), 1, - anon_sym_EQ, - STATE(1652), 1, - sym_block, - [54066] = 4, + STATE(1753), 1, + sym_signature_ascription, + [56318] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2273), 1, + ACTIONS(2272), 1, sym_identifier, - STATE(1118), 1, - sym_field_declaration, - STATE(1571), 1, - sym_field_declarations, - [54079] = 4, + STATE(1121), 1, + sym_field_assignment, + STATE(1748), 1, + sym_field_assignments, + [56331] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1064), 1, + ACTIONS(886), 1, anon_sym_COMMA, - ACTIONS(2354), 1, - anon_sym_RPAREN, - STATE(1084), 1, - aux_sym_argument_list_repeat1, - [54092] = 4, + ACTIONS(1762), 1, + anon_sym_RBRACE, + STATE(1162), 1, + aux_sym_field_pattern_repeat1, + [56344] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2356), 1, + ACTIONS(988), 1, anon_sym_COMMA, - ACTIONS(2358), 1, - anon_sym_RPAREN, - STATE(1210), 1, - aux_sym_named_argument_list_repeat1, - [54105] = 4, + ACTIONS(2363), 1, + anon_sym_RBRACK, + STATE(1071), 1, + aux_sym_argument_list_repeat1, + [56357] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(2360), 1, - anon_sym_EQ, - STATE(1682), 1, - sym_block, - [54118] = 4, + ACTIONS(2272), 1, + sym_identifier, + STATE(1121), 1, + sym_field_assignment, + STATE(1368), 1, + sym_field_assignments, + [56370] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2362), 1, + ACTIONS(2365), 1, anon_sym_RBRACE, - ACTIONS(2364), 1, + ACTIONS(2367), 1, anon_sym_COMMA, - STATE(1150), 1, + STATE(1172), 1, aux_sym_field_pattern_repeat1, - [54131] = 4, + [56383] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1342), 1, + ACTIONS(1352), 1, sym__statement_break, - ACTIONS(2285), 1, + ACTIONS(2346), 1, anon_sym_where, - STATE(1613), 1, + STATE(1380), 1, sym_type_validation, - [54144] = 4, + [56396] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2346), 1, + ACTIONS(2370), 1, anon_sym_COMMA, - ACTIONS(2367), 1, - anon_sym_RBRACE, - STATE(1154), 1, - aux_sym_map_literal_repeat1, - [54157] = 4, + ACTIONS(2372), 1, + anon_sym_RPAREN, + STATE(1186), 1, + aux_sym_named_argument_list_repeat1, + [56409] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1344), 1, - sym__statement_break, - ACTIONS(2285), 1, - anon_sym_where, - STATE(1577), 1, - sym_type_validation, - [54170] = 4, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(2374), 1, + anon_sym_EQ, + STATE(702), 1, + sym_block, + [56422] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1825), 1, + sym_identifier, + STATE(1001), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [56433] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2246), 1, + anon_sym_COLON, + ACTIONS(2376), 1, + anon_sym_LBRACE, + STATE(1593), 1, + sym_signature_ascription, + [56446] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2346), 1, + ACTIONS(2268), 1, anon_sym_COMMA, - ACTIONS(2369), 1, + ACTIONS(2378), 1, anon_sym_RBRACE, - STATE(1136), 1, + STATE(1216), 1, aux_sym_map_literal_repeat1, - [54183] = 2, + [56459] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2371), 3, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_PIPE, - [54192] = 4, + ACTIONS(2272), 1, + sym_identifier, + STATE(1121), 1, + sym_field_assignment, + STATE(1385), 1, + sym_field_assignments, + [56472] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1064), 1, - anon_sym_COMMA, - ACTIONS(2373), 1, - anon_sym_RBRACK, - STATE(1084), 1, - aux_sym_argument_list_repeat1, - [54205] = 4, + ACTIONS(2246), 1, + anon_sym_COLON, + ACTIONS(2380), 1, + anon_sym_LBRACE, + STATE(1603), 1, + sym_signature_ascription, + [56485] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, - anon_sym_LBRACE, - ACTIONS(2375), 1, - anon_sym_EQ, - STATE(1719), 1, - sym_block, - [54218] = 2, + ACTIONS(2382), 1, + sym_identifier, + ACTIONS(2384), 1, + sym_static_stage, + STATE(1015), 1, + sym_qualified_path, + [56498] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2130), 3, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_PIPE, - [54227] = 2, + ACTIONS(2295), 1, + sym_identifier, + STATE(1133), 1, + sym_field_declaration, + STATE(1397), 1, + sym_field_declarations, + [56511] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1999), 3, - sym__statement_break, - anon_sym_COLON_COLON, - anon_sym_as, - [54236] = 4, + ACTIONS(1825), 1, + sym_identifier, + STATE(1006), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [56522] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2245), 1, + ACTIONS(2317), 1, anon_sym_COMMA, - ACTIONS(2377), 1, + ACTIONS(2386), 1, anon_sym_RBRACE, - STATE(1222), 1, + STATE(1192), 1, aux_sym_import_member_list_repeat1, - [54249] = 4, + [56535] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2379), 1, + ACTIONS(2388), 1, anon_sym_COMMA, - ACTIONS(2382), 1, + ACTIONS(2390), 1, + anon_sym_RBRACK, + STATE(1218), 1, + aux_sym_list_pattern_repeat1, + [56548] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2392), 1, + anon_sym_COMMA, + ACTIONS(2395), 1, + anon_sym_RPAREN, + STATE(1186), 1, + aux_sym_named_argument_list_repeat1, + [56561] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2397), 1, + sym_identifier, + ACTIONS(2399), 1, + anon_sym_EQ_GT, + STATE(1166), 1, + aux_sym_handler_params_repeat1, + [56574] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2401), 1, + anon_sym_COMMA, + ACTIONS(2404), 1, anon_sym_GT, - STATE(1161), 1, + STATE(1188), 1, aux_sym_type_parameter_list_repeat1, - [54262] = 4, + [56587] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(2384), 1, + ACTIONS(2406), 1, anon_sym_EQ, - STATE(734), 1, + STATE(713), 1, sym_block, - [54275] = 4, + [56600] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2386), 1, - sym_identifier, - STATE(638), 1, - sym_qualified_path, - STATE(646), 1, - sym_variant, - [54288] = 3, + ACTIONS(2246), 1, + anon_sym_COLON, + ACTIONS(2408), 1, + anon_sym_LBRACE, + STATE(1615), 1, + sym_signature_ascription, + [56613] = 3, ACTIONS(298), 1, sym_line_comment, - STATE(1158), 1, + STATE(1211), 1, sym_parameter, ACTIONS(2005), 2, anon_sym__, sym_identifier, - [54299] = 4, + [56624] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2410), 1, + anon_sym_RBRACE, + ACTIONS(2412), 1, + anon_sym_COMMA, + STATE(1192), 1, + aux_sym_import_member_list_repeat1, + [56637] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2295), 1, + sym_identifier, + STATE(1133), 1, + sym_field_declaration, + STATE(1426), 1, + sym_field_declarations, + [56650] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2388), 1, + ACTIONS(2415), 1, anon_sym_EQ, - STATE(1639), 1, + STATE(1630), 1, sym_block, - [54312] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(2047), 1, - anon_sym_DOT, - STATE(1566), 1, - sym_type_arguments, - [54325] = 4, + [56663] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2263), 1, + ACTIONS(2417), 1, anon_sym_COMMA, - ACTIONS(2390), 1, - anon_sym_RPAREN, - STATE(1233), 1, - aux_sym_extern_parameter_list_repeat1, - [54338] = 4, + ACTIONS(2420), 1, + anon_sym_RBRACK, + STATE(1195), 1, + aux_sym_effect_list_repeat1, + [56676] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2392), 1, - anon_sym_EQ, - STATE(747), 1, - sym_block, - [54351] = 4, + ACTIONS(2424), 1, + anon_sym_where, + ACTIONS(2422), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [56687] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2394), 1, - anon_sym_LBRACE, - ACTIONS(2396), 1, - anon_sym_if, - STATE(287), 1, - sym_if_expression, - [54364] = 4, + ACTIONS(2258), 1, + anon_sym_COMMA, + ACTIONS(2426), 1, + anon_sym_GT, + STATE(1233), 1, + aux_sym__call_type_list_repeat1, + [56700] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2271), 1, + ACTIONS(2293), 1, anon_sym_COMMA, - ACTIONS(2398), 1, + ACTIONS(2428), 1, anon_sym_RBRACE, - STATE(1236), 1, + STATE(1221), 1, aux_sym_field_declarations_repeat1, - [54377] = 4, + [56713] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2295), 1, + sym_identifier, + STATE(1133), 1, + sym_field_declaration, + STATE(1557), 1, + sym_field_declarations, + [56726] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2430), 1, + anon_sym_LBRACE, + ACTIONS(2432), 1, + anon_sym_SEMI, + STATE(1636), 1, + sym_namespace_body, + [56739] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(2400), 1, + ACTIONS(2434), 1, anon_sym_EQ, - STATE(687), 1, + STATE(720), 1, sym_block, - [54390] = 4, + [56752] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1736), 1, - anon_sym_RBRACE, - ACTIONS(2402), 1, + ACTIONS(988), 1, anon_sym_COMMA, - STATE(1199), 1, - aux_sym_field_pattern_repeat1, - [54403] = 4, + ACTIONS(2436), 1, + anon_sym_RPAREN, + STATE(1071), 1, + aux_sym_argument_list_repeat1, + [56765] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2206), 1, + ACTIONS(2250), 1, anon_sym_COMMA, - ACTIONS(2405), 1, - anon_sym_RPAREN, - STATE(1240), 1, - aux_sym_positional_payload_repeat1, - [54416] = 3, + ACTIONS(2438), 1, + anon_sym_GT, + STATE(1117), 1, + aux_sym_type_parameter_list_repeat1, + [56778] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1831), 1, + ACTIONS(1825), 1, sym_identifier, - STATE(1044), 2, + STATE(1039), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [54427] = 4, + [56789] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2407), 1, + ACTIONS(2440), 1, anon_sym_EQ, - STATE(686), 1, + STATE(1453), 1, sym_block, - [54440] = 2, + [56802] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1321), 3, - sym__statement_break, - anon_sym_PIPE, - anon_sym_where, - [54449] = 4, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2442), 1, + anon_sym_EQ, + STATE(1579), 1, + sym_block, + [56815] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2338), 1, - anon_sym_COMMA, - ACTIONS(2409), 1, - anon_sym_RBRACE, - STATE(1138), 1, - aux_sym_field_assignments_repeat1, - [54462] = 4, + ACTIONS(2246), 1, + anon_sym_COLON, + ACTIONS(2444), 1, + anon_sym_LBRACE, + STATE(1688), 1, + sym_signature_ascription, + [56828] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, + ACTIONS(2446), 1, anon_sym_LBRACE, - ACTIONS(2411), 1, - anon_sym_EQ, - STATE(691), 1, - sym_block, - [54475] = 4, + ACTIONS(2448), 1, + anon_sym_if, + STATE(509), 1, + sym_if_expression, + [56841] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2413), 1, + ACTIONS(2334), 1, sym_identifier, - ACTIONS(2415), 1, - anon_sym_EQ_GT, - STATE(1127), 1, - aux_sym_handler_params_repeat1, - [54488] = 4, + STATE(1102), 2, + sym_kernel_arm, + aux_sym_kernel_expression_repeat1, + [56852] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1064), 1, + ACTIONS(2450), 1, anon_sym_COMMA, - ACTIONS(2417), 1, - anon_sym_RBRACK, - STATE(1084), 1, - aux_sym_argument_list_repeat1, - [54501] = 4, + ACTIONS(2453), 1, + anon_sym_RPAREN, + STATE(1210), 1, + aux_sym_tuple_pattern_repeat1, + [56865] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2419), 1, - anon_sym_EQ, - STATE(694), 1, - sym_block, - [54514] = 4, + ACTIONS(2236), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_PIPE, + [56874] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2237), 1, - anon_sym_COLON, - ACTIONS(2421), 1, - anon_sym_LBRACE, - STATE(1621), 1, - sym_signature_ascription, - [54527] = 4, + ACTIONS(2307), 1, + anon_sym_COMMA, + ACTIONS(2455), 1, + anon_sym_RBRACK, + STATE(1143), 1, + aux_sym_effect_list_repeat1, + [56887] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(2423), 1, + ACTIONS(2457), 1, anon_sym_EQ, - STATE(697), 1, + STATE(724), 1, sym_block, - [54540] = 4, + [56900] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2425), 1, - anon_sym_EQ, - STATE(700), 1, - sym_block, - [54553] = 4, + ACTIONS(2459), 1, + anon_sym_COMMA, + ACTIONS(2461), 1, + anon_sym_RPAREN, + STATE(1210), 1, + aux_sym_tuple_pattern_repeat1, + [56913] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2427), 1, - anon_sym_EQ, - STATE(705), 1, - sym_block, - [54566] = 4, + ACTIONS(2463), 1, + anon_sym_DOT, + ACTIONS(2466), 1, + sym__statement_break, + STATE(1215), 1, + aux_sym_legacy_import_path_repeat1, + [56926] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2429), 1, - anon_sym_EQ, - STATE(706), 1, - sym_block, - [54579] = 4, + ACTIONS(2268), 1, + anon_sym_COMMA, + ACTIONS(2468), 1, + anon_sym_RBRACE, + STATE(1261), 1, + aux_sym_map_literal_repeat1, + [56939] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2431), 1, - anon_sym_EQ, - STATE(709), 1, - sym_block, - [54592] = 4, + ACTIONS(2272), 1, + sym_identifier, + STATE(1121), 1, + sym_field_assignment, + STATE(1509), 1, + sym_field_assignments, + [56952] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2433), 1, - anon_sym_EQ, - STATE(710), 1, - sym_block, - [54605] = 4, + ACTIONS(2470), 1, + anon_sym_COMMA, + ACTIONS(2472), 1, + anon_sym_RBRACK, + STATE(1128), 1, + aux_sym_list_pattern_repeat1, + [56965] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2435), 1, - anon_sym_EQ, - STATE(680), 1, - sym_block, - [54618] = 4, + ACTIONS(2272), 1, + sym_identifier, + STATE(1121), 1, + sym_field_assignment, + STATE(1514), 1, + sym_field_assignments, + [56978] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(2437), 1, + ACTIONS(2474), 1, anon_sym_EQ, - STATE(714), 1, + STATE(726), 1, sym_block, - [54631] = 4, + [56991] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, - anon_sym_LBRACE, - ACTIONS(2439), 1, - anon_sym_EQ, - STATE(716), 1, - sym_block, - [54644] = 4, + ACTIONS(2476), 1, + anon_sym_RBRACE, + ACTIONS(2478), 1, + anon_sym_COMMA, + STATE(1221), 1, + aux_sym_field_declarations_repeat1, + [57004] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2346), 1, - anon_sym_COMMA, - ACTIONS(2441), 1, - anon_sym_RBRACE, - STATE(1141), 1, - aux_sym_map_literal_repeat1, - [54657] = 4, + ACTIONS(1825), 1, + sym_identifier, + STATE(1026), 2, + sym_handler_arm, + aux_sym_handler_expression_repeat1, + [57015] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1915), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2443), 1, + ACTIONS(2481), 1, anon_sym_EQ, - STATE(718), 1, + STATE(1722), 1, sym_block, - [54670] = 4, + [57028] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2445), 1, - anon_sym_COMMA, - ACTIONS(2447), 1, - anon_sym_RBRACK, - STATE(1133), 1, - aux_sym_list_pattern_repeat1, - [54683] = 4, + ACTIONS(2272), 1, + sym_identifier, + STATE(1121), 1, + sym_field_assignment, + STATE(1520), 1, + sym_field_assignments, + [57041] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2449), 1, + ACTIONS(1931), 1, anon_sym_LBRACE, - ACTIONS(2451), 1, - anon_sym_if, - STATE(498), 1, - sym_if_expression, - [54696] = 3, + ACTIONS(2483), 1, + anon_sym_EQ, + STATE(1550), 1, + sym_block, + [57054] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1831), 1, + ACTIONS(1825), 1, sym_identifier, - STATE(1095), 2, + STATE(1064), 2, sym_handler_arm, aux_sym_handler_expression_repeat1, - [54707] = 4, + [57065] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2346), 1, + ACTIONS(2485), 3, anon_sym_COMMA, - ACTIONS(2453), 1, - anon_sym_RBRACE, - STATE(1201), 1, - aux_sym_map_literal_repeat1, - [54720] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2275), 1, - anon_sym_LBRACE, - ACTIONS(2455), 1, - anon_sym_SEMI, - STATE(1619), 1, - sym_namespace_body, - [54733] = 4, + anon_sym_RPAREN, + anon_sym_PIPE, + [57074] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2457), 1, + ACTIONS(2344), 1, anon_sym_RBRACE, - ACTIONS(2459), 1, + ACTIONS(2487), 1, anon_sym_COMMA, - STATE(1150), 1, + STATE(1172), 1, aux_sym_field_pattern_repeat1, - [54746] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2462), 1, - anon_sym_COMMA, - ACTIONS(2465), 1, - anon_sym_RPAREN, - STATE(1200), 1, - aux_sym_tuple_pattern_repeat1, - [54759] = 4, + [57087] = 4, ACTIONS(298), 1, sym_line_comment, + ACTIONS(1358), 1, + sym__statement_break, ACTIONS(2346), 1, - anon_sym_COMMA, - ACTIONS(2467), 1, - anon_sym_RBRACE, - STATE(1136), 1, - aux_sym_map_literal_repeat1, - [54772] = 4, + anon_sym_where, + STATE(1590), 1, + sym_type_validation, + [57100] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1064), 1, - anon_sym_COMMA, - ACTIONS(2469), 1, - anon_sym_RBRACK, - STATE(1084), 1, - aux_sym_argument_list_repeat1, - [54785] = 4, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(2490), 1, + anon_sym_EQ, + STATE(729), 1, + sym_block, + [57113] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2471), 1, + ACTIONS(2285), 1, anon_sym_COMMA, - ACTIONS(2474), 1, - anon_sym_RBRACK, - STATE(1203), 1, - aux_sym_list_pattern_repeat1, - [54798] = 4, + ACTIONS(2492), 1, + anon_sym_RPAREN, + STATE(1263), 1, + aux_sym_extern_parameter_list_repeat1, + [57126] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2325), 1, + ACTIONS(2348), 1, anon_sym_COMMA, - ACTIONS(2476), 1, + ACTIONS(2494), 1, anon_sym_RPAREN, - STATE(1104), 1, + STATE(1164), 1, aux_sym_pattern_repeat1, - [54811] = 3, + [57139] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2323), 1, - sym_identifier, - STATE(1079), 2, - sym_kernel_arm, - aux_sym_kernel_expression_repeat1, - [54822] = 3, + ACTIONS(2496), 1, + anon_sym_COMMA, + ACTIONS(2499), 1, + anon_sym_GT, + STATE(1233), 1, + aux_sym__call_type_list_repeat1, + [57152] = 2, ACTIONS(298), 1, sym_line_comment, - STATE(1198), 1, - sym_namespace_name, - ACTIONS(2478), 2, - sym_string, + ACTIONS(2501), 3, + sym__statement_break, + anon_sym_COLON_COLON, + anon_sym_as, + [57161] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2503), 1, sym_identifier, - [54833] = 4, + ACTIONS(2505), 1, + sym_static_stage, + STATE(1032), 1, + sym_qualified_path, + [57174] = 4, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2507), 1, + anon_sym_EQ, + STATE(1504), 1, + sym_block, + [57187] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2237), 1, + ACTIONS(2246), 1, anon_sym_COLON, - ACTIONS(2480), 1, + ACTIONS(2509), 1, anon_sym_LBRACE, - STATE(1724), 1, + STATE(1494), 1, sym_signature_ascription, - [54846] = 4, + [57200] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, + STATE(1244), 1, + sym_namespace_name, + ACTIONS(2305), 2, + sym_string, sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1708), 1, - sym_field_assignments, - [54859] = 4, + [57211] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, - sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1721), 1, - sym_field_assignments, - [54872] = 4, + ACTIONS(988), 1, + anon_sym_COMMA, + ACTIONS(2511), 1, + anon_sym_RBRACK, + STATE(1071), 1, + aux_sym_argument_list_repeat1, + [57224] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2482), 1, - anon_sym_COMMA, - ACTIONS(2485), 1, - anon_sym_RPAREN, - STATE(1210), 1, - aux_sym_named_argument_list_repeat1, - [54885] = 3, + ACTIONS(1356), 1, + sym__statement_break, + ACTIONS(2346), 1, + anon_sym_where, + STATE(1709), 1, + sym_type_validation, + [57237] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1831), 1, + ACTIONS(2513), 1, sym_identifier, - STATE(1040), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [54896] = 4, + ACTIONS(2515), 1, + sym_static_stage, + STATE(1047), 1, + sym_qualified_path, + [57250] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2237), 1, - anon_sym_COLON, - ACTIONS(2487), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - STATE(1565), 1, - sym_signature_ascription, - [54909] = 4, + ACTIONS(2517), 1, + anon_sym_EQ, + STATE(736), 1, + sym_block, + [57263] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, - sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1361), 1, - sym_field_assignments, - [54922] = 4, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(2519), 1, + anon_sym_EQ, + STATE(737), 1, + sym_block, + [57276] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2237), 1, - anon_sym_COLON, - ACTIONS(2489), 1, + ACTIONS(2430), 1, anon_sym_LBRACE, - STATE(1575), 1, - sym_signature_ascription, - [54935] = 4, + ACTIONS(2521), 1, + anon_sym_SEMI, + STATE(1474), 1, + sym_namespace_body, + [57289] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2273), 1, - sym_identifier, - STATE(1118), 1, - sym_field_declaration, - STATE(1372), 1, - sym_field_declarations, - [54948] = 3, + ACTIONS(2258), 1, + anon_sym_COMMA, + ACTIONS(2523), 1, + anon_sym_GT, + STATE(1233), 1, + aux_sym__call_type_list_repeat1, + [57302] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1831), 1, - sym_identifier, - STATE(1075), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [54959] = 4, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(2106), 1, + anon_sym_DOT, + STATE(1728), 1, + sym_type_arguments, + [57315] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(2491), 1, + ACTIONS(2525), 1, anon_sym_EQ, - STATE(1394), 1, + STATE(739), 1, sym_block, - [54972] = 4, + [57328] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2237), 1, - anon_sym_COLON, - ACTIONS(2493), 1, - anon_sym_LBRACE, - STATE(1587), 1, - sym_signature_ascription, - [54985] = 4, + ACTIONS(2053), 1, + anon_sym_DOT, + ACTIONS(2527), 1, + sym__statement_break, + STATE(1215), 1, + aux_sym_legacy_import_path_repeat1, + [57341] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2273), 1, - sym_identifier, - STATE(1118), 1, - sym_field_declaration, - STATE(1401), 1, - sym_field_declarations, - [54998] = 4, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(2529), 1, + anon_sym_EQ, + STATE(717), 1, + sym_block, + [57354] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2237), 1, - anon_sym_COLON, - ACTIONS(2495), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - STATE(1508), 1, - sym_signature_ascription, - [55011] = 3, + ACTIONS(2531), 1, + anon_sym_EQ, + STATE(741), 1, + sym_block, + [57367] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2323), 1, - sym_identifier, - STATE(1060), 2, - sym_kernel_arm, - aux_sym_kernel_expression_repeat1, - [55022] = 4, + ACTIONS(2170), 1, + anon_sym_COMMA, + ACTIONS(2533), 1, + anon_sym_RPAREN, + STATE(1145), 1, + aux_sym_positional_payload_repeat1, + [57380] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2497), 1, + ACTIONS(2535), 1, anon_sym_RBRACE, - ACTIONS(2499), 1, + ACTIONS(2537), 1, anon_sym_COMMA, - STATE(1222), 1, - aux_sym_import_member_list_repeat1, - [55035] = 4, + STATE(1252), 1, + aux_sym_field_assignments_repeat1, + [57393] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, + ACTIONS(2540), 1, sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1484), 1, - sym_field_assignments, - [55048] = 4, + STATE(647), 1, + sym_qualified_path, + STATE(655), 1, + sym_variant, + [57406] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, - sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1488), 1, - sym_field_assignments, - [55061] = 4, + ACTIONS(1823), 1, + anon_sym_LT, + ACTIONS(2112), 1, + anon_sym_DOT, + STATE(1739), 1, + sym_type_arguments, + [57419] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1903), 1, + ACTIONS(1923), 1, anon_sym_LBRACE, - ACTIONS(2502), 1, + ACTIONS(2542), 1, anon_sym_EQ, - STATE(1480), 1, + STATE(744), 1, sym_block, - [55074] = 3, + [57432] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1831), 1, - sym_identifier, - STATE(1049), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [55085] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2228), 1, - sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1494), 1, - sym_field_assignments, - [55098] = 3, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(2544), 1, + anon_sym_EQ, + STATE(745), 1, + sym_block, + [57445] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1831), 1, - sym_identifier, - STATE(1050), 2, - sym_handler_arm, - aux_sym_handler_expression_repeat1, - [55109] = 4, + ACTIONS(1931), 1, + anon_sym_LBRACE, + ACTIONS(2546), 1, + anon_sym_EQ, + STATE(1607), 1, + sym_block, + [57458] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2259), 1, - anon_sym_COMMA, - ACTIONS(2504), 1, - anon_sym_RBRACK, - STATE(1115), 1, - aux_sym_effect_list_repeat1, - [55122] = 4, + ACTIONS(1923), 1, + anon_sym_LBRACE, + ACTIONS(2548), 1, + anon_sym_EQ, + STATE(746), 1, + sym_block, + [57471] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, - sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1452), 1, - sym_field_assignments, - [55135] = 3, + ACTIONS(2258), 1, + anon_sym_COMMA, + ACTIONS(2550), 1, + anon_sym_GT, + STATE(1197), 1, + aux_sym__call_type_list_repeat1, + [57484] = 4, ACTIONS(298), 1, sym_line_comment, - STATE(1120), 1, - sym_namespace_name, - ACTIONS(2478), 2, - sym_string, - sym_identifier, - [55146] = 4, + ACTIONS(1762), 1, + anon_sym_RBRACE, + ACTIONS(2552), 1, + anon_sym_COMMA, + STATE(1228), 1, + aux_sym_field_pattern_repeat1, + [57497] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2506), 1, - sym_identifier, - ACTIONS(2508), 1, - sym_static_stage, - STATE(994), 1, - sym_qualified_path, - [55159] = 4, + ACTIONS(2555), 1, + anon_sym_RBRACE, + ACTIONS(2557), 1, + anon_sym_COMMA, + STATE(1261), 1, + aux_sym_map_literal_repeat1, + [57510] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2510), 1, + ACTIONS(2370), 1, anon_sym_COMMA, - ACTIONS(2513), 1, + ACTIONS(2560), 1, anon_sym_RPAREN, - STATE(1233), 1, - aux_sym_extern_parameter_list_repeat1, - [55172] = 3, + STATE(1174), 1, + aux_sym_named_argument_list_repeat1, + [57523] = 4, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2517), 1, - anon_sym_where, - ACTIONS(2515), 2, - anon_sym_RBRACE, + ACTIONS(2562), 1, anon_sym_COMMA, - [55183] = 4, + ACTIONS(2565), 1, + anon_sym_RPAREN, + STATE(1263), 1, + aux_sym_extern_parameter_list_repeat1, + [57536] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2519), 1, + ACTIONS(2567), 1, sym_identifier, - ACTIONS(2521), 1, - sym_static_stage, - STATE(1013), 1, + STATE(1246), 1, sym_qualified_path, - [55196] = 4, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2523), 1, - anon_sym_RBRACE, - ACTIONS(2525), 1, - anon_sym_COMMA, - STATE(1236), 1, - aux_sym_field_declarations_repeat1, - [55209] = 2, + [57546] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1332), 3, - sym__statement_break, - anon_sym_PIPE, - anon_sym_where, - [55218] = 2, + ACTIONS(2569), 1, + sym_identifier, + STATE(1156), 1, + sym_symbol_path, + [57556] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1338), 3, - sym__statement_break, - anon_sym_PIPE, - anon_sym_where, - [55227] = 4, + ACTIONS(2055), 2, + anon_sym_LBRACE, + anon_sym_SEMI, + [57564] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(2057), 1, - anon_sym_DOT, - STATE(1699), 1, - sym_type_arguments, - [55240] = 4, + ACTIONS(2571), 1, + sym_identifier, + STATE(1038), 1, + sym_qualified_path, + [57574] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2206), 1, - anon_sym_COMMA, - ACTIONS(2528), 1, - anon_sym_RPAREN, - STATE(1066), 1, - aux_sym_positional_payload_repeat1, - [55253] = 4, + ACTIONS(2573), 1, + sym_identifier, + ACTIONS(2575), 1, + anon_sym_LPAREN, + [57584] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1340), 1, + ACTIONS(1378), 1, sym__statement_break, - ACTIONS(2285), 1, - anon_sym_where, - STATE(1573), 1, - sym_type_validation, - [55266] = 4, + ACTIONS(2577), 1, + anon_sym_DASH_GT, + [57594] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2356), 1, + ACTIONS(2395), 2, anon_sym_COMMA, - ACTIONS(2530), 1, anon_sym_RPAREN, - STATE(1148), 1, - aux_sym_named_argument_list_repeat1, - [55279] = 4, + [57602] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(957), 1, + ACTIONS(2575), 1, + anon_sym_LPAREN, + ACTIONS(2579), 1, + sym_identifier, + [57612] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2581), 2, anon_sym_COMMA, - ACTIONS(2457), 1, - anon_sym_RBRACE, - STATE(1150), 1, - aux_sym_field_pattern_repeat1, - [55292] = 4, + anon_sym_GT, + [57620] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1803), 1, - anon_sym_LT, - ACTIONS(2059), 1, - anon_sym_DOT, - STATE(1710), 1, - sym_type_arguments, - [55305] = 4, + ACTIONS(1432), 2, + sym__statement_break, + anon_sym_where, + [57628] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, + ACTIONS(2583), 1, sym_identifier, - STATE(1177), 1, - sym_field_assignment, - STATE(1709), 1, - sym_field_assignments, - [55318] = 2, + STATE(1296), 1, + sym_field_pattern, + [57638] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1166), 2, + ACTIONS(1402), 1, sym__statement_break, - anon_sym_where, - [55326] = 3, + ACTIONS(2585), 1, + anon_sym_DASH_GT, + [57648] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, + ACTIONS(2587), 1, sym_identifier, - STATE(1123), 1, + STATE(825), 1, sym_symbol_path, - [55336] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2111), 1, - sym_identifier, - STATE(1301), 1, - sym_import_member, - [55346] = 3, + [57658] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2534), 1, + ACTIONS(2589), 2, + anon_sym__, sym_identifier, - STATE(1447), 1, - sym_field_pattern, - [55356] = 2, + [57666] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2290), 2, - sym__statement_break, - anon_sym_DOT, - [55364] = 2, + ACTIONS(2591), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [57674] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1999), 2, - anon_sym_LBRACE, - anon_sym_SEMI, - [55372] = 2, + ACTIONS(2410), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [57682] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2382), 2, - anon_sym_COMMA, - anon_sym_GT, - [55380] = 2, + ACTIONS(2593), 1, + sym_float, + ACTIONS(2595), 1, + sym_integer, + [57692] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2536), 2, + ACTIONS(2597), 2, anon_sym_COMMA, anon_sym_RPAREN, - [55388] = 3, + [57700] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2538), 1, - anon_sym_COLON, - ACTIONS(2540), 1, - anon_sym_EQ, - [55398] = 2, + ACTIONS(1754), 1, + anon_sym_LBRACE, + ACTIONS(1760), 1, + anon_sym_LPAREN, + [57710] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2233), 2, + ACTIONS(2565), 2, anon_sym_COMMA, anon_sym_RPAREN, - [55406] = 3, + [57718] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2542), 1, - anon_sym_LBRACE, - ACTIONS(2544), 1, - anon_sym_LT, - [55416] = 3, + ACTIONS(2476), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [57726] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2546), 1, - anon_sym_DASH_GT, - ACTIONS(2548), 1, - anon_sym_EQ_GT, - [55426] = 3, + ACTIONS(2599), 1, + anon_sym_COLON, + ACTIONS(2601), 1, + anon_sym_EQ, + [57736] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1370), 1, - sym__statement_break, - ACTIONS(2550), 1, - anon_sym_DASH_GT, - [55436] = 2, + ACTIONS(2569), 1, + sym_identifier, + STATE(1207), 1, + sym_symbol_path, + [57746] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2552), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - [55444] = 3, + ACTIONS(2603), 1, + anon_sym_DASH_GT, + ACTIONS(2605), 1, + anon_sym_EQ_GT, + [57756] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2554), 1, + ACTIONS(2607), 2, + anon_sym__, sym_identifier, - STATE(1330), 1, - sym_field_pattern, - [55454] = 2, + [57764] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2556), 2, - anon_sym__, - sym_identifier, - [55462] = 3, + ACTIONS(2609), 1, + anon_sym_LBRACE, + ACTIONS(2611), 1, + anon_sym_STAR, + [57774] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2558), 1, + ACTIONS(2569), 1, sym_identifier, - STATE(1166), 1, - sym_qualified_path, - [55472] = 2, + STATE(1315), 1, + sym_symbol_path, + [57784] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1779), 2, - anon_sym_LBRACE, + ACTIONS(2613), 1, + anon_sym_COLON, + ACTIONS(2615), 1, anon_sym_EQ, - [55480] = 3, + [57794] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2560), 1, - sym_float, - ACTIONS(2562), 1, - sym_integer, - [55490] = 3, + ACTIONS(2617), 1, + anon_sym_EQ, + ACTIONS(2619), 1, + anon_sym_LT, + [57804] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2564), 1, + ACTIONS(2621), 1, anon_sym_DASH_GT, - ACTIONS(2566), 1, + ACTIONS(2623), 1, anon_sym_EQ_GT, - [55500] = 3, + [57814] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2534), 1, + ACTIONS(2625), 1, sym_identifier, - STATE(1489), 1, + STATE(1714), 1, sym_field_pattern, - [55510] = 3, + [57824] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1724), 1, - anon_sym_LBRACE, - ACTIONS(1730), 1, - anon_sym_LPAREN, - [55520] = 3, + ACTIONS(2330), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [57832] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2568), 1, - sym_identifier, - ACTIONS(2570), 1, - anon_sym_LPAREN, - [55530] = 3, + ACTIONS(2627), 1, + anon_sym_RBRACE, + ACTIONS(2629), 1, + anon_sym_COMMA, + [57842] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2459), 1, + anon_sym_COMMA, + STATE(1214), 1, + aux_sym_tuple_pattern_repeat1, + [57852] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2631), 2, + anon_sym_COMMA, + anon_sym_GT, + [57860] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2572), 1, + ACTIONS(2633), 1, anon_sym_LT, - ACTIONS(2574), 1, + ACTIONS(2635), 1, anon_sym_LPAREN, - [55540] = 3, + [57870] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2576), 1, - anon_sym_DASH_GT, - ACTIONS(2578), 1, - anon_sym_EQ_GT, - [55550] = 3, + ACTIONS(2625), 1, + sym_identifier, + STATE(1367), 1, + sym_field_pattern, + [57880] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2580), 1, - anon_sym_EQ, - ACTIONS(2582), 1, - anon_sym_LT, - [55560] = 3, + ACTIONS(2637), 1, + anon_sym_COLON, + STATE(896), 1, + sym_signature_ascription, + [57890] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2584), 1, - anon_sym_LBRACE, - ACTIONS(2586), 1, - anon_sym_LT, - [55570] = 3, + ACTIONS(1412), 1, + sym__statement_break, + ACTIONS(2639), 1, + anon_sym_DASH_GT, + [57900] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1742), 1, - anon_sym_LBRACE, - ACTIONS(2588), 1, - anon_sym_PLUS, - [55580] = 3, + ACTIONS(1262), 2, + sym__statement_break, + anon_sym_where, + [57908] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, - sym_identifier, - STATE(1182), 1, - sym_symbol_path, - [55590] = 2, + ACTIONS(1266), 2, + sym__statement_break, + anon_sym_where, + [57916] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2590), 2, - anon_sym_COMMA, - anon_sym_GT, - [55598] = 3, + ACTIONS(1270), 2, + sym__statement_break, + anon_sym_where, + [57924] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2592), 1, - anon_sym_LBRACE, - ACTIONS(2594), 1, - anon_sym_LT, - [55608] = 3, + ACTIONS(2641), 1, + anon_sym_COLON, + ACTIONS(2643), 1, + anon_sym_EQ, + [57934] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, + ACTIONS(2272), 1, sym_identifier, - STATE(1283), 1, - sym_symbol_path, - [55618] = 3, + STATE(1341), 1, + sym_field_assignment, + [57944] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2596), 1, + ACTIONS(2645), 1, anon_sym_LT, - ACTIONS(2598), 1, + ACTIONS(2647), 1, anon_sym_LPAREN, - [55628] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2485), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [55636] = 3, + [57954] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2600), 1, + ACTIONS(1801), 2, anon_sym_LBRACE, - ACTIONS(2602), 1, - anon_sym_LT, - [55646] = 3, + anon_sym_EQ, + [57962] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1376), 1, - sym__statement_break, - ACTIONS(2604), 1, - anon_sym_DASH_GT, - [55656] = 3, + ACTIONS(2569), 1, + sym_identifier, + STATE(1115), 1, + sym_symbol_path, + [57972] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2105), 1, + ACTIONS(2649), 1, sym_identifier, - STATE(1323), 1, - sym_extern_parameter, - [55666] = 3, + STATE(1270), 1, + sym_named_argument, + [57982] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2606), 1, - anon_sym_COLON, - STATE(826), 1, - sym_signature_ascription, - [55676] = 3, + ACTIONS(2365), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [57990] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2608), 1, - anon_sym_LBRACE, - ACTIONS(2610), 1, - anon_sym_STAR, - [55686] = 3, + ACTIONS(1250), 2, + sym__statement_break, + anon_sym_where, + [57998] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2651), 1, + anon_sym_DASH_GT, + ACTIONS(2653), 1, + anon_sym_EQ_GT, + [58008] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2612), 1, + ACTIONS(1748), 1, anon_sym_LBRACE, - ACTIONS(2614), 1, - anon_sym_LT, - [55696] = 3, + ACTIONS(2655), 1, + anon_sym_PLUS, + [58018] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2616), 1, + ACTIONS(2625), 1, sym_identifier, - STATE(822), 1, - sym_symbol_path, - [55706] = 2, + STATE(1364), 1, + sym_field_pattern, + [58028] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1128), 2, - sym__statement_break, - anon_sym_where, - [55714] = 2, + ACTIONS(2569), 1, + sym_identifier, + STATE(1301), 1, + sym_symbol_path, + [58038] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1400), 2, + ACTIONS(1258), 2, sym__statement_break, anon_sym_where, - [55722] = 3, + [58046] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1680), 1, - sym_static_stage, - ACTIONS(1682), 1, - anon_sym_effect, - [55732] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2273), 1, + ACTIONS(2200), 1, sym_identifier, - STATE(1328), 1, - sym_field_declaration, - [55742] = 3, + STATE(1279), 1, + sym_import_member, + [58056] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1392), 1, - sym__statement_break, - ACTIONS(2618), 1, + ACTIONS(2657), 1, anon_sym_DASH_GT, - [55752] = 3, + ACTIONS(2659), 1, + anon_sym_EQ_GT, + [58066] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2620), 1, - anon_sym_LBRACE, - ACTIONS(2622), 1, + ACTIONS(1698), 1, + sym_static_stage, + ACTIONS(1700), 1, + anon_sym_effect, + [58076] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2661), 1, + anon_sym_EQ, + ACTIONS(2663), 1, anon_sym_LT, - [55762] = 3, + [58086] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2624), 1, - sym_identifier, - STATE(1037), 1, - sym_qualified_path, - [55772] = 2, + ACTIONS(2404), 2, + anon_sym_COMMA, + anon_sym_GT, + [58094] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2304), 2, + ACTIONS(2420), 2, anon_sym_COMMA, anon_sym_RBRACK, - [55780] = 2, + [58102] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1158), 2, - sym__statement_break, - anon_sym_where, - [55788] = 2, + ACTIONS(2665), 1, + anon_sym_COLON, + ACTIONS(2667), 1, + anon_sym_EQ, + [58112] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1162), 2, - sym__statement_break, - anon_sym_where, - [55796] = 3, + ACTIONS(2669), 1, + anon_sym_LT, + ACTIONS(2671), 1, + anon_sym_LPAREN, + [58122] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2626), 1, + ACTIONS(2673), 1, anon_sym_EQ, - ACTIONS(2628), 1, + ACTIONS(2675), 1, anon_sym_LT, - [55806] = 3, + [58132] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2630), 1, - anon_sym_DASH_GT, - ACTIONS(2632), 1, - anon_sym_EQ_GT, - [55816] = 3, + ACTIONS(2677), 1, + anon_sym_LBRACE, + ACTIONS(2679), 1, + anon_sym_LT, + [58142] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2634), 1, + ACTIONS(1799), 2, anon_sym_LBRACE, - ACTIONS(2636), 1, + anon_sym_EQ, + [58150] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2681), 1, + anon_sym_EQ, + ACTIONS(2683), 1, anon_sym_LT, - [55826] = 2, + [58160] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2638), 2, - anon_sym_RBRACE, - anon_sym_COMMA, - [55834] = 2, + ACTIONS(2685), 1, + anon_sym_LBRACE, + ACTIONS(2687), 1, + anon_sym_LT, + [58170] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2497), 2, - anon_sym_RBRACE, - anon_sym_COMMA, - [55842] = 2, + ACTIONS(2569), 1, + sym_identifier, + STATE(1237), 1, + sym_symbol_path, + [58180] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2306), 2, - anon_sym_RBRACE, - anon_sym_COMMA, - [55850] = 3, + ACTIONS(1394), 1, + sym__statement_break, + ACTIONS(2689), 1, + anon_sym_DASH_GT, + [58190] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2640), 1, - anon_sym_EQ, - ACTIONS(2642), 1, + ACTIONS(2691), 1, + anon_sym_LBRACE, + ACTIONS(2693), 1, anon_sym_LT, - [55860] = 3, + [58200] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, + ACTIONS(2123), 1, sym_identifier, - STATE(1273), 1, - sym_symbol_path, - [55870] = 3, + STATE(1283), 1, + sym_extern_parameter, + [58210] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1398), 2, + sym__statement_break, + anon_sym_where, + [58218] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2644), 1, + ACTIONS(2295), 1, sym_identifier, - STATE(1279), 1, - sym_named_argument, - [55880] = 3, + STATE(1284), 1, + sym_field_declaration, + [58228] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1366), 1, + ACTIONS(2695), 1, + anon_sym_LBRACE, + ACTIONS(2697), 1, + anon_sym_LT, + [58238] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2466), 2, sym__statement_break, - ACTIONS(2646), 1, - anon_sym_DASH_GT, - [55890] = 3, + anon_sym_DOT, + [58246] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, - sym_identifier, - STATE(1220), 1, - sym_symbol_path, - [55900] = 2, + ACTIONS(2699), 1, + anon_sym_LBRACE, + ACTIONS(2701), 1, + anon_sym_LT, + [58256] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2648), 2, - anon_sym__, - sym_identifier, - [55908] = 2, + ACTIONS(2535), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [58264] = 3, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2703), 1, + anon_sym_LBRACE, + ACTIONS(2705), 1, + anon_sym_LT, + [58274] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2362), 2, + ACTIONS(2555), 2, anon_sym_RBRACE, anon_sym_COMMA, - [55916] = 3, + [58282] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2650), 1, - anon_sym_COLON, - ACTIONS(2652), 1, - anon_sym_EQ, - [55926] = 3, + ACTIONS(2625), 1, + sym_identifier, + STATE(1456), 1, + sym_field_pattern, + [58292] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2654), 1, + ACTIONS(2707), 1, + anon_sym_LBRACE, + ACTIONS(2709), 1, anon_sym_LT, - ACTIONS(2656), 1, - anon_sym_LPAREN, - [55936] = 2, + [58302] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1352), 2, - sym__statement_break, - anon_sym_where, - [55944] = 2, + ACTIONS(2711), 1, + sym_identifier, + STATE(1153), 1, + sym_qualified_path, + [58312] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2329), 2, - anon_sym_RBRACE, + ACTIONS(2713), 2, anon_sym_COMMA, - [55952] = 3, + anon_sym_RPAREN, + [58320] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2658), 1, - anon_sym_COLON, - ACTIONS(2660), 1, - anon_sym_EQ, - [55962] = 3, + ACTIONS(2715), 1, + anon_sym_LBRACE, + ACTIONS(2717), 1, + anon_sym_LT, + [58330] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, + ACTIONS(2569), 1, sym_identifier, - STATE(1207), 1, + STATE(1167), 1, sym_symbol_path, - [55972] = 3, + [58340] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2662), 1, + ACTIONS(2719), 1, anon_sym_LT, - ACTIONS(2664), 1, + ACTIONS(2721), 1, anon_sym_LPAREN, - [55982] = 3, + [58350] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2666), 1, + ACTIONS(2723), 1, sym_identifier, - STATE(999), 1, + STATE(1034), 1, sym_qualified_path, - [55992] = 3, + [58360] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, + ACTIONS(2569), 1, sym_identifier, - STATE(1212), 1, + STATE(1177), 1, sym_symbol_path, - [56002] = 3, + [58370] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, + ACTIONS(2569), 1, sym_identifier, - STATE(1214), 1, + STATE(1180), 1, sym_symbol_path, - [56012] = 2, + [58380] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2668), 2, + ACTIONS(2725), 2, anon_sym_COMMA, - anon_sym_RPAREN, - [56020] = 3, + anon_sym_RBRACK, + [58388] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2670), 1, + ACTIONS(2727), 1, anon_sym_LT, - ACTIONS(2672), 1, + ACTIONS(2729), 1, anon_sym_LPAREN, - [56030] = 3, + [58398] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2532), 1, + ACTIONS(2569), 1, sym_identifier, - STATE(1218), 1, + STATE(1190), 1, sym_symbol_path, - [56040] = 2, + [58408] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2513), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [56048] = 3, + ACTIONS(2731), 1, + sym_identifier, + STATE(1048), 1, + sym_qualified_path, + [58418] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2674), 1, - anon_sym_EQ, - ACTIONS(2676), 1, - anon_sym_LT, - [56058] = 3, + ACTIONS(2733), 1, + anon_sym_DASH_GT, + ACTIONS(2735), 1, + anon_sym_EQ_GT, + [58428] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2534), 1, + ACTIONS(2625), 1, sym_identifier, - STATE(1711), 1, + STATE(1729), 1, sym_field_pattern, - [56068] = 3, + [58438] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2534), 1, - sym_identifier, - STATE(1483), 1, - sym_field_pattern, - [56078] = 3, + ACTIONS(2737), 2, + anon_sym_COMMA, + anon_sym_GT, + [58446] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2678), 1, + ACTIONS(2739), 1, sym_identifier, - STATE(1017), 1, + STATE(1254), 1, sym_qualified_path, - [56088] = 2, + [58456] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2523), 2, - anon_sym_RBRACE, + ACTIONS(2741), 2, anon_sym_COMMA, - [56096] = 3, + anon_sym_GT, + [58464] = 3, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2680), 1, + ACTIONS(2743), 1, anon_sym_DASH_GT, - ACTIONS(2682), 1, + ACTIONS(2745), 1, anon_sym_EQ_GT, - [56106] = 3, + [58474] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2684), 1, + ACTIONS(2747), 1, anon_sym_RBRACE, - ACTIONS(2686), 1, - anon_sym_COMMA, - [56116] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2688), 1, - anon_sym_LBRACE, - ACTIONS(2690), 1, - anon_sym_LT, - [56126] = 3, + [58481] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2311), 1, - anon_sym_COMMA, - STATE(1131), 1, - aux_sym_tuple_pattern_repeat1, - [56136] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1174), 2, + ACTIONS(1410), 1, sym__statement_break, - anon_sym_where, - [56144] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2532), 1, - sym_identifier, - STATE(1105), 1, - sym_symbol_path, - [56154] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(1754), 2, - anon_sym_LBRACE, - anon_sym_EQ, - [56162] = 3, + [58488] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2228), 1, + ACTIONS(2749), 1, sym_identifier, - STATE(1302), 1, - sym_field_assignment, - [56172] = 3, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2692), 1, - anon_sym_DASH_GT, - ACTIONS(2694), 1, - anon_sym_EQ_GT, - [56182] = 3, + [58495] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2696), 1, - anon_sym_COLON, - ACTIONS(2698), 1, - anon_sym_EQ, - [56192] = 3, + ACTIONS(2494), 1, + anon_sym_RBRACE, + [58502] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2700), 1, - sym_identifier, - STATE(1239), 1, - sym_qualified_path, - [56202] = 3, + ACTIONS(2751), 1, + anon_sym_RBRACE, + [58509] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2534), 1, + ACTIONS(2753), 1, sym_identifier, - STATE(1700), 1, - sym_field_pattern, - [56212] = 3, + [58516] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2570), 1, - anon_sym_LPAREN, - ACTIONS(2702), 1, - sym_identifier, - [56222] = 3, + ACTIONS(2755), 1, + anon_sym_LPAREN2, + [58523] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2704), 1, - sym_identifier, - STATE(1244), 1, - sym_qualified_path, - [56232] = 2, + ACTIONS(2757), 1, + anon_sym_EQ, + [58530] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2706), 2, - anon_sym_COMMA, - anon_sym_GT, - [56240] = 2, + ACTIONS(2759), 1, + anon_sym_RPAREN, + [58537] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2708), 1, - anon_sym_LPAREN, - [56247] = 2, + ACTIONS(2761), 1, + anon_sym_COLON, + [58544] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2710), 1, - sym_identifier, - [56254] = 2, + ACTIONS(2763), 1, + anon_sym_EQ_GT, + [58551] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2712), 1, - anon_sym_COLON, - [56261] = 2, + ACTIONS(2765), 1, + sym__statement_break, + [58558] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2714), 1, - anon_sym_EQ, - [56268] = 2, + ACTIONS(2767), 1, + anon_sym_RBRACK, + [58565] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2716), 1, - anon_sym_GT, - [56275] = 2, + ACTIONS(2769), 1, + sym_identifier, + [58572] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1881), 1, + ACTIONS(2771), 1, anon_sym_COLON, - [56282] = 2, + [58579] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1514), 1, - sym__statement_break, - [56289] = 2, + ACTIONS(2773), 1, + anon_sym_RBRACE, + [58586] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1410), 1, + ACTIONS(1436), 1, sym__statement_break, - [56296] = 2, + [58593] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2718), 1, + ACTIONS(2775), 1, sym_identifier, - [56303] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2720), 1, - sym__statement_break, - [56310] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2722), 1, - anon_sym_EQ_GT, - [56317] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2724), 1, - anon_sym_COLON, - [56324] = 2, + [58600] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2726), 1, + ACTIONS(2777), 1, anon_sym_LPAREN, - [56331] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2728), 1, - anon_sym_RPAREN, - [56338] = 2, + [58607] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2730), 1, + ACTIONS(1538), 1, sym__statement_break, - [56345] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2732), 1, - anon_sym_EQ_GT, - [56352] = 2, + [58614] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2734), 1, + ACTIONS(2779), 1, anon_sym_DASH_GT, - [56359] = 2, + [58621] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2736), 1, + ACTIONS(2781), 1, anon_sym_RBRACE, - [56366] = 2, + [58628] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2738), 1, + ACTIONS(2783), 1, anon_sym_RPAREN, - [56373] = 2, + [58635] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2740), 1, - anon_sym_COLON, - [56380] = 2, + ACTIONS(2785), 1, + anon_sym_RPAREN, + [58642] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2742), 1, - anon_sym_LPAREN, - [56387] = 2, + ACTIONS(2787), 1, + anon_sym_RPAREN, + [58649] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2744), 1, - anon_sym_PIPE, - [56394] = 2, + ACTIONS(1458), 1, + sym__statement_break, + [58656] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2789), 1, + anon_sym_LPAREN, + [58663] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2746), 1, + ACTIONS(2791), 1, anon_sym_EQ_GT, - [56401] = 2, + [58670] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2748), 1, - sym__statement_break, - [56408] = 2, + ACTIONS(2793), 1, + anon_sym_EQ_GT, + [58677] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1516), 1, - sym__statement_break, - [56415] = 2, + ACTIONS(2795), 1, + anon_sym_GT, + [58684] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1438), 1, - sym__statement_break, - [56422] = 2, + ACTIONS(2797), 1, + ts_builtin_sym_end, + [58691] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2750), 1, - anon_sym_LPAREN, - [56429] = 2, + ACTIONS(2799), 1, + anon_sym_RPAREN, + [58698] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2752), 1, + ACTIONS(2801), 1, anon_sym_RPAREN, - [56436] = 2, + [58705] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2754), 1, + ACTIONS(2803), 1, anon_sym_RBRACE, - [56443] = 2, + [58712] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2756), 1, + ACTIONS(2805), 1, sym_identifier, - [56450] = 2, + [58719] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1350), 1, - sym__statement_break, - [56457] = 2, + ACTIONS(2807), 1, + anon_sym_EQ, + [58726] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2758), 1, + ACTIONS(2809), 1, anon_sym_EQ, - [56464] = 2, + [58733] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2760), 1, - anon_sym_module, - [56471] = 2, + ACTIONS(2811), 1, + anon_sym_GT, + [58740] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2762), 1, - anon_sym_GT, - [56478] = 2, + ACTIONS(1406), 1, + sym__statement_break, + [58747] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2764), 1, - anon_sym_LPAREN, - [56485] = 2, + ACTIONS(2813), 1, + sym_identifier, + [58754] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2766), 1, - anon_sym_module, - [56492] = 2, + ACTIONS(2815), 1, + sym__statement_break, + [58761] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2768), 1, - anon_sym_LBRACE, - [56499] = 2, + ACTIONS(1552), 1, + sym__statement_break, + [58768] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2694), 1, - anon_sym_EQ_GT, - [56506] = 2, + ACTIONS(2817), 1, + anon_sym_COLON, + [58775] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2770), 1, + ACTIONS(2819), 1, anon_sym_extra, - [56513] = 2, + [58782] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2772), 1, + ACTIONS(2821), 1, anon_sym_LBRACE, - [56520] = 2, + [58789] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2774), 1, + ACTIONS(2823), 1, anon_sym_DASH_GT, - [56527] = 2, + [58796] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2776), 1, + ACTIONS(2825), 1, anon_sym_GT, - [56534] = 2, + [58803] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2778), 1, + ACTIONS(2827), 1, anon_sym_RBRACK, - [56541] = 2, + [58810] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2780), 1, + ACTIONS(2829), 1, anon_sym_EQ, - [56548] = 2, + [58817] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1522), 1, - sym__statement_break, - [56555] = 2, + ACTIONS(2831), 1, + anon_sym_extra, + [58824] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1440), 1, + ACTIONS(1508), 1, sym__statement_break, - [56562] = 2, + [58831] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2782), 1, - anon_sym_EQ_GT, - [56569] = 2, + ACTIONS(2833), 1, + anon_sym_GT, + [58838] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1442), 1, - sym__statement_break, - [56576] = 2, + ACTIONS(2835), 1, + anon_sym_COLON, + [58845] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1524), 1, - sym__statement_break, - [56583] = 2, + ACTIONS(2837), 1, + anon_sym_GT, + [58852] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2784), 1, - anon_sym_LPAREN, - [56590] = 2, + ACTIONS(1460), 1, + sym__statement_break, + [58859] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1432), 1, + ACTIONS(1408), 1, sym__statement_break, - [56597] = 2, + [58866] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2786), 1, - sym_identifier, - [56604] = 2, + ACTIONS(2839), 1, + anon_sym_LBRACE, + [58873] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2788), 1, + ACTIONS(2841), 1, anon_sym_EQ_GT, - [56611] = 2, + [58880] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1362), 1, - sym__statement_break, - [56618] = 2, + ACTIONS(2843), 1, + sym_identifier, + [58887] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2790), 1, - anon_sym_else, - [56625] = 2, + ACTIONS(1462), 1, + sym__statement_break, + [58894] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1444), 1, + ACTIONS(1438), 1, sym__statement_break, - [56632] = 2, + [58901] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2792), 1, - anon_sym_RBRACE, - [56639] = 2, + ACTIONS(1442), 1, + sym__statement_break, + [58908] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2794), 1, + ACTIONS(2845), 1, anon_sym_RBRACE, - [56646] = 2, + [58915] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2796), 1, + ACTIONS(2847), 1, anon_sym_RPAREN, - [56653] = 2, + [58922] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2798), 1, + ACTIONS(2849), 1, sym_identifier, - [56660] = 2, + [58929] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2800), 1, + ACTIONS(1416), 1, sym__statement_break, - [56667] = 2, + [58936] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2802), 1, + ACTIONS(2851), 1, anon_sym_RPAREN, - [56674] = 2, + [58943] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2804), 1, - sym__statement_break, - [56681] = 2, + ACTIONS(2853), 1, + anon_sym_LBRACE, + [58950] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(498), 1, - sym__statement_break, - [56688] = 2, + ACTIONS(2855), 1, + anon_sym_DASH_GT, + [58957] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2806), 1, + ACTIONS(2857), 1, anon_sym_DASH_GT, - [56695] = 2, + [58964] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1446), 1, + ACTIONS(1472), 1, sym__statement_break, - [56702] = 2, + [58971] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1364), 1, - sym__statement_break, - [56709] = 2, + ACTIONS(2859), 1, + anon_sym_EQ, + [58978] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2808), 1, - anon_sym_RBRACE, - [56716] = 2, + ACTIONS(1382), 1, + sym__statement_break, + [58985] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2810), 1, + ACTIONS(2861), 1, anon_sym_RPAREN, - [56723] = 2, + [58992] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2812), 1, + ACTIONS(2863), 1, anon_sym_EQ, - [56730] = 2, + [58999] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2814), 1, - anon_sym_RPAREN, - [56737] = 2, + ACTIONS(1444), 1, + sym__statement_break, + [59006] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2816), 1, - anon_sym_effect, - [56744] = 2, + ACTIONS(1474), 1, + sym__statement_break, + [59013] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1420), 1, - sym__statement_break, - [56751] = 2, + ACTIONS(2865), 1, + anon_sym_RPAREN, + [59020] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1526), 1, + ACTIONS(1476), 1, sym__statement_break, - [56758] = 2, + [59027] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1448), 1, + ACTIONS(1446), 1, sym__statement_break, - [56765] = 2, + [59034] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2818), 1, - sym_identifier, - [56772] = 2, + ACTIONS(2867), 1, + anon_sym_GT, + [59041] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2820), 1, + ACTIONS(2869), 1, anon_sym_RBRACK, - [56779] = 2, + [59048] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2822), 1, - anon_sym_LPAREN, - [56786] = 2, + ACTIONS(2871), 1, + anon_sym_RBRACK, + [59055] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2824), 1, - anon_sym_COLON, - [56793] = 2, + ACTIONS(2873), 1, + sym_identifier, + [59062] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2826), 1, - sym_identifier, - [56800] = 2, + ACTIONS(1480), 1, + sym__statement_break, + [59069] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2828), 1, - anon_sym_EQ_GT, - [56807] = 2, + ACTIONS(2875), 1, + anon_sym_fn, + [59076] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2830), 1, + ACTIONS(2877), 1, anon_sym_RPAREN, - [56814] = 2, + [59083] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1406), 1, + ACTIONS(1448), 1, sym__statement_break, - [56821] = 2, + [59090] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2832), 1, - sym_identifier, - [56828] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2834), 1, - anon_sym_LBRACE, - [56835] = 2, + ACTIONS(2879), 1, + anon_sym_LPAREN, + [59097] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1450), 1, + ACTIONS(1484), 1, sym__statement_break, - [56842] = 2, + [59104] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1404), 1, - sym__statement_break, - [56849] = 2, + ACTIONS(2881), 1, + sym_identifier, + [59111] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2836), 1, - anon_sym_LBRACE, - [56856] = 2, + ACTIONS(2883), 1, + anon_sym_RPAREN, + [59118] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1416), 1, - sym__statement_break, - [56863] = 2, + ACTIONS(2885), 1, + anon_sym_RBRACE, + [59125] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2838), 1, - anon_sym_DOT_DOT, - [56870] = 2, + ACTIONS(2887), 1, + anon_sym_GT, + [59132] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2840), 1, - anon_sym_LBRACE, - [56877] = 2, + ACTIONS(2889), 1, + sym_identifier, + [59139] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2842), 1, - sym_identifier, - [56884] = 2, + ACTIONS(1486), 1, + sym__statement_break, + [59146] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2844), 1, - anon_sym_COLON, - [56891] = 2, + ACTIONS(2891), 1, + anon_sym_LPAREN, + [59153] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2846), 1, - sym_identifier, - [56898] = 2, + ACTIONS(1488), 1, + sym__statement_break, + [59160] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2848), 1, - anon_sym_COLON, - [56905] = 2, + ACTIONS(2893), 1, + sym_identifier, + [59167] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2850), 1, - anon_sym_EQ_GT, - [56912] = 2, + ACTIONS(1490), 1, + sym__statement_break, + [59174] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1422), 1, + ACTIONS(1418), 1, sym__statement_break, - [56919] = 2, + [59181] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2852), 1, - anon_sym_COLON, - [56926] = 2, + ACTIONS(2895), 1, + anon_sym_LPAREN, + [59188] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2854), 1, - anon_sym_COLON, - [56933] = 2, + ACTIONS(2897), 1, + anon_sym_LPAREN2, + [59195] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1424), 1, - sym__statement_break, - [56940] = 2, + ACTIONS(2899), 1, + anon_sym_effect, + [59202] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2856), 1, + ACTIONS(2901), 1, sym__statement_break, - [56947] = 2, + [59209] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1426), 1, - sym__statement_break, - [56954] = 2, + ACTIONS(2903), 1, + anon_sym_LBRACE, + [59216] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(685), 1, + ACTIONS(1524), 1, sym__statement_break, - [56961] = 2, + [59223] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2327), 1, - anon_sym_RBRACE, - [56968] = 2, + ACTIONS(2905), 1, + sym_identifier, + [59230] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2858), 1, - anon_sym_GT, - [56975] = 2, + ACTIONS(2907), 1, + anon_sym_COLON, + [59237] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2860), 1, - anon_sym_COLON, - [56982] = 2, + ACTIONS(2909), 1, + anon_sym_EQ, + [59244] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1823), 1, - anon_sym_COLON, - [56989] = 2, + ACTIONS(2911), 1, + sym__statement_break, + [59251] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1494), 1, + ACTIONS(1420), 1, sym__statement_break, - [56996] = 2, + [59258] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2862), 1, - anon_sym_RBRACE, - [57003] = 2, + ACTIONS(2913), 1, + anon_sym_GT, + [59265] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2864), 1, - anon_sym_RPAREN, - [57010] = 2, + ACTIONS(2915), 1, + anon_sym_LBRACE, + [59272] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1428), 1, - sym__statement_break, - [57017] = 2, + ACTIONS(2917), 1, + anon_sym_RBRACK, + [59279] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1552), 1, - sym__statement_break, - [57024] = 2, + ACTIONS(2919), 1, + anon_sym_RPAREN, + [59286] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1454), 1, - sym__statement_break, - [57031] = 2, + ACTIONS(2921), 1, + anon_sym_LPAREN, + [59293] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2866), 1, - sym__statement_break, - [57038] = 2, + ACTIONS(2923), 1, + sym_identifier, + [59300] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2868), 1, - anon_sym_LPAREN, - [57045] = 2, + ACTIONS(2925), 1, + anon_sym_COLON, + [59307] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1502), 1, - sym__statement_break, - [57052] = 2, + ACTIONS(2927), 1, + anon_sym_GT, + [59314] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2870), 1, - sym_identifier, - [57059] = 2, + ACTIONS(2929), 1, + anon_sym_RPAREN, + [59321] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2872), 1, - anon_sym_LBRACE, - [57066] = 2, + ACTIONS(2931), 1, + anon_sym_RPAREN, + [59328] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2874), 1, + ACTIONS(2933), 1, + anon_sym_GT, + [59335] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2935), 1, anon_sym_RBRACE, - [57073] = 2, + [59342] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1456), 1, + ACTIONS(1384), 1, sym__statement_break, - [57080] = 2, + [59349] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2876), 1, - anon_sym_COLON, - [57087] = 2, + ACTIONS(1494), 1, + sym__statement_break, + [59356] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2878), 1, - anon_sym_RPAREN, - [57094] = 2, + ACTIONS(2937), 1, + anon_sym_GT, + [59363] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2880), 1, + ACTIONS(2939), 1, anon_sym_EQ_GT, - [57101] = 2, + [59370] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2882), 1, - anon_sym_RBRACE, - [57108] = 2, + ACTIONS(2941), 1, + anon_sym_RPAREN, + [59377] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1458), 1, - sym__statement_break, - [57115] = 2, + ACTIONS(2943), 1, + sym_identifier, + [59384] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2884), 1, - anon_sym_EQ, - [57122] = 2, + ACTIONS(2945), 1, + anon_sym_LBRACE, + [59391] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2886), 1, + ACTIONS(2947), 1, sym_identifier, - [57129] = 2, + [59398] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2888), 1, + ACTIONS(2949), 1, sym_identifier, - [57136] = 2, + [59405] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1460), 1, + ACTIONS(1496), 1, sym__statement_break, - [57143] = 2, + [59412] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1462), 1, + ACTIONS(1456), 1, sym__statement_break, - [57150] = 2, + [59419] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2890), 1, + ACTIONS(2951), 1, sym_identifier, - [57157] = 2, + [59426] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1412), 1, - sym__statement_break, - [57164] = 2, + ACTIONS(2953), 1, + anon_sym_RPAREN, + [59433] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2548), 1, + ACTIONS(2745), 1, anon_sym_EQ_GT, - [57171] = 2, + [59440] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2892), 1, - anon_sym_LBRACE, - [57178] = 2, + ACTIONS(2955), 1, + sym_identifier, + [59447] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1414), 1, + ACTIONS(1464), 1, sym__statement_break, - [57185] = 2, + [59454] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2894), 1, - sym_identifier, - [57192] = 2, + ACTIONS(1498), 1, + sym__statement_break, + [59461] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1430), 1, + ACTIONS(1500), 1, sym__statement_break, - [57199] = 2, + [59468] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1464), 1, - sym__statement_break, - [57206] = 2, + ACTIONS(2957), 1, + sym_identifier, + [59475] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2896), 1, - anon_sym_LPAREN, - [57213] = 2, + ACTIONS(2959), 1, + sym_identifier, + [59482] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2476), 1, - anon_sym_RBRACE, - [57220] = 2, + ACTIONS(1450), 1, + sym__statement_break, + [59489] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2898), 1, + ACTIONS(2961), 1, anon_sym_RBRACE, - [57227] = 2, + [59496] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2900), 1, - sym_identifier, - [57234] = 2, + ACTIONS(2963), 1, + sym__statement_break, + [59503] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2902), 1, - anon_sym_LBRACE, - [57241] = 2, + ACTIONS(1422), 1, + sym__statement_break, + [59510] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2904), 1, - sym_identifier, - [57248] = 2, + ACTIONS(2965), 1, + anon_sym_RBRACK, + [59517] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2906), 1, - anon_sym_RBRACE, - [57255] = 2, + ACTIONS(1504), 1, + sym__statement_break, + [59524] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2908), 1, + ACTIONS(2967), 1, anon_sym_RBRACE, - [57262] = 2, + [59531] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2910), 1, - anon_sym_LPAREN, - [57269] = 2, + ACTIONS(2969), 1, + anon_sym_COLON, + [59538] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2912), 1, - anon_sym_RPAREN, - [57276] = 2, + ACTIONS(2971), 1, + anon_sym_type, + [59545] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2914), 1, + ACTIONS(2973), 1, sym_identifier, - [57283] = 2, + [59552] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1847), 1, + anon_sym_COLON, + [59559] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2916), 1, + ACTIONS(2975), 1, anon_sym_DASH_GT, - [57290] = 2, + [59566] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2918), 1, + ACTIONS(2977), 1, anon_sym_RBRACE, - [57297] = 2, + [59573] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(2979), 1, + anon_sym_RPAREN, + [59580] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2920), 1, + ACTIONS(2981), 1, anon_sym_RPAREN, - [57304] = 2, + [59587] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2922), 1, + ACTIONS(2983), 1, anon_sym_EQ_GT, - [57311] = 2, + [59594] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1528), 1, + ACTIONS(1506), 1, sym__statement_break, - [57318] = 2, + [59601] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1530), 1, - sym__statement_break, - [57325] = 2, + ACTIONS(2985), 1, + anon_sym_EQ_GT, + [59608] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1504), 1, + ACTIONS(1368), 1, sym__statement_break, - [57332] = 2, + [59615] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2924), 1, + ACTIONS(2987), 1, anon_sym_DASH_GT, - [57339] = 2, + [59622] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2926), 1, + ACTIONS(2989), 1, anon_sym_GT, - [57346] = 2, + [59629] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2928), 1, + ACTIONS(2991), 1, anon_sym_RBRACK, - [57353] = 2, + [59636] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2930), 1, + ACTIONS(2993), 1, anon_sym_EQ_GT, - [57360] = 2, + [59643] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2932), 1, - anon_sym_EQ_GT, - [57367] = 2, + ACTIONS(2995), 1, + anon_sym_RBRACE, + [59650] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2934), 1, + ACTIONS(2997), 1, anon_sym_RPAREN, - [57374] = 2, + [59657] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1678), 1, - anon_sym_type, - [57381] = 2, + ACTIONS(1570), 1, + sym__statement_break, + [59664] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2936), 1, + ACTIONS(2999), 1, anon_sym_DASH_GT, - [57388] = 2, + [59671] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2938), 1, - anon_sym_LBRACE, - [57395] = 2, + ACTIONS(3001), 1, + anon_sym_COLON, + [59678] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2940), 1, + ACTIONS(3003), 1, anon_sym_RPAREN, - [57402] = 2, + [59685] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1482), 1, - sym__statement_break, - [57409] = 2, + ACTIONS(3005), 1, + anon_sym_EQ_GT, + [59692] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1787), 1, - anon_sym_LBRACE, - [57416] = 2, + ACTIONS(3007), 1, + anon_sym_LPAREN, + [59699] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2942), 1, + ACTIONS(3009), 1, sym_identifier, - [57423] = 2, + [59706] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1532), 1, + ACTIONS(1466), 1, sym__statement_break, - [57430] = 2, + [59713] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2944), 1, - sym_identifier, - [57437] = 2, + ACTIONS(3011), 1, + anon_sym_DASH_GT, + [59720] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2946), 1, + ACTIONS(3013), 1, sym_identifier, - [57444] = 2, + [59727] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1466), 1, + ACTIONS(1510), 1, sym__statement_break, - [57451] = 2, + [59734] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2948), 1, + ACTIONS(3015), 1, sym_identifier, - [57458] = 2, + [59741] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2950), 1, + ACTIONS(3017), 1, sym_identifier, - [57465] = 2, + [59748] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2952), 1, - sym_identifier, - [57472] = 2, + ACTIONS(1718), 1, + anon_sym_RPAREN, + [59755] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2954), 1, - anon_sym_extra, - [57479] = 2, + ACTIONS(1366), 1, + sym__statement_break, + [59762] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2956), 1, - anon_sym_RPAREN, - [57486] = 2, + ACTIONS(1424), 1, + sym__statement_break, + [59769] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2958), 1, + ACTIONS(3019), 1, anon_sym_LPAREN, - [57493] = 2, + [59776] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2960), 1, - anon_sym_LPAREN, - [57500] = 2, + ACTIONS(1452), 1, + sym__statement_break, + [59783] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2570), 1, + ACTIONS(2575), 1, anon_sym_LPAREN, - [57507] = 2, + [59790] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1506), 1, + ACTIONS(1454), 1, sym__statement_break, - [57514] = 2, + [59797] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2962), 1, + ACTIONS(3021), 1, anon_sym_PIPE, - [57521] = 2, - ACTIONS(298), 1, - sym_line_comment, - ACTIONS(2964), 1, - anon_sym_GT, - [57528] = 2, + [59804] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2966), 1, + ACTIONS(3023), 1, anon_sym_COLON, - [57535] = 2, + [59811] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2968), 1, - sym__statement_break, - [57542] = 2, + ACTIONS(3025), 1, + sym_identifier, + [59818] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1486), 1, - sym__statement_break, - [57549] = 2, + ACTIONS(3027), 1, + anon_sym_DASH_GT, + [59825] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2970), 1, - anon_sym_DASH_GT, - [57556] = 2, + ACTIONS(3029), 1, + anon_sym_RBRACE, + [59832] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2972), 1, + ACTIONS(3031), 1, sym_identifier, - [57563] = 2, + [59839] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2974), 1, - sym_identifier, - [57570] = 2, + ACTIONS(1492), 1, + sym__statement_break, + [59846] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2976), 1, - anon_sym_GT, - [57577] = 2, + ACTIONS(3033), 1, + anon_sym_RBRACE, + [59853] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2978), 1, + ACTIONS(3035), 1, anon_sym_LBRACE, - [57584] = 2, + [59860] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2980), 1, - anon_sym_RPAREN, - [57591] = 2, + ACTIONS(3037), 1, + anon_sym_LBRACE, + [59867] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2982), 1, - sym_identifier, - [57598] = 2, + ACTIONS(3039), 1, + sym__statement_break, + [59874] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(1502), 1, + sym__statement_break, + [59881] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2984), 1, + ACTIONS(3041), 1, anon_sym_LPAREN, - [57605] = 2, + [59888] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2986), 1, - sym_identifier, - [57612] = 2, + ACTIONS(3043), 1, + anon_sym_LPAREN, + [59895] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1468), 1, - sym__statement_break, - [57619] = 2, + ACTIONS(3045), 1, + anon_sym_LPAREN2, + [59902] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(3047), 1, + anon_sym_RPAREN, + [59909] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2988), 1, + ACTIONS(3049), 1, sym_identifier, - [57626] = 2, + [59916] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2990), 1, + ACTIONS(3051), 1, sym_identifier, - [57633] = 2, + [59923] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2992), 1, + ACTIONS(3053), 1, anon_sym_COLON, - [57640] = 2, + [59930] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2994), 1, + ACTIONS(3055), 1, anon_sym_RPAREN, - [57647] = 2, + [59937] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1508), 1, + ACTIONS(1514), 1, sym__statement_break, - [57654] = 2, + [59944] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2996), 1, + ACTIONS(3057), 1, anon_sym_LPAREN, - [57661] = 2, + [59951] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1554), 1, - sym__statement_break, - [57668] = 2, + ACTIONS(3059), 1, + anon_sym_RBRACE, + [59958] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2998), 1, - anon_sym_COLON, - [57675] = 2, + ACTIONS(1440), 1, + sym__statement_break, + [59965] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3000), 1, - anon_sym_type, - [57682] = 2, + ACTIONS(990), 1, + anon_sym_RPAREN, + [59972] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1470), 1, - sym__statement_break, - [57689] = 2, + ACTIONS(3061), 1, + anon_sym_LBRACE, + [59979] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3002), 1, - anon_sym_DASH_GT, - [57696] = 2, + ACTIONS(1516), 1, + sym__statement_break, + [59986] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3004), 1, - anon_sym_COLON, - [57703] = 2, + ACTIONS(3063), 1, + anon_sym_GT, + [59993] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3006), 1, - sym_identifier, - [57710] = 2, + ACTIONS(3065), 1, + anon_sym_module, + [60000] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3008), 1, - anon_sym_RPAREN, - [57717] = 2, + ACTIONS(3067), 1, + anon_sym_fn, + [60007] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1434), 1, - sym__statement_break, - [57724] = 2, + ACTIONS(3069), 1, + anon_sym_LPAREN, + [60014] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1474), 1, + ACTIONS(1518), 1, sym__statement_break, - [57731] = 2, + [60021] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3010), 1, + ACTIONS(3071), 1, anon_sym_LBRACE, - [57738] = 2, + [60028] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3012), 1, - anon_sym_LPAREN, - [57745] = 2, + ACTIONS(3073), 1, + anon_sym_EQ_GT, + [60035] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3014), 1, + ACTIONS(3075), 1, anon_sym_RPAREN, - [57752] = 2, + [60042] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1390), 1, + ACTIONS(1520), 1, sym__statement_break, - [57759] = 2, + [60049] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3016), 1, + ACTIONS(3077), 1, anon_sym_GT, - [57766] = 2, + [60056] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3018), 1, - anon_sym_GT, - [57773] = 2, + ACTIONS(1522), 1, + sym__statement_break, + [60063] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3020), 1, - anon_sym_RBRACK, - [57780] = 2, + ACTIONS(1426), 1, + sym__statement_break, + [60070] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3022), 1, + ACTIONS(3079), 1, anon_sym_LPAREN, - [57787] = 2, + [60077] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3024), 1, + ACTIONS(3081), 1, anon_sym_LBRACE, - [57794] = 2, + [60084] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3026), 1, - anon_sym_DOT, - [57801] = 2, + ACTIONS(3083), 1, + anon_sym_RBRACE, + [60091] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1704), 1, + ACTIONS(1728), 1, anon_sym_RPAREN, - [57808] = 2, + [60098] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1476), 1, + ACTIONS(1428), 1, sym__statement_break, - [57815] = 2, + [60105] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1534), 1, - sym__statement_break, - [57822] = 2, + ACTIONS(3085), 1, + anon_sym_RPAREN, + [60112] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3028), 1, - anon_sym_fn, - [57829] = 2, + ACTIONS(3087), 1, + anon_sym_LBRACE, + [60119] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3030), 1, - anon_sym_RBRACE, - [57836] = 2, + ACTIONS(1528), 1, + sym__statement_break, + [60126] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3032), 1, + ACTIONS(3089), 1, anon_sym_LPAREN, - [57843] = 2, + [60133] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1436), 1, - sym__statement_break, - [57850] = 2, + ACTIONS(3091), 1, + anon_sym_else, + [60140] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1478), 1, + ACTIONS(1526), 1, sym__statement_break, - [57857] = 2, + [60147] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3034), 1, + ACTIONS(3093), 1, anon_sym_LBRACE, - [57864] = 2, + [60154] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3036), 1, - anon_sym_RPAREN, - [57871] = 2, + ACTIONS(3095), 1, + anon_sym_GT, + [60161] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1536), 1, - sym__statement_break, - [57878] = 2, + ACTIONS(3097), 1, + sym_identifier, + [60168] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3038), 1, - anon_sym_RPAREN, - [57885] = 2, + ACTIONS(3099), 1, + anon_sym_EQ_GT, + [60175] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3040), 1, - anon_sym_EQ, - [57892] = 2, + ACTIONS(1530), 1, + sym__statement_break, + [60182] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3042), 1, + ACTIONS(3101), 1, anon_sym_LBRACE, - [57899] = 2, + [60189] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3044), 1, + ACTIONS(3103), 1, anon_sym_else, - [57906] = 2, + [60196] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3046), 1, + ACTIONS(3105), 1, anon_sym_LPAREN, - [57913] = 2, + [60203] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3048), 1, + ACTIONS(3107), 1, anon_sym_RPAREN, - [57920] = 2, + [60210] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1396), 1, - sym__statement_break, - [57927] = 2, + ACTIONS(3109), 1, + anon_sym_QMARK, + [60217] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3050), 1, + ACTIONS(3111), 1, anon_sym_RPAREN, - [57934] = 2, + [60224] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3052), 1, + ACTIONS(3113), 1, anon_sym_GT, - [57941] = 2, + [60231] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3054), 1, + ACTIONS(3115), 1, anon_sym_LBRACE, - [57948] = 2, + [60238] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3056), 1, - sym_identifier, - [57955] = 2, + ACTIONS(3117), 1, + sym__statement_break, + [60245] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3058), 1, - anon_sym_GT, - [57962] = 2, + ACTIONS(3119), 1, + anon_sym_RPAREN, + [60252] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1398), 1, + ACTIONS(1400), 1, sym__statement_break, - [57969] = 2, + [60259] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3060), 1, + ACTIONS(3121), 1, anon_sym_LBRACE, - [57976] = 2, + [60266] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3062), 1, + ACTIONS(3123), 1, anon_sym_LBRACE, - [57983] = 2, + [60273] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3064), 1, + ACTIONS(3125), 1, anon_sym_LBRACE, - [57990] = 2, + [60280] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3066), 1, + ACTIONS(3127), 1, anon_sym_RPAREN, - [57997] = 2, + [60287] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1538), 1, + ACTIONS(3129), 1, sym__statement_break, - [58004] = 2, + [60294] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3068), 1, - anon_sym_DASH_GT, - [58011] = 2, + ACTIONS(3131), 1, + anon_sym_PIPE, + [60301] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1710), 1, - anon_sym_RPAREN, - [58018] = 2, + ACTIONS(3133), 1, + anon_sym_LPAREN, + [60308] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3070), 1, + ACTIONS(3135), 1, anon_sym_LBRACE, - [58025] = 2, + [60315] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1540), 1, - sym__statement_break, - [58032] = 2, + ACTIONS(3137), 1, + anon_sym_RPAREN, + [60322] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3072), 1, + ACTIONS(3139), 1, anon_sym_RPAREN, - [58039] = 2, + [60329] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1542), 1, - sym__statement_break, - [58046] = 2, + ACTIONS(2653), 1, + anon_sym_EQ_GT, + [60336] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3074), 1, - anon_sym_effect, - [58053] = 2, + ACTIONS(1532), 1, + sym__statement_break, + [60343] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1380), 1, - sym__statement_break, - [58060] = 2, + ACTIONS(3141), 1, + anon_sym_COLON, + [60350] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3076), 1, - anon_sym_RBRACK, - [58067] = 2, + ACTIONS(3143), 1, + anon_sym_COLON, + [60357] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3078), 1, + ACTIONS(3145), 1, sym__statement_break, - [58074] = 2, + [60364] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3080), 1, - anon_sym_GT, - [58081] = 2, + ACTIONS(1534), 1, + sym__statement_break, + [60371] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3082), 1, + ACTIONS(3147), 1, anon_sym_LPAREN, - [58088] = 2, + [60378] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1544), 1, + ACTIONS(3149), 1, sym__statement_break, - [58095] = 2, + [60385] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3084), 1, + ACTIONS(3151), 1, anon_sym_PIPE, - [58102] = 2, + [60392] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3086), 1, - anon_sym_RBRACE, - [58109] = 2, + ACTIONS(3153), 1, + anon_sym_COLON, + [60399] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3088), 1, - sym_identifier, - [58116] = 2, + ACTIONS(3155), 1, + anon_sym_COLON, + [60406] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1480), 1, + ACTIONS(1536), 1, sym__statement_break, - [58123] = 2, + [60413] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1500), 1, + ACTIONS(1430), 1, sym__statement_break, - [58130] = 2, + [60420] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3090), 1, - ts_builtin_sym_end, - [58137] = 2, + ACTIONS(3157), 1, + anon_sym_LT2, + [60427] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3092), 1, + ACTIONS(3159), 1, sym_identifier, - [58144] = 2, + [60434] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3094), 1, + ACTIONS(1540), 1, sym__statement_break, - [58151] = 2, + [60441] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3096), 1, + ACTIONS(3161), 1, anon_sym_LPAREN, - [58158] = 2, + [60448] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3098), 1, - anon_sym_RPAREN, - [58165] = 2, + ACTIONS(3163), 1, + anon_sym_COLON, + [60455] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3100), 1, - sym__statement_break, - [58172] = 2, + ACTIONS(3165), 1, + anon_sym_LPAREN2, + [60462] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3102), 1, - anon_sym_RPAREN, - [58179] = 2, + ACTIONS(1883), 1, + anon_sym_COLON, + [60469] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3104), 1, - anon_sym_LBRACE, - [58186] = 2, + ACTIONS(3167), 1, + anon_sym_RPAREN, + [60476] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1418), 1, + ACTIONS(1542), 1, sym__statement_break, - [58193] = 2, + [60483] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3106), 1, - anon_sym_EQ, - [58200] = 2, + ACTIONS(3169), 1, + sym_identifier, + [60490] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1546), 1, - sym__statement_break, - [58207] = 2, + ACTIONS(3171), 1, + anon_sym_GT, + [60497] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3108), 1, - sym__statement_break, - [58214] = 2, + ACTIONS(3173), 1, + anon_sym_LPAREN, + [60504] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3110), 1, - anon_sym_RBRACK, - [58221] = 2, + ACTIONS(3175), 1, + sym_identifier, + [60511] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3112), 1, - anon_sym_EQ, - [58228] = 2, + ACTIONS(3177), 1, + sym_identifier, + [60518] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3114), 1, - anon_sym_RBRACE, - [58235] = 2, + ACTIONS(3179), 1, + anon_sym_effect, + [60525] = 2, + ACTIONS(298), 1, + sym_line_comment, + ACTIONS(3181), 1, + sym_identifier, + [60532] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3116), 1, + ACTIONS(3183), 1, anon_sym_LPAREN, - [58242] = 2, + [60539] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3118), 1, - anon_sym_RBRACE, - [58249] = 2, + ACTIONS(3185), 1, + sym_identifier, + [60546] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1718), 1, + ACTIONS(1732), 1, anon_sym_RPAREN, - [58256] = 2, + [60553] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1374), 1, + ACTIONS(1544), 1, sym__statement_break, - [58263] = 2, + [60560] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3120), 1, - anon_sym_GT, - [58270] = 2, + ACTIONS(3187), 1, + anon_sym_RBRACE, + [60567] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3122), 1, - anon_sym_COLON, - [58277] = 2, + ACTIONS(3189), 1, + anon_sym_DOT, + [60574] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3124), 1, + ACTIONS(3191), 1, anon_sym_else, - [58284] = 2, + [60581] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3126), 1, + ACTIONS(3193), 1, anon_sym_LPAREN, - [58291] = 2, + [60588] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3128), 1, + ACTIONS(3195), 1, anon_sym_RPAREN, - [58298] = 2, + [60595] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3130), 1, - anon_sym_RPAREN, - [58305] = 2, + ACTIONS(3197), 1, + sym__statement_break, + [60602] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1548), 1, - sym__statement_break, - [58312] = 2, + ACTIONS(3199), 1, + anon_sym_GT, + [60609] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3132), 1, + ACTIONS(3201), 1, sym_identifier, - [58319] = 2, + [60616] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3134), 1, + ACTIONS(3203), 1, sym_identifier, - [58326] = 2, + [60623] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1550), 1, + ACTIONS(1546), 1, sym__statement_break, - [58333] = 2, + [60630] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1402), 1, - sym__statement_break, - [58340] = 2, + ACTIONS(3205), 1, + sym_identifier, + [60637] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3136), 1, + ACTIONS(3207), 1, anon_sym_LBRACE, - [58347] = 2, + [60644] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3138), 1, + ACTIONS(3209), 1, anon_sym_LPAREN, - [58354] = 2, + [60651] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3140), 1, + ACTIONS(3211), 1, sym_identifier, - [58361] = 2, + [60658] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3142), 1, + ACTIONS(3213), 1, sym_identifier, - [58368] = 2, + [60665] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3144), 1, + ACTIONS(2605), 1, anon_sym_EQ_GT, - [58375] = 2, + [60672] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3146), 1, + ACTIONS(3215), 1, anon_sym_LPAREN, - [58382] = 2, + [60679] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3148), 1, + ACTIONS(3217), 1, sym_identifier, - [58389] = 2, + [60686] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3150), 1, + ACTIONS(3219), 1, sym_identifier, - [58396] = 2, + [60693] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1484), 1, - sym__statement_break, - [58403] = 2, + ACTIONS(3221), 1, + sym_identifier, + [60700] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3152), 1, - anon_sym_RPAREN, - [58410] = 2, + ACTIONS(3223), 1, + anon_sym_EQ_GT, + [60707] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3154), 1, + ACTIONS(3225), 1, anon_sym_LBRACE, - [58417] = 2, + [60714] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3156), 1, + ACTIONS(3227), 1, sym_identifier, - [58424] = 2, + [60721] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3158), 1, - anon_sym_GT, - [58431] = 2, + ACTIONS(3229), 1, + sym_identifier, + [60728] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3160), 1, + ACTIONS(3231), 1, sym_identifier, - [58438] = 2, + [60735] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3162), 1, - sym_identifier, - [58445] = 2, + ACTIONS(3233), 1, + anon_sym_RBRACE, + [60742] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1066), 1, - anon_sym_RPAREN, - [58452] = 2, + ACTIONS(3235), 1, + anon_sym_LBRACE, + [60749] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3164), 1, + ACTIONS(3237), 1, sym_identifier, - [58459] = 2, + [60756] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3166), 1, + ACTIONS(3239), 1, anon_sym_LPAREN, - [58466] = 2, + [60763] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3168), 1, - sym_identifier, - [58473] = 2, + ACTIONS(3241), 1, + anon_sym_DOT_DOT, + [60770] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3170), 1, + ACTIONS(3243), 1, sym_identifier, - [58480] = 2, + [60777] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3172), 1, + ACTIONS(3245), 1, sym_identifier, - [58487] = 2, + [60784] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3174), 1, + ACTIONS(3247), 1, sym_identifier, - [58494] = 2, + [60791] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3176), 1, + ACTIONS(3249), 1, anon_sym_GT, - [58501] = 2, + [60798] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3178), 1, - anon_sym_GT, - [58508] = 2, + ACTIONS(664), 1, + sym__statement_break, + [60805] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3180), 1, + ACTIONS(3251), 1, sym_identifier, - [58515] = 2, + [60812] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3182), 1, + ACTIONS(3253), 1, anon_sym_QMARK, - [58522] = 2, + [60819] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3184), 1, - anon_sym_GT, - [58529] = 2, + ACTIONS(3255), 1, + anon_sym_EQ, + [60826] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3186), 1, + ACTIONS(3257), 1, anon_sym_LPAREN, - [58536] = 2, + [60833] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3188), 1, + ACTIONS(3259), 1, anon_sym_GT, - [58543] = 2, + [60840] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3190), 1, + ACTIONS(3261), 1, anon_sym_GT, - [58550] = 2, + [60847] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3192), 1, + ACTIONS(3263), 1, anon_sym_LPAREN, - [58557] = 2, + [60854] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3194), 1, + ACTIONS(3265), 1, anon_sym_GT, - [58564] = 2, + [60861] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3196), 1, - anon_sym_RBRACK, - [58571] = 2, + ACTIONS(1548), 1, + sym__statement_break, + [60868] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3198), 1, - sym_identifier, - [58578] = 2, + ACTIONS(3267), 1, + sym__statement_break, + [60875] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3200), 1, + ACTIONS(3269), 1, anon_sym_LBRACE, - [58585] = 2, + [60882] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3202), 1, + ACTIONS(3271), 1, anon_sym_LPAREN, - [58592] = 2, + [60889] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(2682), 1, - anon_sym_EQ_GT, - [58599] = 2, + ACTIONS(1512), 1, + sym__statement_break, + [60896] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3204), 1, + ACTIONS(3273), 1, anon_sym_LBRACE, - [58606] = 2, + [60903] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1488), 1, - sym__statement_break, - [58613] = 2, + ACTIONS(3275), 1, + anon_sym_LPAREN, + [60910] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3206), 1, + ACTIONS(3277), 1, sym_identifier, - [58620] = 2, + [60917] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3208), 1, - sym_identifier, - [58627] = 2, + ACTIONS(3279), 1, + anon_sym_LPAREN, + [60924] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3210), 1, - anon_sym_LPAREN, - [58634] = 2, + ACTIONS(2350), 1, + anon_sym_RBRACE, + [60931] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3212), 1, + ACTIONS(3281), 1, sym_identifier, - [58641] = 2, + [60938] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3214), 1, + ACTIONS(3283), 1, anon_sym_QMARK, - [58648] = 2, + [60945] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3216), 1, + ACTIONS(3285), 1, anon_sym_fn, - [58655] = 2, + [60952] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3218), 1, + ACTIONS(3287), 1, anon_sym_effect, - [58662] = 2, + [60959] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3220), 1, + ACTIONS(3289), 1, anon_sym_module, - [58669] = 2, + [60966] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3222), 1, - sym_identifier, - [58676] = 2, + ACTIONS(3291), 1, + anon_sym_RBRACE, + [60973] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3224), 1, - anon_sym_COLON, - [58683] = 2, + ACTIONS(3293), 1, + anon_sym_module, + [60980] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1490), 1, + ACTIONS(1550), 1, sym__statement_break, - [58690] = 2, + [60987] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3226), 1, + ACTIONS(3295), 1, anon_sym_fn, - [58697] = 2, + [60994] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3228), 1, + ACTIONS(3297), 1, anon_sym_effect, - [58704] = 2, + [61001] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3230), 1, + ACTIONS(3299), 1, anon_sym_module, - [58711] = 2, + [61008] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1408), 1, + ACTIONS(3301), 1, sym__statement_break, - [58718] = 2, + [61015] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3232), 1, - anon_sym_COLON, - [58725] = 2, + ACTIONS(3303), 1, + sym__statement_break, + [61022] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3234), 1, + ACTIONS(3305), 1, anon_sym_DOT, - [58732] = 2, + [61029] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3236), 1, + ACTIONS(3307), 1, anon_sym_RBRACE, - [58739] = 2, + [61036] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3238), 1, + ACTIONS(3309), 1, anon_sym_GT, - [58746] = 2, + [61043] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3240), 1, - anon_sym_GT, - [58753] = 2, + ACTIONS(1434), 1, + sym__statement_break, + [61050] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3242), 1, - anon_sym_EQ_GT, - [58760] = 2, + ACTIONS(3311), 1, + anon_sym_RPAREN, + [61057] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3244), 1, + ACTIONS(3313), 1, anon_sym_GT, - [58767] = 2, + [61064] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3246), 1, - sym_identifier, - [58774] = 2, + ACTIONS(3315), 1, + anon_sym_EQ_GT, + [61071] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3248), 1, - anon_sym_LBRACE, - [58781] = 2, + ACTIONS(1558), 1, + sym__statement_break, + [61078] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3250), 1, - anon_sym_QMARK, - [58788] = 2, + ACTIONS(1562), 1, + sym__statement_break, + [61085] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3252), 1, - anon_sym_RBRACE, - [58795] = 2, + ACTIONS(1566), 1, + sym__statement_break, + [61092] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3254), 1, - anon_sym_RBRACE, - [58802] = 2, + ACTIONS(3317), 1, + sym_identifier, + [61099] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3256), 1, + ACTIONS(3319), 1, anon_sym_DOT, - [58809] = 2, + [61106] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3258), 1, - anon_sym_RBRACE, - [58816] = 2, + ACTIONS(3321), 1, + anon_sym_LPAREN, + [61113] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3260), 1, + ACTIONS(3323), 1, anon_sym_LPAREN, - [58823] = 2, + [61120] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3262), 1, - anon_sym_GT, - [58830] = 2, + ACTIONS(1696), 1, + anon_sym_type, + [61127] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3264), 1, - sym_identifier, - [58837] = 2, + ACTIONS(1554), 1, + sym__statement_break, + [61134] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1512), 1, - sym__statement_break, - [58844] = 2, + ACTIONS(3325), 1, + anon_sym_COLON, + [61141] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3266), 1, - anon_sym_LPAREN, - [58851] = 2, + ACTIONS(3327), 1, + anon_sym_COLON, + [61148] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3268), 1, - anon_sym_RPAREN, - [58858] = 2, + ACTIONS(554), 1, + sym__statement_break, + [61155] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3270), 1, + ACTIONS(3329), 1, anon_sym_LPAREN, - [58865] = 2, + [61162] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(1492), 1, - sym__statement_break, - [58872] = 2, + ACTIONS(3331), 1, + anon_sym_RBRACE, + [61169] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3272), 1, - sym__statement_break, - [58879] = 2, + ACTIONS(3333), 1, + anon_sym_GT, + [61176] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3274), 1, - anon_sym_RBRACE, - [58886] = 2, + ACTIONS(3335), 1, + anon_sym_LBRACE, + [61183] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3276), 1, - sym__statement_break, - [58893] = 2, + ACTIONS(1793), 1, + anon_sym_LBRACE, + [61190] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3278), 1, - anon_sym_fn, - [58900] = 2, + ACTIONS(1564), 1, + sym__statement_break, + [61197] = 2, ACTIONS(298), 1, sym_line_comment, - ACTIONS(3280), 1, + ACTIONS(3337), 1, anon_sym_LBRACE, }; @@ -53966,1700 +55857,1729 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(28)] = 882, [SMALL_STATE(29)] = 1008, [SMALL_STATE(30)] = 1134, - [SMALL_STATE(31)] = 1251, - [SMALL_STATE(32)] = 1368, - [SMALL_STATE(33)] = 1485, - [SMALL_STATE(34)] = 1602, - [SMALL_STATE(35)] = 1719, - [SMALL_STATE(36)] = 1836, - [SMALL_STATE(37)] = 1953, - [SMALL_STATE(38)] = 2070, - [SMALL_STATE(39)] = 2187, - [SMALL_STATE(40)] = 2304, - [SMALL_STATE(41)] = 2421, - [SMALL_STATE(42)] = 2538, - [SMALL_STATE(43)] = 2655, - [SMALL_STATE(44)] = 2769, - [SMALL_STATE(45)] = 2883, - [SMALL_STATE(46)] = 2997, - [SMALL_STATE(47)] = 3111, - [SMALL_STATE(48)] = 3225, - [SMALL_STATE(49)] = 3339, - [SMALL_STATE(50)] = 3453, - [SMALL_STATE(51)] = 3567, - [SMALL_STATE(52)] = 3681, - [SMALL_STATE(53)] = 3795, - [SMALL_STATE(54)] = 3909, - [SMALL_STATE(55)] = 4023, - [SMALL_STATE(56)] = 4137, - [SMALL_STATE(57)] = 4251, - [SMALL_STATE(58)] = 4365, - [SMALL_STATE(59)] = 4479, - [SMALL_STATE(60)] = 4593, - [SMALL_STATE(61)] = 4707, - [SMALL_STATE(62)] = 4821, - [SMALL_STATE(63)] = 4935, - [SMALL_STATE(64)] = 5049, - [SMALL_STATE(65)] = 5163, - [SMALL_STATE(66)] = 5277, - [SMALL_STATE(67)] = 5391, - [SMALL_STATE(68)] = 5505, - [SMALL_STATE(69)] = 5619, - [SMALL_STATE(70)] = 5733, - [SMALL_STATE(71)] = 5847, - [SMALL_STATE(72)] = 5961, - [SMALL_STATE(73)] = 6075, - [SMALL_STATE(74)] = 6189, - [SMALL_STATE(75)] = 6303, - [SMALL_STATE(76)] = 6417, - [SMALL_STATE(77)] = 6531, - [SMALL_STATE(78)] = 6645, - [SMALL_STATE(79)] = 6761, - [SMALL_STATE(80)] = 6875, - [SMALL_STATE(81)] = 6989, - [SMALL_STATE(82)] = 7103, - [SMALL_STATE(83)] = 7217, - [SMALL_STATE(84)] = 7331, - [SMALL_STATE(85)] = 7445, - [SMALL_STATE(86)] = 7559, - [SMALL_STATE(87)] = 7673, - [SMALL_STATE(88)] = 7787, - [SMALL_STATE(89)] = 7901, - [SMALL_STATE(90)] = 8015, - [SMALL_STATE(91)] = 8129, - [SMALL_STATE(92)] = 8243, - [SMALL_STATE(93)] = 8357, - [SMALL_STATE(94)] = 8471, - [SMALL_STATE(95)] = 8585, - [SMALL_STATE(96)] = 8699, - [SMALL_STATE(97)] = 8813, - [SMALL_STATE(98)] = 8927, - [SMALL_STATE(99)] = 9041, - [SMALL_STATE(100)] = 9155, - [SMALL_STATE(101)] = 9269, - [SMALL_STATE(102)] = 9383, - [SMALL_STATE(103)] = 9497, - [SMALL_STATE(104)] = 9611, - [SMALL_STATE(105)] = 9725, - [SMALL_STATE(106)] = 9839, - [SMALL_STATE(107)] = 9953, - [SMALL_STATE(108)] = 10067, - [SMALL_STATE(109)] = 10181, - [SMALL_STATE(110)] = 10295, - [SMALL_STATE(111)] = 10409, - [SMALL_STATE(112)] = 10523, - [SMALL_STATE(113)] = 10637, - [SMALL_STATE(114)] = 10751, - [SMALL_STATE(115)] = 10865, - [SMALL_STATE(116)] = 10979, - [SMALL_STATE(117)] = 11093, - [SMALL_STATE(118)] = 11207, - [SMALL_STATE(119)] = 11321, - [SMALL_STATE(120)] = 11435, - [SMALL_STATE(121)] = 11549, - [SMALL_STATE(122)] = 11663, - [SMALL_STATE(123)] = 11777, - [SMALL_STATE(124)] = 11891, - [SMALL_STATE(125)] = 12005, - [SMALL_STATE(126)] = 12119, - [SMALL_STATE(127)] = 12233, - [SMALL_STATE(128)] = 12347, - [SMALL_STATE(129)] = 12461, - [SMALL_STATE(130)] = 12575, - [SMALL_STATE(131)] = 12689, - [SMALL_STATE(132)] = 12803, - [SMALL_STATE(133)] = 12917, - [SMALL_STATE(134)] = 13031, - [SMALL_STATE(135)] = 13145, - [SMALL_STATE(136)] = 13259, - [SMALL_STATE(137)] = 13373, - [SMALL_STATE(138)] = 13487, - [SMALL_STATE(139)] = 13601, - [SMALL_STATE(140)] = 13715, - [SMALL_STATE(141)] = 13829, - [SMALL_STATE(142)] = 13943, - [SMALL_STATE(143)] = 14057, - [SMALL_STATE(144)] = 14171, - [SMALL_STATE(145)] = 14285, - [SMALL_STATE(146)] = 14399, - [SMALL_STATE(147)] = 14513, - [SMALL_STATE(148)] = 14627, - [SMALL_STATE(149)] = 14741, - [SMALL_STATE(150)] = 14855, - [SMALL_STATE(151)] = 14969, - [SMALL_STATE(152)] = 15083, - [SMALL_STATE(153)] = 15197, - [SMALL_STATE(154)] = 15311, - [SMALL_STATE(155)] = 15425, - [SMALL_STATE(156)] = 15539, - [SMALL_STATE(157)] = 15653, - [SMALL_STATE(158)] = 15767, - [SMALL_STATE(159)] = 15881, - [SMALL_STATE(160)] = 15995, - [SMALL_STATE(161)] = 16109, - [SMALL_STATE(162)] = 16223, - [SMALL_STATE(163)] = 16337, - [SMALL_STATE(164)] = 16451, - [SMALL_STATE(165)] = 16565, - [SMALL_STATE(166)] = 16679, - [SMALL_STATE(167)] = 16793, - [SMALL_STATE(168)] = 16907, - [SMALL_STATE(169)] = 17021, - [SMALL_STATE(170)] = 17135, - [SMALL_STATE(171)] = 17249, - [SMALL_STATE(172)] = 17363, - [SMALL_STATE(173)] = 17477, - [SMALL_STATE(174)] = 17591, - [SMALL_STATE(175)] = 17705, - [SMALL_STATE(176)] = 17819, - [SMALL_STATE(177)] = 17933, - [SMALL_STATE(178)] = 18047, - [SMALL_STATE(179)] = 18161, - [SMALL_STATE(180)] = 18275, - [SMALL_STATE(181)] = 18389, - [SMALL_STATE(182)] = 18503, - [SMALL_STATE(183)] = 18617, - [SMALL_STATE(184)] = 18731, - [SMALL_STATE(185)] = 18845, - [SMALL_STATE(186)] = 18959, - [SMALL_STATE(187)] = 19073, - [SMALL_STATE(188)] = 19187, - [SMALL_STATE(189)] = 19301, - [SMALL_STATE(190)] = 19415, - [SMALL_STATE(191)] = 19529, - [SMALL_STATE(192)] = 19643, - [SMALL_STATE(193)] = 19757, - [SMALL_STATE(194)] = 19871, - [SMALL_STATE(195)] = 19985, - [SMALL_STATE(196)] = 20099, - [SMALL_STATE(197)] = 20213, - [SMALL_STATE(198)] = 20327, - [SMALL_STATE(199)] = 20441, - [SMALL_STATE(200)] = 20555, - [SMALL_STATE(201)] = 20669, - [SMALL_STATE(202)] = 20783, - [SMALL_STATE(203)] = 20897, - [SMALL_STATE(204)] = 21011, - [SMALL_STATE(205)] = 21125, - [SMALL_STATE(206)] = 21239, - [SMALL_STATE(207)] = 21353, - [SMALL_STATE(208)] = 21467, - [SMALL_STATE(209)] = 21581, - [SMALL_STATE(210)] = 21695, - [SMALL_STATE(211)] = 21809, - [SMALL_STATE(212)] = 21923, - [SMALL_STATE(213)] = 22037, - [SMALL_STATE(214)] = 22151, - [SMALL_STATE(215)] = 22265, - [SMALL_STATE(216)] = 22379, - [SMALL_STATE(217)] = 22493, - [SMALL_STATE(218)] = 22607, - [SMALL_STATE(219)] = 22721, - [SMALL_STATE(220)] = 22835, - [SMALL_STATE(221)] = 22949, - [SMALL_STATE(222)] = 23063, - [SMALL_STATE(223)] = 23177, - [SMALL_STATE(224)] = 23233, - [SMALL_STATE(225)] = 23289, - [SMALL_STATE(226)] = 23337, - [SMALL_STATE(227)] = 23385, - [SMALL_STATE(228)] = 23441, - [SMALL_STATE(229)] = 23490, - [SMALL_STATE(230)] = 23539, - [SMALL_STATE(231)] = 23589, - [SMALL_STATE(232)] = 23633, - [SMALL_STATE(233)] = 23688, - [SMALL_STATE(234)] = 23731, - [SMALL_STATE(235)] = 23800, - [SMALL_STATE(236)] = 23849, - [SMALL_STATE(237)] = 23892, - [SMALL_STATE(238)] = 23961, - [SMALL_STATE(239)] = 24030, - [SMALL_STATE(240)] = 24073, - [SMALL_STATE(241)] = 24116, - [SMALL_STATE(242)] = 24185, - [SMALL_STATE(243)] = 24228, - [SMALL_STATE(244)] = 24271, - [SMALL_STATE(245)] = 24314, - [SMALL_STATE(246)] = 24357, - [SMALL_STATE(247)] = 24400, - [SMALL_STATE(248)] = 24453, - [SMALL_STATE(249)] = 24496, - [SMALL_STATE(250)] = 24539, - [SMALL_STATE(251)] = 24582, - [SMALL_STATE(252)] = 24625, - [SMALL_STATE(253)] = 24676, - [SMALL_STATE(254)] = 24733, - [SMALL_STATE(255)] = 24796, - [SMALL_STATE(256)] = 24857, - [SMALL_STATE(257)] = 24900, - [SMALL_STATE(258)] = 24949, - [SMALL_STATE(259)] = 24992, - [SMALL_STATE(260)] = 25035, - [SMALL_STATE(261)] = 25078, - [SMALL_STATE(262)] = 25147, - [SMALL_STATE(263)] = 25190, - [SMALL_STATE(264)] = 25233, - [SMALL_STATE(265)] = 25302, - [SMALL_STATE(266)] = 25345, - [SMALL_STATE(267)] = 25388, - [SMALL_STATE(268)] = 25431, - [SMALL_STATE(269)] = 25474, - [SMALL_STATE(270)] = 25517, - [SMALL_STATE(271)] = 25560, - [SMALL_STATE(272)] = 25627, - [SMALL_STATE(273)] = 25670, - [SMALL_STATE(274)] = 25713, - [SMALL_STATE(275)] = 25756, - [SMALL_STATE(276)] = 25825, - [SMALL_STATE(277)] = 25868, - [SMALL_STATE(278)] = 25937, - [SMALL_STATE(279)] = 25980, - [SMALL_STATE(280)] = 26023, - [SMALL_STATE(281)] = 26090, - [SMALL_STATE(282)] = 26159, - [SMALL_STATE(283)] = 26228, - [SMALL_STATE(284)] = 26297, - [SMALL_STATE(285)] = 26340, - [SMALL_STATE(286)] = 26383, - [SMALL_STATE(287)] = 26452, - [SMALL_STATE(288)] = 26495, - [SMALL_STATE(289)] = 26564, - [SMALL_STATE(290)] = 26607, - [SMALL_STATE(291)] = 26653, - [SMALL_STATE(292)] = 26699, - [SMALL_STATE(293)] = 26740, - [SMALL_STATE(294)] = 26787, - [SMALL_STATE(295)] = 26851, - [SMALL_STATE(296)] = 26897, - [SMALL_STATE(297)] = 26937, - [SMALL_STATE(298)] = 27001, - [SMALL_STATE(299)] = 27065, - [SMALL_STATE(300)] = 27129, - [SMALL_STATE(301)] = 27193, - [SMALL_STATE(302)] = 27257, - [SMALL_STATE(303)] = 27297, - [SMALL_STATE(304)] = 27337, - [SMALL_STATE(305)] = 27377, - [SMALL_STATE(306)] = 27417, - [SMALL_STATE(307)] = 27481, - [SMALL_STATE(308)] = 27521, - [SMALL_STATE(309)] = 27561, - [SMALL_STATE(310)] = 27609, - [SMALL_STATE(311)] = 27663, - [SMALL_STATE(312)] = 27721, - [SMALL_STATE(313)] = 27777, - [SMALL_STATE(314)] = 27829, - [SMALL_STATE(315)] = 27875, - [SMALL_STATE(316)] = 27915, - [SMALL_STATE(317)] = 27979, - [SMALL_STATE(318)] = 28019, - [SMALL_STATE(319)] = 28059, - [SMALL_STATE(320)] = 28123, - [SMALL_STATE(321)] = 28187, - [SMALL_STATE(322)] = 28227, - [SMALL_STATE(323)] = 28267, - [SMALL_STATE(324)] = 28307, - [SMALL_STATE(325)] = 28347, - [SMALL_STATE(326)] = 28387, - [SMALL_STATE(327)] = 28427, - [SMALL_STATE(328)] = 28489, - [SMALL_STATE(329)] = 28553, - [SMALL_STATE(330)] = 28593, - [SMALL_STATE(331)] = 28633, - [SMALL_STATE(332)] = 28697, - [SMALL_STATE(333)] = 28737, - [SMALL_STATE(334)] = 28801, - [SMALL_STATE(335)] = 28865, - [SMALL_STATE(336)] = 28929, - [SMALL_STATE(337)] = 28969, - [SMALL_STATE(338)] = 29009, - [SMALL_STATE(339)] = 29071, - [SMALL_STATE(340)] = 29135, - [SMALL_STATE(341)] = 29199, - [SMALL_STATE(342)] = 29263, - [SMALL_STATE(343)] = 29303, - [SMALL_STATE(344)] = 29343, - [SMALL_STATE(345)] = 29407, - [SMALL_STATE(346)] = 29447, - [SMALL_STATE(347)] = 29511, - [SMALL_STATE(348)] = 29551, - [SMALL_STATE(349)] = 29591, - [SMALL_STATE(350)] = 29655, - [SMALL_STATE(351)] = 29719, - [SMALL_STATE(352)] = 29759, - [SMALL_STATE(353)] = 29823, - [SMALL_STATE(354)] = 29863, - [SMALL_STATE(355)] = 29903, - [SMALL_STATE(356)] = 29943, - [SMALL_STATE(357)] = 30007, - [SMALL_STATE(358)] = 30071, - [SMALL_STATE(359)] = 30135, - [SMALL_STATE(360)] = 30199, - [SMALL_STATE(361)] = 30263, - [SMALL_STATE(362)] = 30327, - [SMALL_STATE(363)] = 30391, - [SMALL_STATE(364)] = 30455, - [SMALL_STATE(365)] = 30519, - [SMALL_STATE(366)] = 30583, - [SMALL_STATE(367)] = 30647, - [SMALL_STATE(368)] = 30711, - [SMALL_STATE(369)] = 30775, - [SMALL_STATE(370)] = 30839, - [SMALL_STATE(371)] = 30903, - [SMALL_STATE(372)] = 30967, - [SMALL_STATE(373)] = 31031, - [SMALL_STATE(374)] = 31095, - [SMALL_STATE(375)] = 31159, - [SMALL_STATE(376)] = 31223, - [SMALL_STATE(377)] = 31287, - [SMALL_STATE(378)] = 31351, - [SMALL_STATE(379)] = 31415, - [SMALL_STATE(380)] = 31455, - [SMALL_STATE(381)] = 31495, - [SMALL_STATE(382)] = 31535, - [SMALL_STATE(383)] = 31599, - [SMALL_STATE(384)] = 31663, - [SMALL_STATE(385)] = 31727, - [SMALL_STATE(386)] = 31767, - [SMALL_STATE(387)] = 31807, - [SMALL_STATE(388)] = 31871, - [SMALL_STATE(389)] = 31935, - [SMALL_STATE(390)] = 31976, - [SMALL_STATE(391)] = 32016, - [SMALL_STATE(392)] = 32052, - [SMALL_STATE(393)] = 32114, - [SMALL_STATE(394)] = 32176, - [SMALL_STATE(395)] = 32238, - [SMALL_STATE(396)] = 32300, - [SMALL_STATE(397)] = 32362, - [SMALL_STATE(398)] = 32424, - [SMALL_STATE(399)] = 32486, - [SMALL_STATE(400)] = 32548, - [SMALL_STATE(401)] = 32610, - [SMALL_STATE(402)] = 32672, - [SMALL_STATE(403)] = 32734, - [SMALL_STATE(404)] = 32796, - [SMALL_STATE(405)] = 32858, - [SMALL_STATE(406)] = 32920, - [SMALL_STATE(407)] = 32982, - [SMALL_STATE(408)] = 33044, - [SMALL_STATE(409)] = 33106, - [SMALL_STATE(410)] = 33168, - [SMALL_STATE(411)] = 33230, - [SMALL_STATE(412)] = 33292, - [SMALL_STATE(413)] = 33354, - [SMALL_STATE(414)] = 33416, - [SMALL_STATE(415)] = 33478, - [SMALL_STATE(416)] = 33540, - [SMALL_STATE(417)] = 33602, - [SMALL_STATE(418)] = 33664, - [SMALL_STATE(419)] = 33726, - [SMALL_STATE(420)] = 33774, - [SMALL_STATE(421)] = 33836, - [SMALL_STATE(422)] = 33898, - [SMALL_STATE(423)] = 33960, - [SMALL_STATE(424)] = 34022, - [SMALL_STATE(425)] = 34084, - [SMALL_STATE(426)] = 34146, - [SMALL_STATE(427)] = 34189, - [SMALL_STATE(428)] = 34238, - [SMALL_STATE(429)] = 34279, - [SMALL_STATE(430)] = 34324, - [SMALL_STATE(431)] = 34369, - [SMALL_STATE(432)] = 34405, - [SMALL_STATE(433)] = 34441, - [SMALL_STATE(434)] = 34478, - [SMALL_STATE(435)] = 34509, - [SMALL_STATE(436)] = 34564, - [SMALL_STATE(437)] = 34619, - [SMALL_STATE(438)] = 34674, - [SMALL_STATE(439)] = 34709, - [SMALL_STATE(440)] = 34747, - [SMALL_STATE(441)] = 34801, - [SMALL_STATE(442)] = 34831, - [SMALL_STATE(443)] = 34861, - [SMALL_STATE(444)] = 34905, - [SMALL_STATE(445)] = 34953, - [SMALL_STATE(446)] = 34999, - [SMALL_STATE(447)] = 35041, - [SMALL_STATE(448)] = 35077, - [SMALL_STATE(449)] = 35107, - [SMALL_STATE(450)] = 35137, - [SMALL_STATE(451)] = 35191, - [SMALL_STATE(452)] = 35245, - [SMALL_STATE(453)] = 35275, - [SMALL_STATE(454)] = 35305, - [SMALL_STATE(455)] = 35357, - [SMALL_STATE(456)] = 35387, - [SMALL_STATE(457)] = 35417, - [SMALL_STATE(458)] = 35475, - [SMALL_STATE(459)] = 35505, - [SMALL_STATE(460)] = 35559, - [SMALL_STATE(461)] = 35589, - [SMALL_STATE(462)] = 35641, - [SMALL_STATE(463)] = 35671, - [SMALL_STATE(464)] = 35701, - [SMALL_STATE(465)] = 35731, - [SMALL_STATE(466)] = 35761, - [SMALL_STATE(467)] = 35815, - [SMALL_STATE(468)] = 35845, - [SMALL_STATE(469)] = 35875, - [SMALL_STATE(470)] = 35933, - [SMALL_STATE(471)] = 35985, - [SMALL_STATE(472)] = 36021, - [SMALL_STATE(473)] = 36051, - [SMALL_STATE(474)] = 36081, - [SMALL_STATE(475)] = 36111, - [SMALL_STATE(476)] = 36169, - [SMALL_STATE(477)] = 36223, - [SMALL_STATE(478)] = 36253, - [SMALL_STATE(479)] = 36283, - [SMALL_STATE(480)] = 36313, - [SMALL_STATE(481)] = 36343, - [SMALL_STATE(482)] = 36395, - [SMALL_STATE(483)] = 36425, - [SMALL_STATE(484)] = 36479, - [SMALL_STATE(485)] = 36509, - [SMALL_STATE(486)] = 36539, - [SMALL_STATE(487)] = 36591, - [SMALL_STATE(488)] = 36645, - [SMALL_STATE(489)] = 36675, - [SMALL_STATE(490)] = 36705, - [SMALL_STATE(491)] = 36759, - [SMALL_STATE(492)] = 36813, - [SMALL_STATE(493)] = 36867, - [SMALL_STATE(494)] = 36897, - [SMALL_STATE(495)] = 36927, - [SMALL_STATE(496)] = 36981, - [SMALL_STATE(497)] = 37035, - [SMALL_STATE(498)] = 37087, - [SMALL_STATE(499)] = 37117, - [SMALL_STATE(500)] = 37171, - [SMALL_STATE(501)] = 37201, - [SMALL_STATE(502)] = 37231, - [SMALL_STATE(503)] = 37289, - [SMALL_STATE(504)] = 37347, - [SMALL_STATE(505)] = 37399, - [SMALL_STATE(506)] = 37451, - [SMALL_STATE(507)] = 37481, - [SMALL_STATE(508)] = 37535, - [SMALL_STATE(509)] = 37593, - [SMALL_STATE(510)] = 37651, - [SMALL_STATE(511)] = 37703, - [SMALL_STATE(512)] = 37755, - [SMALL_STATE(513)] = 37785, - [SMALL_STATE(514)] = 37839, - [SMALL_STATE(515)] = 37870, - [SMALL_STATE(516)] = 37899, - [SMALL_STATE(517)] = 37952, - [SMALL_STATE(518)] = 38005, - [SMALL_STATE(519)] = 38044, - [SMALL_STATE(520)] = 38097, - [SMALL_STATE(521)] = 38150, - [SMALL_STATE(522)] = 38203, - [SMALL_STATE(523)] = 38258, - [SMALL_STATE(524)] = 38313, - [SMALL_STATE(525)] = 38362, - [SMALL_STATE(526)] = 38415, - [SMALL_STATE(527)] = 38464, - [SMALL_STATE(528)] = 38519, - [SMALL_STATE(529)] = 38574, - [SMALL_STATE(530)] = 38627, - [SMALL_STATE(531)] = 38682, - [SMALL_STATE(532)] = 38711, - [SMALL_STATE(533)] = 38740, - [SMALL_STATE(534)] = 38769, - [SMALL_STATE(535)] = 38824, - [SMALL_STATE(536)] = 38879, - [SMALL_STATE(537)] = 38928, - [SMALL_STATE(538)] = 38957, - [SMALL_STATE(539)] = 39009, - [SMALL_STATE(540)] = 39061, - [SMALL_STATE(541)] = 39113, - [SMALL_STATE(542)] = 39165, - [SMALL_STATE(543)] = 39217, - [SMALL_STATE(544)] = 39269, - [SMALL_STATE(545)] = 39321, - [SMALL_STATE(546)] = 39373, - [SMALL_STATE(547)] = 39421, - [SMALL_STATE(548)] = 39473, - [SMALL_STATE(549)] = 39525, - [SMALL_STATE(550)] = 39577, - [SMALL_STATE(551)] = 39629, - [SMALL_STATE(552)] = 39681, - [SMALL_STATE(553)] = 39733, - [SMALL_STATE(554)] = 39785, - [SMALL_STATE(555)] = 39837, - [SMALL_STATE(556)] = 39889, - [SMALL_STATE(557)] = 39941, - [SMALL_STATE(558)] = 39993, - [SMALL_STATE(559)] = 40045, - [SMALL_STATE(560)] = 40097, - [SMALL_STATE(561)] = 40145, - [SMALL_STATE(562)] = 40177, - [SMALL_STATE(563)] = 40229, - [SMALL_STATE(564)] = 40281, - [SMALL_STATE(565)] = 40333, - [SMALL_STATE(566)] = 40385, - [SMALL_STATE(567)] = 40437, - [SMALL_STATE(568)] = 40485, - [SMALL_STATE(569)] = 40537, - [SMALL_STATE(570)] = 40589, - [SMALL_STATE(571)] = 40641, - [SMALL_STATE(572)] = 40693, - [SMALL_STATE(573)] = 40745, - [SMALL_STATE(574)] = 40797, - [SMALL_STATE(575)] = 40849, - [SMALL_STATE(576)] = 40901, - [SMALL_STATE(577)] = 40953, - [SMALL_STATE(578)] = 41005, - [SMALL_STATE(579)] = 41057, - [SMALL_STATE(580)] = 41109, - [SMALL_STATE(581)] = 41161, - [SMALL_STATE(582)] = 41213, - [SMALL_STATE(583)] = 41265, - [SMALL_STATE(584)] = 41317, - [SMALL_STATE(585)] = 41369, - [SMALL_STATE(586)] = 41421, - [SMALL_STATE(587)] = 41473, - [SMALL_STATE(588)] = 41525, - [SMALL_STATE(589)] = 41577, - [SMALL_STATE(590)] = 41629, - [SMALL_STATE(591)] = 41681, - [SMALL_STATE(592)] = 41733, - [SMALL_STATE(593)] = 41785, - [SMALL_STATE(594)] = 41837, - [SMALL_STATE(595)] = 41889, - [SMALL_STATE(596)] = 41941, - [SMALL_STATE(597)] = 41993, - [SMALL_STATE(598)] = 42045, - [SMALL_STATE(599)] = 42097, - [SMALL_STATE(600)] = 42149, - [SMALL_STATE(601)] = 42201, - [SMALL_STATE(602)] = 42253, - [SMALL_STATE(603)] = 42305, - [SMALL_STATE(604)] = 42357, - [SMALL_STATE(605)] = 42409, - [SMALL_STATE(606)] = 42461, - [SMALL_STATE(607)] = 42513, - [SMALL_STATE(608)] = 42565, - [SMALL_STATE(609)] = 42617, - [SMALL_STATE(610)] = 42669, - [SMALL_STATE(611)] = 42721, - [SMALL_STATE(612)] = 42773, - [SMALL_STATE(613)] = 42825, - [SMALL_STATE(614)] = 42877, - [SMALL_STATE(615)] = 42929, - [SMALL_STATE(616)] = 42956, - [SMALL_STATE(617)] = 43001, - [SMALL_STATE(618)] = 43034, - [SMALL_STATE(619)] = 43067, - [SMALL_STATE(620)] = 43112, - [SMALL_STATE(621)] = 43161, - [SMALL_STATE(622)] = 43210, - [SMALL_STATE(623)] = 43259, - [SMALL_STATE(624)] = 43308, - [SMALL_STATE(625)] = 43357, - [SMALL_STATE(626)] = 43402, - [SMALL_STATE(627)] = 43451, - [SMALL_STATE(628)] = 43500, - [SMALL_STATE(629)] = 43530, - [SMALL_STATE(630)] = 43578, - [SMALL_STATE(631)] = 43626, - [SMALL_STATE(632)] = 43674, - [SMALL_STATE(633)] = 43722, - [SMALL_STATE(634)] = 43770, - [SMALL_STATE(635)] = 43818, - [SMALL_STATE(636)] = 43866, - [SMALL_STATE(637)] = 43914, - [SMALL_STATE(638)] = 43962, - [SMALL_STATE(639)] = 43989, - [SMALL_STATE(640)] = 44015, - [SMALL_STATE(641)] = 44041, - [SMALL_STATE(642)] = 44067, - [SMALL_STATE(643)] = 44088, - [SMALL_STATE(644)] = 44113, - [SMALL_STATE(645)] = 44134, - [SMALL_STATE(646)] = 44159, - [SMALL_STATE(647)] = 44180, - [SMALL_STATE(648)] = 44205, - [SMALL_STATE(649)] = 44230, - [SMALL_STATE(650)] = 44261, - [SMALL_STATE(651)] = 44281, - [SMALL_STATE(652)] = 44301, - [SMALL_STATE(653)] = 44335, - [SMALL_STATE(654)] = 44355, - [SMALL_STATE(655)] = 44389, - [SMALL_STATE(656)] = 44409, - [SMALL_STATE(657)] = 44431, - [SMALL_STATE(658)] = 44453, - [SMALL_STATE(659)] = 44473, - [SMALL_STATE(660)] = 44495, - [SMALL_STATE(661)] = 44515, - [SMALL_STATE(662)] = 44549, - [SMALL_STATE(663)] = 44569, - [SMALL_STATE(664)] = 44603, - [SMALL_STATE(665)] = 44625, - [SMALL_STATE(666)] = 44645, - [SMALL_STATE(667)] = 44679, - [SMALL_STATE(668)] = 44713, - [SMALL_STATE(669)] = 44733, - [SMALL_STATE(670)] = 44753, - [SMALL_STATE(671)] = 44773, - [SMALL_STATE(672)] = 44793, - [SMALL_STATE(673)] = 44813, - [SMALL_STATE(674)] = 44847, - [SMALL_STATE(675)] = 44867, - [SMALL_STATE(676)] = 44887, - [SMALL_STATE(677)] = 44907, - [SMALL_STATE(678)] = 44927, - [SMALL_STATE(679)] = 44947, - [SMALL_STATE(680)] = 44981, - [SMALL_STATE(681)] = 45000, - [SMALL_STATE(682)] = 45019, - [SMALL_STATE(683)] = 45038, - [SMALL_STATE(684)] = 45057, - [SMALL_STATE(685)] = 45076, - [SMALL_STATE(686)] = 45095, - [SMALL_STATE(687)] = 45114, - [SMALL_STATE(688)] = 45133, - [SMALL_STATE(689)] = 45152, - [SMALL_STATE(690)] = 45171, - [SMALL_STATE(691)] = 45190, - [SMALL_STATE(692)] = 45209, - [SMALL_STATE(693)] = 45228, - [SMALL_STATE(694)] = 45247, - [SMALL_STATE(695)] = 45266, - [SMALL_STATE(696)] = 45285, - [SMALL_STATE(697)] = 45310, - [SMALL_STATE(698)] = 45329, - [SMALL_STATE(699)] = 45348, - [SMALL_STATE(700)] = 45367, - [SMALL_STATE(701)] = 45386, - [SMALL_STATE(702)] = 45405, - [SMALL_STATE(703)] = 45424, - [SMALL_STATE(704)] = 45443, - [SMALL_STATE(705)] = 45462, - [SMALL_STATE(706)] = 45481, - [SMALL_STATE(707)] = 45500, - [SMALL_STATE(708)] = 45519, - [SMALL_STATE(709)] = 45538, - [SMALL_STATE(710)] = 45557, - [SMALL_STATE(711)] = 45576, - [SMALL_STATE(712)] = 45595, - [SMALL_STATE(713)] = 45614, - [SMALL_STATE(714)] = 45633, - [SMALL_STATE(715)] = 45652, - [SMALL_STATE(716)] = 45671, - [SMALL_STATE(717)] = 45690, - [SMALL_STATE(718)] = 45709, - [SMALL_STATE(719)] = 45728, - [SMALL_STATE(720)] = 45747, - [SMALL_STATE(721)] = 45766, - [SMALL_STATE(722)] = 45785, - [SMALL_STATE(723)] = 45804, - [SMALL_STATE(724)] = 45823, - [SMALL_STATE(725)] = 45842, - [SMALL_STATE(726)] = 45861, - [SMALL_STATE(727)] = 45880, - [SMALL_STATE(728)] = 45899, - [SMALL_STATE(729)] = 45918, - [SMALL_STATE(730)] = 45937, - [SMALL_STATE(731)] = 45956, - [SMALL_STATE(732)] = 45975, - [SMALL_STATE(733)] = 45994, - [SMALL_STATE(734)] = 46021, - [SMALL_STATE(735)] = 46040, - [SMALL_STATE(736)] = 46059, - [SMALL_STATE(737)] = 46078, - [SMALL_STATE(738)] = 46097, - [SMALL_STATE(739)] = 46116, - [SMALL_STATE(740)] = 46135, - [SMALL_STATE(741)] = 46154, - [SMALL_STATE(742)] = 46173, - [SMALL_STATE(743)] = 46192, - [SMALL_STATE(744)] = 46211, - [SMALL_STATE(745)] = 46230, - [SMALL_STATE(746)] = 46249, - [SMALL_STATE(747)] = 46268, - [SMALL_STATE(748)] = 46287, - [SMALL_STATE(749)] = 46306, - [SMALL_STATE(750)] = 46325, - [SMALL_STATE(751)] = 46344, - [SMALL_STATE(752)] = 46378, - [SMALL_STATE(753)] = 46402, - [SMALL_STATE(754)] = 46436, - [SMALL_STATE(755)] = 46470, - [SMALL_STATE(756)] = 46504, - [SMALL_STATE(757)] = 46538, - [SMALL_STATE(758)] = 46572, - [SMALL_STATE(759)] = 46594, - [SMALL_STATE(760)] = 46628, - [SMALL_STATE(761)] = 46662, - [SMALL_STATE(762)] = 46696, - [SMALL_STATE(763)] = 46730, - [SMALL_STATE(764)] = 46764, - [SMALL_STATE(765)] = 46798, - [SMALL_STATE(766)] = 46832, - [SMALL_STATE(767)] = 46866, - [SMALL_STATE(768)] = 46900, - [SMALL_STATE(769)] = 46934, - [SMALL_STATE(770)] = 46968, - [SMALL_STATE(771)] = 47002, - [SMALL_STATE(772)] = 47036, - [SMALL_STATE(773)] = 47060, - [SMALL_STATE(774)] = 47094, - [SMALL_STATE(775)] = 47128, - [SMALL_STATE(776)] = 47162, - [SMALL_STATE(777)] = 47196, - [SMALL_STATE(778)] = 47230, - [SMALL_STATE(779)] = 47264, - [SMALL_STATE(780)] = 47298, - [SMALL_STATE(781)] = 47332, - [SMALL_STATE(782)] = 47356, - [SMALL_STATE(783)] = 47390, - [SMALL_STATE(784)] = 47424, - [SMALL_STATE(785)] = 47458, - [SMALL_STATE(786)] = 47492, - [SMALL_STATE(787)] = 47526, - [SMALL_STATE(788)] = 47548, - [SMALL_STATE(789)] = 47572, - [SMALL_STATE(790)] = 47606, - [SMALL_STATE(791)] = 47625, - [SMALL_STATE(792)] = 47646, - [SMALL_STATE(793)] = 47667, - [SMALL_STATE(794)] = 47686, - [SMALL_STATE(795)] = 47707, - [SMALL_STATE(796)] = 47742, - [SMALL_STATE(797)] = 47761, - [SMALL_STATE(798)] = 47782, - [SMALL_STATE(799)] = 47803, - [SMALL_STATE(800)] = 47832, - [SMALL_STATE(801)] = 47851, - [SMALL_STATE(802)] = 47880, - [SMALL_STATE(803)] = 47909, - [SMALL_STATE(804)] = 47938, - [SMALL_STATE(805)] = 47967, - [SMALL_STATE(806)] = 47988, - [SMALL_STATE(807)] = 48007, - [SMALL_STATE(808)] = 48036, - [SMALL_STATE(809)] = 48057, - [SMALL_STATE(810)] = 48083, - [SMALL_STATE(811)] = 48111, - [SMALL_STATE(812)] = 48137, - [SMALL_STATE(813)] = 48155, - [SMALL_STATE(814)] = 48189, - [SMALL_STATE(815)] = 48207, - [SMALL_STATE(816)] = 48233, - [SMALL_STATE(817)] = 48259, - [SMALL_STATE(818)] = 48285, - [SMALL_STATE(819)] = 48311, - [SMALL_STATE(820)] = 48337, - [SMALL_STATE(821)] = 48369, - [SMALL_STATE(822)] = 48395, - [SMALL_STATE(823)] = 48413, - [SMALL_STATE(824)] = 48436, - [SMALL_STATE(825)] = 48459, - [SMALL_STATE(826)] = 48482, - [SMALL_STATE(827)] = 48497, - [SMALL_STATE(828)] = 48512, - [SMALL_STATE(829)] = 48535, - [SMALL_STATE(830)] = 48558, - [SMALL_STATE(831)] = 48581, - [SMALL_STATE(832)] = 48604, - [SMALL_STATE(833)] = 48619, - [SMALL_STATE(834)] = 48642, - [SMALL_STATE(835)] = 48665, - [SMALL_STATE(836)] = 48680, - [SMALL_STATE(837)] = 48703, - [SMALL_STATE(838)] = 48726, - [SMALL_STATE(839)] = 48749, - [SMALL_STATE(840)] = 48772, - [SMALL_STATE(841)] = 48795, - [SMALL_STATE(842)] = 48818, - [SMALL_STATE(843)] = 48841, - [SMALL_STATE(844)] = 48864, - [SMALL_STATE(845)] = 48887, - [SMALL_STATE(846)] = 48910, - [SMALL_STATE(847)] = 48933, - [SMALL_STATE(848)] = 48952, - [SMALL_STATE(849)] = 48975, - [SMALL_STATE(850)] = 48994, - [SMALL_STATE(851)] = 49017, - [SMALL_STATE(852)] = 49032, - [SMALL_STATE(853)] = 49047, - [SMALL_STATE(854)] = 49062, - [SMALL_STATE(855)] = 49089, - [SMALL_STATE(856)] = 49112, - [SMALL_STATE(857)] = 49127, - [SMALL_STATE(858)] = 49142, - [SMALL_STATE(859)] = 49165, - [SMALL_STATE(860)] = 49180, - [SMALL_STATE(861)] = 49203, - [SMALL_STATE(862)] = 49226, - [SMALL_STATE(863)] = 49249, - [SMALL_STATE(864)] = 49272, - [SMALL_STATE(865)] = 49295, - [SMALL_STATE(866)] = 49318, - [SMALL_STATE(867)] = 49333, - [SMALL_STATE(868)] = 49348, - [SMALL_STATE(869)] = 49371, - [SMALL_STATE(870)] = 49394, - [SMALL_STATE(871)] = 49417, - [SMALL_STATE(872)] = 49440, - [SMALL_STATE(873)] = 49463, - [SMALL_STATE(874)] = 49486, - [SMALL_STATE(875)] = 49509, - [SMALL_STATE(876)] = 49524, - [SMALL_STATE(877)] = 49539, - [SMALL_STATE(878)] = 49562, - [SMALL_STATE(879)] = 49585, - [SMALL_STATE(880)] = 49608, - [SMALL_STATE(881)] = 49631, - [SMALL_STATE(882)] = 49654, - [SMALL_STATE(883)] = 49677, - [SMALL_STATE(884)] = 49700, - [SMALL_STATE(885)] = 49723, - [SMALL_STATE(886)] = 49746, - [SMALL_STATE(887)] = 49769, - [SMALL_STATE(888)] = 49784, - [SMALL_STATE(889)] = 49807, - [SMALL_STATE(890)] = 49822, - [SMALL_STATE(891)] = 49845, - [SMALL_STATE(892)] = 49860, - [SMALL_STATE(893)] = 49883, - [SMALL_STATE(894)] = 49906, - [SMALL_STATE(895)] = 49929, - [SMALL_STATE(896)] = 49952, - [SMALL_STATE(897)] = 49975, - [SMALL_STATE(898)] = 49998, - [SMALL_STATE(899)] = 50021, - [SMALL_STATE(900)] = 50044, - [SMALL_STATE(901)] = 50067, - [SMALL_STATE(902)] = 50090, - [SMALL_STATE(903)] = 50113, - [SMALL_STATE(904)] = 50136, - [SMALL_STATE(905)] = 50159, - [SMALL_STATE(906)] = 50182, - [SMALL_STATE(907)] = 50205, - [SMALL_STATE(908)] = 50228, - [SMALL_STATE(909)] = 50243, - [SMALL_STATE(910)] = 50266, - [SMALL_STATE(911)] = 50289, - [SMALL_STATE(912)] = 50312, - [SMALL_STATE(913)] = 50335, - [SMALL_STATE(914)] = 50358, - [SMALL_STATE(915)] = 50381, - [SMALL_STATE(916)] = 50404, - [SMALL_STATE(917)] = 50427, - [SMALL_STATE(918)] = 50442, - [SMALL_STATE(919)] = 50465, - [SMALL_STATE(920)] = 50488, - [SMALL_STATE(921)] = 50503, - [SMALL_STATE(922)] = 50525, - [SMALL_STATE(923)] = 50539, - [SMALL_STATE(924)] = 50554, - [SMALL_STATE(925)] = 50569, - [SMALL_STATE(926)] = 50584, - [SMALL_STATE(927)] = 50599, - [SMALL_STATE(928)] = 50620, - [SMALL_STATE(929)] = 50635, - [SMALL_STATE(930)] = 50658, - [SMALL_STATE(931)] = 50681, - [SMALL_STATE(932)] = 50696, - [SMALL_STATE(933)] = 50719, - [SMALL_STATE(934)] = 50734, - [SMALL_STATE(935)] = 50755, - [SMALL_STATE(936)] = 50776, - [SMALL_STATE(937)] = 50797, - [SMALL_STATE(938)] = 50820, - [SMALL_STATE(939)] = 50843, - [SMALL_STATE(940)] = 50858, - [SMALL_STATE(941)] = 50873, - [SMALL_STATE(942)] = 50896, - [SMALL_STATE(943)] = 50911, - [SMALL_STATE(944)] = 50926, - [SMALL_STATE(945)] = 50941, - [SMALL_STATE(946)] = 50956, - [SMALL_STATE(947)] = 50971, - [SMALL_STATE(948)] = 50992, - [SMALL_STATE(949)] = 51013, - [SMALL_STATE(950)] = 51034, - [SMALL_STATE(951)] = 51049, - [SMALL_STATE(952)] = 51064, - [SMALL_STATE(953)] = 51085, - [SMALL_STATE(954)] = 51107, - [SMALL_STATE(955)] = 51129, - [SMALL_STATE(956)] = 51149, - [SMALL_STATE(957)] = 51171, - [SMALL_STATE(958)] = 51193, - [SMALL_STATE(959)] = 51215, - [SMALL_STATE(960)] = 51237, - [SMALL_STATE(961)] = 51259, - [SMALL_STATE(962)] = 51281, - [SMALL_STATE(963)] = 51293, - [SMALL_STATE(964)] = 51311, - [SMALL_STATE(965)] = 51333, - [SMALL_STATE(966)] = 51349, - [SMALL_STATE(967)] = 51371, - [SMALL_STATE(968)] = 51385, - [SMALL_STATE(969)] = 51407, - [SMALL_STATE(970)] = 51429, - [SMALL_STATE(971)] = 51451, - [SMALL_STATE(972)] = 51473, - [SMALL_STATE(973)] = 51495, - [SMALL_STATE(974)] = 51517, - [SMALL_STATE(975)] = 51534, - [SMALL_STATE(976)] = 51553, - [SMALL_STATE(977)] = 51572, - [SMALL_STATE(978)] = 51591, - [SMALL_STATE(979)] = 51610, - [SMALL_STATE(980)] = 51627, - [SMALL_STATE(981)] = 51644, - [SMALL_STATE(982)] = 51663, - [SMALL_STATE(983)] = 51678, - [SMALL_STATE(984)] = 51697, - [SMALL_STATE(985)] = 51714, - [SMALL_STATE(986)] = 51731, - [SMALL_STATE(987)] = 51748, - [SMALL_STATE(988)] = 51765, - [SMALL_STATE(989)] = 51782, - [SMALL_STATE(990)] = 51799, - [SMALL_STATE(991)] = 51818, - [SMALL_STATE(992)] = 51837, - [SMALL_STATE(993)] = 51854, - [SMALL_STATE(994)] = 51871, - [SMALL_STATE(995)] = 51888, - [SMALL_STATE(996)] = 51905, - [SMALL_STATE(997)] = 51922, - [SMALL_STATE(998)] = 51941, - [SMALL_STATE(999)] = 51958, - [SMALL_STATE(1000)] = 51975, - [SMALL_STATE(1001)] = 51992, - [SMALL_STATE(1002)] = 52009, - [SMALL_STATE(1003)] = 52026, - [SMALL_STATE(1004)] = 52043, - [SMALL_STATE(1005)] = 52062, - [SMALL_STATE(1006)] = 52079, - [SMALL_STATE(1007)] = 52096, - [SMALL_STATE(1008)] = 52113, - [SMALL_STATE(1009)] = 52130, - [SMALL_STATE(1010)] = 52149, - [SMALL_STATE(1011)] = 52164, - [SMALL_STATE(1012)] = 52181, - [SMALL_STATE(1013)] = 52198, - [SMALL_STATE(1014)] = 52215, - [SMALL_STATE(1015)] = 52232, - [SMALL_STATE(1016)] = 52251, - [SMALL_STATE(1017)] = 52270, - [SMALL_STATE(1018)] = 52287, - [SMALL_STATE(1019)] = 52306, - [SMALL_STATE(1020)] = 52325, - [SMALL_STATE(1021)] = 52342, - [SMALL_STATE(1022)] = 52361, - [SMALL_STATE(1023)] = 52380, - [SMALL_STATE(1024)] = 52397, - [SMALL_STATE(1025)] = 52414, - [SMALL_STATE(1026)] = 52431, - [SMALL_STATE(1027)] = 52448, - [SMALL_STATE(1028)] = 52467, - [SMALL_STATE(1029)] = 52486, - [SMALL_STATE(1030)] = 52503, - [SMALL_STATE(1031)] = 52522, - [SMALL_STATE(1032)] = 52539, - [SMALL_STATE(1033)] = 52556, - [SMALL_STATE(1034)] = 52575, - [SMALL_STATE(1035)] = 52594, - [SMALL_STATE(1036)] = 52611, - [SMALL_STATE(1037)] = 52628, - [SMALL_STATE(1038)] = 52645, - [SMALL_STATE(1039)] = 52662, - [SMALL_STATE(1040)] = 52678, - [SMALL_STATE(1041)] = 52692, - [SMALL_STATE(1042)] = 52706, - [SMALL_STATE(1043)] = 52720, - [SMALL_STATE(1044)] = 52730, - [SMALL_STATE(1045)] = 52744, - [SMALL_STATE(1046)] = 52758, - [SMALL_STATE(1047)] = 52774, - [SMALL_STATE(1048)] = 52784, - [SMALL_STATE(1049)] = 52798, - [SMALL_STATE(1050)] = 52812, - [SMALL_STATE(1051)] = 52826, - [SMALL_STATE(1052)] = 52836, - [SMALL_STATE(1053)] = 52846, - [SMALL_STATE(1054)] = 52860, - [SMALL_STATE(1055)] = 52876, - [SMALL_STATE(1056)] = 52890, - [SMALL_STATE(1057)] = 52906, - [SMALL_STATE(1058)] = 52916, - [SMALL_STATE(1059)] = 52932, - [SMALL_STATE(1060)] = 52942, - [SMALL_STATE(1061)] = 52956, - [SMALL_STATE(1062)] = 52972, - [SMALL_STATE(1063)] = 52986, - [SMALL_STATE(1064)] = 53000, - [SMALL_STATE(1065)] = 53014, - [SMALL_STATE(1066)] = 53030, - [SMALL_STATE(1067)] = 53044, - [SMALL_STATE(1068)] = 53054, - [SMALL_STATE(1069)] = 53068, - [SMALL_STATE(1070)] = 53080, - [SMALL_STATE(1071)] = 53096, - [SMALL_STATE(1072)] = 53106, - [SMALL_STATE(1073)] = 53116, - [SMALL_STATE(1074)] = 53132, - [SMALL_STATE(1075)] = 53146, - [SMALL_STATE(1076)] = 53160, - [SMALL_STATE(1077)] = 53174, - [SMALL_STATE(1078)] = 53190, - [SMALL_STATE(1079)] = 53206, - [SMALL_STATE(1080)] = 53220, - [SMALL_STATE(1081)] = 53234, - [SMALL_STATE(1082)] = 53244, - [SMALL_STATE(1083)] = 53258, - [SMALL_STATE(1084)] = 53268, - [SMALL_STATE(1085)] = 53282, - [SMALL_STATE(1086)] = 53298, - [SMALL_STATE(1087)] = 53312, - [SMALL_STATE(1088)] = 53326, - [SMALL_STATE(1089)] = 53340, - [SMALL_STATE(1090)] = 53354, - [SMALL_STATE(1091)] = 53368, - [SMALL_STATE(1092)] = 53378, - [SMALL_STATE(1093)] = 53392, - [SMALL_STATE(1094)] = 53408, - [SMALL_STATE(1095)] = 53422, - [SMALL_STATE(1096)] = 53436, - [SMALL_STATE(1097)] = 53446, - [SMALL_STATE(1098)] = 53456, - [SMALL_STATE(1099)] = 53466, - [SMALL_STATE(1100)] = 53482, - [SMALL_STATE(1101)] = 53492, - [SMALL_STATE(1102)] = 53506, - [SMALL_STATE(1103)] = 53519, - [SMALL_STATE(1104)] = 53532, - [SMALL_STATE(1105)] = 53545, - [SMALL_STATE(1106)] = 53558, - [SMALL_STATE(1107)] = 53571, - [SMALL_STATE(1108)] = 53582, - [SMALL_STATE(1109)] = 53595, - [SMALL_STATE(1110)] = 53608, - [SMALL_STATE(1111)] = 53621, - [SMALL_STATE(1112)] = 53634, - [SMALL_STATE(1113)] = 53647, - [SMALL_STATE(1114)] = 53660, - [SMALL_STATE(1115)] = 53673, - [SMALL_STATE(1116)] = 53686, - [SMALL_STATE(1117)] = 53699, - [SMALL_STATE(1118)] = 53712, - [SMALL_STATE(1119)] = 53725, - [SMALL_STATE(1120)] = 53738, - [SMALL_STATE(1121)] = 53751, - [SMALL_STATE(1122)] = 53764, - [SMALL_STATE(1123)] = 53777, - [SMALL_STATE(1124)] = 53790, - [SMALL_STATE(1125)] = 53803, - [SMALL_STATE(1126)] = 53816, - [SMALL_STATE(1127)] = 53825, - [SMALL_STATE(1128)] = 53838, - [SMALL_STATE(1129)] = 53851, - [SMALL_STATE(1130)] = 53864, - [SMALL_STATE(1131)] = 53877, - [SMALL_STATE(1132)] = 53890, - [SMALL_STATE(1133)] = 53903, - [SMALL_STATE(1134)] = 53916, - [SMALL_STATE(1135)] = 53927, - [SMALL_STATE(1136)] = 53940, - [SMALL_STATE(1137)] = 53953, - [SMALL_STATE(1138)] = 53966, - [SMALL_STATE(1139)] = 53979, - [SMALL_STATE(1140)] = 53992, - [SMALL_STATE(1141)] = 54005, - [SMALL_STATE(1142)] = 54018, - [SMALL_STATE(1143)] = 54031, - [SMALL_STATE(1144)] = 54044, - [SMALL_STATE(1145)] = 54053, - [SMALL_STATE(1146)] = 54066, - [SMALL_STATE(1147)] = 54079, - [SMALL_STATE(1148)] = 54092, - [SMALL_STATE(1149)] = 54105, - [SMALL_STATE(1150)] = 54118, - [SMALL_STATE(1151)] = 54131, - [SMALL_STATE(1152)] = 54144, - [SMALL_STATE(1153)] = 54157, - [SMALL_STATE(1154)] = 54170, - [SMALL_STATE(1155)] = 54183, - [SMALL_STATE(1156)] = 54192, - [SMALL_STATE(1157)] = 54205, - [SMALL_STATE(1158)] = 54218, - [SMALL_STATE(1159)] = 54227, - [SMALL_STATE(1160)] = 54236, - [SMALL_STATE(1161)] = 54249, - [SMALL_STATE(1162)] = 54262, - [SMALL_STATE(1163)] = 54275, - [SMALL_STATE(1164)] = 54288, - [SMALL_STATE(1165)] = 54299, - [SMALL_STATE(1166)] = 54312, - [SMALL_STATE(1167)] = 54325, - [SMALL_STATE(1168)] = 54338, - [SMALL_STATE(1169)] = 54351, - [SMALL_STATE(1170)] = 54364, - [SMALL_STATE(1171)] = 54377, - [SMALL_STATE(1172)] = 54390, - [SMALL_STATE(1173)] = 54403, - [SMALL_STATE(1174)] = 54416, - [SMALL_STATE(1175)] = 54427, - [SMALL_STATE(1176)] = 54440, - [SMALL_STATE(1177)] = 54449, - [SMALL_STATE(1178)] = 54462, - [SMALL_STATE(1179)] = 54475, - [SMALL_STATE(1180)] = 54488, - [SMALL_STATE(1181)] = 54501, - [SMALL_STATE(1182)] = 54514, - [SMALL_STATE(1183)] = 54527, - [SMALL_STATE(1184)] = 54540, - [SMALL_STATE(1185)] = 54553, - [SMALL_STATE(1186)] = 54566, - [SMALL_STATE(1187)] = 54579, - [SMALL_STATE(1188)] = 54592, - [SMALL_STATE(1189)] = 54605, - [SMALL_STATE(1190)] = 54618, - [SMALL_STATE(1191)] = 54631, - [SMALL_STATE(1192)] = 54644, - [SMALL_STATE(1193)] = 54657, - [SMALL_STATE(1194)] = 54670, - [SMALL_STATE(1195)] = 54683, - [SMALL_STATE(1196)] = 54696, - [SMALL_STATE(1197)] = 54707, - [SMALL_STATE(1198)] = 54720, - [SMALL_STATE(1199)] = 54733, - [SMALL_STATE(1200)] = 54746, - [SMALL_STATE(1201)] = 54759, - [SMALL_STATE(1202)] = 54772, - [SMALL_STATE(1203)] = 54785, - [SMALL_STATE(1204)] = 54798, - [SMALL_STATE(1205)] = 54811, - [SMALL_STATE(1206)] = 54822, - [SMALL_STATE(1207)] = 54833, - [SMALL_STATE(1208)] = 54846, - [SMALL_STATE(1209)] = 54859, - [SMALL_STATE(1210)] = 54872, - [SMALL_STATE(1211)] = 54885, - [SMALL_STATE(1212)] = 54896, - [SMALL_STATE(1213)] = 54909, - [SMALL_STATE(1214)] = 54922, - [SMALL_STATE(1215)] = 54935, - [SMALL_STATE(1216)] = 54948, - [SMALL_STATE(1217)] = 54959, - [SMALL_STATE(1218)] = 54972, - [SMALL_STATE(1219)] = 54985, - [SMALL_STATE(1220)] = 54998, - [SMALL_STATE(1221)] = 55011, - [SMALL_STATE(1222)] = 55022, - [SMALL_STATE(1223)] = 55035, - [SMALL_STATE(1224)] = 55048, - [SMALL_STATE(1225)] = 55061, - [SMALL_STATE(1226)] = 55074, - [SMALL_STATE(1227)] = 55085, - [SMALL_STATE(1228)] = 55098, - [SMALL_STATE(1229)] = 55109, - [SMALL_STATE(1230)] = 55122, - [SMALL_STATE(1231)] = 55135, - [SMALL_STATE(1232)] = 55146, - [SMALL_STATE(1233)] = 55159, - [SMALL_STATE(1234)] = 55172, - [SMALL_STATE(1235)] = 55183, - [SMALL_STATE(1236)] = 55196, - [SMALL_STATE(1237)] = 55209, - [SMALL_STATE(1238)] = 55218, - [SMALL_STATE(1239)] = 55227, - [SMALL_STATE(1240)] = 55240, - [SMALL_STATE(1241)] = 55253, - [SMALL_STATE(1242)] = 55266, - [SMALL_STATE(1243)] = 55279, - [SMALL_STATE(1244)] = 55292, - [SMALL_STATE(1245)] = 55305, - [SMALL_STATE(1246)] = 55318, - [SMALL_STATE(1247)] = 55326, - [SMALL_STATE(1248)] = 55336, - [SMALL_STATE(1249)] = 55346, - [SMALL_STATE(1250)] = 55356, - [SMALL_STATE(1251)] = 55364, - [SMALL_STATE(1252)] = 55372, - [SMALL_STATE(1253)] = 55380, - [SMALL_STATE(1254)] = 55388, - [SMALL_STATE(1255)] = 55398, - [SMALL_STATE(1256)] = 55406, - [SMALL_STATE(1257)] = 55416, - [SMALL_STATE(1258)] = 55426, - [SMALL_STATE(1259)] = 55436, - [SMALL_STATE(1260)] = 55444, - [SMALL_STATE(1261)] = 55454, - [SMALL_STATE(1262)] = 55462, - [SMALL_STATE(1263)] = 55472, - [SMALL_STATE(1264)] = 55480, - [SMALL_STATE(1265)] = 55490, - [SMALL_STATE(1266)] = 55500, - [SMALL_STATE(1267)] = 55510, - [SMALL_STATE(1268)] = 55520, - [SMALL_STATE(1269)] = 55530, - [SMALL_STATE(1270)] = 55540, - [SMALL_STATE(1271)] = 55550, - [SMALL_STATE(1272)] = 55560, - [SMALL_STATE(1273)] = 55570, - [SMALL_STATE(1274)] = 55580, - [SMALL_STATE(1275)] = 55590, - [SMALL_STATE(1276)] = 55598, - [SMALL_STATE(1277)] = 55608, - [SMALL_STATE(1278)] = 55618, - [SMALL_STATE(1279)] = 55628, - [SMALL_STATE(1280)] = 55636, - [SMALL_STATE(1281)] = 55646, - [SMALL_STATE(1282)] = 55656, - [SMALL_STATE(1283)] = 55666, - [SMALL_STATE(1284)] = 55676, - [SMALL_STATE(1285)] = 55686, - [SMALL_STATE(1286)] = 55696, - [SMALL_STATE(1287)] = 55706, - [SMALL_STATE(1288)] = 55714, - [SMALL_STATE(1289)] = 55722, - [SMALL_STATE(1290)] = 55732, - [SMALL_STATE(1291)] = 55742, - [SMALL_STATE(1292)] = 55752, - [SMALL_STATE(1293)] = 55762, - [SMALL_STATE(1294)] = 55772, - [SMALL_STATE(1295)] = 55780, - [SMALL_STATE(1296)] = 55788, - [SMALL_STATE(1297)] = 55796, - [SMALL_STATE(1298)] = 55806, - [SMALL_STATE(1299)] = 55816, - [SMALL_STATE(1300)] = 55826, - [SMALL_STATE(1301)] = 55834, - [SMALL_STATE(1302)] = 55842, - [SMALL_STATE(1303)] = 55850, - [SMALL_STATE(1304)] = 55860, - [SMALL_STATE(1305)] = 55870, - [SMALL_STATE(1306)] = 55880, - [SMALL_STATE(1307)] = 55890, - [SMALL_STATE(1308)] = 55900, - [SMALL_STATE(1309)] = 55908, - [SMALL_STATE(1310)] = 55916, - [SMALL_STATE(1311)] = 55926, - [SMALL_STATE(1312)] = 55936, - [SMALL_STATE(1313)] = 55944, - [SMALL_STATE(1314)] = 55952, - [SMALL_STATE(1315)] = 55962, - [SMALL_STATE(1316)] = 55972, - [SMALL_STATE(1317)] = 55982, - [SMALL_STATE(1318)] = 55992, - [SMALL_STATE(1319)] = 56002, - [SMALL_STATE(1320)] = 56012, - [SMALL_STATE(1321)] = 56020, - [SMALL_STATE(1322)] = 56030, - [SMALL_STATE(1323)] = 56040, - [SMALL_STATE(1324)] = 56048, - [SMALL_STATE(1325)] = 56058, - [SMALL_STATE(1326)] = 56068, - [SMALL_STATE(1327)] = 56078, - [SMALL_STATE(1328)] = 56088, - [SMALL_STATE(1329)] = 56096, - [SMALL_STATE(1330)] = 56106, - [SMALL_STATE(1331)] = 56116, - [SMALL_STATE(1332)] = 56126, - [SMALL_STATE(1333)] = 56136, - [SMALL_STATE(1334)] = 56144, - [SMALL_STATE(1335)] = 56154, - [SMALL_STATE(1336)] = 56162, - [SMALL_STATE(1337)] = 56172, - [SMALL_STATE(1338)] = 56182, - [SMALL_STATE(1339)] = 56192, - [SMALL_STATE(1340)] = 56202, - [SMALL_STATE(1341)] = 56212, - [SMALL_STATE(1342)] = 56222, - [SMALL_STATE(1343)] = 56232, - [SMALL_STATE(1344)] = 56240, - [SMALL_STATE(1345)] = 56247, - [SMALL_STATE(1346)] = 56254, - [SMALL_STATE(1347)] = 56261, - [SMALL_STATE(1348)] = 56268, - [SMALL_STATE(1349)] = 56275, - [SMALL_STATE(1350)] = 56282, - [SMALL_STATE(1351)] = 56289, - [SMALL_STATE(1352)] = 56296, - [SMALL_STATE(1353)] = 56303, - [SMALL_STATE(1354)] = 56310, - [SMALL_STATE(1355)] = 56317, - [SMALL_STATE(1356)] = 56324, - [SMALL_STATE(1357)] = 56331, - [SMALL_STATE(1358)] = 56338, - [SMALL_STATE(1359)] = 56345, - [SMALL_STATE(1360)] = 56352, - [SMALL_STATE(1361)] = 56359, - [SMALL_STATE(1362)] = 56366, - [SMALL_STATE(1363)] = 56373, - [SMALL_STATE(1364)] = 56380, - [SMALL_STATE(1365)] = 56387, - [SMALL_STATE(1366)] = 56394, - [SMALL_STATE(1367)] = 56401, - [SMALL_STATE(1368)] = 56408, - [SMALL_STATE(1369)] = 56415, - [SMALL_STATE(1370)] = 56422, - [SMALL_STATE(1371)] = 56429, - [SMALL_STATE(1372)] = 56436, - [SMALL_STATE(1373)] = 56443, - [SMALL_STATE(1374)] = 56450, - [SMALL_STATE(1375)] = 56457, - [SMALL_STATE(1376)] = 56464, - [SMALL_STATE(1377)] = 56471, - [SMALL_STATE(1378)] = 56478, - [SMALL_STATE(1379)] = 56485, - [SMALL_STATE(1380)] = 56492, - [SMALL_STATE(1381)] = 56499, - [SMALL_STATE(1382)] = 56506, - [SMALL_STATE(1383)] = 56513, - [SMALL_STATE(1384)] = 56520, - [SMALL_STATE(1385)] = 56527, - [SMALL_STATE(1386)] = 56534, - [SMALL_STATE(1387)] = 56541, - [SMALL_STATE(1388)] = 56548, - [SMALL_STATE(1389)] = 56555, - [SMALL_STATE(1390)] = 56562, - [SMALL_STATE(1391)] = 56569, - [SMALL_STATE(1392)] = 56576, - [SMALL_STATE(1393)] = 56583, - [SMALL_STATE(1394)] = 56590, - [SMALL_STATE(1395)] = 56597, - [SMALL_STATE(1396)] = 56604, - [SMALL_STATE(1397)] = 56611, - [SMALL_STATE(1398)] = 56618, - [SMALL_STATE(1399)] = 56625, - [SMALL_STATE(1400)] = 56632, - [SMALL_STATE(1401)] = 56639, - [SMALL_STATE(1402)] = 56646, - [SMALL_STATE(1403)] = 56653, - [SMALL_STATE(1404)] = 56660, - [SMALL_STATE(1405)] = 56667, - [SMALL_STATE(1406)] = 56674, - [SMALL_STATE(1407)] = 56681, - [SMALL_STATE(1408)] = 56688, - [SMALL_STATE(1409)] = 56695, - [SMALL_STATE(1410)] = 56702, - [SMALL_STATE(1411)] = 56709, - [SMALL_STATE(1412)] = 56716, - [SMALL_STATE(1413)] = 56723, - [SMALL_STATE(1414)] = 56730, - [SMALL_STATE(1415)] = 56737, - [SMALL_STATE(1416)] = 56744, - [SMALL_STATE(1417)] = 56751, - [SMALL_STATE(1418)] = 56758, - [SMALL_STATE(1419)] = 56765, - [SMALL_STATE(1420)] = 56772, - [SMALL_STATE(1421)] = 56779, - [SMALL_STATE(1422)] = 56786, - [SMALL_STATE(1423)] = 56793, - [SMALL_STATE(1424)] = 56800, - [SMALL_STATE(1425)] = 56807, - [SMALL_STATE(1426)] = 56814, - [SMALL_STATE(1427)] = 56821, - [SMALL_STATE(1428)] = 56828, - [SMALL_STATE(1429)] = 56835, - [SMALL_STATE(1430)] = 56842, - [SMALL_STATE(1431)] = 56849, - [SMALL_STATE(1432)] = 56856, - [SMALL_STATE(1433)] = 56863, - [SMALL_STATE(1434)] = 56870, - [SMALL_STATE(1435)] = 56877, - [SMALL_STATE(1436)] = 56884, - [SMALL_STATE(1437)] = 56891, - [SMALL_STATE(1438)] = 56898, - [SMALL_STATE(1439)] = 56905, - [SMALL_STATE(1440)] = 56912, - [SMALL_STATE(1441)] = 56919, - [SMALL_STATE(1442)] = 56926, - [SMALL_STATE(1443)] = 56933, - [SMALL_STATE(1444)] = 56940, - [SMALL_STATE(1445)] = 56947, - [SMALL_STATE(1446)] = 56954, - [SMALL_STATE(1447)] = 56961, - [SMALL_STATE(1448)] = 56968, - [SMALL_STATE(1449)] = 56975, - [SMALL_STATE(1450)] = 56982, - [SMALL_STATE(1451)] = 56989, - [SMALL_STATE(1452)] = 56996, - [SMALL_STATE(1453)] = 57003, - [SMALL_STATE(1454)] = 57010, - [SMALL_STATE(1455)] = 57017, - [SMALL_STATE(1456)] = 57024, - [SMALL_STATE(1457)] = 57031, - [SMALL_STATE(1458)] = 57038, - [SMALL_STATE(1459)] = 57045, - [SMALL_STATE(1460)] = 57052, - [SMALL_STATE(1461)] = 57059, - [SMALL_STATE(1462)] = 57066, - [SMALL_STATE(1463)] = 57073, - [SMALL_STATE(1464)] = 57080, - [SMALL_STATE(1465)] = 57087, - [SMALL_STATE(1466)] = 57094, - [SMALL_STATE(1467)] = 57101, - [SMALL_STATE(1468)] = 57108, - [SMALL_STATE(1469)] = 57115, - [SMALL_STATE(1470)] = 57122, - [SMALL_STATE(1471)] = 57129, - [SMALL_STATE(1472)] = 57136, - [SMALL_STATE(1473)] = 57143, - [SMALL_STATE(1474)] = 57150, - [SMALL_STATE(1475)] = 57157, - [SMALL_STATE(1476)] = 57164, - [SMALL_STATE(1477)] = 57171, - [SMALL_STATE(1478)] = 57178, - [SMALL_STATE(1479)] = 57185, - [SMALL_STATE(1480)] = 57192, - [SMALL_STATE(1481)] = 57199, - [SMALL_STATE(1482)] = 57206, - [SMALL_STATE(1483)] = 57213, - [SMALL_STATE(1484)] = 57220, - [SMALL_STATE(1485)] = 57227, - [SMALL_STATE(1486)] = 57234, - [SMALL_STATE(1487)] = 57241, - [SMALL_STATE(1488)] = 57248, - [SMALL_STATE(1489)] = 57255, - [SMALL_STATE(1490)] = 57262, - [SMALL_STATE(1491)] = 57269, - [SMALL_STATE(1492)] = 57276, - [SMALL_STATE(1493)] = 57283, - [SMALL_STATE(1494)] = 57290, - [SMALL_STATE(1495)] = 57297, - [SMALL_STATE(1496)] = 57304, - [SMALL_STATE(1497)] = 57311, - [SMALL_STATE(1498)] = 57318, - [SMALL_STATE(1499)] = 57325, - [SMALL_STATE(1500)] = 57332, - [SMALL_STATE(1501)] = 57339, - [SMALL_STATE(1502)] = 57346, - [SMALL_STATE(1503)] = 57353, - [SMALL_STATE(1504)] = 57360, - [SMALL_STATE(1505)] = 57367, - [SMALL_STATE(1506)] = 57374, - [SMALL_STATE(1507)] = 57381, - [SMALL_STATE(1508)] = 57388, - [SMALL_STATE(1509)] = 57395, - [SMALL_STATE(1510)] = 57402, - [SMALL_STATE(1511)] = 57409, - [SMALL_STATE(1512)] = 57416, - [SMALL_STATE(1513)] = 57423, - [SMALL_STATE(1514)] = 57430, - [SMALL_STATE(1515)] = 57437, - [SMALL_STATE(1516)] = 57444, - [SMALL_STATE(1517)] = 57451, - [SMALL_STATE(1518)] = 57458, - [SMALL_STATE(1519)] = 57465, - [SMALL_STATE(1520)] = 57472, - [SMALL_STATE(1521)] = 57479, - [SMALL_STATE(1522)] = 57486, - [SMALL_STATE(1523)] = 57493, - [SMALL_STATE(1524)] = 57500, - [SMALL_STATE(1525)] = 57507, - [SMALL_STATE(1526)] = 57514, - [SMALL_STATE(1527)] = 57521, - [SMALL_STATE(1528)] = 57528, - [SMALL_STATE(1529)] = 57535, - [SMALL_STATE(1530)] = 57542, - [SMALL_STATE(1531)] = 57549, - [SMALL_STATE(1532)] = 57556, - [SMALL_STATE(1533)] = 57563, - [SMALL_STATE(1534)] = 57570, - [SMALL_STATE(1535)] = 57577, - [SMALL_STATE(1536)] = 57584, - [SMALL_STATE(1537)] = 57591, - [SMALL_STATE(1538)] = 57598, - [SMALL_STATE(1539)] = 57605, - [SMALL_STATE(1540)] = 57612, - [SMALL_STATE(1541)] = 57619, - [SMALL_STATE(1542)] = 57626, - [SMALL_STATE(1543)] = 57633, - [SMALL_STATE(1544)] = 57640, - [SMALL_STATE(1545)] = 57647, - [SMALL_STATE(1546)] = 57654, - [SMALL_STATE(1547)] = 57661, - [SMALL_STATE(1548)] = 57668, - [SMALL_STATE(1549)] = 57675, - [SMALL_STATE(1550)] = 57682, - [SMALL_STATE(1551)] = 57689, - [SMALL_STATE(1552)] = 57696, - [SMALL_STATE(1553)] = 57703, - [SMALL_STATE(1554)] = 57710, - [SMALL_STATE(1555)] = 57717, - [SMALL_STATE(1556)] = 57724, - [SMALL_STATE(1557)] = 57731, - [SMALL_STATE(1558)] = 57738, - [SMALL_STATE(1559)] = 57745, - [SMALL_STATE(1560)] = 57752, - [SMALL_STATE(1561)] = 57759, - [SMALL_STATE(1562)] = 57766, - [SMALL_STATE(1563)] = 57773, - [SMALL_STATE(1564)] = 57780, - [SMALL_STATE(1565)] = 57787, - [SMALL_STATE(1566)] = 57794, - [SMALL_STATE(1567)] = 57801, - [SMALL_STATE(1568)] = 57808, - [SMALL_STATE(1569)] = 57815, - [SMALL_STATE(1570)] = 57822, - [SMALL_STATE(1571)] = 57829, - [SMALL_STATE(1572)] = 57836, - [SMALL_STATE(1573)] = 57843, - [SMALL_STATE(1574)] = 57850, - [SMALL_STATE(1575)] = 57857, - [SMALL_STATE(1576)] = 57864, - [SMALL_STATE(1577)] = 57871, - [SMALL_STATE(1578)] = 57878, - [SMALL_STATE(1579)] = 57885, - [SMALL_STATE(1580)] = 57892, - [SMALL_STATE(1581)] = 57899, - [SMALL_STATE(1582)] = 57906, - [SMALL_STATE(1583)] = 57913, - [SMALL_STATE(1584)] = 57920, - [SMALL_STATE(1585)] = 57927, - [SMALL_STATE(1586)] = 57934, - [SMALL_STATE(1587)] = 57941, - [SMALL_STATE(1588)] = 57948, - [SMALL_STATE(1589)] = 57955, - [SMALL_STATE(1590)] = 57962, - [SMALL_STATE(1591)] = 57969, - [SMALL_STATE(1592)] = 57976, - [SMALL_STATE(1593)] = 57983, - [SMALL_STATE(1594)] = 57990, - [SMALL_STATE(1595)] = 57997, - [SMALL_STATE(1596)] = 58004, - [SMALL_STATE(1597)] = 58011, - [SMALL_STATE(1598)] = 58018, - [SMALL_STATE(1599)] = 58025, - [SMALL_STATE(1600)] = 58032, - [SMALL_STATE(1601)] = 58039, - [SMALL_STATE(1602)] = 58046, - [SMALL_STATE(1603)] = 58053, - [SMALL_STATE(1604)] = 58060, - [SMALL_STATE(1605)] = 58067, - [SMALL_STATE(1606)] = 58074, - [SMALL_STATE(1607)] = 58081, - [SMALL_STATE(1608)] = 58088, - [SMALL_STATE(1609)] = 58095, - [SMALL_STATE(1610)] = 58102, - [SMALL_STATE(1611)] = 58109, - [SMALL_STATE(1612)] = 58116, - [SMALL_STATE(1613)] = 58123, - [SMALL_STATE(1614)] = 58130, - [SMALL_STATE(1615)] = 58137, - [SMALL_STATE(1616)] = 58144, - [SMALL_STATE(1617)] = 58151, - [SMALL_STATE(1618)] = 58158, - [SMALL_STATE(1619)] = 58165, - [SMALL_STATE(1620)] = 58172, - [SMALL_STATE(1621)] = 58179, - [SMALL_STATE(1622)] = 58186, - [SMALL_STATE(1623)] = 58193, - [SMALL_STATE(1624)] = 58200, - [SMALL_STATE(1625)] = 58207, - [SMALL_STATE(1626)] = 58214, - [SMALL_STATE(1627)] = 58221, - [SMALL_STATE(1628)] = 58228, - [SMALL_STATE(1629)] = 58235, - [SMALL_STATE(1630)] = 58242, - [SMALL_STATE(1631)] = 58249, - [SMALL_STATE(1632)] = 58256, - [SMALL_STATE(1633)] = 58263, - [SMALL_STATE(1634)] = 58270, - [SMALL_STATE(1635)] = 58277, - [SMALL_STATE(1636)] = 58284, - [SMALL_STATE(1637)] = 58291, - [SMALL_STATE(1638)] = 58298, - [SMALL_STATE(1639)] = 58305, - [SMALL_STATE(1640)] = 58312, - [SMALL_STATE(1641)] = 58319, - [SMALL_STATE(1642)] = 58326, - [SMALL_STATE(1643)] = 58333, - [SMALL_STATE(1644)] = 58340, - [SMALL_STATE(1645)] = 58347, - [SMALL_STATE(1646)] = 58354, - [SMALL_STATE(1647)] = 58361, - [SMALL_STATE(1648)] = 58368, - [SMALL_STATE(1649)] = 58375, - [SMALL_STATE(1650)] = 58382, - [SMALL_STATE(1651)] = 58389, - [SMALL_STATE(1652)] = 58396, - [SMALL_STATE(1653)] = 58403, - [SMALL_STATE(1654)] = 58410, - [SMALL_STATE(1655)] = 58417, - [SMALL_STATE(1656)] = 58424, - [SMALL_STATE(1657)] = 58431, - [SMALL_STATE(1658)] = 58438, - [SMALL_STATE(1659)] = 58445, - [SMALL_STATE(1660)] = 58452, - [SMALL_STATE(1661)] = 58459, - [SMALL_STATE(1662)] = 58466, - [SMALL_STATE(1663)] = 58473, - [SMALL_STATE(1664)] = 58480, - [SMALL_STATE(1665)] = 58487, - [SMALL_STATE(1666)] = 58494, - [SMALL_STATE(1667)] = 58501, - [SMALL_STATE(1668)] = 58508, - [SMALL_STATE(1669)] = 58515, - [SMALL_STATE(1670)] = 58522, - [SMALL_STATE(1671)] = 58529, - [SMALL_STATE(1672)] = 58536, - [SMALL_STATE(1673)] = 58543, - [SMALL_STATE(1674)] = 58550, - [SMALL_STATE(1675)] = 58557, - [SMALL_STATE(1676)] = 58564, - [SMALL_STATE(1677)] = 58571, - [SMALL_STATE(1678)] = 58578, - [SMALL_STATE(1679)] = 58585, - [SMALL_STATE(1680)] = 58592, - [SMALL_STATE(1681)] = 58599, - [SMALL_STATE(1682)] = 58606, - [SMALL_STATE(1683)] = 58613, - [SMALL_STATE(1684)] = 58620, - [SMALL_STATE(1685)] = 58627, - [SMALL_STATE(1686)] = 58634, - [SMALL_STATE(1687)] = 58641, - [SMALL_STATE(1688)] = 58648, - [SMALL_STATE(1689)] = 58655, - [SMALL_STATE(1690)] = 58662, - [SMALL_STATE(1691)] = 58669, - [SMALL_STATE(1692)] = 58676, - [SMALL_STATE(1693)] = 58683, - [SMALL_STATE(1694)] = 58690, - [SMALL_STATE(1695)] = 58697, - [SMALL_STATE(1696)] = 58704, - [SMALL_STATE(1697)] = 58711, - [SMALL_STATE(1698)] = 58718, - [SMALL_STATE(1699)] = 58725, - [SMALL_STATE(1700)] = 58732, - [SMALL_STATE(1701)] = 58739, - [SMALL_STATE(1702)] = 58746, - [SMALL_STATE(1703)] = 58753, - [SMALL_STATE(1704)] = 58760, - [SMALL_STATE(1705)] = 58767, - [SMALL_STATE(1706)] = 58774, - [SMALL_STATE(1707)] = 58781, - [SMALL_STATE(1708)] = 58788, - [SMALL_STATE(1709)] = 58795, - [SMALL_STATE(1710)] = 58802, - [SMALL_STATE(1711)] = 58809, - [SMALL_STATE(1712)] = 58816, - [SMALL_STATE(1713)] = 58823, - [SMALL_STATE(1714)] = 58830, - [SMALL_STATE(1715)] = 58837, - [SMALL_STATE(1716)] = 58844, - [SMALL_STATE(1717)] = 58851, - [SMALL_STATE(1718)] = 58858, - [SMALL_STATE(1719)] = 58865, - [SMALL_STATE(1720)] = 58872, - [SMALL_STATE(1721)] = 58879, - [SMALL_STATE(1722)] = 58886, - [SMALL_STATE(1723)] = 58893, - [SMALL_STATE(1724)] = 58900, + [SMALL_STATE(31)] = 1260, + [SMALL_STATE(32)] = 1386, + [SMALL_STATE(33)] = 1512, + [SMALL_STATE(34)] = 1629, + [SMALL_STATE(35)] = 1746, + [SMALL_STATE(36)] = 1863, + [SMALL_STATE(37)] = 1980, + [SMALL_STATE(38)] = 2097, + [SMALL_STATE(39)] = 2214, + [SMALL_STATE(40)] = 2331, + [SMALL_STATE(41)] = 2448, + [SMALL_STATE(42)] = 2565, + [SMALL_STATE(43)] = 2682, + [SMALL_STATE(44)] = 2799, + [SMALL_STATE(45)] = 2916, + [SMALL_STATE(46)] = 3033, + [SMALL_STATE(47)] = 3147, + [SMALL_STATE(48)] = 3261, + [SMALL_STATE(49)] = 3375, + [SMALL_STATE(50)] = 3489, + [SMALL_STATE(51)] = 3603, + [SMALL_STATE(52)] = 3717, + [SMALL_STATE(53)] = 3831, + [SMALL_STATE(54)] = 3945, + [SMALL_STATE(55)] = 4059, + [SMALL_STATE(56)] = 4173, + [SMALL_STATE(57)] = 4287, + [SMALL_STATE(58)] = 4401, + [SMALL_STATE(59)] = 4515, + [SMALL_STATE(60)] = 4629, + [SMALL_STATE(61)] = 4743, + [SMALL_STATE(62)] = 4857, + [SMALL_STATE(63)] = 4971, + [SMALL_STATE(64)] = 5085, + [SMALL_STATE(65)] = 5199, + [SMALL_STATE(66)] = 5313, + [SMALL_STATE(67)] = 5427, + [SMALL_STATE(68)] = 5541, + [SMALL_STATE(69)] = 5655, + [SMALL_STATE(70)] = 5769, + [SMALL_STATE(71)] = 5883, + [SMALL_STATE(72)] = 5997, + [SMALL_STATE(73)] = 6111, + [SMALL_STATE(74)] = 6225, + [SMALL_STATE(75)] = 6339, + [SMALL_STATE(76)] = 6453, + [SMALL_STATE(77)] = 6567, + [SMALL_STATE(78)] = 6681, + [SMALL_STATE(79)] = 6795, + [SMALL_STATE(80)] = 6911, + [SMALL_STATE(81)] = 7025, + [SMALL_STATE(82)] = 7139, + [SMALL_STATE(83)] = 7253, + [SMALL_STATE(84)] = 7367, + [SMALL_STATE(85)] = 7481, + [SMALL_STATE(86)] = 7595, + [SMALL_STATE(87)] = 7709, + [SMALL_STATE(88)] = 7823, + [SMALL_STATE(89)] = 7937, + [SMALL_STATE(90)] = 8051, + [SMALL_STATE(91)] = 8165, + [SMALL_STATE(92)] = 8279, + [SMALL_STATE(93)] = 8393, + [SMALL_STATE(94)] = 8507, + [SMALL_STATE(95)] = 8621, + [SMALL_STATE(96)] = 8735, + [SMALL_STATE(97)] = 8849, + [SMALL_STATE(98)] = 8963, + [SMALL_STATE(99)] = 9077, + [SMALL_STATE(100)] = 9191, + [SMALL_STATE(101)] = 9305, + [SMALL_STATE(102)] = 9419, + [SMALL_STATE(103)] = 9533, + [SMALL_STATE(104)] = 9647, + [SMALL_STATE(105)] = 9761, + [SMALL_STATE(106)] = 9875, + [SMALL_STATE(107)] = 9989, + [SMALL_STATE(108)] = 10103, + [SMALL_STATE(109)] = 10217, + [SMALL_STATE(110)] = 10331, + [SMALL_STATE(111)] = 10445, + [SMALL_STATE(112)] = 10559, + [SMALL_STATE(113)] = 10673, + [SMALL_STATE(114)] = 10787, + [SMALL_STATE(115)] = 10901, + [SMALL_STATE(116)] = 11015, + [SMALL_STATE(117)] = 11129, + [SMALL_STATE(118)] = 11243, + [SMALL_STATE(119)] = 11357, + [SMALL_STATE(120)] = 11471, + [SMALL_STATE(121)] = 11585, + [SMALL_STATE(122)] = 11699, + [SMALL_STATE(123)] = 11813, + [SMALL_STATE(124)] = 11927, + [SMALL_STATE(125)] = 12041, + [SMALL_STATE(126)] = 12155, + [SMALL_STATE(127)] = 12269, + [SMALL_STATE(128)] = 12383, + [SMALL_STATE(129)] = 12497, + [SMALL_STATE(130)] = 12611, + [SMALL_STATE(131)] = 12725, + [SMALL_STATE(132)] = 12839, + [SMALL_STATE(133)] = 12953, + [SMALL_STATE(134)] = 13067, + [SMALL_STATE(135)] = 13181, + [SMALL_STATE(136)] = 13295, + [SMALL_STATE(137)] = 13409, + [SMALL_STATE(138)] = 13523, + [SMALL_STATE(139)] = 13637, + [SMALL_STATE(140)] = 13751, + [SMALL_STATE(141)] = 13865, + [SMALL_STATE(142)] = 13979, + [SMALL_STATE(143)] = 14093, + [SMALL_STATE(144)] = 14207, + [SMALL_STATE(145)] = 14321, + [SMALL_STATE(146)] = 14435, + [SMALL_STATE(147)] = 14549, + [SMALL_STATE(148)] = 14663, + [SMALL_STATE(149)] = 14777, + [SMALL_STATE(150)] = 14891, + [SMALL_STATE(151)] = 15005, + [SMALL_STATE(152)] = 15119, + [SMALL_STATE(153)] = 15233, + [SMALL_STATE(154)] = 15347, + [SMALL_STATE(155)] = 15461, + [SMALL_STATE(156)] = 15575, + [SMALL_STATE(157)] = 15689, + [SMALL_STATE(158)] = 15803, + [SMALL_STATE(159)] = 15917, + [SMALL_STATE(160)] = 16031, + [SMALL_STATE(161)] = 16145, + [SMALL_STATE(162)] = 16259, + [SMALL_STATE(163)] = 16373, + [SMALL_STATE(164)] = 16487, + [SMALL_STATE(165)] = 16601, + [SMALL_STATE(166)] = 16715, + [SMALL_STATE(167)] = 16829, + [SMALL_STATE(168)] = 16943, + [SMALL_STATE(169)] = 17057, + [SMALL_STATE(170)] = 17171, + [SMALL_STATE(171)] = 17285, + [SMALL_STATE(172)] = 17399, + [SMALL_STATE(173)] = 17513, + [SMALL_STATE(174)] = 17627, + [SMALL_STATE(175)] = 17741, + [SMALL_STATE(176)] = 17855, + [SMALL_STATE(177)] = 17969, + [SMALL_STATE(178)] = 18083, + [SMALL_STATE(179)] = 18197, + [SMALL_STATE(180)] = 18311, + [SMALL_STATE(181)] = 18425, + [SMALL_STATE(182)] = 18539, + [SMALL_STATE(183)] = 18653, + [SMALL_STATE(184)] = 18767, + [SMALL_STATE(185)] = 18881, + [SMALL_STATE(186)] = 18995, + [SMALL_STATE(187)] = 19109, + [SMALL_STATE(188)] = 19223, + [SMALL_STATE(189)] = 19337, + [SMALL_STATE(190)] = 19451, + [SMALL_STATE(191)] = 19565, + [SMALL_STATE(192)] = 19679, + [SMALL_STATE(193)] = 19793, + [SMALL_STATE(194)] = 19907, + [SMALL_STATE(195)] = 20021, + [SMALL_STATE(196)] = 20135, + [SMALL_STATE(197)] = 20249, + [SMALL_STATE(198)] = 20363, + [SMALL_STATE(199)] = 20477, + [SMALL_STATE(200)] = 20591, + [SMALL_STATE(201)] = 20705, + [SMALL_STATE(202)] = 20819, + [SMALL_STATE(203)] = 20933, + [SMALL_STATE(204)] = 21047, + [SMALL_STATE(205)] = 21161, + [SMALL_STATE(206)] = 21275, + [SMALL_STATE(207)] = 21389, + [SMALL_STATE(208)] = 21503, + [SMALL_STATE(209)] = 21617, + [SMALL_STATE(210)] = 21731, + [SMALL_STATE(211)] = 21845, + [SMALL_STATE(212)] = 21959, + [SMALL_STATE(213)] = 22073, + [SMALL_STATE(214)] = 22187, + [SMALL_STATE(215)] = 22301, + [SMALL_STATE(216)] = 22415, + [SMALL_STATE(217)] = 22529, + [SMALL_STATE(218)] = 22643, + [SMALL_STATE(219)] = 22757, + [SMALL_STATE(220)] = 22871, + [SMALL_STATE(221)] = 22985, + [SMALL_STATE(222)] = 23099, + [SMALL_STATE(223)] = 23213, + [SMALL_STATE(224)] = 23327, + [SMALL_STATE(225)] = 23441, + [SMALL_STATE(226)] = 23555, + [SMALL_STATE(227)] = 23611, + [SMALL_STATE(228)] = 23667, + [SMALL_STATE(229)] = 23725, + [SMALL_STATE(230)] = 23773, + [SMALL_STATE(231)] = 23821, + [SMALL_STATE(232)] = 23872, + [SMALL_STATE(233)] = 23923, + [SMALL_STATE(234)] = 23999, + [SMALL_STATE(235)] = 24075, + [SMALL_STATE(236)] = 24127, + [SMALL_STATE(237)] = 24183, + [SMALL_STATE(238)] = 24259, + [SMALL_STATE(239)] = 24335, + [SMALL_STATE(240)] = 24381, + [SMALL_STATE(241)] = 24439, + [SMALL_STATE(242)] = 24503, + [SMALL_STATE(243)] = 24573, + [SMALL_STATE(244)] = 24641, + [SMALL_STATE(245)] = 24703, + [SMALL_STATE(246)] = 24759, + [SMALL_STATE(247)] = 24835, + [SMALL_STATE(248)] = 24911, + [SMALL_STATE(249)] = 24985, + [SMALL_STATE(250)] = 25061, + [SMALL_STATE(251)] = 25137, + [SMALL_STATE(252)] = 25211, + [SMALL_STATE(253)] = 25287, + [SMALL_STATE(254)] = 25363, + [SMALL_STATE(255)] = 25439, + [SMALL_STATE(256)] = 25515, + [SMALL_STATE(257)] = 25591, + [SMALL_STATE(258)] = 25636, + [SMALL_STATE(259)] = 25681, + [SMALL_STATE(260)] = 25726, + [SMALL_STATE(261)] = 25771, + [SMALL_STATE(262)] = 25816, + [SMALL_STATE(263)] = 25861, + [SMALL_STATE(264)] = 25906, + [SMALL_STATE(265)] = 25951, + [SMALL_STATE(266)] = 25996, + [SMALL_STATE(267)] = 26041, + [SMALL_STATE(268)] = 26086, + [SMALL_STATE(269)] = 26131, + [SMALL_STATE(270)] = 26176, + [SMALL_STATE(271)] = 26221, + [SMALL_STATE(272)] = 26266, + [SMALL_STATE(273)] = 26311, + [SMALL_STATE(274)] = 26356, + [SMALL_STATE(275)] = 26401, + [SMALL_STATE(276)] = 26446, + [SMALL_STATE(277)] = 26491, + [SMALL_STATE(278)] = 26536, + [SMALL_STATE(279)] = 26581, + [SMALL_STATE(280)] = 26626, + [SMALL_STATE(281)] = 26671, + [SMALL_STATE(282)] = 26716, + [SMALL_STATE(283)] = 26761, + [SMALL_STATE(284)] = 26806, + [SMALL_STATE(285)] = 26851, + [SMALL_STATE(286)] = 26896, + [SMALL_STATE(287)] = 26941, + [SMALL_STATE(288)] = 26986, + [SMALL_STATE(289)] = 27031, + [SMALL_STATE(290)] = 27076, + [SMALL_STATE(291)] = 27121, + [SMALL_STATE(292)] = 27166, + [SMALL_STATE(293)] = 27211, + [SMALL_STATE(294)] = 27256, + [SMALL_STATE(295)] = 27310, + [SMALL_STATE(296)] = 27357, + [SMALL_STATE(297)] = 27404, + [SMALL_STATE(298)] = 27474, + [SMALL_STATE(299)] = 27544, + [SMALL_STATE(300)] = 27614, + [SMALL_STATE(301)] = 27684, + [SMALL_STATE(302)] = 27754, + [SMALL_STATE(303)] = 27824, + [SMALL_STATE(304)] = 27894, + [SMALL_STATE(305)] = 27964, + [SMALL_STATE(306)] = 28034, + [SMALL_STATE(307)] = 28104, + [SMALL_STATE(308)] = 28174, + [SMALL_STATE(309)] = 28244, + [SMALL_STATE(310)] = 28314, + [SMALL_STATE(311)] = 28384, + [SMALL_STATE(312)] = 28454, + [SMALL_STATE(313)] = 28524, + [SMALL_STATE(314)] = 28594, + [SMALL_STATE(315)] = 28664, + [SMALL_STATE(316)] = 28734, + [SMALL_STATE(317)] = 28804, + [SMALL_STATE(318)] = 28874, + [SMALL_STATE(319)] = 28944, + [SMALL_STATE(320)] = 29014, + [SMALL_STATE(321)] = 29084, + [SMALL_STATE(322)] = 29154, + [SMALL_STATE(323)] = 29224, + [SMALL_STATE(324)] = 29294, + [SMALL_STATE(325)] = 29364, + [SMALL_STATE(326)] = 29434, + [SMALL_STATE(327)] = 29504, + [SMALL_STATE(328)] = 29574, + [SMALL_STATE(329)] = 29644, + [SMALL_STATE(330)] = 29714, + [SMALL_STATE(331)] = 29762, + [SMALL_STATE(332)] = 29832, + [SMALL_STATE(333)] = 29884, + [SMALL_STATE(334)] = 29954, + [SMALL_STATE(335)] = 30024, + [SMALL_STATE(336)] = 30078, + [SMALL_STATE(337)] = 30138, + [SMALL_STATE(338)] = 30208, + [SMALL_STATE(339)] = 30270, + [SMALL_STATE(340)] = 30328, + [SMALL_STATE(341)] = 30380, + [SMALL_STATE(342)] = 30450, + [SMALL_STATE(343)] = 30520, + [SMALL_STATE(344)] = 30588, + [SMALL_STATE(345)] = 30658, + [SMALL_STATE(346)] = 30728, + [SMALL_STATE(347)] = 30796, + [SMALL_STATE(348)] = 30866, + [SMALL_STATE(349)] = 30936, + [SMALL_STATE(350)] = 31006, + [SMALL_STATE(351)] = 31076, + [SMALL_STATE(352)] = 31146, + [SMALL_STATE(353)] = 31216, + [SMALL_STATE(354)] = 31286, + [SMALL_STATE(355)] = 31356, + [SMALL_STATE(356)] = 31398, + [SMALL_STATE(357)] = 31462, + [SMALL_STATE(358)] = 31503, + [SMALL_STATE(359)] = 31544, + [SMALL_STATE(360)] = 31585, + [SMALL_STATE(361)] = 31626, + [SMALL_STATE(362)] = 31667, + [SMALL_STATE(363)] = 31708, + [SMALL_STATE(364)] = 31749, + [SMALL_STATE(365)] = 31790, + [SMALL_STATE(366)] = 31831, + [SMALL_STATE(367)] = 31872, + [SMALL_STATE(368)] = 31913, + [SMALL_STATE(369)] = 31954, + [SMALL_STATE(370)] = 31995, + [SMALL_STATE(371)] = 32036, + [SMALL_STATE(372)] = 32077, + [SMALL_STATE(373)] = 32118, + [SMALL_STATE(374)] = 32159, + [SMALL_STATE(375)] = 32200, + [SMALL_STATE(376)] = 32241, + [SMALL_STATE(377)] = 32282, + [SMALL_STATE(378)] = 32323, + [SMALL_STATE(379)] = 32364, + [SMALL_STATE(380)] = 32405, + [SMALL_STATE(381)] = 32446, + [SMALL_STATE(382)] = 32487, + [SMALL_STATE(383)] = 32528, + [SMALL_STATE(384)] = 32569, + [SMALL_STATE(385)] = 32610, + [SMALL_STATE(386)] = 32651, + [SMALL_STATE(387)] = 32692, + [SMALL_STATE(388)] = 32733, + [SMALL_STATE(389)] = 32774, + [SMALL_STATE(390)] = 32815, + [SMALL_STATE(391)] = 32856, + [SMALL_STATE(392)] = 32897, + [SMALL_STATE(393)] = 32938, + [SMALL_STATE(394)] = 32979, + [SMALL_STATE(395)] = 33049, + [SMALL_STATE(396)] = 33119, + [SMALL_STATE(397)] = 33160, + [SMALL_STATE(398)] = 33200, + [SMALL_STATE(399)] = 33236, + [SMALL_STATE(400)] = 33285, + [SMALL_STATE(401)] = 33347, + [SMALL_STATE(402)] = 33409, + [SMALL_STATE(403)] = 33471, + [SMALL_STATE(404)] = 33533, + [SMALL_STATE(405)] = 33595, + [SMALL_STATE(406)] = 33641, + [SMALL_STATE(407)] = 33685, + [SMALL_STATE(408)] = 33735, + [SMALL_STATE(409)] = 33781, + [SMALL_STATE(410)] = 33843, + [SMALL_STATE(411)] = 33905, + [SMALL_STATE(412)] = 33967, + [SMALL_STATE(413)] = 34029, + [SMALL_STATE(414)] = 34091, + [SMALL_STATE(415)] = 34153, + [SMALL_STATE(416)] = 34215, + [SMALL_STATE(417)] = 34277, + [SMALL_STATE(418)] = 34339, + [SMALL_STATE(419)] = 34401, + [SMALL_STATE(420)] = 34463, + [SMALL_STATE(421)] = 34525, + [SMALL_STATE(422)] = 34587, + [SMALL_STATE(423)] = 34649, + [SMALL_STATE(424)] = 34711, + [SMALL_STATE(425)] = 34773, + [SMALL_STATE(426)] = 34835, + [SMALL_STATE(427)] = 34897, + [SMALL_STATE(428)] = 34959, + [SMALL_STATE(429)] = 35021, + [SMALL_STATE(430)] = 35083, + [SMALL_STATE(431)] = 35145, + [SMALL_STATE(432)] = 35207, + [SMALL_STATE(433)] = 35269, + [SMALL_STATE(434)] = 35331, + [SMALL_STATE(435)] = 35393, + [SMALL_STATE(436)] = 35455, + [SMALL_STATE(437)] = 35517, + [SMALL_STATE(438)] = 35558, + [SMALL_STATE(439)] = 35595, + [SMALL_STATE(440)] = 35632, + [SMALL_STATE(441)] = 35664, + [SMALL_STATE(442)] = 35728, + [SMALL_STATE(443)] = 35770, + [SMALL_STATE(444)] = 35830, + [SMALL_STATE(445)] = 35890, + [SMALL_STATE(446)] = 35954, + [SMALL_STATE(447)] = 36012, + [SMALL_STATE(448)] = 36072, + [SMALL_STATE(449)] = 36132, + [SMALL_STATE(450)] = 36192, + [SMALL_STATE(451)] = 36230, + [SMALL_STATE(452)] = 36290, + [SMALL_STATE(453)] = 36350, + [SMALL_STATE(454)] = 36410, + [SMALL_STATE(455)] = 36470, + [SMALL_STATE(456)] = 36530, + [SMALL_STATE(457)] = 36588, + [SMALL_STATE(458)] = 36652, + [SMALL_STATE(459)] = 36706, + [SMALL_STATE(460)] = 36758, + [SMALL_STATE(461)] = 36818, + [SMALL_STATE(462)] = 36878, + [SMALL_STATE(463)] = 36942, + [SMALL_STATE(464)] = 37006, + [SMALL_STATE(465)] = 37066, + [SMALL_STATE(466)] = 37114, + [SMALL_STATE(467)] = 37156, + [SMALL_STATE(468)] = 37220, + [SMALL_STATE(469)] = 37280, + [SMALL_STATE(470)] = 37344, + [SMALL_STATE(471)] = 37404, + [SMALL_STATE(472)] = 37448, + [SMALL_STATE(473)] = 37498, + [SMALL_STATE(474)] = 37558, + [SMALL_STATE(475)] = 37589, + [SMALL_STATE(476)] = 37620, + [SMALL_STATE(477)] = 37651, + [SMALL_STATE(478)] = 37710, + [SMALL_STATE(479)] = 37741, + [SMALL_STATE(480)] = 37772, + [SMALL_STATE(481)] = 37831, + [SMALL_STATE(482)] = 37892, + [SMALL_STATE(483)] = 37947, + [SMALL_STATE(484)] = 37978, + [SMALL_STATE(485)] = 38009, + [SMALL_STATE(486)] = 38040, + [SMALL_STATE(487)] = 38071, + [SMALL_STATE(488)] = 38132, + [SMALL_STATE(489)] = 38163, + [SMALL_STATE(490)] = 38194, + [SMALL_STATE(491)] = 38225, + [SMALL_STATE(492)] = 38256, + [SMALL_STATE(493)] = 38315, + [SMALL_STATE(494)] = 38346, + [SMALL_STATE(495)] = 38377, + [SMALL_STATE(496)] = 38438, + [SMALL_STATE(497)] = 38497, + [SMALL_STATE(498)] = 38528, + [SMALL_STATE(499)] = 38587, + [SMALL_STATE(500)] = 38618, + [SMALL_STATE(501)] = 38649, + [SMALL_STATE(502)] = 38680, + [SMALL_STATE(503)] = 38711, + [SMALL_STATE(504)] = 38742, + [SMALL_STATE(505)] = 38773, + [SMALL_STATE(506)] = 38804, + [SMALL_STATE(507)] = 38835, + [SMALL_STATE(508)] = 38896, + [SMALL_STATE(509)] = 38951, + [SMALL_STATE(510)] = 38982, + [SMALL_STATE(511)] = 39013, + [SMALL_STATE(512)] = 39044, + [SMALL_STATE(513)] = 39075, + [SMALL_STATE(514)] = 39136, + [SMALL_STATE(515)] = 39167, + [SMALL_STATE(516)] = 39228, + [SMALL_STATE(517)] = 39259, + [SMALL_STATE(518)] = 39290, + [SMALL_STATE(519)] = 39325, + [SMALL_STATE(520)] = 39380, + [SMALL_STATE(521)] = 39411, + [SMALL_STATE(522)] = 39442, + [SMALL_STATE(523)] = 39503, + [SMALL_STATE(524)] = 39534, + [SMALL_STATE(525)] = 39565, + [SMALL_STATE(526)] = 39596, + [SMALL_STATE(527)] = 39627, + [SMALL_STATE(528)] = 39685, + [SMALL_STATE(529)] = 39743, + [SMALL_STATE(530)] = 39801, + [SMALL_STATE(531)] = 39853, + [SMALL_STATE(532)] = 39911, + [SMALL_STATE(533)] = 39969, + [SMALL_STATE(534)] = 40027, + [SMALL_STATE(535)] = 40085, + [SMALL_STATE(536)] = 40143, + [SMALL_STATE(537)] = 40175, + [SMALL_STATE(538)] = 40233, + [SMALL_STATE(539)] = 40291, + [SMALL_STATE(540)] = 40349, + [SMALL_STATE(541)] = 40407, + [SMALL_STATE(542)] = 40465, + [SMALL_STATE(543)] = 40523, + [SMALL_STATE(544)] = 40581, + [SMALL_STATE(545)] = 40639, + [SMALL_STATE(546)] = 40697, + [SMALL_STATE(547)] = 40755, + [SMALL_STATE(548)] = 40807, + [SMALL_STATE(549)] = 40865, + [SMALL_STATE(550)] = 40923, + [SMALL_STATE(551)] = 40981, + [SMALL_STATE(552)] = 41039, + [SMALL_STATE(553)] = 41097, + [SMALL_STATE(554)] = 41155, + [SMALL_STATE(555)] = 41207, + [SMALL_STATE(556)] = 41259, + [SMALL_STATE(557)] = 41317, + [SMALL_STATE(558)] = 41375, + [SMALL_STATE(559)] = 41433, + [SMALL_STATE(560)] = 41491, + [SMALL_STATE(561)] = 41543, + [SMALL_STATE(562)] = 41597, + [SMALL_STATE(563)] = 41655, + [SMALL_STATE(564)] = 41713, + [SMALL_STATE(565)] = 41771, + [SMALL_STATE(566)] = 41829, + [SMALL_STATE(567)] = 41887, + [SMALL_STATE(568)] = 41945, + [SMALL_STATE(569)] = 42003, + [SMALL_STATE(570)] = 42061, + [SMALL_STATE(571)] = 42119, + [SMALL_STATE(572)] = 42177, + [SMALL_STATE(573)] = 42235, + [SMALL_STATE(574)] = 42293, + [SMALL_STATE(575)] = 42351, + [SMALL_STATE(576)] = 42403, + [SMALL_STATE(577)] = 42461, + [SMALL_STATE(578)] = 42519, + [SMALL_STATE(579)] = 42577, + [SMALL_STATE(580)] = 42635, + [SMALL_STATE(581)] = 42693, + [SMALL_STATE(582)] = 42751, + [SMALL_STATE(583)] = 42809, + [SMALL_STATE(584)] = 42861, + [SMALL_STATE(585)] = 42919, + [SMALL_STATE(586)] = 42977, + [SMALL_STATE(587)] = 43035, + [SMALL_STATE(588)] = 43093, + [SMALL_STATE(589)] = 43151, + [SMALL_STATE(590)] = 43209, + [SMALL_STATE(591)] = 43267, + [SMALL_STATE(592)] = 43325, + [SMALL_STATE(593)] = 43383, + [SMALL_STATE(594)] = 43441, + [SMALL_STATE(595)] = 43499, + [SMALL_STATE(596)] = 43557, + [SMALL_STATE(597)] = 43615, + [SMALL_STATE(598)] = 43673, + [SMALL_STATE(599)] = 43727, + [SMALL_STATE(600)] = 43785, + [SMALL_STATE(601)] = 43843, + [SMALL_STATE(602)] = 43901, + [SMALL_STATE(603)] = 43959, + [SMALL_STATE(604)] = 44011, + [SMALL_STATE(605)] = 44069, + [SMALL_STATE(606)] = 44127, + [SMALL_STATE(607)] = 44185, + [SMALL_STATE(608)] = 44243, + [SMALL_STATE(609)] = 44301, + [SMALL_STATE(610)] = 44359, + [SMALL_STATE(611)] = 44417, + [SMALL_STATE(612)] = 44472, + [SMALL_STATE(613)] = 44527, + [SMALL_STATE(614)] = 44566, + [SMALL_STATE(615)] = 44621, + [SMALL_STATE(616)] = 44676, + [SMALL_STATE(617)] = 44725, + [SMALL_STATE(618)] = 44754, + [SMALL_STATE(619)] = 44809, + [SMALL_STATE(620)] = 44858, + [SMALL_STATE(621)] = 44913, + [SMALL_STATE(622)] = 44942, + [SMALL_STATE(623)] = 44971, + [SMALL_STATE(624)] = 45020, + [SMALL_STATE(625)] = 45049, + [SMALL_STATE(626)] = 45078, + [SMALL_STATE(627)] = 45133, + [SMALL_STATE(628)] = 45181, + [SMALL_STATE(629)] = 45213, + [SMALL_STATE(630)] = 45261, + [SMALL_STATE(631)] = 45309, + [SMALL_STATE(632)] = 45342, + [SMALL_STATE(633)] = 45387, + [SMALL_STATE(634)] = 45414, + [SMALL_STATE(635)] = 45459, + [SMALL_STATE(636)] = 45504, + [SMALL_STATE(637)] = 45537, + [SMALL_STATE(638)] = 45585, + [SMALL_STATE(639)] = 45633, + [SMALL_STATE(640)] = 45681, + [SMALL_STATE(641)] = 45729, + [SMALL_STATE(642)] = 45759, + [SMALL_STATE(643)] = 45807, + [SMALL_STATE(644)] = 45855, + [SMALL_STATE(645)] = 45903, + [SMALL_STATE(646)] = 45951, + [SMALL_STATE(647)] = 45999, + [SMALL_STATE(648)] = 46026, + [SMALL_STATE(649)] = 46052, + [SMALL_STATE(650)] = 46078, + [SMALL_STATE(651)] = 46104, + [SMALL_STATE(652)] = 46135, + [SMALL_STATE(653)] = 46160, + [SMALL_STATE(654)] = 46185, + [SMALL_STATE(655)] = 46210, + [SMALL_STATE(656)] = 46231, + [SMALL_STATE(657)] = 46252, + [SMALL_STATE(658)] = 46273, + [SMALL_STATE(659)] = 46298, + [SMALL_STATE(660)] = 46318, + [SMALL_STATE(661)] = 46338, + [SMALL_STATE(662)] = 46372, + [SMALL_STATE(663)] = 46394, + [SMALL_STATE(664)] = 46414, + [SMALL_STATE(665)] = 46434, + [SMALL_STATE(666)] = 46468, + [SMALL_STATE(667)] = 46490, + [SMALL_STATE(668)] = 46510, + [SMALL_STATE(669)] = 46544, + [SMALL_STATE(670)] = 46564, + [SMALL_STATE(671)] = 46586, + [SMALL_STATE(672)] = 46606, + [SMALL_STATE(673)] = 46626, + [SMALL_STATE(674)] = 46646, + [SMALL_STATE(675)] = 46668, + [SMALL_STATE(676)] = 46702, + [SMALL_STATE(677)] = 46722, + [SMALL_STATE(678)] = 46742, + [SMALL_STATE(679)] = 46762, + [SMALL_STATE(680)] = 46782, + [SMALL_STATE(681)] = 46802, + [SMALL_STATE(682)] = 46822, + [SMALL_STATE(683)] = 46842, + [SMALL_STATE(684)] = 46862, + [SMALL_STATE(685)] = 46882, + [SMALL_STATE(686)] = 46916, + [SMALL_STATE(687)] = 46950, + [SMALL_STATE(688)] = 46984, + [SMALL_STATE(689)] = 47018, + [SMALL_STATE(690)] = 47037, + [SMALL_STATE(691)] = 47056, + [SMALL_STATE(692)] = 47075, + [SMALL_STATE(693)] = 47094, + [SMALL_STATE(694)] = 47113, + [SMALL_STATE(695)] = 47132, + [SMALL_STATE(696)] = 47151, + [SMALL_STATE(697)] = 47170, + [SMALL_STATE(698)] = 47189, + [SMALL_STATE(699)] = 47208, + [SMALL_STATE(700)] = 47227, + [SMALL_STATE(701)] = 47246, + [SMALL_STATE(702)] = 47265, + [SMALL_STATE(703)] = 47284, + [SMALL_STATE(704)] = 47303, + [SMALL_STATE(705)] = 47322, + [SMALL_STATE(706)] = 47341, + [SMALL_STATE(707)] = 47368, + [SMALL_STATE(708)] = 47387, + [SMALL_STATE(709)] = 47406, + [SMALL_STATE(710)] = 47425, + [SMALL_STATE(711)] = 47444, + [SMALL_STATE(712)] = 47463, + [SMALL_STATE(713)] = 47482, + [SMALL_STATE(714)] = 47501, + [SMALL_STATE(715)] = 47520, + [SMALL_STATE(716)] = 47539, + [SMALL_STATE(717)] = 47558, + [SMALL_STATE(718)] = 47577, + [SMALL_STATE(719)] = 47596, + [SMALL_STATE(720)] = 47615, + [SMALL_STATE(721)] = 47634, + [SMALL_STATE(722)] = 47653, + [SMALL_STATE(723)] = 47672, + [SMALL_STATE(724)] = 47691, + [SMALL_STATE(725)] = 47710, + [SMALL_STATE(726)] = 47729, + [SMALL_STATE(727)] = 47748, + [SMALL_STATE(728)] = 47767, + [SMALL_STATE(729)] = 47786, + [SMALL_STATE(730)] = 47805, + [SMALL_STATE(731)] = 47824, + [SMALL_STATE(732)] = 47843, + [SMALL_STATE(733)] = 47862, + [SMALL_STATE(734)] = 47881, + [SMALL_STATE(735)] = 47900, + [SMALL_STATE(736)] = 47919, + [SMALL_STATE(737)] = 47938, + [SMALL_STATE(738)] = 47957, + [SMALL_STATE(739)] = 47976, + [SMALL_STATE(740)] = 47995, + [SMALL_STATE(741)] = 48014, + [SMALL_STATE(742)] = 48033, + [SMALL_STATE(743)] = 48052, + [SMALL_STATE(744)] = 48071, + [SMALL_STATE(745)] = 48090, + [SMALL_STATE(746)] = 48109, + [SMALL_STATE(747)] = 48128, + [SMALL_STATE(748)] = 48147, + [SMALL_STATE(749)] = 48166, + [SMALL_STATE(750)] = 48185, + [SMALL_STATE(751)] = 48204, + [SMALL_STATE(752)] = 48223, + [SMALL_STATE(753)] = 48242, + [SMALL_STATE(754)] = 48261, + [SMALL_STATE(755)] = 48286, + [SMALL_STATE(756)] = 48305, + [SMALL_STATE(757)] = 48324, + [SMALL_STATE(758)] = 48343, + [SMALL_STATE(759)] = 48362, + [SMALL_STATE(760)] = 48381, + [SMALL_STATE(761)] = 48415, + [SMALL_STATE(762)] = 48449, + [SMALL_STATE(763)] = 48483, + [SMALL_STATE(764)] = 48517, + [SMALL_STATE(765)] = 48551, + [SMALL_STATE(766)] = 48575, + [SMALL_STATE(767)] = 48609, + [SMALL_STATE(768)] = 48643, + [SMALL_STATE(769)] = 48667, + [SMALL_STATE(770)] = 48701, + [SMALL_STATE(771)] = 48735, + [SMALL_STATE(772)] = 48769, + [SMALL_STATE(773)] = 48803, + [SMALL_STATE(774)] = 48837, + [SMALL_STATE(775)] = 48871, + [SMALL_STATE(776)] = 48905, + [SMALL_STATE(777)] = 48939, + [SMALL_STATE(778)] = 48973, + [SMALL_STATE(779)] = 49007, + [SMALL_STATE(780)] = 49031, + [SMALL_STATE(781)] = 49065, + [SMALL_STATE(782)] = 49099, + [SMALL_STATE(783)] = 49133, + [SMALL_STATE(784)] = 49167, + [SMALL_STATE(785)] = 49197, + [SMALL_STATE(786)] = 49231, + [SMALL_STATE(787)] = 49265, + [SMALL_STATE(788)] = 49289, + [SMALL_STATE(789)] = 49323, + [SMALL_STATE(790)] = 49357, + [SMALL_STATE(791)] = 49391, + [SMALL_STATE(792)] = 49425, + [SMALL_STATE(793)] = 49459, + [SMALL_STATE(794)] = 49493, + [SMALL_STATE(795)] = 49527, + [SMALL_STATE(796)] = 49561, + [SMALL_STATE(797)] = 49595, + [SMALL_STATE(798)] = 49617, + [SMALL_STATE(799)] = 49639, + [SMALL_STATE(800)] = 49673, + [SMALL_STATE(801)] = 49692, + [SMALL_STATE(802)] = 49711, + [SMALL_STATE(803)] = 49740, + [SMALL_STATE(804)] = 49761, + [SMALL_STATE(805)] = 49796, + [SMALL_STATE(806)] = 49823, + [SMALL_STATE(807)] = 49844, + [SMALL_STATE(808)] = 49873, + [SMALL_STATE(809)] = 49892, + [SMALL_STATE(810)] = 49913, + [SMALL_STATE(811)] = 49934, + [SMALL_STATE(812)] = 49953, + [SMALL_STATE(813)] = 49974, + [SMALL_STATE(814)] = 50003, + [SMALL_STATE(815)] = 50032, + [SMALL_STATE(816)] = 50061, + [SMALL_STATE(817)] = 50090, + [SMALL_STATE(818)] = 50109, + [SMALL_STATE(819)] = 50130, + [SMALL_STATE(820)] = 50151, + [SMALL_STATE(821)] = 50169, + [SMALL_STATE(822)] = 50187, + [SMALL_STATE(823)] = 50213, + [SMALL_STATE(824)] = 50239, + [SMALL_STATE(825)] = 50265, + [SMALL_STATE(826)] = 50283, + [SMALL_STATE(827)] = 50311, + [SMALL_STATE(828)] = 50337, + [SMALL_STATE(829)] = 50363, + [SMALL_STATE(830)] = 50397, + [SMALL_STATE(831)] = 50423, + [SMALL_STATE(832)] = 50449, + [SMALL_STATE(833)] = 50481, + [SMALL_STATE(834)] = 50507, + [SMALL_STATE(835)] = 50530, + [SMALL_STATE(836)] = 50545, + [SMALL_STATE(837)] = 50568, + [SMALL_STATE(838)] = 50591, + [SMALL_STATE(839)] = 50606, + [SMALL_STATE(840)] = 50629, + [SMALL_STATE(841)] = 50652, + [SMALL_STATE(842)] = 50675, + [SMALL_STATE(843)] = 50698, + [SMALL_STATE(844)] = 50721, + [SMALL_STATE(845)] = 50736, + [SMALL_STATE(846)] = 50759, + [SMALL_STATE(847)] = 50782, + [SMALL_STATE(848)] = 50797, + [SMALL_STATE(849)] = 50824, + [SMALL_STATE(850)] = 50847, + [SMALL_STATE(851)] = 50870, + [SMALL_STATE(852)] = 50893, + [SMALL_STATE(853)] = 50916, + [SMALL_STATE(854)] = 50939, + [SMALL_STATE(855)] = 50962, + [SMALL_STATE(856)] = 50985, + [SMALL_STATE(857)] = 51008, + [SMALL_STATE(858)] = 51027, + [SMALL_STATE(859)] = 51050, + [SMALL_STATE(860)] = 51069, + [SMALL_STATE(861)] = 51092, + [SMALL_STATE(862)] = 51115, + [SMALL_STATE(863)] = 51138, + [SMALL_STATE(864)] = 51161, + [SMALL_STATE(865)] = 51176, + [SMALL_STATE(866)] = 51199, + [SMALL_STATE(867)] = 51222, + [SMALL_STATE(868)] = 51245, + [SMALL_STATE(869)] = 51268, + [SMALL_STATE(870)] = 51283, + [SMALL_STATE(871)] = 51306, + [SMALL_STATE(872)] = 51329, + [SMALL_STATE(873)] = 51344, + [SMALL_STATE(874)] = 51367, + [SMALL_STATE(875)] = 51382, + [SMALL_STATE(876)] = 51405, + [SMALL_STATE(877)] = 51420, + [SMALL_STATE(878)] = 51435, + [SMALL_STATE(879)] = 51458, + [SMALL_STATE(880)] = 51481, + [SMALL_STATE(881)] = 51504, + [SMALL_STATE(882)] = 51527, + [SMALL_STATE(883)] = 51550, + [SMALL_STATE(884)] = 51573, + [SMALL_STATE(885)] = 51588, + [SMALL_STATE(886)] = 51603, + [SMALL_STATE(887)] = 51626, + [SMALL_STATE(888)] = 51641, + [SMALL_STATE(889)] = 51656, + [SMALL_STATE(890)] = 51679, + [SMALL_STATE(891)] = 51702, + [SMALL_STATE(892)] = 51725, + [SMALL_STATE(893)] = 51748, + [SMALL_STATE(894)] = 51771, + [SMALL_STATE(895)] = 51794, + [SMALL_STATE(896)] = 51817, + [SMALL_STATE(897)] = 51832, + [SMALL_STATE(898)] = 51855, + [SMALL_STATE(899)] = 51870, + [SMALL_STATE(900)] = 51885, + [SMALL_STATE(901)] = 51908, + [SMALL_STATE(902)] = 51931, + [SMALL_STATE(903)] = 51954, + [SMALL_STATE(904)] = 51969, + [SMALL_STATE(905)] = 51992, + [SMALL_STATE(906)] = 52015, + [SMALL_STATE(907)] = 52038, + [SMALL_STATE(908)] = 52061, + [SMALL_STATE(909)] = 52084, + [SMALL_STATE(910)] = 52107, + [SMALL_STATE(911)] = 52130, + [SMALL_STATE(912)] = 52153, + [SMALL_STATE(913)] = 52176, + [SMALL_STATE(914)] = 52199, + [SMALL_STATE(915)] = 52222, + [SMALL_STATE(916)] = 52245, + [SMALL_STATE(917)] = 52268, + [SMALL_STATE(918)] = 52283, + [SMALL_STATE(919)] = 52306, + [SMALL_STATE(920)] = 52329, + [SMALL_STATE(921)] = 52352, + [SMALL_STATE(922)] = 52375, + [SMALL_STATE(923)] = 52398, + [SMALL_STATE(924)] = 52421, + [SMALL_STATE(925)] = 52444, + [SMALL_STATE(926)] = 52467, + [SMALL_STATE(927)] = 52482, + [SMALL_STATE(928)] = 52505, + [SMALL_STATE(929)] = 52528, + [SMALL_STATE(930)] = 52551, + [SMALL_STATE(931)] = 52574, + [SMALL_STATE(932)] = 52597, + [SMALL_STATE(933)] = 52620, + [SMALL_STATE(934)] = 52643, + [SMALL_STATE(935)] = 52665, + [SMALL_STATE(936)] = 52679, + [SMALL_STATE(937)] = 52700, + [SMALL_STATE(938)] = 52723, + [SMALL_STATE(939)] = 52738, + [SMALL_STATE(940)] = 52753, + [SMALL_STATE(941)] = 52774, + [SMALL_STATE(942)] = 52789, + [SMALL_STATE(943)] = 52810, + [SMALL_STATE(944)] = 52831, + [SMALL_STATE(945)] = 52852, + [SMALL_STATE(946)] = 52867, + [SMALL_STATE(947)] = 52890, + [SMALL_STATE(948)] = 52905, + [SMALL_STATE(949)] = 52928, + [SMALL_STATE(950)] = 52943, + [SMALL_STATE(951)] = 52958, + [SMALL_STATE(952)] = 52973, + [SMALL_STATE(953)] = 52994, + [SMALL_STATE(954)] = 53009, + [SMALL_STATE(955)] = 53024, + [SMALL_STATE(956)] = 53039, + [SMALL_STATE(957)] = 53060, + [SMALL_STATE(958)] = 53075, + [SMALL_STATE(959)] = 53098, + [SMALL_STATE(960)] = 53121, + [SMALL_STATE(961)] = 53136, + [SMALL_STATE(962)] = 53151, + [SMALL_STATE(963)] = 53172, + [SMALL_STATE(964)] = 53195, + [SMALL_STATE(965)] = 53210, + [SMALL_STATE(966)] = 53225, + [SMALL_STATE(967)] = 53247, + [SMALL_STATE(968)] = 53269, + [SMALL_STATE(969)] = 53291, + [SMALL_STATE(970)] = 53303, + [SMALL_STATE(971)] = 53325, + [SMALL_STATE(972)] = 53347, + [SMALL_STATE(973)] = 53369, + [SMALL_STATE(974)] = 53391, + [SMALL_STATE(975)] = 53405, + [SMALL_STATE(976)] = 53427, + [SMALL_STATE(977)] = 53449, + [SMALL_STATE(978)] = 53471, + [SMALL_STATE(979)] = 53493, + [SMALL_STATE(980)] = 53515, + [SMALL_STATE(981)] = 53537, + [SMALL_STATE(982)] = 53559, + [SMALL_STATE(983)] = 53577, + [SMALL_STATE(984)] = 53597, + [SMALL_STATE(985)] = 53613, + [SMALL_STATE(986)] = 53635, + [SMALL_STATE(987)] = 53657, + [SMALL_STATE(988)] = 53674, + [SMALL_STATE(989)] = 53693, + [SMALL_STATE(990)] = 53710, + [SMALL_STATE(991)] = 53727, + [SMALL_STATE(992)] = 53744, + [SMALL_STATE(993)] = 53759, + [SMALL_STATE(994)] = 53776, + [SMALL_STATE(995)] = 53793, + [SMALL_STATE(996)] = 53810, + [SMALL_STATE(997)] = 53829, + [SMALL_STATE(998)] = 53846, + [SMALL_STATE(999)] = 53861, + [SMALL_STATE(1000)] = 53878, + [SMALL_STATE(1001)] = 53893, + [SMALL_STATE(1002)] = 53908, + [SMALL_STATE(1003)] = 53925, + [SMALL_STATE(1004)] = 53944, + [SMALL_STATE(1005)] = 53961, + [SMALL_STATE(1006)] = 53980, + [SMALL_STATE(1007)] = 53995, + [SMALL_STATE(1008)] = 54014, + [SMALL_STATE(1009)] = 54033, + [SMALL_STATE(1010)] = 54050, + [SMALL_STATE(1011)] = 54067, + [SMALL_STATE(1012)] = 54086, + [SMALL_STATE(1013)] = 54103, + [SMALL_STATE(1014)] = 54122, + [SMALL_STATE(1015)] = 54141, + [SMALL_STATE(1016)] = 54158, + [SMALL_STATE(1017)] = 54177, + [SMALL_STATE(1018)] = 54196, + [SMALL_STATE(1019)] = 54215, + [SMALL_STATE(1020)] = 54234, + [SMALL_STATE(1021)] = 54253, + [SMALL_STATE(1022)] = 54272, + [SMALL_STATE(1023)] = 54287, + [SMALL_STATE(1024)] = 54302, + [SMALL_STATE(1025)] = 54317, + [SMALL_STATE(1026)] = 54332, + [SMALL_STATE(1027)] = 54347, + [SMALL_STATE(1028)] = 54366, + [SMALL_STATE(1029)] = 54383, + [SMALL_STATE(1030)] = 54398, + [SMALL_STATE(1031)] = 54415, + [SMALL_STATE(1032)] = 54432, + [SMALL_STATE(1033)] = 54449, + [SMALL_STATE(1034)] = 54466, + [SMALL_STATE(1035)] = 54483, + [SMALL_STATE(1036)] = 54500, + [SMALL_STATE(1037)] = 54517, + [SMALL_STATE(1038)] = 54534, + [SMALL_STATE(1039)] = 54551, + [SMALL_STATE(1040)] = 54566, + [SMALL_STATE(1041)] = 54583, + [SMALL_STATE(1042)] = 54600, + [SMALL_STATE(1043)] = 54617, + [SMALL_STATE(1044)] = 54632, + [SMALL_STATE(1045)] = 54649, + [SMALL_STATE(1046)] = 54666, + [SMALL_STATE(1047)] = 54683, + [SMALL_STATE(1048)] = 54700, + [SMALL_STATE(1049)] = 54717, + [SMALL_STATE(1050)] = 54736, + [SMALL_STATE(1051)] = 54753, + [SMALL_STATE(1052)] = 54768, + [SMALL_STATE(1053)] = 54785, + [SMALL_STATE(1054)] = 54802, + [SMALL_STATE(1055)] = 54821, + [SMALL_STATE(1056)] = 54840, + [SMALL_STATE(1057)] = 54859, + [SMALL_STATE(1058)] = 54878, + [SMALL_STATE(1059)] = 54895, + [SMALL_STATE(1060)] = 54912, + [SMALL_STATE(1061)] = 54929, + [SMALL_STATE(1062)] = 54948, + [SMALL_STATE(1063)] = 54965, + [SMALL_STATE(1064)] = 54982, + [SMALL_STATE(1065)] = 54997, + [SMALL_STATE(1066)] = 55007, + [SMALL_STATE(1067)] = 55021, + [SMALL_STATE(1068)] = 55031, + [SMALL_STATE(1069)] = 55047, + [SMALL_STATE(1070)] = 55061, + [SMALL_STATE(1071)] = 55073, + [SMALL_STATE(1072)] = 55087, + [SMALL_STATE(1073)] = 55097, + [SMALL_STATE(1074)] = 55111, + [SMALL_STATE(1075)] = 55125, + [SMALL_STATE(1076)] = 55135, + [SMALL_STATE(1077)] = 55145, + [SMALL_STATE(1078)] = 55159, + [SMALL_STATE(1079)] = 55173, + [SMALL_STATE(1080)] = 55183, + [SMALL_STATE(1081)] = 55197, + [SMALL_STATE(1082)] = 55211, + [SMALL_STATE(1083)] = 55227, + [SMALL_STATE(1084)] = 55241, + [SMALL_STATE(1085)] = 55255, + [SMALL_STATE(1086)] = 55271, + [SMALL_STATE(1087)] = 55285, + [SMALL_STATE(1088)] = 55301, + [SMALL_STATE(1089)] = 55317, + [SMALL_STATE(1090)] = 55333, + [SMALL_STATE(1091)] = 55343, + [SMALL_STATE(1092)] = 55353, + [SMALL_STATE(1093)] = 55363, + [SMALL_STATE(1094)] = 55377, + [SMALL_STATE(1095)] = 55393, + [SMALL_STATE(1096)] = 55409, + [SMALL_STATE(1097)] = 55425, + [SMALL_STATE(1098)] = 55435, + [SMALL_STATE(1099)] = 55445, + [SMALL_STATE(1100)] = 55461, + [SMALL_STATE(1101)] = 55477, + [SMALL_STATE(1102)] = 55491, + [SMALL_STATE(1103)] = 55505, + [SMALL_STATE(1104)] = 55521, + [SMALL_STATE(1105)] = 55531, + [SMALL_STATE(1106)] = 55541, + [SMALL_STATE(1107)] = 55555, + [SMALL_STATE(1108)] = 55565, + [SMALL_STATE(1109)] = 55581, + [SMALL_STATE(1110)] = 55595, + [SMALL_STATE(1111)] = 55609, + [SMALL_STATE(1112)] = 55623, + [SMALL_STATE(1113)] = 55633, + [SMALL_STATE(1114)] = 55649, + [SMALL_STATE(1115)] = 55659, + [SMALL_STATE(1116)] = 55672, + [SMALL_STATE(1117)] = 55685, + [SMALL_STATE(1118)] = 55698, + [SMALL_STATE(1119)] = 55711, + [SMALL_STATE(1120)] = 55724, + [SMALL_STATE(1121)] = 55733, + [SMALL_STATE(1122)] = 55746, + [SMALL_STATE(1123)] = 55759, + [SMALL_STATE(1124)] = 55772, + [SMALL_STATE(1125)] = 55785, + [SMALL_STATE(1126)] = 55798, + [SMALL_STATE(1127)] = 55809, + [SMALL_STATE(1128)] = 55822, + [SMALL_STATE(1129)] = 55835, + [SMALL_STATE(1130)] = 55848, + [SMALL_STATE(1131)] = 55861, + [SMALL_STATE(1132)] = 55874, + [SMALL_STATE(1133)] = 55887, + [SMALL_STATE(1134)] = 55900, + [SMALL_STATE(1135)] = 55913, + [SMALL_STATE(1136)] = 55926, + [SMALL_STATE(1137)] = 55939, + [SMALL_STATE(1138)] = 55950, + [SMALL_STATE(1139)] = 55963, + [SMALL_STATE(1140)] = 55972, + [SMALL_STATE(1141)] = 55983, + [SMALL_STATE(1142)] = 55992, + [SMALL_STATE(1143)] = 56005, + [SMALL_STATE(1144)] = 56018, + [SMALL_STATE(1145)] = 56031, + [SMALL_STATE(1146)] = 56044, + [SMALL_STATE(1147)] = 56057, + [SMALL_STATE(1148)] = 56070, + [SMALL_STATE(1149)] = 56083, + [SMALL_STATE(1150)] = 56096, + [SMALL_STATE(1151)] = 56109, + [SMALL_STATE(1152)] = 56118, + [SMALL_STATE(1153)] = 56131, + [SMALL_STATE(1154)] = 56144, + [SMALL_STATE(1155)] = 56155, + [SMALL_STATE(1156)] = 56168, + [SMALL_STATE(1157)] = 56181, + [SMALL_STATE(1158)] = 56194, + [SMALL_STATE(1159)] = 56203, + [SMALL_STATE(1160)] = 56214, + [SMALL_STATE(1161)] = 56227, + [SMALL_STATE(1162)] = 56240, + [SMALL_STATE(1163)] = 56253, + [SMALL_STATE(1164)] = 56266, + [SMALL_STATE(1165)] = 56279, + [SMALL_STATE(1166)] = 56292, + [SMALL_STATE(1167)] = 56305, + [SMALL_STATE(1168)] = 56318, + [SMALL_STATE(1169)] = 56331, + [SMALL_STATE(1170)] = 56344, + [SMALL_STATE(1171)] = 56357, + [SMALL_STATE(1172)] = 56370, + [SMALL_STATE(1173)] = 56383, + [SMALL_STATE(1174)] = 56396, + [SMALL_STATE(1175)] = 56409, + [SMALL_STATE(1176)] = 56422, + [SMALL_STATE(1177)] = 56433, + [SMALL_STATE(1178)] = 56446, + [SMALL_STATE(1179)] = 56459, + [SMALL_STATE(1180)] = 56472, + [SMALL_STATE(1181)] = 56485, + [SMALL_STATE(1182)] = 56498, + [SMALL_STATE(1183)] = 56511, + [SMALL_STATE(1184)] = 56522, + [SMALL_STATE(1185)] = 56535, + [SMALL_STATE(1186)] = 56548, + [SMALL_STATE(1187)] = 56561, + [SMALL_STATE(1188)] = 56574, + [SMALL_STATE(1189)] = 56587, + [SMALL_STATE(1190)] = 56600, + [SMALL_STATE(1191)] = 56613, + [SMALL_STATE(1192)] = 56624, + [SMALL_STATE(1193)] = 56637, + [SMALL_STATE(1194)] = 56650, + [SMALL_STATE(1195)] = 56663, + [SMALL_STATE(1196)] = 56676, + [SMALL_STATE(1197)] = 56687, + [SMALL_STATE(1198)] = 56700, + [SMALL_STATE(1199)] = 56713, + [SMALL_STATE(1200)] = 56726, + [SMALL_STATE(1201)] = 56739, + [SMALL_STATE(1202)] = 56752, + [SMALL_STATE(1203)] = 56765, + [SMALL_STATE(1204)] = 56778, + [SMALL_STATE(1205)] = 56789, + [SMALL_STATE(1206)] = 56802, + [SMALL_STATE(1207)] = 56815, + [SMALL_STATE(1208)] = 56828, + [SMALL_STATE(1209)] = 56841, + [SMALL_STATE(1210)] = 56852, + [SMALL_STATE(1211)] = 56865, + [SMALL_STATE(1212)] = 56874, + [SMALL_STATE(1213)] = 56887, + [SMALL_STATE(1214)] = 56900, + [SMALL_STATE(1215)] = 56913, + [SMALL_STATE(1216)] = 56926, + [SMALL_STATE(1217)] = 56939, + [SMALL_STATE(1218)] = 56952, + [SMALL_STATE(1219)] = 56965, + [SMALL_STATE(1220)] = 56978, + [SMALL_STATE(1221)] = 56991, + [SMALL_STATE(1222)] = 57004, + [SMALL_STATE(1223)] = 57015, + [SMALL_STATE(1224)] = 57028, + [SMALL_STATE(1225)] = 57041, + [SMALL_STATE(1226)] = 57054, + [SMALL_STATE(1227)] = 57065, + [SMALL_STATE(1228)] = 57074, + [SMALL_STATE(1229)] = 57087, + [SMALL_STATE(1230)] = 57100, + [SMALL_STATE(1231)] = 57113, + [SMALL_STATE(1232)] = 57126, + [SMALL_STATE(1233)] = 57139, + [SMALL_STATE(1234)] = 57152, + [SMALL_STATE(1235)] = 57161, + [SMALL_STATE(1236)] = 57174, + [SMALL_STATE(1237)] = 57187, + [SMALL_STATE(1238)] = 57200, + [SMALL_STATE(1239)] = 57211, + [SMALL_STATE(1240)] = 57224, + [SMALL_STATE(1241)] = 57237, + [SMALL_STATE(1242)] = 57250, + [SMALL_STATE(1243)] = 57263, + [SMALL_STATE(1244)] = 57276, + [SMALL_STATE(1245)] = 57289, + [SMALL_STATE(1246)] = 57302, + [SMALL_STATE(1247)] = 57315, + [SMALL_STATE(1248)] = 57328, + [SMALL_STATE(1249)] = 57341, + [SMALL_STATE(1250)] = 57354, + [SMALL_STATE(1251)] = 57367, + [SMALL_STATE(1252)] = 57380, + [SMALL_STATE(1253)] = 57393, + [SMALL_STATE(1254)] = 57406, + [SMALL_STATE(1255)] = 57419, + [SMALL_STATE(1256)] = 57432, + [SMALL_STATE(1257)] = 57445, + [SMALL_STATE(1258)] = 57458, + [SMALL_STATE(1259)] = 57471, + [SMALL_STATE(1260)] = 57484, + [SMALL_STATE(1261)] = 57497, + [SMALL_STATE(1262)] = 57510, + [SMALL_STATE(1263)] = 57523, + [SMALL_STATE(1264)] = 57536, + [SMALL_STATE(1265)] = 57546, + [SMALL_STATE(1266)] = 57556, + [SMALL_STATE(1267)] = 57564, + [SMALL_STATE(1268)] = 57574, + [SMALL_STATE(1269)] = 57584, + [SMALL_STATE(1270)] = 57594, + [SMALL_STATE(1271)] = 57602, + [SMALL_STATE(1272)] = 57612, + [SMALL_STATE(1273)] = 57620, + [SMALL_STATE(1274)] = 57628, + [SMALL_STATE(1275)] = 57638, + [SMALL_STATE(1276)] = 57648, + [SMALL_STATE(1277)] = 57658, + [SMALL_STATE(1278)] = 57666, + [SMALL_STATE(1279)] = 57674, + [SMALL_STATE(1280)] = 57682, + [SMALL_STATE(1281)] = 57692, + [SMALL_STATE(1282)] = 57700, + [SMALL_STATE(1283)] = 57710, + [SMALL_STATE(1284)] = 57718, + [SMALL_STATE(1285)] = 57726, + [SMALL_STATE(1286)] = 57736, + [SMALL_STATE(1287)] = 57746, + [SMALL_STATE(1288)] = 57756, + [SMALL_STATE(1289)] = 57764, + [SMALL_STATE(1290)] = 57774, + [SMALL_STATE(1291)] = 57784, + [SMALL_STATE(1292)] = 57794, + [SMALL_STATE(1293)] = 57804, + [SMALL_STATE(1294)] = 57814, + [SMALL_STATE(1295)] = 57824, + [SMALL_STATE(1296)] = 57832, + [SMALL_STATE(1297)] = 57842, + [SMALL_STATE(1298)] = 57852, + [SMALL_STATE(1299)] = 57860, + [SMALL_STATE(1300)] = 57870, + [SMALL_STATE(1301)] = 57880, + [SMALL_STATE(1302)] = 57890, + [SMALL_STATE(1303)] = 57900, + [SMALL_STATE(1304)] = 57908, + [SMALL_STATE(1305)] = 57916, + [SMALL_STATE(1306)] = 57924, + [SMALL_STATE(1307)] = 57934, + [SMALL_STATE(1308)] = 57944, + [SMALL_STATE(1309)] = 57954, + [SMALL_STATE(1310)] = 57962, + [SMALL_STATE(1311)] = 57972, + [SMALL_STATE(1312)] = 57982, + [SMALL_STATE(1313)] = 57990, + [SMALL_STATE(1314)] = 57998, + [SMALL_STATE(1315)] = 58008, + [SMALL_STATE(1316)] = 58018, + [SMALL_STATE(1317)] = 58028, + [SMALL_STATE(1318)] = 58038, + [SMALL_STATE(1319)] = 58046, + [SMALL_STATE(1320)] = 58056, + [SMALL_STATE(1321)] = 58066, + [SMALL_STATE(1322)] = 58076, + [SMALL_STATE(1323)] = 58086, + [SMALL_STATE(1324)] = 58094, + [SMALL_STATE(1325)] = 58102, + [SMALL_STATE(1326)] = 58112, + [SMALL_STATE(1327)] = 58122, + [SMALL_STATE(1328)] = 58132, + [SMALL_STATE(1329)] = 58142, + [SMALL_STATE(1330)] = 58150, + [SMALL_STATE(1331)] = 58160, + [SMALL_STATE(1332)] = 58170, + [SMALL_STATE(1333)] = 58180, + [SMALL_STATE(1334)] = 58190, + [SMALL_STATE(1335)] = 58200, + [SMALL_STATE(1336)] = 58210, + [SMALL_STATE(1337)] = 58218, + [SMALL_STATE(1338)] = 58228, + [SMALL_STATE(1339)] = 58238, + [SMALL_STATE(1340)] = 58246, + [SMALL_STATE(1341)] = 58256, + [SMALL_STATE(1342)] = 58264, + [SMALL_STATE(1343)] = 58274, + [SMALL_STATE(1344)] = 58282, + [SMALL_STATE(1345)] = 58292, + [SMALL_STATE(1346)] = 58302, + [SMALL_STATE(1347)] = 58312, + [SMALL_STATE(1348)] = 58320, + [SMALL_STATE(1349)] = 58330, + [SMALL_STATE(1350)] = 58340, + [SMALL_STATE(1351)] = 58350, + [SMALL_STATE(1352)] = 58360, + [SMALL_STATE(1353)] = 58370, + [SMALL_STATE(1354)] = 58380, + [SMALL_STATE(1355)] = 58388, + [SMALL_STATE(1356)] = 58398, + [SMALL_STATE(1357)] = 58408, + [SMALL_STATE(1358)] = 58418, + [SMALL_STATE(1359)] = 58428, + [SMALL_STATE(1360)] = 58438, + [SMALL_STATE(1361)] = 58446, + [SMALL_STATE(1362)] = 58456, + [SMALL_STATE(1363)] = 58464, + [SMALL_STATE(1364)] = 58474, + [SMALL_STATE(1365)] = 58481, + [SMALL_STATE(1366)] = 58488, + [SMALL_STATE(1367)] = 58495, + [SMALL_STATE(1368)] = 58502, + [SMALL_STATE(1369)] = 58509, + [SMALL_STATE(1370)] = 58516, + [SMALL_STATE(1371)] = 58523, + [SMALL_STATE(1372)] = 58530, + [SMALL_STATE(1373)] = 58537, + [SMALL_STATE(1374)] = 58544, + [SMALL_STATE(1375)] = 58551, + [SMALL_STATE(1376)] = 58558, + [SMALL_STATE(1377)] = 58565, + [SMALL_STATE(1378)] = 58572, + [SMALL_STATE(1379)] = 58579, + [SMALL_STATE(1380)] = 58586, + [SMALL_STATE(1381)] = 58593, + [SMALL_STATE(1382)] = 58600, + [SMALL_STATE(1383)] = 58607, + [SMALL_STATE(1384)] = 58614, + [SMALL_STATE(1385)] = 58621, + [SMALL_STATE(1386)] = 58628, + [SMALL_STATE(1387)] = 58635, + [SMALL_STATE(1388)] = 58642, + [SMALL_STATE(1389)] = 58649, + [SMALL_STATE(1390)] = 58656, + [SMALL_STATE(1391)] = 58663, + [SMALL_STATE(1392)] = 58670, + [SMALL_STATE(1393)] = 58677, + [SMALL_STATE(1394)] = 58684, + [SMALL_STATE(1395)] = 58691, + [SMALL_STATE(1396)] = 58698, + [SMALL_STATE(1397)] = 58705, + [SMALL_STATE(1398)] = 58712, + [SMALL_STATE(1399)] = 58719, + [SMALL_STATE(1400)] = 58726, + [SMALL_STATE(1401)] = 58733, + [SMALL_STATE(1402)] = 58740, + [SMALL_STATE(1403)] = 58747, + [SMALL_STATE(1404)] = 58754, + [SMALL_STATE(1405)] = 58761, + [SMALL_STATE(1406)] = 58768, + [SMALL_STATE(1407)] = 58775, + [SMALL_STATE(1408)] = 58782, + [SMALL_STATE(1409)] = 58789, + [SMALL_STATE(1410)] = 58796, + [SMALL_STATE(1411)] = 58803, + [SMALL_STATE(1412)] = 58810, + [SMALL_STATE(1413)] = 58817, + [SMALL_STATE(1414)] = 58824, + [SMALL_STATE(1415)] = 58831, + [SMALL_STATE(1416)] = 58838, + [SMALL_STATE(1417)] = 58845, + [SMALL_STATE(1418)] = 58852, + [SMALL_STATE(1419)] = 58859, + [SMALL_STATE(1420)] = 58866, + [SMALL_STATE(1421)] = 58873, + [SMALL_STATE(1422)] = 58880, + [SMALL_STATE(1423)] = 58887, + [SMALL_STATE(1424)] = 58894, + [SMALL_STATE(1425)] = 58901, + [SMALL_STATE(1426)] = 58908, + [SMALL_STATE(1427)] = 58915, + [SMALL_STATE(1428)] = 58922, + [SMALL_STATE(1429)] = 58929, + [SMALL_STATE(1430)] = 58936, + [SMALL_STATE(1431)] = 58943, + [SMALL_STATE(1432)] = 58950, + [SMALL_STATE(1433)] = 58957, + [SMALL_STATE(1434)] = 58964, + [SMALL_STATE(1435)] = 58971, + [SMALL_STATE(1436)] = 58978, + [SMALL_STATE(1437)] = 58985, + [SMALL_STATE(1438)] = 58992, + [SMALL_STATE(1439)] = 58999, + [SMALL_STATE(1440)] = 59006, + [SMALL_STATE(1441)] = 59013, + [SMALL_STATE(1442)] = 59020, + [SMALL_STATE(1443)] = 59027, + [SMALL_STATE(1444)] = 59034, + [SMALL_STATE(1445)] = 59041, + [SMALL_STATE(1446)] = 59048, + [SMALL_STATE(1447)] = 59055, + [SMALL_STATE(1448)] = 59062, + [SMALL_STATE(1449)] = 59069, + [SMALL_STATE(1450)] = 59076, + [SMALL_STATE(1451)] = 59083, + [SMALL_STATE(1452)] = 59090, + [SMALL_STATE(1453)] = 59097, + [SMALL_STATE(1454)] = 59104, + [SMALL_STATE(1455)] = 59111, + [SMALL_STATE(1456)] = 59118, + [SMALL_STATE(1457)] = 59125, + [SMALL_STATE(1458)] = 59132, + [SMALL_STATE(1459)] = 59139, + [SMALL_STATE(1460)] = 59146, + [SMALL_STATE(1461)] = 59153, + [SMALL_STATE(1462)] = 59160, + [SMALL_STATE(1463)] = 59167, + [SMALL_STATE(1464)] = 59174, + [SMALL_STATE(1465)] = 59181, + [SMALL_STATE(1466)] = 59188, + [SMALL_STATE(1467)] = 59195, + [SMALL_STATE(1468)] = 59202, + [SMALL_STATE(1469)] = 59209, + [SMALL_STATE(1470)] = 59216, + [SMALL_STATE(1471)] = 59223, + [SMALL_STATE(1472)] = 59230, + [SMALL_STATE(1473)] = 59237, + [SMALL_STATE(1474)] = 59244, + [SMALL_STATE(1475)] = 59251, + [SMALL_STATE(1476)] = 59258, + [SMALL_STATE(1477)] = 59265, + [SMALL_STATE(1478)] = 59272, + [SMALL_STATE(1479)] = 59279, + [SMALL_STATE(1480)] = 59286, + [SMALL_STATE(1481)] = 59293, + [SMALL_STATE(1482)] = 59300, + [SMALL_STATE(1483)] = 59307, + [SMALL_STATE(1484)] = 59314, + [SMALL_STATE(1485)] = 59321, + [SMALL_STATE(1486)] = 59328, + [SMALL_STATE(1487)] = 59335, + [SMALL_STATE(1488)] = 59342, + [SMALL_STATE(1489)] = 59349, + [SMALL_STATE(1490)] = 59356, + [SMALL_STATE(1491)] = 59363, + [SMALL_STATE(1492)] = 59370, + [SMALL_STATE(1493)] = 59377, + [SMALL_STATE(1494)] = 59384, + [SMALL_STATE(1495)] = 59391, + [SMALL_STATE(1496)] = 59398, + [SMALL_STATE(1497)] = 59405, + [SMALL_STATE(1498)] = 59412, + [SMALL_STATE(1499)] = 59419, + [SMALL_STATE(1500)] = 59426, + [SMALL_STATE(1501)] = 59433, + [SMALL_STATE(1502)] = 59440, + [SMALL_STATE(1503)] = 59447, + [SMALL_STATE(1504)] = 59454, + [SMALL_STATE(1505)] = 59461, + [SMALL_STATE(1506)] = 59468, + [SMALL_STATE(1507)] = 59475, + [SMALL_STATE(1508)] = 59482, + [SMALL_STATE(1509)] = 59489, + [SMALL_STATE(1510)] = 59496, + [SMALL_STATE(1511)] = 59503, + [SMALL_STATE(1512)] = 59510, + [SMALL_STATE(1513)] = 59517, + [SMALL_STATE(1514)] = 59524, + [SMALL_STATE(1515)] = 59531, + [SMALL_STATE(1516)] = 59538, + [SMALL_STATE(1517)] = 59545, + [SMALL_STATE(1518)] = 59552, + [SMALL_STATE(1519)] = 59559, + [SMALL_STATE(1520)] = 59566, + [SMALL_STATE(1521)] = 59573, + [SMALL_STATE(1522)] = 59580, + [SMALL_STATE(1523)] = 59587, + [SMALL_STATE(1524)] = 59594, + [SMALL_STATE(1525)] = 59601, + [SMALL_STATE(1526)] = 59608, + [SMALL_STATE(1527)] = 59615, + [SMALL_STATE(1528)] = 59622, + [SMALL_STATE(1529)] = 59629, + [SMALL_STATE(1530)] = 59636, + [SMALL_STATE(1531)] = 59643, + [SMALL_STATE(1532)] = 59650, + [SMALL_STATE(1533)] = 59657, + [SMALL_STATE(1534)] = 59664, + [SMALL_STATE(1535)] = 59671, + [SMALL_STATE(1536)] = 59678, + [SMALL_STATE(1537)] = 59685, + [SMALL_STATE(1538)] = 59692, + [SMALL_STATE(1539)] = 59699, + [SMALL_STATE(1540)] = 59706, + [SMALL_STATE(1541)] = 59713, + [SMALL_STATE(1542)] = 59720, + [SMALL_STATE(1543)] = 59727, + [SMALL_STATE(1544)] = 59734, + [SMALL_STATE(1545)] = 59741, + [SMALL_STATE(1546)] = 59748, + [SMALL_STATE(1547)] = 59755, + [SMALL_STATE(1548)] = 59762, + [SMALL_STATE(1549)] = 59769, + [SMALL_STATE(1550)] = 59776, + [SMALL_STATE(1551)] = 59783, + [SMALL_STATE(1552)] = 59790, + [SMALL_STATE(1553)] = 59797, + [SMALL_STATE(1554)] = 59804, + [SMALL_STATE(1555)] = 59811, + [SMALL_STATE(1556)] = 59818, + [SMALL_STATE(1557)] = 59825, + [SMALL_STATE(1558)] = 59832, + [SMALL_STATE(1559)] = 59839, + [SMALL_STATE(1560)] = 59846, + [SMALL_STATE(1561)] = 59853, + [SMALL_STATE(1562)] = 59860, + [SMALL_STATE(1563)] = 59867, + [SMALL_STATE(1564)] = 59874, + [SMALL_STATE(1565)] = 59881, + [SMALL_STATE(1566)] = 59888, + [SMALL_STATE(1567)] = 59895, + [SMALL_STATE(1568)] = 59902, + [SMALL_STATE(1569)] = 59909, + [SMALL_STATE(1570)] = 59916, + [SMALL_STATE(1571)] = 59923, + [SMALL_STATE(1572)] = 59930, + [SMALL_STATE(1573)] = 59937, + [SMALL_STATE(1574)] = 59944, + [SMALL_STATE(1575)] = 59951, + [SMALL_STATE(1576)] = 59958, + [SMALL_STATE(1577)] = 59965, + [SMALL_STATE(1578)] = 59972, + [SMALL_STATE(1579)] = 59979, + [SMALL_STATE(1580)] = 59986, + [SMALL_STATE(1581)] = 59993, + [SMALL_STATE(1582)] = 60000, + [SMALL_STATE(1583)] = 60007, + [SMALL_STATE(1584)] = 60014, + [SMALL_STATE(1585)] = 60021, + [SMALL_STATE(1586)] = 60028, + [SMALL_STATE(1587)] = 60035, + [SMALL_STATE(1588)] = 60042, + [SMALL_STATE(1589)] = 60049, + [SMALL_STATE(1590)] = 60056, + [SMALL_STATE(1591)] = 60063, + [SMALL_STATE(1592)] = 60070, + [SMALL_STATE(1593)] = 60077, + [SMALL_STATE(1594)] = 60084, + [SMALL_STATE(1595)] = 60091, + [SMALL_STATE(1596)] = 60098, + [SMALL_STATE(1597)] = 60105, + [SMALL_STATE(1598)] = 60112, + [SMALL_STATE(1599)] = 60119, + [SMALL_STATE(1600)] = 60126, + [SMALL_STATE(1601)] = 60133, + [SMALL_STATE(1602)] = 60140, + [SMALL_STATE(1603)] = 60147, + [SMALL_STATE(1604)] = 60154, + [SMALL_STATE(1605)] = 60161, + [SMALL_STATE(1606)] = 60168, + [SMALL_STATE(1607)] = 60175, + [SMALL_STATE(1608)] = 60182, + [SMALL_STATE(1609)] = 60189, + [SMALL_STATE(1610)] = 60196, + [SMALL_STATE(1611)] = 60203, + [SMALL_STATE(1612)] = 60210, + [SMALL_STATE(1613)] = 60217, + [SMALL_STATE(1614)] = 60224, + [SMALL_STATE(1615)] = 60231, + [SMALL_STATE(1616)] = 60238, + [SMALL_STATE(1617)] = 60245, + [SMALL_STATE(1618)] = 60252, + [SMALL_STATE(1619)] = 60259, + [SMALL_STATE(1620)] = 60266, + [SMALL_STATE(1621)] = 60273, + [SMALL_STATE(1622)] = 60280, + [SMALL_STATE(1623)] = 60287, + [SMALL_STATE(1624)] = 60294, + [SMALL_STATE(1625)] = 60301, + [SMALL_STATE(1626)] = 60308, + [SMALL_STATE(1627)] = 60315, + [SMALL_STATE(1628)] = 60322, + [SMALL_STATE(1629)] = 60329, + [SMALL_STATE(1630)] = 60336, + [SMALL_STATE(1631)] = 60343, + [SMALL_STATE(1632)] = 60350, + [SMALL_STATE(1633)] = 60357, + [SMALL_STATE(1634)] = 60364, + [SMALL_STATE(1635)] = 60371, + [SMALL_STATE(1636)] = 60378, + [SMALL_STATE(1637)] = 60385, + [SMALL_STATE(1638)] = 60392, + [SMALL_STATE(1639)] = 60399, + [SMALL_STATE(1640)] = 60406, + [SMALL_STATE(1641)] = 60413, + [SMALL_STATE(1642)] = 60420, + [SMALL_STATE(1643)] = 60427, + [SMALL_STATE(1644)] = 60434, + [SMALL_STATE(1645)] = 60441, + [SMALL_STATE(1646)] = 60448, + [SMALL_STATE(1647)] = 60455, + [SMALL_STATE(1648)] = 60462, + [SMALL_STATE(1649)] = 60469, + [SMALL_STATE(1650)] = 60476, + [SMALL_STATE(1651)] = 60483, + [SMALL_STATE(1652)] = 60490, + [SMALL_STATE(1653)] = 60497, + [SMALL_STATE(1654)] = 60504, + [SMALL_STATE(1655)] = 60511, + [SMALL_STATE(1656)] = 60518, + [SMALL_STATE(1657)] = 60525, + [SMALL_STATE(1658)] = 60532, + [SMALL_STATE(1659)] = 60539, + [SMALL_STATE(1660)] = 60546, + [SMALL_STATE(1661)] = 60553, + [SMALL_STATE(1662)] = 60560, + [SMALL_STATE(1663)] = 60567, + [SMALL_STATE(1664)] = 60574, + [SMALL_STATE(1665)] = 60581, + [SMALL_STATE(1666)] = 60588, + [SMALL_STATE(1667)] = 60595, + [SMALL_STATE(1668)] = 60602, + [SMALL_STATE(1669)] = 60609, + [SMALL_STATE(1670)] = 60616, + [SMALL_STATE(1671)] = 60623, + [SMALL_STATE(1672)] = 60630, + [SMALL_STATE(1673)] = 60637, + [SMALL_STATE(1674)] = 60644, + [SMALL_STATE(1675)] = 60651, + [SMALL_STATE(1676)] = 60658, + [SMALL_STATE(1677)] = 60665, + [SMALL_STATE(1678)] = 60672, + [SMALL_STATE(1679)] = 60679, + [SMALL_STATE(1680)] = 60686, + [SMALL_STATE(1681)] = 60693, + [SMALL_STATE(1682)] = 60700, + [SMALL_STATE(1683)] = 60707, + [SMALL_STATE(1684)] = 60714, + [SMALL_STATE(1685)] = 60721, + [SMALL_STATE(1686)] = 60728, + [SMALL_STATE(1687)] = 60735, + [SMALL_STATE(1688)] = 60742, + [SMALL_STATE(1689)] = 60749, + [SMALL_STATE(1690)] = 60756, + [SMALL_STATE(1691)] = 60763, + [SMALL_STATE(1692)] = 60770, + [SMALL_STATE(1693)] = 60777, + [SMALL_STATE(1694)] = 60784, + [SMALL_STATE(1695)] = 60791, + [SMALL_STATE(1696)] = 60798, + [SMALL_STATE(1697)] = 60805, + [SMALL_STATE(1698)] = 60812, + [SMALL_STATE(1699)] = 60819, + [SMALL_STATE(1700)] = 60826, + [SMALL_STATE(1701)] = 60833, + [SMALL_STATE(1702)] = 60840, + [SMALL_STATE(1703)] = 60847, + [SMALL_STATE(1704)] = 60854, + [SMALL_STATE(1705)] = 60861, + [SMALL_STATE(1706)] = 60868, + [SMALL_STATE(1707)] = 60875, + [SMALL_STATE(1708)] = 60882, + [SMALL_STATE(1709)] = 60889, + [SMALL_STATE(1710)] = 60896, + [SMALL_STATE(1711)] = 60903, + [SMALL_STATE(1712)] = 60910, + [SMALL_STATE(1713)] = 60917, + [SMALL_STATE(1714)] = 60924, + [SMALL_STATE(1715)] = 60931, + [SMALL_STATE(1716)] = 60938, + [SMALL_STATE(1717)] = 60945, + [SMALL_STATE(1718)] = 60952, + [SMALL_STATE(1719)] = 60959, + [SMALL_STATE(1720)] = 60966, + [SMALL_STATE(1721)] = 60973, + [SMALL_STATE(1722)] = 60980, + [SMALL_STATE(1723)] = 60987, + [SMALL_STATE(1724)] = 60994, + [SMALL_STATE(1725)] = 61001, + [SMALL_STATE(1726)] = 61008, + [SMALL_STATE(1727)] = 61015, + [SMALL_STATE(1728)] = 61022, + [SMALL_STATE(1729)] = 61029, + [SMALL_STATE(1730)] = 61036, + [SMALL_STATE(1731)] = 61043, + [SMALL_STATE(1732)] = 61050, + [SMALL_STATE(1733)] = 61057, + [SMALL_STATE(1734)] = 61064, + [SMALL_STATE(1735)] = 61071, + [SMALL_STATE(1736)] = 61078, + [SMALL_STATE(1737)] = 61085, + [SMALL_STATE(1738)] = 61092, + [SMALL_STATE(1739)] = 61099, + [SMALL_STATE(1740)] = 61106, + [SMALL_STATE(1741)] = 61113, + [SMALL_STATE(1742)] = 61120, + [SMALL_STATE(1743)] = 61127, + [SMALL_STATE(1744)] = 61134, + [SMALL_STATE(1745)] = 61141, + [SMALL_STATE(1746)] = 61148, + [SMALL_STATE(1747)] = 61155, + [SMALL_STATE(1748)] = 61162, + [SMALL_STATE(1749)] = 61169, + [SMALL_STATE(1750)] = 61176, + [SMALL_STATE(1751)] = 61183, + [SMALL_STATE(1752)] = 61190, + [SMALL_STATE(1753)] = 61197, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -55667,268 +57587,267 @@ static const TSParseActionEntry ts_parse_actions[] = { [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 0, 0, 0), - [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(429), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(981), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1206), - [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1479), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(408), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1057), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1238), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1428), [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1268), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1570), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1427), - [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1014), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1602), - [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1646), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(185), - [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(188), - [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1132), - [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1134), - [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1477), - [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(195), - [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1449), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1458), + [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1035), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1656), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1681), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(187), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(190), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1181), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1154), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1408), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(197), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1356), - [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1370), - [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1262), - [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1378), - [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1379), - [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1274), - [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1460), - [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(463), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(489), - [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(489), - [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(419), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), - [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385), - [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), - [81] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), - [83] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(429), - [86] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(981), - [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [92] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1206), - [95] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1479), - [98] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1268), - [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(139), - [104] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1570), - [107] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1427), - [110] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1014), - [113] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1602), - [116] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1646), - [119] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(157), - [122] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(30), - [125] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(185), - [128] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(188), - [131] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1132), - [134] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1134), - [137] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1477), - [140] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(195), - [143] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(51), - [146] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(19), - [149] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1356), - [152] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1370), - [155] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1262), - [158] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1378), - [161] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1379), - [164] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1274), - [167] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1460), - [170] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(463), - [173] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(489), - [176] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(489), - [179] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(224), - [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), - [186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1457), - [188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1616), - [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1368), - [192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [194] = {.entry = {.count = 1, .reusable = false}}, SHIFT(247), - [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 1, 0, 0), - [198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 1, 0, 0), - [202] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1649), - [204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), - [206] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1038), - [208] = {.entry = {.count = 1, .reusable = false}}, SHIFT(189), - [210] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), - [212] = {.entry = {.count = 1, .reusable = false}}, SHIFT(216), - [214] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), - [216] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1235), - [218] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1221), - [220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1678), - [222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), - [224] = {.entry = {.count = 1, .reusable = false}}, SHIFT(190), - [226] = {.entry = {.count = 1, .reusable = false}}, SHIFT(191), - [228] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), - [230] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1718), - [232] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1679), - [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1342), - [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1607), - [238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(354), - [240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), - [242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(379), - [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(732), - [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1407), - [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355), - [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(727), - [252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(227), - [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1523), - [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), - [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(992), - [262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), - [264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(215), - [268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(221), - [270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1232), - [272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1205), - [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1644), - [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), - [280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1465), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1538), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1346), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1711), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1721), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1265), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1454), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(526), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(510), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(510), + [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(399), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), + [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(520), + [81] = {.entry = {.count = 1, .reusable = false}}, SHIFT(294), + [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 1, 0, 0), + [85] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [87] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 1, 0, 0), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1678), + [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1045), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(191), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(218), + [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1241), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1209), + [107] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1707), + [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(193), + [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(194), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), + [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1747), + [119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1708), + [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1361), + [123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1635), + [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(388), + [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), + [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(393), + [131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), + [133] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(408), + [136] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1057), + [139] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [142] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1238), + [145] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1428), + [148] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1268), + [151] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(142), + [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1449), + [157] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1458), + [160] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1035), + [163] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1656), + [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1681), + [169] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(159), + [172] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(43), + [175] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(187), + [178] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(190), + [181] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1181), + [184] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1154), + [187] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1408), + [190] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(197), + [193] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(59), + [196] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(19), + [199] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1465), + [202] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1538), + [205] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1346), + [208] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1711), + [211] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1721), + [214] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1265), + [217] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(1454), + [220] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(526), + [223] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(510), + [226] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(510), + [229] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(227), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), + [236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1667), + [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1726), + [240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1540), + [242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(752), + [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(705), + [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1696), + [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389), + [252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(228), + [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1452), + [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1030), + [262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), + [264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), + [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(217), + [268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(224), + [270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1235), + [272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1159), + [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1673), + [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183), [282] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1712), - [286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1645), - [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1339), - [290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1522), - [292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(259), - [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [296] = {.entry = {.count = 1, .reusable = false}}, SHIFT(250), + [284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1741), + [286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1674), + [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1264), + [290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1549), + [292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), + [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [296] = {.entry = {.count = 1, .reusable = false}}, SHIFT(273), [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), - [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(426), - [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1524), - [304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1014), - [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(157), - [308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), - [310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1231), - [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1714), - [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1341), - [316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1723), - [318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1684), - [320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1415), - [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1423), - [324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1376), - [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1247), - [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1665), - [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(430), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), - [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(992), - [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(494), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), - [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), - [364] = {.entry = {.count = 1, .reusable = false}}, SHIFT(427), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(506), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1038), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), - [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_doc_comment_repeat1, 2, 0, 0), - [386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_doc_comment_repeat1, 2, 0, 0), - [388] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_doc_comment_repeat1, 2, 0, 0), SHIFT_REPEAT(223), - [391] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_doc_comment, 1, 0, 0), - [393] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_doc_comment, 1, 0, 0), - [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [397] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 2, 0, 0), - [399] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 2, 0, 0), - [401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), - [403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1658), - [407] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1208), - [410] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(819), - [413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_qualified_path, 2, 0, 0), - [415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_qualified_path, 2, 0, 0), - [417] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), - [419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), - [421] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1658), - [424] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1209), - [427] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1662), - [431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [435] = {.entry = {.count = 1, .reusable = false}}, SHIFT(101), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1538), - [443] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 8, 0, 95), - [445] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 8, 0, 95), - [447] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ternary_expression, 8, 0, 121), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1340), - [451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 8, 0, 121), - [453] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), - [465] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 5), - [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 5), - [469] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_literal, 2, 0, 0), - [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_literal, 2, 0, 0), + [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(406), + [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1551), + [304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1035), + [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(159), + [308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1140), + [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1369), + [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1271), + [316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1582), + [318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1447), + [320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1467), + [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1506), + [324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1581), + [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1286), + [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1643), + [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(405), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(363), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1030), + [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(512), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(366), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), + [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(491), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(506), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [376] = {.entry = {.count = 1, .reusable = false}}, SHIFT(407), + [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(488), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1045), + [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_doc_comment_repeat1, 2, 0, 0), + [392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_doc_comment_repeat1, 2, 0, 0), + [394] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_doc_comment_repeat1, 2, 0, 0), SHIFT_REPEAT(226), + [397] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_doc_comment, 1, 0, 0), + [399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_doc_comment, 1, 0, 0), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [403] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), + [405] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1654), + [409] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1168), + [412] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(828), + [415] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 2, 0, 0), + [417] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 2, 0, 0), + [419] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), + [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), + [423] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1654), + [426] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_qualified_path, 2, 0, 0), + [428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_qualified_path, 2, 0, 0), + [430] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 6, 0, 65), + [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1655), + [434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1359), + [436] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 6, 0, 65), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [452] = {.entry = {.count = 1, .reusable = false}}, SHIFT(101), + [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1565), + [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1642), + [462] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ternary_expression, 8, 0, 128), + [464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 8, 0, 128), + [466] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1171), + [469] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 5), + [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 5), [473] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_spawn_expression, 2, 0, 0), [475] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_spawn_expression, 2, 0, 0), [477] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 2, 0, 0), [479] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 2, 0, 0), - [481] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_expression, 9, 0, 137), - [483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_expression, 9, 0, 137), - [485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [489] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 8, 0, 103), - [491] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 103), SHIFT(1340), - [494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 103), - [496] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 3, 0, 0), - [498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 3, 0, 0), - [500] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_literal, 3, 0, 0), - [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_literal, 3, 0, 0), - [504] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_literal, 3, 0, 0), - [506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_literal, 3, 0, 0), - [508] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 3, 0, 0), - [510] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 3, 0, 0), - [512] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_literal, 3, 0, 0), - [514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_literal, 3, 0, 0), - [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), - [518] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1223), - [521] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_resume_expression, 3, 0, 0), - [523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_resume_expression, 3, 0, 0), - [525] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_literal, 1, 0, 0), - [527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_literal, 1, 0, 0), - [529] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 3, 0, 11), - [531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 3, 0, 11), - [533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 7, 0, 95), - [535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 7, 0, 95), - [537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pipe_expression, 3, 0, 13), - [539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pipe_expression, 3, 0, 13), - [541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_literal, 4, 0, 0), - [543] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_literal, 4, 0, 0), - [545] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [547] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [549] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 7, 0, 65), - [551] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 7, 0, 65), - [553] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 4, 0, 21), - [555] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), SHIFT(1340), - [558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), + [481] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), + [483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pipe_expression, 3, 0, 13), + [487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pipe_expression, 3, 0, 13), + [489] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 4, 0, 21), + [491] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), SHIFT(1359), + [494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), + [496] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_kernel_expression, 4, 0, 21), + [498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_kernel_expression, 4, 0, 21), + [500] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ternary_expression, 4, 0, 31), + [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 4, 0, 31), + [504] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 5, 0, 36), + [506] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 36), SHIFT(1359), + [509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 36), + [511] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 5, 0, 42), + [513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 5, 0, 42), + [515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ternary_expression, 5, 0, 52), + [517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 5, 0, 52), + [519] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 6, 0, 57), + [521] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 57), SHIFT(1359), + [524] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 57), + [526] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 6, 0, 63), + [528] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 6, 0, 63), + [530] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 7, 0, 84), + [532] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 84), SHIFT(1359), + [535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 84), + [537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 7, 0, 100), + [539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 7, 0, 100), + [541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 8, 0, 110), + [543] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 110), SHIFT(1359), + [546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 110), + [548] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_expression, 4, 2, 23), + [550] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_expression, 4, 2, 23), + [552] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 4, 0, 0), + [554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 4, 0, 0), + [556] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 3, 0, 0), + [558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 3, 0, 0), [560] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_literal, 4, 0, 0), [562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_literal, 4, 0, 0), - [564] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_expression, 4, 2, 23), - [566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_expression, 4, 2, 23), - [568] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_kernel_expression, 4, 0, 21), - [570] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_kernel_expression, 4, 0, 21), + [564] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [568] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_literal, 3, 0, 0), + [570] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_literal, 3, 0, 0), [572] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_select_expression, 4, 0, 0), [574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_expression, 4, 0, 0), [576] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 3, 0, 0), REDUCE(sym_await_call, 4, 0, 0), @@ -55941,1320 +57860,1353 @@ static const TSParseActionEntry ts_parse_actions[] = { [593] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_type_constructor, 4, 1, 4), REDUCE(sym_update_expression, 4, 0, 29), [596] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 4, 0, 30), [598] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 4, 0, 30), - [600] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ternary_expression, 4, 0, 31), - [602] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 4, 0, 31), - [604] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_block, 2, 0, 0), REDUCE(sym_map_literal, 2, 0, 0), - [607] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_block, 2, 0, 0), REDUCE(sym_map_literal, 2, 0, 0), - [610] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 4, 0, 32), - [612] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 4, 0, 32), - [614] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_constructor, 4, 1, 4), - [616] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_constructor, 4, 1, 4), - [618] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 5, 0, 35), - [620] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 35), SHIFT(1340), - [623] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 35), - [625] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_expression, 5, 2, 23), - [627] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_expression, 5, 2, 23), - [629] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 5, 0, 41), - [631] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 5, 0, 41), - [633] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_constructor, 5, 1, 4), - [635] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_constructor, 5, 1, 4), - [637] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 5, 0, 30), - [639] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 5, 0, 30), - [641] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ternary_expression, 5, 0, 48), - [643] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 5, 0, 48), - [645] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 6, 0, 53), - [647] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 53), SHIFT(1340), - [650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 53), - [652] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 6, 0, 59), - [654] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 6, 0, 59), - [656] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 6, 0, 61), - [658] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 6, 0, 61), - [660] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_send_call, 6, 0, 0), - [662] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_send_call, 6, 0, 0), - [664] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 6, 0, 65), - [666] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 6, 0, 65), - [668] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda_expression, 7, 0, 78), - [670] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 78), SHIFT(1340), - [673] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 78), - [675] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_expression, 7, 0, 93), - [677] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_expression, 7, 0, 93), - [679] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_expression, 7, 0, 94), - [681] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_expression, 7, 0, 94), - [683] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 4, 0, 0), - [685] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 4, 0, 0), - [687] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1517), - [690] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1224), - [693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1471), - [695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1325), - [697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(159), - [701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), - [709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [711] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), - [713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), - [717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1617), - [719] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 123), - [721] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 143), - [723] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 124), - [725] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 146), - [727] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), SHIFT(1325), - [730] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 150), - [732] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 151), - [734] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 35), SHIFT(1325), - [737] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 153), - [739] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 156), - [741] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 4, 0, 18), - [743] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 53), SHIFT(1325), - [746] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 78), SHIFT(1325), - [749] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 159), - [751] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 103), SHIFT(1325), - [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 7, 0, 97), - [756] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 160), - [758] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 162), - [760] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 98), - [762] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 165), - [764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 129), - [766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 171), - [768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 172), - [770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 108), - [772] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 174), - [774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 175), - [776] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 176), - [778] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 180), - [780] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 105), - [782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 183), - [784] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 184), - [786] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 187), - [788] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 188), - [790] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 5, 0, 49), - [792] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 6, 0, 52), - [794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 132), - [796] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 54), - [798] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 14, 0, 191), - [800] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 80), - [802] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 81), - [804] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 133), - [806] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_select_arm, 3, 0, 44), - [808] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_select_arm, 3, 0, 44), SHIFT(1340), - [811] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_arm, 3, 0, 44), - [813] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_arm, 3, 0, 44), - [815] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_match_arm, 3, 0, 44), SHIFT(1340), - [818] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_arm, 3, 0, 44), - [820] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1515), - [823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1515), - [825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725), - [827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1518), - [829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514), - [831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1688), - [833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1640), - [835] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1689), - [837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1641), - [839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1690), - [841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1315), - [843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(466), - [845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1647), - [847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(742), - [849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(743), - [851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(744), - [853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1525), - [855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(749), - [857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), - [859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(683), - [861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(684), - [863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(693), - [865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1599), - [867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1715), - [869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(737), - [871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(738), - [873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1455), - [875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(730), - [877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), - [879] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1518), - [882] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1514), - [885] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1688), - [888] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1640), - [891] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1689), - [894] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1641), - [897] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1690), - [900] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1315), - [903] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(466), - [906] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1647), - [909] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(224), - [912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1601), - [914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1513), - [916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1497), - [918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(739), - [920] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1440), - [922] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1443), - [924] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1445), - [926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1595), - [928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), - [930] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1510), - [932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1435), - [934] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1245), - [937] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(186), - [940] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [942] = {.entry = {.count = 1, .reusable = true}}, SHIFT(713), - [944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1399), - [946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1459), - [948] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), - [950] = {.entry = {.count = 1, .reusable = true}}, SHIFT(724), - [952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1499), - [954] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_field_pattern, 1, 0, 0), - [957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1705), - [959] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_identifier, 1, 0, 0), - [961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_identifier, 1, 0, 0), - [963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), - [965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(911), - [967] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), - [969] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1435), - [972] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1230), - [975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(813), - [977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260), - [979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), - [981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1261), - [983] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1091), - [985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(567), - [987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1264), - [989] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1083), - [991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), - [993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(453), - [995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(318), - [997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1485), - [999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), - [1001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), - [1003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1482), - [1005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1266), - [1007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [1009] = {.entry = {.count = 1, .reusable = false}}, SHIFT(107), - [1011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [1013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), - [1015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [1017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [1019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [1021] = {.entry = {.count = 1, .reusable = false}}, SHIFT(100), - [1023] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), SHIFT(1266), - [1026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 0), - [1028] = {.entry = {.count = 1, .reusable = false}}, SHIFT(810), - [1030] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), - [1032] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), - [1034] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1, 0, 0), - [1036] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(810), - [1039] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1260), - [1042] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), - [1044] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1261), - [1047] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1091), - [1050] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(567), - [1053] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1264), - [1056] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1083), - [1059] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1091), - [1062] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1019), - [1064] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [1066] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 1, 0, 0), - [1068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(488), - [1070] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 35), SHIFT(1266), - [1073] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(810), - [1076] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1260), - [1079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), - [1081] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1261), - [1084] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1091), - [1087] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(567), - [1090] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1264), - [1093] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1083), - [1096] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1091), - [1099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1030), - [1101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 53), SHIFT(1266), - [1104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 78), SHIFT(1266), - [1107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460), - [1109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), - [1111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), - [1113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), - [1115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 103), SHIFT(1266), - [1118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [1120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), - [1122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), + [600] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_resume_expression, 3, 0, 0), + [602] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_resume_expression, 3, 0, 0), + [604] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 4, 0, 32), + [606] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 4, 0, 32), + [608] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 4, 0, 33), + [610] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 4, 0, 33), + [612] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_constructor, 4, 1, 4), + [614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_constructor, 4, 1, 4), + [616] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_literal, 1, 0, 0), + [618] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_literal, 1, 0, 0), + [620] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_expression, 5, 2, 23), + [622] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_expression, 5, 2, 23), + [624] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 3, 0, 11), + [626] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 3, 0, 11), + [628] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_constructor, 5, 1, 4), + [630] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_constructor, 5, 1, 4), + [632] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 5, 0, 30), + [634] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 5, 0, 30), + [636] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_literal, 2, 0, 0), + [638] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_literal, 2, 0, 0), + [640] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 5, 0, 33), + [642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 5, 0, 33), + [644] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [646] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [648] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_block, 2, 0, 0), REDUCE(sym_map_literal, 2, 0, 0), + [651] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_block, 2, 0, 0), REDUCE(sym_map_literal, 2, 0, 0), + [654] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_send_call, 6, 0, 0), + [656] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_send_call, 6, 0, 0), + [658] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 6, 0, 69), + [660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 6, 0, 69), + [662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 3, 0, 0), + [664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 3, 0, 0), + [666] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_expression, 7, 0, 99), + [668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_expression, 7, 0, 99), + [670] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_literal, 3, 0, 0), + [672] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_literal, 3, 0, 0), + [674] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 7, 0, 69), + [676] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 7, 0, 69), + [678] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 7, 0, 101), + [680] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 7, 0, 101), + [682] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_literal, 3, 0, 0), + [684] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_literal, 3, 0, 0), + [686] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_perform_expression, 8, 0, 101), + [688] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_perform_expression, 8, 0, 101), + [690] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_literal, 4, 0, 0), + [692] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_literal, 4, 0, 0), + [694] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_expression, 9, 0, 144), + [696] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_expression, 9, 0, 144), + [698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1544), + [700] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1217), + [703] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1544), + [706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), + [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1316), + [710] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 179), + [712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [714] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161), + [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [726] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160), + [728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1645), + [734] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 86), + [736] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 112), + [738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 115), + [740] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 87), + [742] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 5, 0, 53), + [744] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 130), + [746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 131), + [748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 136), + [750] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 139), + [752] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 140), + [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 6, 0, 56), + [756] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 150), + [758] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 153), + [760] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 157), + [762] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 158), + [764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 160), + [766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 163), + [768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 166), + [770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 167), + [772] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 169), + [774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 172), + [776] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 178), + [778] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 4, 0, 18), + [780] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 181), + [782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 182), + [784] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 183), + [786] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 187), + [788] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 190), + [790] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 191), + [792] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 194), + [794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 195), + [796] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 14, 0, 198), + [798] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1219), + [801] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 58), + [803] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 105), + [805] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), SHIFT(1316), + [808] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 36), SHIFT(1316), + [811] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 57), SHIFT(1316), + [814] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 84), SHIFT(1316), + [817] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 110), SHIFT(1316), + [820] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_declaration, 7, 0, 104), + [822] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_arm, 3, 0, 45), + [824] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_match_arm, 3, 0, 45), SHIFT(1359), + [827] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_arm, 3, 0, 45), + [829] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_select_arm, 3, 0, 45), + [831] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_select_arm, 3, 0, 45), SHIFT(1359), + [834] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_arm, 3, 0, 45), + [836] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1542), + [839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1542), + [841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1481), + [843] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1161), + [846] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(188), + [849] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(747), + [853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1545), + [855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1471), + [857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1717), + [859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1669), + [861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1718), + [863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1670), + [865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1719), + [867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1349), + [869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(598), + [871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1676), + [873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1439), + [875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1443), + [877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1405), + [879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1414), + [881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [883] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_field_pattern, 1, 0, 0), + [886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1605), + [888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1735), + [890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1736), + [892] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), + [894] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1545), + [897] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1471), + [900] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1717), + [903] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1669), + [906] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1718), + [909] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1670), + [912] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1719), + [915] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1349), + [918] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(598), + [921] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1676), + [924] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(227), + [927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1752), + [929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), + [931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1425), + [933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(733), + [935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(740), + [937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725), + [939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(700), + [941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1434), + [943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(750), + [945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(755), + [947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(756), + [949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(693), + [951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(694), + [953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1440), + [957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(701), + [959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(707), + [961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(708), + [963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(709), + [965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), + [967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1442), + [969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1470), + [971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1383), + [973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1513), + [975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1389), + [977] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_identifier, 1, 0, 0), + [979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_identifier, 1, 0, 0), + [981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), + [983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(928), + [985] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1481), + [988] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [990] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 1, 0, 0), + [992] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1651), + [994] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [996] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1625), + [998] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 6, 0, 57), SHIFT(1344), + [1001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [1003] = {.entry = {.count = 1, .reusable = false}}, SHIFT(119), + [1005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [1007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [1009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [1011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [1013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [1015] = {.entry = {.count = 1, .reusable = false}}, SHIFT(107), + [1017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [1019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1344), + [1021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [1023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1, 0, 0), + [1025] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1125), + [1028] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 4, 0, 21), SHIFT(1344), + [1031] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_arm, 4, 0, 64), + [1033] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_arm, 3, 0, 41), + [1035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(490), + [1037] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 5, 0, 36), SHIFT(1344), + [1040] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 7, 0, 84), SHIFT(1344), + [1043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), + [1045] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_lambda_expression, 8, 0, 110), SHIFT(1344), + [1048] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [1050] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 0), + [1052] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_assignment, 3, 0, 10), + [1054] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_argument, 3, 0, 10), + [1056] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [1058] = {.entry = {.count = 1, .reusable = false}}, SHIFT(829), + [1060] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1274), + [1062] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [1064] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1277), + [1066] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1072), + [1068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(630), + [1070] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1280), + [1072] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1067), + [1074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1072), + [1076] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_kernel_arm, 4, 0, 43), + [1078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_entry, 3, 0, 17), + [1080] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_kernel_arm, 5, 0, 66), + [1082] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1746), + [1084] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [1086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), + [1088] = {.entry = {.count = 1, .reusable = true}}, SHIFT(753), + [1090] = {.entry = {.count = 1, .reusable = true}}, SHIFT(505), + [1092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), + [1094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1609), + [1096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), + [1098] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(826), + [1101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1274), + [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), + [1106] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1277), + [1109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1072), + [1112] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(630), + [1115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1280), + [1118] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1067), + [1121] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1072), [1124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_declaration, 5, 0, 20), - [1126] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 6, 0, 0), - [1128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 6, 0, 0), - [1130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_assignment, 3, 0, 10), - [1132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_entry, 3, 0, 17), - [1134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1219), - [1136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 1, 0, 4), - [1138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), - [1140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_arm, 4, 0, 60), - [1142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_handler_arm, 3, 0, 40), - [1144] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_kernel_arm, 5, 0, 62), - [1146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), - [1148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(449), - [1150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_argument, 3, 0, 10), - [1152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_kernel_arm, 4, 0, 42), - [1154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1446), - [1156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 4, 0, 0), - [1158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), - [1160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generic_type, 4, 0, 4), - [1162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generic_type, 4, 0, 4), - [1164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_type, 4, 0, 4), - [1166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_type, 4, 0, 4), - [1168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), - [1170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(728), - [1172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 5, 0, 0), - [1174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 5, 0, 0), - [1176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [1178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1398), - [1180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), - [1182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1474), - [1184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), - [1186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(482), - [1188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1615), - [1190] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1470), - [1193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [1195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 2, 0, 0), - [1197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1043), - [1199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), - [1201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(266), - [1203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), - [1205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), - [1207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [1209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [1211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), - [1213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464), - [1215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), - [1217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465), - [1219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [1221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), - [1223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [1225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), - [1227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), - [1229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [1231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [1233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), - [1235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), - [1237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), - [1239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [1241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), - [1243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 10), - [1245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [1247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1581), - [1249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), - [1251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1635), - [1253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), - [1255] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [1257] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), - [1259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), - [1261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(436), - [1263] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [1265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [1267] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1470), - [1269] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1350), - [1271] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1532), - [1273] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1533), - [1275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1537), - [1277] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1277), - [1279] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1549), - [1281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(731), - [1283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), - [1285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1545), - [1287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(745), - [1289] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1530), - [1291] = {.entry = {.count = 1, .reusable = true}}, SHIFT(726), - [1293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1608), - [1295] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), - [1297] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1532), - [1300] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1533), - [1303] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1537), - [1306] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1689), - [1309] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1641), - [1312] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1277), - [1315] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1549), - [1318] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(224), - [1321] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_union_type_repeat1, 2, 0, 0), - [1323] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_union_type_repeat1, 2, 0, 0), SHIFT_REPEAT(1163), - [1326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 2, 0, 0), - [1328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1163), - [1330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 1, 0, 0), - [1332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 4, 0, 4), - [1334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 8, 0, 127), - [1336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1373), - [1338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 4, 0, 84), - [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 7, 0, 85), - [1342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 4, 0, 19), - [1344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 5, 0, 50), - [1346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), - [1348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(890), - [1350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 5, 0, 22), - [1352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias, 1, -1, 0), - [1354] = {.entry = {.count = 1, .reusable = false}}, SHIFT(518), - [1356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1215), - [1358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1344), - [1360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), - [1362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 8, 0, 128), - [1364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 7, 0, 92), - [1366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 5, 0, 38), - [1368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(864), - [1370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 7, 0, 101), - [1372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874), - [1374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 5, 0, 39), - [1376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 6, 0, 57), - [1378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(868), - [1380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 8, 0, 110), - [1382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(854), - [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1146), - [1386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1661), - [1388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(799), - [1390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 10, 0, 148), - [1392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 6, 0, 73), - [1394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(870), - [1396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 6, 0, 74), - [1398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 6, 0, 38), - [1400] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_record_type, 3, 0, 0), - [1402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 8, 0, 92), - [1404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 7, 0, 74), - [1406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 6, 0, 39), - [1408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 5, 0, 38), - [1410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 4, 0, 22), - [1412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 9, 0, 148), - [1414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 9, 0, 128), - [1416] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 9, 0, 110), - [1418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 173), - [1420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 100), - [1422] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 75), - [1424] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 102), - [1426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 76), - [1428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 104), - [1430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 106), - [1432] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 99), - [1434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 8, 0, 109), - [1436] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 8, 0, 85), - [1438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 122), - [1440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 125), - [1442] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 8, 0, 126), - [1444] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 8, 0, 102), - [1446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 130), - [1448] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 131), - [1450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 134), - [1452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 2, 0, 46), - [1454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 142), - [1456] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 144), - [1458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 145), - [1460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 9, 0, 147), - [1462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 9, 0, 127), - [1464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 149), - [1466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 152), - [1468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 157), - [1470] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 158), - [1472] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_item, 1, 0, 0), - [1474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 161), - [1476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 163), - [1478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 164), - [1480] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 170), - [1482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 4, 0, 27), - [1484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 177), - [1486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 4, 0, 8), - [1488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 181), - [1490] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 182), - [1492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 189), - [1494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 37), - [1496] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 3, 0, 67), - [1498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 3, 0, 68), - [1500] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 5, 0, 19), - [1502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 45), - [1504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 27), - [1506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 47), - [1508] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 5, 0, 8), - [1510] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 4, 0, 96), - [1512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 51), - [1514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 5, 0, 33), - [1516] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2, 0, 0), - [1518] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_ref, 1, 0, 4), - [1520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), - [1522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 55), - [1524] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 56), + [1126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 2, 0, 0), + [1128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [1130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [1132] = {.entry = {.count = 1, .reusable = false}}, SHIFT(826), + [1134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), + [1136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), + [1138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), + [1140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(266), + [1142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [1144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [1146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270), + [1148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(516), + [1150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), + [1152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(478), + [1154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [1156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(475), + [1158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), + [1160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(988), + [1162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [1164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1601), + [1166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [1168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(517), + [1170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [1172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), + [1174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), + [1176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499), + [1178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), + [1180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [1182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [1184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [1186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [1188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), + [1190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), + [1192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), + [1194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [1196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(387), + [1198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 10), + [1200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1054), + [1202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(511), + [1204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [1206] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(826), + [1209] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1274), + [1212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), + [1214] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1277), + [1217] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1072), + [1220] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(630), + [1223] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1280), + [1226] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1067), + [1229] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1072), + [1232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [1234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1664), + [1236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [1238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1193), + [1240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 1, 0, 4), + [1242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), + [1244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(482), + [1246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [1248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 5, 0, 0), + [1250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 5, 0, 0), + [1252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(508), + [1254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(519), + [1256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 6, 0, 0), + [1258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 6, 0, 0), + [1260] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 4, 0, 0), + [1262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), + [1264] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generic_type, 4, 0, 4), + [1266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generic_type, 4, 0, 4), + [1268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_type, 4, 0, 4), + [1270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_type, 4, 0, 4), + [1272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [1274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1672), + [1276] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1495), + [1279] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1377), + [1281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1112), + [1283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1451), + [1285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1493), + [1287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1499), + [1289] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1502), + [1291] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1317), + [1293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516), + [1295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1503), + [1297] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1489), + [1299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(691), + [1301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1495), + [1303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), + [1305] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1493), + [1308] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1499), + [1311] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1502), + [1314] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1718), + [1317] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1670), + [1320] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1317), + [1323] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1516), + [1326] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_signature_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(227), + [1329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(704), + [1331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(718), + [1333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(696), + [1335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424), + [1337] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_union_type_repeat1, 2, 0, 0), + [1339] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_union_type_repeat1, 2, 0, 0), SHIFT_REPEAT(1253), + [1342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 1, 0, 0), + [1344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253), + [1346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 2, 0, 0), + [1348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(831), + [1350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(849), + [1352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 5, 0, 54), + [1354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1398), + [1356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 4, 0, 19), + [1358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 8, 0, 134), + [1360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 4, 0, 90), + [1362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 4, 0, 4), + [1364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 7, 0, 91), + [1366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 5, 0, 22), + [1368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 4, 0, 22), + [1370] = {.entry = {.count = 1, .reusable = false}}, SHIFT(613), + [1372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1182), + [1374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1713), + [1376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), + [1378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 5, 0, 39), + [1380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(933), + [1382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 5, 0, 40), + [1384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 5, 0, 39), + [1386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(848), + [1388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1199), + [1390] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1690), + [1392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), + [1394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 6, 0, 61), + [1396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(889), + [1398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_record_type, 3, 0, 0), + [1400] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 6, 0, 40), + [1402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 6, 0, 79), + [1404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(891), + [1406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 6, 0, 80), + [1408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 6, 0, 39), + [1410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 7, 0, 98), + [1412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 7, 0, 108), + [1414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), + [1416] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 7, 0, 80), + [1418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 8, 0, 117), + [1420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 8, 0, 98), + [1422] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 8, 0, 135), + [1424] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 9, 0, 117), + [1426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 9, 0, 155), + [1428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 9, 0, 135), + [1430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_declaration, 10, 0, 155), + [1432] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias, 1, -1, 0), + [1434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 189), + [1436] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 6, 0, 54), + [1438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 5, 0, 8), + [1440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 38), + [1442] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 81), + [1444] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 55), + [1446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 82), + [1448] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 6, 0, 34), + [1450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 85), + [1452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 88), + [1454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 7, 0, 89), + [1456] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 55), + [1458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 70), + [1460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 106), + [1462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 107), + [1464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 5, 0, 34), + [1466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2, 0, 0), + [1468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_ref, 1, 0, 4), + [1470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830), + [1472] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 81), + [1474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 109), + [1476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 82), + [1478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 3, 0, 71), + [1480] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 111), + [1482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 3, 0, 72), + [1484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 113), + [1486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 114), + [1488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 8, 0, 116), + [1490] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 8, 0, 91), + [1492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 59), + [1494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 4, 0, 8), + [1496] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 129), + [1498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 132), + [1500] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 8, 0, 133), + [1502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 60), + [1504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 8, 0, 109), + [1506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 137), + [1508] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 48), + [1510] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 141), + [1512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 5, 0, 19), + [1514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 149), + [1516] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 151), + [1518] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 152), + [1520] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 9, 0, 154), + [1522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 9, 0, 134), + [1524] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 4, 0, 27), [1526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_validation, 2, 0, 0), - [1528] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 45), - [1530] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 66), - [1532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 47), - [1534] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 72), - [1536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 6, 0, 50), - [1538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 75), - [1540] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 51), - [1542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 76), - [1544] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_declaration, 6, 0, 33), - [1546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 79), - [1548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 82), - [1550] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_declaration, 7, 0, 83), - [1552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 7, 0, 66), - [1554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 107), - [1556] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1363), - [1558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(655), - [1560] = {.entry = {.count = 1, .reusable = false}}, SHIFT(967), - [1562] = {.entry = {.count = 1, .reusable = false}}, SHIFT(947), - [1564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 4, 0, 22), - [1566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(888), - [1568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1065), - [1570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1697), - [1572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(675), - [1574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1410), - [1576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(658), - [1578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(650), - [1580] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_symbol_path, 1, 0, 0), - [1582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1584), - [1584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(674), - [1586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672), - [1588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1632), - [1590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665), - [1592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(668), - [1594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1397), - [1596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1603), - [1598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1643), - [1600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671), - [1602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(660), - [1604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670), - [1606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(653), - [1608] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 7, 0, 92), - [1610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(907), - [1612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(678), - [1614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1590), - [1616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676), - [1618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(677), - [1620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(662), - [1622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1432), - [1624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1430), - [1626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1426), - [1628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 5, 0, 119), - [1630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), - [1632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1351), - [1634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1475), - [1636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1478), - [1638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1560), - [1640] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1363), - [1643] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), - [1645] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(967), - [1648] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(947), - [1651] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(224), - [1654] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_symbol_path, 2, 0, 0), - [1656] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 8, 0, 167), - [1658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(914), - [1660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374), - [1662] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 3, 0, 71), - [1664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(855), - [1666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1025), - [1668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 9, 0, 178), - [1670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 6, 0, 139), - [1672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1541), - [1674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1487), - [1676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1694), - [1678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1542), - [1680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1695), - [1682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1655), - [1684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1696), - [1686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1319), - [1688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483), - [1690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1657), - [1692] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 7, 0, 155), - [1694] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 10, 0, 186), - [1696] = {.entry = {.count = 1, .reusable = false}}, SHIFT(649), - [1698] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1716), - [1700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), - [1702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1360), - [1704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1384), - [1706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1596), - [1708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1493), - [1710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1551), - [1712] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 2, 0, 22), - [1714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), - [1716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987), - [1718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1500), - [1720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1326), - [1722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1052), - [1724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1249), - [1726] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 4), - [1728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(809), - [1730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(616), - [1732] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 6, 0, 141), - [1734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(899), - [1736] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_pattern, 1, 0, 0), - [1738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 5, 0, 92), - [1740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(910), - [1742] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_ascription, 2, 0, 28), - [1744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1382), - [1746] = {.entry = {.count = 1, .reusable = false}}, SHIFT(428), - [1748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_module, 3, 0, 70), - [1750] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 8, 0, 168), - [1752] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 7, 0, 154), - [1754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_set, 4, 0, 0), - [1756] = {.entry = {.count = 1, .reusable = false}}, SHIFT(955), - [1758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1512), - [1760] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1512), - [1763] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_value, 4, 0, 91), - [1765] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 8, 0, 169), - [1767] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 4, 0, 19), - [1769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1119), - [1771] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), - [1773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), - [1775] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895), - [1777] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 6, 0, 140), - [1779] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_set, 2, 0, 0), - [1781] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_item, 1, 0, 0), - [1783] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 7, 0, 85), - [1785] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 3, 0, 0), - [1787] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_ascription, 4, 0, 69), - [1789] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 10, 0, 185), - [1791] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_ref, 2, 0, 4), - [1793] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 5, 0, 118), - [1795] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 5, 0, 120), - [1797] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 8, 0, 166), - [1799] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 11, 0, 190), - [1801] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 9, 0, 179), - [1803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), - [1805] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 6, 0, 136), - [1807] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 6, 0, 136), - [1809] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 116), - [1811] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 116), - [1813] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 90), - [1815] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 90), - [1817] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 86), - [1819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 86), - [1821] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1422), - [1823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846), - [1825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1552), - [1827] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 87), - [1829] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 87), - [1831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), - [1833] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 91), - [1835] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 91), - [1837] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 88), - [1839] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 88), - [1841] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1346), - [1843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(915), - [1845] = {.entry = {.count = 1, .reusable = false}}, SHIFT(948), - [1847] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 3, 0, 58), - [1849] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 3, 0, 58), - [1851] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 111), - [1853] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 111), - [1855] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 112), - [1857] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 112), - [1859] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 89), - [1861] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 89), - [1863] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 113), - [1865] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 113), - [1867] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 114), - [1869] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 114), - [1871] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 115), - [1873] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 115), - [1875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1698), - [1877] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1692), - [1879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1438), - [1881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(882), - [1883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1436), - [1885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1442), - [1887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(884), - [1889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1441), - [1891] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 6, 0, 135), - [1893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 6, 0, 135), - [1895] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 3, 0, 20), - [1897] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 3, 0, 20), - [1899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1449), - [1901] = {.entry = {.count = 1, .reusable = false}}, SHIFT(927), - [1903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [1905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [1907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(885), - [1909] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1058), - [1911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [1913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(869), - [1915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [1917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [1919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(903), - [1921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [1923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830), - [1925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [1927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), - [1929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [1931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(861), - [1933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [1935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(898), - [1937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [1939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(902), - [1941] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1355), - [1943] = {.entry = {.count = 1, .reusable = false}}, SHIFT(949), - [1945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), - [1947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(904), - [1949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [1951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(905), - [1953] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_multiplicity, 1, 0, 0), - [1955] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_multiplicity, 1, 0, 0), - [1957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [1959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), - [1961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), - [1965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(901), - [1969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(919), - [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [1975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(906), - [1977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [1979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(900), - [1981] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1275), - [1983] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1519), - [1985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [1987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [1991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [1993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(982), - [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1159), - [1997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1395), - [1999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_name, 1, 0, 0), - [2001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [2003] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_symbol_path, 1, 0, 0), - [2005] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1069), - [2007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(958), - [2009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), - [2011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1337), - [2013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [2017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1648), - [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1329), - [2021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [2023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(960), - [2025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), - [2027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(956), - [2029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(957), - [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), - [2035] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_symbol_path, 2, 0, 0), - [2037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [2039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1257), - [2041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(953), - [2043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1354), - [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [2047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1553), - [2049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [2055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [2057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1660), - [2059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1683), - [2061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [2063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1466), - [2065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(921), - [2067] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1099), - [2069] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120), - [2071] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_target, 2, 0, 7), SHIFT(1403), - [2074] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_target, 2, 0, 7), - [2076] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_target, 1, 0, 3), SHIFT(1403), - [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_target, 1, 0, 3), - [2081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2, 0, 0), - [2083] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), - [2085] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_union_type_repeat1, 2, 0, 0), SHIFT_REPEAT(1121), - [2088] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_structural_pattern, 5, 0, 0), - [2090] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), - [2092] = {.entry = {.count = 1, .reusable = false}}, SHIFT(172), - [2094] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), - [2096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 5, 0, 4), - [2098] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 2, 0, 25), - [2100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_target_repeat1, 2, 0, 16), SHIFT_REPEAT(1403), - [2103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_import_target_repeat1, 2, 0, 16), - [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1464), - [2107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1306), - [2109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113), - [2111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1107), - [2113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1529), - [2115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 6, 0, 117), - [2117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1039), - [2119] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 7, 0, 138), - [2121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1691), - [2123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(165), - [2125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(752), - [2127] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_parameter_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1164), - [2130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_parameter_list_repeat1, 2, 0, 0), - [2132] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), - [2134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(733), - [2136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1046), - [2138] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_positional_payload_repeat1, 2, 0, 0), SHIFT_REPEAT(893), - [2141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_positional_payload_repeat1, 2, 0, 0), - [2143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_structural_pattern, 3, 0, 0), - [2145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1, 0, 4), - [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(831), - [2149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1284), - [2151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1437), - [2153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 2), - [2155] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 4, 0, 63), - [2157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 4, 0, 4), - [2159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(656), - [2161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1121), - [2163] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), - [2165] = {.entry = {.count = 1, .reusable = false}}, SHIFT(220), - [2167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), - [2169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772), - [2171] = {.entry = {.count = 1, .reusable = false}}, SHIFT(110), - [2173] = {.entry = {.count = 1, .reusable = false}}, SHIFT(196), - [2175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, 0, 43), - [2177] = {.entry = {.count = 1, .reusable = false}}, SHIFT(168), - [2179] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 0), SHIFT_REPEAT(194), - [2182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1179), - [2184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [2186] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_kernel_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1691), - [2189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_kernel_expression_repeat1, 2, 0, 0), - [2191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1164), - [2193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 1, 0, 0), - [2195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 2, 0, 0), - [2197] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_handler_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1099), - [2200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_handler_expression_repeat1, 2, 0, 0), - [2202] = {.entry = {.count = 1, .reusable = false}}, SHIFT(119), - [2204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), - [2206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893), - [2208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_list, 1, 0, 0), - [2210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(664), - [2212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_list, 2, 0, 0), - [2214] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), - [2216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 3, 0, 20), - [2218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 4, 0, 63), - [2220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 2, 0, 24), - [2222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), - [2224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [2226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [2228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1634), - [2230] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(619), - [2233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_pattern_repeat1, 2, 0, 0), - [2235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), - [2237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), - [2239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1352), - [2241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member, 1, 0, 4), - [2243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member_list, 1, 0, 0), - [2245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1248), - [2247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1062), - [2249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter_list, 2, 0, 0), - [2251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [2253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_legacy_import_path, 2, 0, 0), - [2255] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [2257] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [2259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1114), - [2261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_list, 2, 0, 0), - [2263] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1282), - [2265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_parameter_list, 1, 0, 0), - [2267] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [2269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_declarations, 1, 0, 0), - [2271] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1290), - [2273] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1548), - [2275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [2277] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1720), - [2279] = {.entry = {.count = 1, .reusable = true}}, SHIFT(936), - [2281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [2283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(403), - [2285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1611), - [2287] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_legacy_import_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1395), - [2290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_legacy_import_path_repeat1, 2, 0, 0), - [2292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_import_target_repeat1, 2, 0, 15), - [2294] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_handler_params_repeat1, 2, 0, 0), SHIFT_REPEAT(1127), - [2297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_handler_params_repeat1, 2, 0, 0), - [2299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [2301] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_effect_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1114), - [2304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_effect_list_repeat1, 2, 0, 0), - [2306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_field_assignments_repeat1, 2, 0, 0), - [2308] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_field_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(1336), - [2311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1308), - [2313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1097), - [2315] = {.entry = {.count = 1, .reusable = false}}, SHIFT(937), - [2317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1293), - [2319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(560), - [2321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1071), - [2323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1691), - [2325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(619), - [2327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1072), - [2329] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_map_literal_repeat1, 2, 0, 0), - [2331] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_map_literal_repeat1, 2, 0, 0), SHIFT_REPEAT(40), - [2334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [2336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_assignments, 2, 0, 0), - [2338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1336), - [2340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [2342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [2344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), - [2346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [2348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter_list, 1, 0, 0), - [2350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [2352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [2354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2, 0, 0), - [2356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1305), - [2358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_argument_list, 2, 0, 0), - [2360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [2362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_field_pattern_repeat1, 2, 0, 0), - [2364] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_field_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(1705), - [2367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), - [2371] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 3, 0, 20), - [2373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), - [2375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [2377] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member_list, 2, 0, 0), - [2379] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameter_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1062), - [2382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameter_list_repeat1, 2, 0, 0), - [2384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [2386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(618), - [2388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [2390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_parameter_list, 2, 0, 0), - [2392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [2394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), - [2396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), - [2398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_declarations, 2, 0, 0), - [2400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [2402] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_field_pattern, 1, 0, 0), SHIFT(1705), - [2405] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_payload, 1, 0, 0), - [2407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [2409] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_assignments, 1, 0, 0), - [2411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [2413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1127), - [2415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_params, 1, 0, 0), - [2417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(452), - [2419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), - [2421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418), - [2423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [2425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [2427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [2429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [2431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [2433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [2435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [2437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [2439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [2441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), - [2443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [2445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(546), - [2447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1081), - [2449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [2451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), - [2453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), - [2455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1605), - [2457] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_pattern, 2, 0, 0), - [2459] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_field_pattern, 2, 0, 0), SHIFT(1705), - [2462] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_tuple_pattern_repeat1, 2, 0, 64), SHIFT_REPEAT(1308), - [2465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tuple_pattern_repeat1, 2, 0, 64), - [2467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), - [2469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), - [2471] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_pattern_repeat1, 2, 0, 64), SHIFT_REPEAT(625), - [2474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_pattern_repeat1, 2, 0, 64), - [2476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1051), - [2478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1251), - [2480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(420), - [2482] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_named_argument_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1305), - [2485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_named_argument_list_repeat1, 2, 0, 0), - [2487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(423), - [2489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(407), - [2491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [2493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), - [2495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), - [2497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_import_member_list_repeat1, 2, 0, 0), - [2499] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_member_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1248), - [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [2504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_list, 1, 0, 0), - [2506] = {.entry = {.count = 1, .reusable = false}}, SHIFT(929), - [2508] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1317), - [2510] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_extern_parameter_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1282), - [2513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_extern_parameter_list_repeat1, 2, 0, 0), - [2515] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_declaration, 3, 0, 20), - [2517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [2519] = {.entry = {.count = 1, .reusable = false}}, SHIFT(938), - [2521] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1327), - [2523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_field_declarations_repeat1, 2, 0, 0), - [2525] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_field_declarations_repeat1, 2, 0, 0), SHIFT_REPEAT(1290), - [2528] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_payload, 2, 0, 0), - [2530] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_argument_list, 1, 0, 0), - [2532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(985), - [2534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1106), - [2536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tuple_pattern_repeat1, 2, 0, 43), - [2538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860), - [2540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [2542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(759), - [2544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1008), - [2546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(909), - [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(913), - [2552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_pattern_repeat1, 2, 0, 43), - [2554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1172), - [2556] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1332), - [2558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1016), - [2560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1098), - [2562] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1098), - [2564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(912), - [2566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [2568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1269), - [2570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(989), - [2572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1001), - [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1012), - [2576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(863), - [2578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [2580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(667), - [2582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1023), - [2584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(754), - [2586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1029), - [2588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1520), - [2590] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 1, 0, 4), - [2592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(762), - [2594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(996), - [2596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(984), - [2598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061), - [2600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(756), - [2602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(974), - [2604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838), - [2606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1286), - [2608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1056), - [2610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1404), - [2612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(760), - [2614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1031), - [2616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(758), - [2618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), - [2620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(763), - [2622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1032), - [2624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(930), - [2626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(654), - [2628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1024), - [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(897), - [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), - [2636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(979), - [2638] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member, 3, 0, 77), - [2640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(673), - [2642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020), - [2644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1543), - [2646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(871), - [2648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1253), - [2650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), - [2652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1002), - [2656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1005), - [2658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), - [2660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [2662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1035), - [2664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998), - [2666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(932), - [2668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_parameter, 3, 0, 20), - [2670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1036), - [2672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1000), - [2674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(679), - [2676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1026), - [2678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(941), - [2680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), - [2682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [2684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1067), - [2686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1433), - [2688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(753), - [2690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(980), - [2692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(837), - [2694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [2696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), - [2698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [2700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1028), - [2702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1311), - [2704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1033), - [2706] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 2, 0, 36), - [2708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), - [2710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1256), - [2712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(883), - [2714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [2716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812), - [2718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1300), - [2720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 4, 0, 0), - [2722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [2724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(886), - [2726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [2728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), - [2730] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 1), - [2732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [2734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(844), - [2736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), - [2738] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), - [2740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(916), - [2742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1054), - [2744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1381), - [2746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [2748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [2750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), - [2752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(659), - [2754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), - [2756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(736), - [2758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(666), - [2760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1334), - [2762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1380), - [2764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [2766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), - [2768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(755), - [2770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(875), - [2772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(629), - [2774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(877), - [2776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1296), - [2778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1246), - [2780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [2782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [2784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(986), - [2786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1250), - [2788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [2790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1195), - [2792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(478), - [2794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(642), - [2796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), - [2798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1126), - [2800] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 2, 0, 0), - [2802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [2804] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 2, 0, 14), - [2806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(918), - [2808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1237), - [2810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(657), - [2812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(652), - [2814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1238), - [2816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1345), - [2818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1276), - [2820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(835), - [2822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1077), - [2824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(881), - [2826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1331), - [2828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [2830] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [2832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1303), - [2834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(766), - [2836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), - [2838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1467), - [2840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(634), - [2842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), - [2844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840), - [2846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1406), - [2848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841), - [2850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [2852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843), - [2854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(845), - [2856] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 3, 0, 6), - [2858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(962), - [2860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(848), - [2862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473), - [2864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(512), - [2866] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_body, 2, 0, 0), - [2868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [2870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1434), - [2872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1103), - [2874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), - [2876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(872), - [2878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1281), - [2880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), - [2882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1047), - [2884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [2886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615), - [2888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), - [2890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1604), - [2892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), - [2894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1254), - [2896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [2898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), - [2900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442), - [2902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), - [2904] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1321), - [2906] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330), - [2908] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1707), - [2910] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [2912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(500), - [2914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1458), - [2916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(833), - [2918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), - [2920] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), - [2922] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [2924] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839), - [2926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(532), - [2928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(533), - [2930] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [2932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [2934] = {.entry = {.count = 1, .reusable = true}}, SHIFT(347), - [2936] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842), - [2938] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), - [2940] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), - [2942] = {.entry = {.count = 1, .reusable = true}}, SHIFT(922), - [2944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1316), - [2946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(391), - [2948] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), - [2950] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1314), - [2952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1343), - [2954] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1511), - [2956] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), - [2958] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [2960] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), - [2962] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1680), - [2964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1685), - [2966] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), - [2968] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 3, 0, 0), - [2970] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), - [2972] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1528), - [2974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278), - [2976] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1393), - [2978] = {.entry = {.count = 1, .reusable = true}}, SHIFT(631), - [2980] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), - [2982] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), - [2984] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [2986] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791), - [2988] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1338), - [2990] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1297), - [2992] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [2994] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1298), - [2996] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1073), - [2998] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), - [3000] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1539), - [3002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828), - [3004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(879), - [3006] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1490), - [3008] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1531), - [3010] = {.entry = {.count = 1, .reusable = true}}, SHIFT(630), - [3012] = {.entry = {.count = 1, .reusable = true}}, SHIFT(988), - [3014] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), - [3016] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1375), - [3018] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), - [3020] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), - [3022] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [3024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(405), - [3026] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1492), - [3028] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1588), - [3030] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1288), - [3032] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1093), - [3034] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), - [3036] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1258), - [3038] = {.entry = {.count = 1, .reusable = true}}, SHIFT(954), - [3040] = {.entry = {.count = 1, .reusable = true}}, SHIFT(661), - [3042] = {.entry = {.count = 1, .reusable = true}}, SHIFT(751), - [3044] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1169), - [3046] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [3048] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1408), - [3050] = {.entry = {.count = 1, .reusable = true}}, SHIFT(961), - [3052] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1413), - [3054] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), - [3056] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1364), - [3058] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1431), - [3060] = {.entry = {.count = 1, .reusable = true}}, SHIFT(769), - [3062] = {.entry = {.count = 1, .reusable = true}}, SHIFT(765), - [3064] = {.entry = {.count = 1, .reusable = true}}, SHIFT(771), - [3066] = {.entry = {.count = 1, .reusable = true}}, SHIFT(964), - [3068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829), - [3070] = {.entry = {.count = 1, .reusable = true}}, SHIFT(775), - [3072] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), - [3074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1419), - [3076] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1057), - [3078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 3, 0, 8), - [3080] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), - [3082] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [3084] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1476), - [3086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1353), - [3088] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1417), - [3090] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [3092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1676), - [3094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_body, 3, 0, 0), - [3096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [3098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(971), - [3100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 3, 0, 9), - [3102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1265), - [3104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), - [3106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [3108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [3110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1335), - [3112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(663), - [3114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), - [3116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [3118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(484), - [3120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1558), - [3122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), - [3124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1102), - [3126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [3128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1507), - [3130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), - [3132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1271), - [3134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1272), - [3136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(536), - [3138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), - [3140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1299), - [3142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1535), - [3144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [3146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1011), - [3148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1546), - [3150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1280), - [3152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959), - [3154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1213), - [3156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1285), - [3158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1627), - [3160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1557), - [3162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [3164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1564), - [3166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(801), - [3168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), - [3170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1572), - [3172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1292), - [3174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1383), - [3176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1580), - [3178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1428), - [3180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1582), - [3182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [3184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1579), - [3186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1003), - [3188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1591), - [3190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1593), - [3192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1006), - [3194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1598), - [3196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1059), - [3198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1421), - [3200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(526), - [3202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), - [3204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1227), - [3206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1629), - [3208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1324), - [3210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1078), - [3212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1636), - [3214] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [3216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1650), - [3218] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1651), - [3220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1318), - [3222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1085), - [3224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(878), - [3226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1663), - [3228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1664), - [3230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1322), - [3232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(880), - [3234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1668), - [3236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1669), - [3238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1671), - [3240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1592), - [3242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [3244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1674), - [3246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1309), - [3248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(414), - [3250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [3252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), - [3254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(467), - [3256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1686), - [3258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1687), - [3260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [3262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867), - [3264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1310), - [3266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), - [3268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1270), - [3270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [3272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 4, 0, 33), - [3274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), - [3276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 4, 0, 34), - [3278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1677), - [3280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [1528] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 156), + [1530] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 159), + [1532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 164), + [1534] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 165), + [1536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 10, 0, 168), + [1538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 46), + [1540] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 170), + [1542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 171), + [1544] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 177), + [1546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 11, 0, 180), + [1548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 184), + [1550] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 12, 0, 188), + [1552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 5, 0, 27), + [1554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 13, 0, 196), + [1556] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 4, 0, 102), + [1558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 46), + [1560] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_item, 1, 0, 0), + [1562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 70), + [1564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module_declaration, 6, 0, 48), + [1566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 78), + [1568] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_declaration, 2, 0, 47), + [1570] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 9, 0, 138), + [1572] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1571), + [1574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1436), + [1576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(974), + [1578] = {.entry = {.count = 1, .reusable = false}}, SHIFT(962), + [1580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1464), + [1582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1526), + [1584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1475), + [1586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1547), + [1588] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 4, 0, 22), + [1590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843), + [1592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088), + [1594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1511), + [1596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1548), + [1598] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 5, 0, 126), + [1600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(863), + [1602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1591), + [1604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1596), + [1606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1402), + [1608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1419), + [1610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1365), + [1612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(660), + [1614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1641), + [1616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1488), + [1618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(663), + [1620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(659), + [1622] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 7, 0, 98), + [1624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(883), + [1626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(664), + [1628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), + [1630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671), + [1632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672), + [1634] = {.entry = {.count = 1, .reusable = false}}, SHIFT(651), + [1636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1390), + [1638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), + [1640] = {.entry = {.count = 1, .reusable = false}}, SHIFT(858), + [1642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(673), + [1644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676), + [1646] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 8, 0, 174), + [1648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(897), + [1650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(677), + [1652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(678), + [1654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(679), + [1656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(680), + [1658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681), + [1660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), + [1662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(683), + [1664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1618), + [1666] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1571), + [1669] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), + [1671] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(974), + [1674] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(962), + [1677] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_effect_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(227), + [1680] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_symbol_path, 1, 0, 0), + [1682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_symbol_path, 2, 0, 0), + [1684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1429), + [1686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1541), + [1688] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 6, 0, 146), + [1690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1569), + [1692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1403), + [1694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1723), + [1696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1570), + [1698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1724), + [1700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1684), + [1702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1725), + [1704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1353), + [1706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(561), + [1708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1686), + [1710] = {.entry = {.count = 1, .reusable = false}}, SHIFT(845), + [1712] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 3, 0, 75), + [1714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(927), + [1716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1009), + [1718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1432), + [1720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 9, 0, 185), + [1722] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 10, 0, 193), + [1724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 7, 0, 162), + [1726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1384), + [1728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1409), + [1730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1519), + [1732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1527), + [1734] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 2, 0, 22), + [1736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(890), + [1738] = {.entry = {.count = 1, .reusable = true}}, SHIFT(999), + [1740] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 5, 0, 98), + [1742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), + [1744] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 6, 0, 148), + [1746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(875), + [1748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_ascription, 2, 0, 28), + [1750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1407), + [1752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1104), + [1754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1300), + [1756] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 4), + [1758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(833), + [1760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(634), + [1762] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_pattern, 1, 0, 0), + [1764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1294), + [1766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_ref, 2, 0, 4), + [1768] = {.entry = {.count = 1, .reusable = false}}, SHIFT(437), + [1770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_item, 1, 0, 0), + [1772] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 5, 0, 125), + [1774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 5, 0, 127), + [1776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1539), + [1778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1135), + [1780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), + [1782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822), + [1784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), + [1786] = {.entry = {.count = 1, .reusable = false}}, SHIFT(983), + [1788] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_qualified_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1539), + [1791] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 6, 0, 147), + [1793] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_ascription, 4, 0, 73), + [1795] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 7, 0, 161), + [1797] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 7, 0, 91), + [1799] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_set, 2, 0, 0), + [1801] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_set, 4, 0, 0), + [1803] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 8, 0, 173), + [1805] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 3, 0, 0), + [1807] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 8, 0, 175), + [1809] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 8, 0, 176), + [1811] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_module, 3, 0, 74), + [1813] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 9, 0, 186), + [1815] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 10, 0, 192), + [1817] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_function, 11, 0, 197), + [1819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_value, 4, 0, 97), + [1821] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signature_type, 4, 0, 19), + [1823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828), + [1825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1082), + [1827] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 96), + [1829] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 96), + [1831] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 6, 0, 142), + [1833] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 6, 0, 142), + [1835] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1515), + [1837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(902), + [1839] = {.entry = {.count = 1, .reusable = false}}, SHIFT(942), + [1841] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 6, 0, 143), + [1843] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 6, 0, 143), + [1845] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1632), + [1847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860), + [1849] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1631), + [1851] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1639), + [1853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), + [1855] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1638), + [1857] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1646), + [1859] = {.entry = {.count = 1, .reusable = false}}, SHIFT(952), + [1861] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 97), + [1863] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 97), + [1865] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 123), + [1867] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 123), + [1869] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 3, 0, 20), + [1871] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 3, 0, 20), + [1873] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 118), + [1875] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 118), + [1877] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 119), + [1879] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 119), + [1881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1745), + [1883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(906), + [1885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1744), + [1887] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 120), + [1889] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 120), + [1891] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 92), + [1893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 92), + [1895] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 121), + [1897] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 121), + [1899] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 93), + [1901] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 93), + [1903] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 94), + [1905] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 94), + [1907] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 5, 0, 122), + [1909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 5, 0, 122), + [1911] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1482), + [1913] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1472), + [1915] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 3, 0, 62), + [1917] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 3, 0, 62), + [1919] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operation_declaration, 4, 0, 95), + [1921] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation_declaration, 4, 0, 95), + [1923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [1925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [1927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(920), + [1929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1100), + [1931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [1933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [1935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), + [1937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [1939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(918), + [1941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [1943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867), + [1945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [1947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895), + [1949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [1951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(919), + [1953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [1955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), + [1957] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_multiplicity, 1, 0, 0), + [1959] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_multiplicity, 1, 0, 0), + [1961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(922), + [1965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(871), + [1969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(923), + [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [1975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(878), + [1977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [1979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(916), + [1981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [1983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(932), + [1985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [1987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), + [1989] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1535), + [1991] = {.entry = {.count = 1, .reusable = false}}, SHIFT(943), + [1993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(924), + [1997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [1999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(921), + [2001] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1360), + [2003] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1738), + [2005] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1070), + [2007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1314), + [2009] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1082), + [2011] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113), + [2013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), + [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), + [2017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [2019] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120), + [2021] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121), + [2023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [2025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [2027] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [2029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1657), + [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [2035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), + [2037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [2039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [2041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [2043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [2047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [2049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1685), + [2055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_name, 1, 0, 0), + [2057] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), + [2059] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [2061] = {.entry = {.count = 1, .reusable = false}}, SHIFT(173), + [2063] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), + [2065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [2067] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_symbol_path, 1, 0, 0), + [2069] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [2071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1586), + [2073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1287), + [2075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(979), + [2077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1606), + [2079] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_symbol_path, 2, 0, 0), + [2081] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [2083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), + [2085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(971), + [2087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(986), + [2089] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_handler_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1082), + [2092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_handler_expression_repeat1, 2, 0, 0), + [2094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(977), + [2096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1491), + [2098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1363), + [2100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [2102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(220), + [2104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [2106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1689), + [2108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1022), + [2110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1120), + [2112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1712), + [2114] = {.entry = {.count = 1, .reusable = false}}, SHIFT(176), + [2116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 3, 0, 20), + [2118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_positional_payload_repeat1, 2, 0, 0), SHIFT_REPEAT(851), + [2121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_positional_payload_repeat1, 2, 0, 0), + [2123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1373), + [2125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1269), + [2127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1138), + [2129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1, 0, 4), + [2131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(931), + [2133] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, 0, 0), SHIFT_REPEAT(196), + [2136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), + [2138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1191), + [2140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 1, 0, 0), + [2142] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_target, 2, 0, 7), SHIFT(1381), + [2145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_target, 2, 0, 7), + [2147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 4, 0, 67), + [2149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 7, 0, 145), + [2151] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_union_type_repeat1, 2, 0, 0), SHIFT_REPEAT(1138), + [2154] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 6, 0, 124), + [2156] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1675), + [2158] = {.entry = {.count = 1, .reusable = false}}, SHIFT(110), + [2160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1187), + [2162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [2164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 2, 0, 0), + [2166] = {.entry = {.count = 1, .reusable = false}}, SHIFT(198), + [2168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(934), + [2170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851), + [2172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_list, 1, 0, 0), + [2174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1289), + [2176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1366), + [2178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 2), + [2180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(706), + [2182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1085), + [2184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_structural_pattern, 3, 0, 0), + [2186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 2, 0, 24), + [2188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, 0, 44), + [2190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_list, 2, 0, 0), + [2192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), + [2194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [2196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(662), + [2198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_structural_pattern, 5, 0, 0), + [2200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1137), + [2202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1706), + [2204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1089), + [2206] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_target_repeat1, 2, 0, 16), SHIFT_REPEAT(1381), + [2209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_import_target_repeat1, 2, 0, 16), + [2211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(167), + [2213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670), + [2215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 2, 0, 25), + [2217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 4, 0, 4), + [2219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 5, 0, 4), + [2221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(765), + [2223] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_kernel_expression_repeat1, 2, 0, 0), SHIFT_REPEAT(1675), + [2226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_kernel_expression_repeat1, 2, 0, 0), + [2228] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_target, 1, 0, 3), SHIFT(1381), + [2231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_target, 1, 0, 3), + [2233] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_parameter_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1191), + [2236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_parameter_list_repeat1, 2, 0, 0), + [2238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2, 0, 0), + [2240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1275), + [2242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 4, 0, 67), + [2244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), + [2246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1290), + [2248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [2250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1080), + [2252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter_list, 2, 0, 0), + [2254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_assignments, 2, 0, 0), + [2256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), + [2258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), + [2260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_type_list, 1, 0, 0), + [2262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_assignments, 1, 0, 0), + [2264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [2266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [2268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [2270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [2272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1378), + [2274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [2276] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_pattern_repeat1, 2, 0, 68), SHIFT_REPEAT(635), + [2279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_pattern_repeat1, 2, 0, 68), + [2281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [2283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [2285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1335), + [2287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_parameter_list, 1, 0, 0), + [2289] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [2291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_declarations, 1, 0, 0), + [2293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1337), + [2295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1554), + [2297] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [2299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1507), + [2301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member, 1, 0, 4), + [2303] = {.entry = {.count = 1, .reusable = true}}, SHIFT(956), + [2305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1266), + [2307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1142), + [2309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_list, 2, 0, 0), + [2311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [2313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_payload, 2, 0, 0), + [2315] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member_list, 1, 0, 0), + [2317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1319), + [2319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(489), + [2321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [2323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [2325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [2327] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(632), + [2330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_pattern_repeat1, 2, 0, 0), + [2332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [2334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1675), + [2336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(500), + [2338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(433), + [2340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [2342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [2344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_pattern, 2, 0, 0), + [2346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1694), + [2348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(632), + [2350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1107), + [2352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), + [2354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [2356] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_handler_params_repeat1, 2, 0, 0), SHIFT_REPEAT(1166), + [2359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_handler_params_repeat1, 2, 0, 0), + [2361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), + [2363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(503), + [2365] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_field_pattern_repeat1, 2, 0, 0), + [2367] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_field_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(1605), + [2370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1311), + [2372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_argument_list, 2, 0, 0), + [2374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [2376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), + [2378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [2380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418), + [2382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(963), + [2384] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1267), + [2386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member_list, 2, 0, 0), + [2388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), + [2390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1092), + [2392] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_named_argument_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1311), + [2395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_named_argument_list_repeat1, 2, 0, 0), + [2397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1166), + [2399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_handler_params, 1, 0, 0), + [2401] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameter_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1080), + [2404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameter_list_repeat1, 2, 0, 0), + [2406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [2408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(423), + [2410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_import_member_list_repeat1, 2, 0, 0), + [2412] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_member_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1319), + [2415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [2417] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_effect_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1142), + [2420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_effect_list_repeat1, 2, 0, 0), + [2422] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_declaration, 3, 0, 20), + [2424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [2426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_type_list, 3, 0, 76), + [2428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_declarations, 2, 0, 0), + [2430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [2432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1633), + [2434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [2436] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2, 0, 0), + [2438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter_list, 1, 0, 0), + [2440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [2442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [2444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(413), + [2446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [2448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [2450] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_tuple_pattern_repeat1, 2, 0, 68), SHIFT_REPEAT(1288), + [2453] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tuple_pattern_repeat1, 2, 0, 68), + [2455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_effect_list, 1, 0, 0), + [2457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [2459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1288), + [2461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1075), + [2463] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_legacy_import_path_repeat1, 2, 0, 0), SHIFT_REPEAT(1685), + [2466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_legacy_import_path_repeat1, 2, 0, 0), + [2468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [2470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(629), + [2472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1114), + [2474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [2476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_field_declarations_repeat1, 2, 0, 0), + [2478] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_field_declarations_repeat1, 2, 0, 0), SHIFT_REPEAT(1337), + [2481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [2483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [2485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 3, 0, 20), + [2487] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_field_pattern, 2, 0, 0), SHIFT(1605), + [2490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [2492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_parameter_list, 2, 0, 0), + [2494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1105), + [2496] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__call_type_list_repeat1, 2, 0, 77), SHIFT_REPEAT(805), + [2499] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__call_type_list_repeat1, 2, 0, 77), + [2501] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_import_target_repeat1, 2, 0, 15), + [2503] = {.entry = {.count = 1, .reusable = false}}, SHIFT(946), + [2505] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1351), + [2507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [2509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(414), + [2511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [2513] = {.entry = {.count = 1, .reusable = false}}, SHIFT(958), + [2515] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1357), + [2517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [2519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [2521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), + [2523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_type_list, 2, 0, 50), + [2525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [2527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_legacy_import_path, 2, 0, 0), + [2529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [2531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [2533] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_payload, 1, 0, 0), + [2535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_field_assignments_repeat1, 2, 0, 0), + [2537] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_field_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(1307), + [2540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(636), + [2542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [2544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [2546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [2550] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_type_list, 2, 0, 49), + [2552] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_field_pattern, 1, 0, 0), SHIFT(1605), + [2555] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_map_literal_repeat1, 2, 0, 0), + [2557] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_map_literal_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [2560] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_argument_list, 1, 0, 0), + [2562] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_extern_parameter_list_repeat1, 2, 0, 0), SHIFT_REPEAT(1335), + [2565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_extern_parameter_list_repeat1, 2, 0, 0), + [2567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1056), + [2569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1028), + [2571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(937), + [2573] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1308), + [2575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(989), + [2577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(909), + [2579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1326), + [2581] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__call_type_list_repeat1, 2, 0, 0), + [2583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260), + [2585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(882), + [2587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(797), + [2589] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1297), + [2591] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_member, 3, 0, 83), + [2593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), + [2595] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1091), + [2597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extern_parameter, 3, 0, 20), + [2599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(908), + [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [2603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(910), + [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [2607] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1347), + [2609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), + [2611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1616), + [2613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(914), + [2615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [2617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(661), + [2619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1053), + [2621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(915), + [2623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [2625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1169), + [2627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1090), + [2629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1691), + [2631] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__call_type_list_repeat1, 3, 0, 103), + [2633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), + [2635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), + [2637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1276), + [2639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), + [2641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(905), + [2643] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [2645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1037), + [2647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1041), + [2649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1406), + [2651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(880), + [2653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [2655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1413), + [2657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(929), + [2659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [2661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688), + [2663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1062), + [2665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(868), + [2667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [2669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(994), + [2671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(995), + [2673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), + [2675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1052), + [2677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774), + [2679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987), + [2681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), + [2683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(997), + [2685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), + [2687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1004), + [2689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(879), + [2691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(777), + [2693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1058), + [2695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), + [2697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1059), + [2699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [2701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1060), + [2703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(760), + [2705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990), + [2707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(771), + [2709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1010), + [2711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1007), + [2713] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tuple_pattern_repeat1, 2, 0, 44), + [2715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(762), + [2717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1002), + [2719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1063), + [2721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1033), + [2723] = {.entry = {.count = 1, .reusable = true}}, SHIFT(948), + [2725] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_pattern_repeat1, 2, 0, 44), + [2727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1050), + [2729] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1040), + [2731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959), + [2733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(881), + [2735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [2737] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 1, 0, 4), + [2739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061), + [2741] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 2, 0, 37), + [2743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(925), + [2745] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [2747] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1716), + [2749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1623), + [2751] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [2753] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1325), + [2755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [2757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [2759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1302), + [2761] = {.entry = {.count = 1, .reusable = true}}, SHIFT(911), + [2763] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [2765] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 3, 0, 6), + [2767] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1079), + [2769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1478), + [2771] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [2773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(514), + [2775] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1234), + [2777] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [2779] = {.entry = {.count = 1, .reusable = true}}, SHIFT(886), + [2781] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [2783] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), + [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), + [2787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), + [2789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), + [2791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [2793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [2795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1480), + [2797] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [2799] = {.entry = {.count = 1, .reusable = true}}, SHIFT(768), + [2801] = {.entry = {.count = 1, .reusable = true}}, SHIFT(666), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(667), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(734), + [2807] = {.entry = {.count = 1, .reusable = true}}, SHIFT(685), + [2809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(668), + [2811] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [2813] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1355), + [2815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [2817] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [2819] = {.entry = {.count = 1, .reusable = true}}, SHIFT(869), + [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(623), + [2823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(870), + [2825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), + [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1305), + [2829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [2831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1751), + [2833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), + [2835] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), + [2837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1431), + [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(766), + [2841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [2843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(806), + [2845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(657), + [2847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(656), + [2849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1306), + [2851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [2853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(769), + [2855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(912), + [2857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), + [2859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665), + [2861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(674), + [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(675), + [2865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1556), + [2867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808), + [2869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(877), + [2871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(801), + [2873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1330), + [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), + [2877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [2879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1031), + [2881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1477), + [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1333), + [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1612), + [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1620), + [2889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1322), + [2891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [2893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1382), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [2897] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_type_arguments, 4, 0, 51), + [2899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1558), + [2901] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 3, 0, 8), + [2903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410), + [2905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1350), + [2907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(837), + [2909] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [2911] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 3, 0, 9), + [2913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1583), + [2915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(639), + [2917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1076), + [2919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(980), + [2921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1094), + [2923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(440), + [2925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839), + [2927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1399), + [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(967), + [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1358), + [2933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), + [2935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(391), + [2937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1420), + [2939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(978), + [2943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1416), + [2945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426), + [2947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(633), + [2949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), + [2951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1299), + [2953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(976), + [2955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), + [2957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1331), + [2959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278), + [2961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), + [2963] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 4, 0, 0), + [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1309), + [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), + [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(861), + [2971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1422), + [2973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1566), + [2975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842), + [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(371), + [2979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), + [2981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), + [2983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [2985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [2987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), + [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(624), + [2991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(625), + [2993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(494), + [2997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(383), + [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(855), + [3001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(866), + [3003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385), + [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [3007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [3009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(935), + [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(913), + [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(398), + [3015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355), + [3017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1285), + [3019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1677), + [3023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846), + [3025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1653), + [3027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(930), + [3029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1336), + [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1345), + [3033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(497), + [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773), + [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1068), + [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [3047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(504), + [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), + [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1292), + [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(904), + [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1293), + [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1096), + [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), + [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1740), + [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1332), + [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1555), + [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1012), + [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(643), + [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), + [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1400), + [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421), + [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1139), + [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1141), + [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1134), + [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1103), + [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1208), + [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425), + [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1466), + [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1312), + [3099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), + [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1165), + [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [3107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1433), + [3109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), + [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1438), + [3115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(429), + [3117] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 2, 0, 0), + [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), + [3121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), + [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(761), + [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), + [3127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(975), + [3129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 2, 0, 14), + [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1629), + [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(792), + [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), + [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(985), + [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893), + [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), + [3145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 4, 0, 34), + [3147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [3149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_declaration, 4, 0, 35), + [3151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1501), + [3153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(900), + [3155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(901), + [3157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), + [3159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1578), + [3161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [3163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(907), + [3165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [3167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1320), + [3169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(523), + [3171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1561), + [3173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1113), + [3175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [3177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [3179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1659), + [3181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1460), + [3183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [3185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1342), + [3187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1098), + [3189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1462), + [3191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1149), + [3193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [3195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1534), + [3197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_body, 2, 0, 0), + [3199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1435), + [3201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1327), + [3203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1328), + [3205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1376), + [3207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(616), + [3209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [3211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1095), + [3213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1562), + [3215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1046), + [3217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1574), + [3219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1334), + [3221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1348), + [3223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [3225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1179), + [3227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1338), + [3229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1339), + [3231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1585), + [3233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(484), + [3235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402), + [3237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1592), + [3239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [3241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1662), + [3243] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1600), + [3245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1340), + [3247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1602), + [3249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1608), + [3251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1610), + [3253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), + [3255] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [3257] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1042), + [3259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1619), + [3261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1621), + [3263] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1044), + [3265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1626), + [3267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_tail, 3, 0, 0), + [3269] = {.entry = {.count = 1, .reusable = true}}, SHIFT(619), + [3271] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), + [3273] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1224), + [3275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [3277] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1658), + [3279] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [3281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1665), + [3283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [3285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1679), + [3287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1680), + [3289] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1352), + [3291] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1510), + [3293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1310), + [3295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1692), + [3297] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1693), + [3299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1356), + [3301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_body, 3, 0, 0), + [3303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 1), + [3305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1697), + [3307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1698), + [3309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1700), + [3311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), + [3313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1703), + [3315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [3317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1362), + [3319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1715), + [3321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), + [3323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [3325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840), + [3327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841), + [3329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [3331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), + [3333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(885), + [3335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(404), + [3337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), }; enum ts_external_scanner_symbol_identifiers { ts_external_token__call_open_gap = 0, ts_external_token__statement_break = 1, + ts_external_token__type_application_ahead = 2, }; static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { [ts_external_token__call_open_gap] = sym__call_open_gap, [ts_external_token__statement_break] = sym__statement_break, + [ts_external_token__type_application_ahead] = sym__type_application_ahead, }; static const bool ts_external_scanner_states[4][EXTERNAL_TOKEN_COUNT] = { [1] = { [ts_external_token__call_open_gap] = true, [ts_external_token__statement_break] = true, + [ts_external_token__type_application_ahead] = true, }, [2] = { [ts_external_token__call_open_gap] = true, + [ts_external_token__type_application_ahead] = true, }, [3] = { [ts_external_token__statement_break] = true, diff --git a/tree-sitter-osprey/src/scanner.c b/tree-sitter-osprey/src/scanner.c index 292d9363..3addc1ce 100644 --- a/tree-sitter-osprey/src/scanner.c +++ b/tree-sitter-osprey/src/scanner.c @@ -42,6 +42,7 @@ enum TokenType { CALL_OPEN_GAP, STATEMENT_BREAK, + TYPE_APPLICATION_AHEAD, }; void *tree_sitter_osprey_external_scanner_create(void) { return NULL; } @@ -87,6 +88,47 @@ static bool scan_call_open_gap(TSLexer *lexer) { return lexer->lookahead == '('; } +// A glued angle run belongs to a call only when its complete type-shaped +// contents close immediately before '('. A failed lookahead leaves '<' to +// the ordinary comparison/constructor grammar. [TYPE-GENERICS-APPLY] +static bool scan_type_application(TSLexer *lexer) { + lexer->result_symbol = TYPE_APPLICATION_AHEAD; + lexer->mark_end(lexer); + unsigned angles = 0; + bool saw_type = false; + bool word = false; + while (!lexer->eof(lexer)) { + int32_t ch = lexer->lookahead; + if (ch == '<') { + angles++; + word = false; + } else if (ch == '>') { + if (--angles == 0) { + lexer->advance(lexer, false); + return saw_type && lexer->lookahead == '('; + } + word = false; + } else if (ch == '-') { + lexer->advance(lexer, false); + if (lexer->lookahead != '>') return false; + word = false; + } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '_') { + saw_type = true; + word = true; + } else if (ch >= '0' && ch <= '9') { + if (!word) return false; + } else if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' || + ch == ',' || ch == ':' || ch == '(' || ch == ')' || + ch == '[' || ch == ']' || ch == '|') { + word = false; + } else { + return false; + } + lexer->advance(lexer, false); + } + return false; +} + // Consumes a `//`-to-end-of-line comment. Returns false on a lone `/`, which // is division and therefore not a line ending. static bool skip_line_comment(TSLexer *lexer) { @@ -162,6 +204,9 @@ static bool scan_statement_break(TSLexer *lexer) { bool tree_sitter_osprey_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) { (void)payload; + if (valid_symbols[TYPE_APPLICATION_AHEAD] && lexer->lookahead == '<') { + return scan_type_application(lexer); + } if (valid_symbols[CALL_OPEN_GAP] && scan_call_open_gap(lexer)) { return true; } diff --git a/tree-sitter-osprey/test/corpus/osprey.txt b/tree-sitter-osprey/test/corpus/osprey.txt index 7d87f8eb..191a8127 100644 --- a/tree-sitter-osprey/test/corpus/osprey.txt +++ b/tree-sitter-osprey/test/corpus/osprey.txt @@ -597,3 +597,118 @@ in perform Signal.read() (type_identifier (identifier)))) operation: (identifier))))))))) + +================================================================================ +Call-site type application [TYPE-GENERICS-APPLY] +================================================================================ + +fn main() = identity(5) + +-------------------------------------------------------------------------------- + +(source_file + (statement + (function_declaration + name: (identifier) + body: (expression + (call_expression + callee: (expression + (primary_expression + (identifier))) + type_arguments: (type_arguments + (type_list + (type_identifier + (identifier)))) + (argument_list + (expression + (primary_expression + (literal + (integer)))))))))) + +================================================================================ +Call-site type application with two arguments [TYPE-GENERICS-APPLY] +================================================================================ + +fn main() = pick(1, "two") + +-------------------------------------------------------------------------------- + +(source_file + (statement + (function_declaration + name: (identifier) + body: (expression + (call_expression + callee: (expression + (primary_expression + (identifier))) + type_arguments: (type_arguments + (type_list + (type_identifier + (identifier)) + (type_identifier + (identifier)))) + (argument_list + (expression + (primary_expression + (literal + (integer)))) + (expression + (primary_expression + (literal + (string)))))))))) + +================================================================================ +A nested type argument closes two lists with one angle pair [TYPE-GENERICS-APPLY] +================================================================================ + +fn main() = identity>([1]) + +-------------------------------------------------------------------------------- + +(source_file + (statement + (function_declaration + name: (identifier) + body: (expression + (call_expression + callee: (expression + (primary_expression + (identifier))) + type_arguments: (type_arguments + (type_list + (generic_type + name: (identifier) + (type_list + (type_identifier + (identifier)))))) + (argument_list + (expression + (primary_expression + (literal + (list_literal + (expression + (primary_expression + (literal + (integer)))))))))))))) + +================================================================================ +A spaced comparison is not type application [TYPE-GENERICS-APPLY] +================================================================================ + +fn main() = a < b + +-------------------------------------------------------------------------------- + +(source_file + (statement + (function_declaration + name: (identifier) + body: (expression + (binary_expression + left: (expression + (primary_expression + (identifier))) + right: (expression + (primary_expression + (identifier)))))))) diff --git a/vscode-extension/client/src/extension.ts b/vscode-extension/client/src/extension.ts index b70234b0..2d9b00f8 100644 --- a/vscode-extension/client/src/extension.ts +++ b/vscode-extension/client/src/extension.ts @@ -548,7 +548,7 @@ export function activate(context: ExtensionContext) { // Register debug configuration provider context.subscriptions.push( debug.registerDebugConfigurationProvider("osprey", { - async resolveDebugConfiguration(folder: any, config: any, token: any) { + async resolveDebugConfiguration(_folder: any, config: any, _token: any) { // If no config is provided, synthesize one from the active osprey editor. config = applyDefaultOspreyDebugConfig(config, window.activeTextEditor); diff --git a/vscode-extension/run-tests.sh b/vscode-extension/run-tests.sh deleted file mode 100755 index 5df7002f..00000000 --- a/vscode-extension/run-tests.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash - -# Test runner for Osprey VSCode Extension -# This script runs the comprehensive test suite to verify all features - -set -e - -echo "🧪 Osprey Extension Test Runner" -echo "================================" - -# Check if we're in the right directory -if [ ! -f "package.json" ]; then - echo "❌ Error: Must be run from the VS Code Extension directory" - exit 1 -fi - -# Check if osprey compiler is available -if ! command -v osprey &> /dev/null; then - echo "❌ Error: osprey compiler not found in PATH" - echo " Please build the Rust compiler and put it on PATH first:" - echo " cd .. && cargo build --release # binary: target/release/osprey" - exit 1 -fi - -echo "✅ Osprey compiler found: $(which osprey)" - -# Install dependencies if needed -if [ ! -d "node_modules" ]; then - echo "📦 Installing dependencies..." - npm install -fi - -# Compile TypeScript -echo "🔨 Compiling TypeScript..." -npm run compile - -# Build the extension -echo "📦 Building extension package..." -npm run package - -# Run the tests -echo "🧪 Running comprehensive test suite..." -echo "" -echo "Tests include:" -echo " ✅ Basic extension activation" -echo " ✅ Language server integration" -echo " ✅ Hover documentation (from compiler)" -echo " ✅ Built-in function documentation" -echo " ✅ Pipe operator documentation" -echo " ✅ Signature help" -echo " ✅ Diagnostics and error reporting" -echo " ✅ Document symbols" -echo " ✅ Code completion" -echo " ✅ Compiler integration verification" -echo "" - -# Run tests with timeout -timeout 300 npm test || { - echo "❌ Tests failed or timed out" - exit 1 -} - -echo "" -echo "🎉 All tests completed successfully!" -echo "" -echo "📋 Test Coverage:" -echo " ✅ Extension activation and basic functionality" -echo " ✅ Language server startup and communication" -echo " ✅ Dynamic documentation from compiler" -echo " ✅ All built-in functions have hover support" -echo " ✅ Pipe operator documentation" -echo " ✅ Function signature help" -echo " ✅ Syntax error diagnostics" -echo " ✅ Symbol navigation" -echo " ✅ Code completion" -echo " ✅ Compiler integration verification" -echo "" -echo "🚀 Extension is ready for use!" \ No newline at end of file diff --git a/vscode-extension/test/suite/debug.e2e.test.ts b/vscode-extension/test/suite/debug.e2e.test.ts index 897f70c2..0906d3a2 100644 --- a/vscode-extension/test/suite/debug.e2e.test.ts +++ b/vscode-extension/test/suite/debug.e2e.test.ts @@ -6,11 +6,7 @@ import * as fs from "fs"; import * as path from "path"; import * as vscode from "vscode"; import { defaultDebugOutputPath } from "../../client/src/extension"; -import { - extensionRoot, - resolveBuiltOsprey, - resolveRequiredLldbDap, -} from "./osprey-test-env"; +import { resolveBuiltOsprey, resolveRequiredLldbDap } from "./osprey-test-env"; import { assertCurrentLine, assertLocalVariable, diff --git a/vscode-extension/tsconfig.json b/vscode-extension/tsconfig.json index 750fcc06..a7afe1b1 100644 --- a/vscode-extension/tsconfig.json +++ b/vscode-extension/tsconfig.json @@ -8,6 +8,8 @@ "sourceMap": true, "rootDir": ".", "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, "moduleResolution": "node16", "esModuleInterop": true, "skipLibCheck": true, diff --git a/website/start-dev.sh b/website/start-dev.sh deleted file mode 100644 index be9edcb0..00000000 --- a/website/start-dev.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -echo "🌐 Starting Osprey Website (Dev/Local)..." -echo "================================================" -echo "" -echo "This will start the Osprey website development server:" -echo "- Static site generator (Eleventy/11ty)" -echo "- Hot reload for development" -echo "- Syntax highlighting for Osprey code" -echo "" -echo "Access the website at: http://localhost:8080" -echo "" -echo "================================================" - -# Navigate to website directory -cd "$(dirname "$0")" - -# Detect if we're in a dev container or local environment -if [ -f "/usr/lib/node_modules/npm/bin/npm-cli.js" ]; then - NPM_CMD="/usr/lib/node_modules/npm/bin/npm-cli.js" - echo "🐳 Detected dev container environment" -else - NPM_CMD="npm" - echo "💻 Detected local environment" - - # Check if Node.js and npm are installed locally - if ! command -v node &> /dev/null; then - echo "❌ Node.js is required but not installed!" - echo "Install Node.js from: https://nodejs.org/" - exit 1 - fi - - if ! command -v npm &> /dev/null; then - echo "❌ npm is required but not installed!" - echo "Install npm with Node.js from: https://nodejs.org/" - exit 1 - fi -fi - -# Check if dependencies are installed -if [ ! -d "node_modules" ]; then - echo "📦 Installing website dependencies..." - $NPM_CMD install -fi - -# Start the development server -echo "🚀 Starting Eleventy development server..." -echo " - Building site and watching for changes..." -echo " - Server will start on port 8080 (accessible from host)" -echo "" -/usr/lib/node_modules/npm/bin/npm-cli.js run dev \ No newline at end of file