diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f0ebd420..793bc728 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -132,10 +132,14 @@ jobs:
run: |
task_maven_repo=$(mktemp -d "$RUNNER_TEMP/ubnfc-parser.XXXXXX")
echo "MAVEN_REPO=$task_maven_repo" >> "$GITHUB_ENV"
+ - name: Set up Rust 1.85 for the production facade comparison
+ run: bash .github/scripts/setup-rust.sh 1.85.0
# Declarative lexical modules require the pinned 3.3.0-SNAPSHOT generator;
# published 3.1.1 cannot read this grammar. Build into the job-local repository.
- name: Install unlaxer from source if it is not on Maven Central yet
run: bash scripts/ci/install-unlaxer-if-unpublished.sh
+ env:
+ UNLAXER_PROVENANCE_FILE: ${{ github.workspace }}/target/fraud-acceptance/parser-dependency.json
# Grammar sha256 + every vendored file against UBNFC_PIN. ubnfc is private, so the full
# grammar -> IR -> Java regeneration runs where it is readable (UBNFC_DIR); see the script.
- name: Verify strict layout compatibility adapter
@@ -149,7 +153,28 @@ jobs:
- name: Parity, differential fuzz and engine mode matrix
run: >-
mvn -B test -Dgpg.skip=true -Dtinyexpression.skipRailroad=true -Dmaven.repo.local="$MAVEN_REPO"
- -Dtest=DeclarativeLexicalConformanceTest,UbnfcParityTest,UbnfcDifferentialFuzzTest,P4EngineModeMatrixTest,P4ParserEngineTest,P4DslJavaCodeCalculatorTest,P4DslJavaCodeCalculatorClassicEngineTest,P4AstEvaluatorCalculatorTest,P4AstEvaluatorCalculatorClassicEngineTest,P4PreferredAstMapperDiagnosticsTest,P4SourceMappingTest
+ -Dtest=DeclarativeLexicalConformanceTest,UbnfcParityTest,UbnfcDifferentialFuzzTest,P4EngineModeMatrixTest,P4ParserEngineTest,P4DslJavaCodeCalculatorTest,P4DslJavaCodeCalculatorClassicEngineTest,P4AstEvaluatorCalculatorTest,P4AstEvaluatorCalculatorClassicEngineTest,P4PreferredAstMapperDiagnosticsTest,P4SourceMappingTest,P4SingleRecognitionProjectionTest,P4ProjectionTextReaderTest,P4PackratFraudFormulaTest,FraudAcceptanceTest
+ - name: Require Rust production fraud acceptance and collector negative gates
+ env:
+ PYTHONDONTWRITEBYTECODE: '1'
+ run: |
+ cargo test --locked --manifest-path rust/Cargo.toml -p tinyexpression-rs --test fraud_acceptance -- --nocapture
+ python3 -m unittest discover -s scripts/tests -p test_fraud_production.py -v
+ python3 -m unittest discover -s scripts/tests -p test_unlaxer_provenance.py -v
+ - name: Require all 30 Java/Rust production observations
+ if: always()
+ run: |
+ python3 scripts/check-fraud-production.py --parser-m2 "$MAVEN_REPO" \
+ --parser-provenance target/fraud-acceptance/parser-dependency.json \
+ --output target/fraud-production-evidence
+ - uses: actions/upload-artifact@v6
+ if: always()
+ with:
+ name: fraud-production-acceptance
+ path: |
+ target/fraud-production-evidence/
+ target/fraud-acceptance/
+ if-no-files-found: error
- uses: actions/upload-artifact@v6
if: always()
with:
@@ -220,7 +245,7 @@ jobs:
-Dtinyexpression.expected.mapper.snapshot=true
-Dtinyexpression.expected.mapper.nodeAlias=true
-Dtinyexpression.expected.mapper.optionalQualifier=true
- -Dtest=P4LayoutMigrationTest,P4SourceMappingTest,P4OwnedSliceSourceTest,P4TypedAstEvaluatorTest,P4JavaCodeEmitterSourceTextTest,DslGeneratedAstJavaEmitterTest,P4PreferredAstMapperPrecedenceTest,P4OptionalExternalQualifierTest,P4RustRootExpressionAcceptanceTest,P4RustNumericEvaluatorOracleTest,P4RustScalarEvaluatorOracleTest,CodeBlockSourceTest,CodeBlockNoCompilerTest
+ -Dtest=P4LayoutMigrationTest,P4SourceMappingTest,P4OwnedSliceSourceTest,P4TypedAstEvaluatorTest,P4JavaCodeEmitterSourceTextTest,DslGeneratedAstJavaEmitterTest,P4PreferredAstMapperPrecedenceTest,P4OptionalExternalQualifierTest,P4RustRootExpressionAcceptanceTest,P4SingleRecognitionProjectionTest,P4ProjectionTextReaderTest,P4RustNumericEvaluatorOracleTest,P4RustScalarEvaluatorOracleTest,CodeBlockSourceTest,CodeBlockNoCompilerTest
- name: Verify shared Java/Rust parser fixtures with the pinned source generator
if: matrix.generator == 'source'
working-directory: tinyexpression
diff --git a/catalog/fixtures/operator-diagnostics.json b/catalog/fixtures/operator-diagnostics.json
new file mode 100644
index 00000000..265adc2f
--- /dev/null
+++ b/catalog/fixtures/operator-diagnostics.json
@@ -0,0 +1,136 @@
+[
+ {
+ "input": "$a&&$b",
+ "operator": "&&",
+ "failureCp": 3
+ },
+ {
+ "input": "$a && $b",
+ "operator": "&&",
+ "failureCp": 4
+ },
+ {
+ "input": "true&&false",
+ "operator": "&&",
+ "failureCp": 5
+ },
+ {
+ "input": "true && false",
+ "operator": "&&",
+ "failureCp": 6
+ },
+ {
+ "input": "1&&2",
+ "operator": "&&",
+ "failureCp": 1
+ },
+ {
+ "input": "1 && 2",
+ "operator": "&&",
+ "failureCp": 2
+ },
+ {
+ "input": "/*๐*/\r\ntrue && false",
+ "operator": "&&",
+ "failureCp": 13
+ },
+ {
+ "input": "/* x */ true && false",
+ "operator": "&&",
+ "failureCp": 14
+ },
+ {
+ "input": "&& true",
+ "operator": "&&",
+ "failureCp": 0
+ },
+ {
+ "input": "$a||$b",
+ "operator": "||",
+ "failureCp": 3
+ },
+ {
+ "input": "$a || $b",
+ "operator": "||",
+ "failureCp": 4
+ },
+ {
+ "input": "true||false",
+ "operator": "||",
+ "failureCp": 5
+ },
+ {
+ "input": "true || false",
+ "operator": "||",
+ "failureCp": 6
+ },
+ {
+ "input": "1||2",
+ "operator": "||",
+ "failureCp": 1
+ },
+ {
+ "input": "1 || 2",
+ "operator": "||",
+ "failureCp": 2
+ },
+ {
+ "input": "/*๐*/\r\ntrue || false",
+ "operator": "||",
+ "failureCp": 13
+ },
+ {
+ "input": "/* x */ true || false",
+ "operator": "||",
+ "failureCp": 14
+ },
+ {
+ "input": "|| true",
+ "operator": "||",
+ "failureCp": 0
+ },
+ {
+ "input": "\"&&\" +",
+ "operator": null
+ },
+ {
+ "input": "\"||\" +",
+ "operator": null
+ },
+ {
+ "input": "true &",
+ "operator": null
+ },
+ {
+ "input": "false |",
+ "operator": null
+ },
+ {
+ "input": "\"&&\" @",
+ "operator": null
+ },
+ {
+ "input": "/* && */ 1 +",
+ "operator": null
+ },
+ {
+ "input": "true & false",
+ "operator": null
+ },
+ {
+ "input": "true | false",
+ "operator": null
+ },
+ {
+ "input": "'๐ &&' +",
+ "operator": null
+ },
+ {
+ "input": "true & & false",
+ "operator": null
+ },
+ {
+ "input": "false | | true",
+ "operator": null
+ }
+]
diff --git a/catalog/scripts/catalog-lib.mjs b/catalog/scripts/catalog-lib.mjs
index 12da73bc..e37bd081 100644
--- a/catalog/scripts/catalog-lib.mjs
+++ b/catalog/scripts/catalog-lib.mjs
@@ -113,6 +113,13 @@ export function countsOf(catalog) {
return counts;
}
+/** The unsupported double operator touching a failure UTF-16 offset, without scanning elsewhere. */
+export function operatorAtFailure(text, offset) {
+ const c = text[offset];
+ if (c !== '&' && c !== '|') return null;
+ return text[offset + 1] === c || (offset > 0 && text[offset - 1] === c) ? c + c : null;
+}
+
/**
* Maps a parser failure to a TE code with the catalog's diagnosticRules. `expected` is the
* list of terminals the parser could accept at the failure (without quotes), `snippet` the
diff --git a/docs/quality/fraud-production-acceptance.md b/docs/quality/fraud-production-acceptance.md
new file mode 100644
index 00000000..0b60f796
--- /dev/null
+++ b/docs/quality/fraud-production-acceptance.md
@@ -0,0 +1,140 @@
+# Fraud production acceptance and timing (Tiny #257)
+
+The previous `P4PackratFraudFormulaTest` caught every `RuntimeException` and accepted elapsed
+values below **two** seconds while promising one second. A fast failure therefore passed. It
+now requires successful parse+map, a non-null `IfExpr`, complete source CP range, valid nested
+node ranges and unchanged AST across first-call/warm-up/warm calls. Every sample must take
+strictly less than **1,000,000,000 ns**. Exceptions and failed assertions propagate; the 90-second
+JUnit timeout is a hang guard, not an alternative performance threshold.
+
+Both languages read the unchanged five inputs from
+`rust/tinyexpression-rs/tests/fixtures/fraud-alert.tsv`; the adjacent `fraud-acceptance.json`
+pins input SHA-256, CP length and manually expected conditional counts. The comparison checks
+numeric then/else branch ASTs independently (fraud 1โ4: 1/0; fraud 5: then 1,1,5,5,5), followed
+by complete cross-language AST/CP equality. Null, partial input, invalid span, altered branch,
+missing/duplicate observations, wrong entry, cross-language differences and the exact one-second
+boundary are negative gates.
+
+## Production entries and representation
+
+Java calls `P4PreferredAstMapper.parseDetailed(source, ExpressionTypes._float)` with a scoped
+`P4ParserEngine.UBNFC` override. Rust calls public `tinyexpression_rs::parse(source)` once. Tests
+add no alternate-entry parse/retry. The facades' existing internal root-selection behavior
+remains production behavior, including the retries tracked separately in Tiny #256.
+
+Java selects the numeric `IfExpr`; Rust can return the enclosing `FormulaExpr`. The Rust test
+retains its **raw AST** and selects the conditional for observation only. It accepts only
+whole-input Formula wrappers without imports/declarations/methods/code blocks, Expression
+wrappers, and Binary wrappers with an AST operand and empty operators/right operands. Anything
+else fails. This projection is outside timing and changes no production parse.
+
+The other existing public shape difference is explicit in Rust `generated/compat.rs`: ubnfc's
+synthetic operand `BinaryExpr(left=null, op=[text], right=[])` is folded to `AstValue::Text`.
+Java retains that node. The Python comparator folds only this exact shape (including the
+existing single-quote lexical normalization). Raw Java AST and raw/selected Rust AST remain
+in the reports. All actual node CP spans are independently bounds-checked; the comparator
+compares the spans of common nodes and does **not** claim identical publication of text-value
+spans absent from Rust canonical JSON. No arbitrary source reparse or text fallback is used.
+
+Successful public facade calls expose no failure diagnostic. Reports explicitly use
+`diagnostic:null`; this does not claim absence/equality of private speculative failures. Java
+production currently asks ubnfc for diagnostics and occurrences, while Rust defaults both off;
+reports retain that difference. Invalid/trailing input must produce an explicit public failure.
+Memo is ubnfc's production default packrat in both cases. The Classic-only
+`tinyexpression.p4.memoize` property is neither set nor cited as enabling this production gate.
+
+## Reproduce semantic and loaded-host regression checks
+
+Use Java 21 and Rust 1.85. Build against the intended parser artifact in an isolated Maven
+repository, explicitly overriding Tiny's default dependency; do not install over a published
+artifact in the ordinary user Maven repository.
+
+```sh
+RUSTUP_TOOLCHAIN=1.85.0 mvn -B -Dmaven.repo.local=/path/to/isolated-m2 \
+ -Dunlaxer.version=3.3.0 -Dtinyexpression.skipRailroad=true \
+ -Dtest=P4PackratFraudFormulaTest,FraudAcceptanceTest test
+RUSTUP_TOOLCHAIN=1.85.0 cargo test --manifest-path rust/Cargo.toml --locked \
+ -p tinyexpression-rs --test fraud_acceptance -- --nocapture
+RUSTUP_TOOLCHAIN=1.85.0 python3 -m unittest discover -s scripts/tests -p test_fraud_production.py -v
+RUSTUP_TOOLCHAIN=1.85.0 python3 scripts/check-fraud-production.py \
+ --parser-m2 /path/to/isolated-m2 --parser-commit FULL_40_HEX_PARSER_SHA \
+ --output /path/to/evidence
+```
+
+The two tests truncate stale reports before starting and persist successful samples before
+checking the time limit, so an over-budget observation is retained. The final comparator
+requires all five inputs ร three phases ร two languages; incomplete/error runs cannot pass.
+The output contains raw reports, source commit/dirty state, input identities, grammar/pin
+hashes, exact parser JAR hashes, toolchain versions, native platform and verdict. Archive the
+Maven/Cargo logs and dependency resolution alongside these files. Use a new output directory
+for each run and preserve failed-run evidence. A dirty-tree record is development evidence;
+repeat on the final clean source revision before citing its acceptance.
+
+`cold` means the **first call for this input in this test process**. Other tests in the same JVM or Rust test binary can already have parsed inputs, and later
+inputs can use warmed runtime/compiler state. `pid` and `first_observation_in_process` identify
+observations, without claiming that the parser or process was otherwise cold. `warmup` is a separate second
+call; `warm` is the third call. Do not aggregate these phases or relabel all first-input calls
+as fresh-process latency. Parsing and AST conversion are timed; validation, canonical JSON,
+input I/O, report I/O, JVM/process startup and build time are excluded. Public Rust `parse`
+includes its owned AST conversion; Java includes its facade selection/conversion.
+
+## Final performance acceptance protocol (not attested by these checks)
+
+This correction establishes actual acceptance and a one-second regression guard. Its report
+always says `measurement_eligible:false`. It does not close parser #197/#184, prove Classic SAFE
+performance, or replace those issues' root-selection/retry requirements.
+
+For final dedicated-host measurement:
+
+1. Pin the clean Tiny/parser commits, grammar and toolchains; build before timing, hash binaries
+ and dependency JARs, verify semantic checks, save exact commands/options and native resource
+ limits. Preserve the parser #652/#653 finite-budget fixes for any separate Classic study.
+2. Reserve an idle host: no CI/builds/JFR/sampling profiler or competing benchmark. Record CPU,
+ memory, OS, governor/container/cgroup limits, runtime heap/stack flags, load before/after and
+ an explicit truthful exclusivity attestation. Shared-host runs stay exploratory evidence.
+3. Run at least five fresh processes per input/language. To select one case in a fresh JVM use
+ `-Dtinyexpression.fraud.id=fraud#1 -Dtinyexpression.fraud.output=/absolute/java-1.jsonl`
+ with only `-Dtest=P4PackratFraudFormulaTest`; invoke each case in its own Maven/Surefire process.
+ For Rust use `FRAUD_ID=fraud#1 FRAUD_OUTPUT=/absolute/rust-1.jsonl` and run
+ `cargo test --manifest-path rust/Cargo.toml --locked -p tinyexpression-rs --test fraud_acceptance
+ fraud_formulas_are_accepted_and_mapped_within_one_second -- --exact --nocapture` with
+ `RUSTUP_TOOLCHAIN=1.85.0` (omit other tests so they cannot pre-warm the process). Repeat for ids 1โ5. Run language processes sequentially, not concurrently. Retain distinct
+ PIDs, all first-call/warm-up/warm samples and failed samples; never choose only a fast run.
+4. Compare complete AST/source-position/public-diagnostic observations before evaluating
+ latency. Require every measured parse+map call < 1 second; do not average away a miss or
+ raise it to two seconds. Report first-call and warm distributions independently, including
+ maxima and process-startup exclusion. Keep a hard process hang deadline and count timeout,
+ exception, partial/null result or unexpected diagnostic as failure.
+5. Archive commands, environment, input/source/build hashes, raw times and semantic verdicts.
+ Separate ubnfc production, Classic SAFE and legacy evidence by backend/API. The ordinary
+ semantic comparator cannot promote records into a dedicated-host attestation.
+
+The protocol is preparation only. No dedicated/exclusive-host final measurement was performed
+by this change. Concurrent parser CI/build activity existed during development verification.
+
+## Mandatory ordinary CI gate and dependency identity
+
+The existing `ubnfc-parser` job runs Java acceptance alongside its parity suite, Rust's production
+fraud integration and the collector/provenance negative tests, then explicitly requires all 30
+observations. These steps have no `continue-on-error`; an exception, missing observation,
+comparison difference or negative-gate failure makes the job fail. An `always()` collector step
+writes a failed summary even when an earlier test failed, and an `always()` artifact upload
+preserves `fraud-production-acceptance` raw reports, input/source/JAR hashes, provenance,
+metadata and verdict. The existing Java Surefire artifact remains separate. CI evidence remains
+shared-host verification with `measurement_eligible:false`.
+
+This job's dependency route is **Tiny's declared Maven version**, currently `3.3.0-SNAPSHOT`,
+not the locally tested candidate `3.3.0`. Its existing installer builds the fixed
+`.github/unlaxer-source-pin` (`fc75fe1e25e538d47908f05ea2039f585aef696e`) into an empty job-local
+Maven repository when that version is unavailable on Central. The installer's optional
+`UNLAXER_PROVENANCE_FILE` records the actual checked-out commit after successful installation.
+If the declared version becomes available on Central, it instead records `maven-central` with
+no inferred source commit. Failed installation clears stale success provenance. The collector
+uses the recorded version to hash the actual dependency JARs; it never substitutes the local
+candidate SHA or assumes the source pin produced a published artifact.
+
+Local runs can keep `--parser-commit FULL_SHA --parser-version 3.3.0` (the latter defaults to
+3.3.0); those records are explicitly labeled `reported-local-source`. CI instead passes
+`--parser-provenance target/fraud-acceptance/parser-dependency.json`. The two representations
+are mutually exclusive, so evidence cannot silently label a published GAV as a source build.
+No parser version, source pin, ubnfc generation pin or production behavior changes in this wiring.
diff --git a/docs/quality/p4-single-root-dispatch.md b/docs/quality/p4-single-root-dispatch.md
new file mode 100644
index 00000000..bfc80d83
--- /dev/null
+++ b/docs/quality/p4-single-root-dispatch.md
@@ -0,0 +1,90 @@
+# P4 single-root recognition (#256)
+
+Normal recognition in the Java Classic and ubnfc facades, Rust `parse`, and Rust contextual
+evaluator now invokes `Formula` once. They do not retry Boolean/String/Object entries after root failure, or invoke
+another entry after a successful parse to interpret explicit result hints. Caller-selected
+subtree entries remain available. Classic's detailed-diagnostic retry uses the same root after
+a failed parse, with its existing remaining-budget policy; it is not result-family dispatch.
+
+`Formula` recognizes code blocks, imports, declarations and annotations once. Its tail is an
+ordinary ordered choice of `(family expression, method declarations, EOF)`. A short numeric
+prefix fails the enclosing branch and rolls back before trying the boolean/string branch.
+A complete numeric or common `if` expression commits the first branch. Nested `Expression`
+and the combinators' normal first-success Choice semantics are unchanged. The family wrappers
+all map to the existing `ExpressionExpr`, preserving the public AST schema.
+
+An initial experiment with `@longestChoice` on every Expression, and a second restricted to
+root dispatch, were rejected after substantial parsing regressions. Repeating the prologue in
+each complete branch also re-executed declarations, changing state epochs and losing failure
+memo reuse for truncated inputs. The factored grammar avoids these repeated effects. No
+handwritten edits to generated parsers substitute for the pinned regeneration.
+
+## AST and position compatibility
+
+The facades preserve the historical semantic subtree for bare expressions that previously
+needed an alternate root: numeric comparisons, boolean operations starting with a variable,
+and string concatenations starting with a variable. This is a structural AST projection,
+without recognizing source text again. Documents retain Formula/Expression wrappers.
+
+Only existing direct result hints select a typed family. A number-shaped variable expression
+can be projected into StringConcat/BooleanOr/Object wrappers, and compatible match cases into
+the corresponding typed case records. An incompatible literal/operator or mixed hints still
+fail. These projections retain identity-based owned code-point spans; new wrappers refer to
+origin nodes from the committed parse. String `as` versus no-`as` spelling retains the existing
+StringTypedVariableRef versus VariableRef shape. Layout between `$`, the identifier and the
+hint is permitted. Identifiers remain the lexical grammar's ASCII alphabet; this work does
+not add non-ASCII identifiers.
+
+The spelling check uses one operation-owned CP/UTF-16 (Java) or CP/UTF-8 (Rust) cursor.
+String operands and match values are visited in source order, so a list of typed variables
+no longer scans the source prefix from the beginning for each value. Reverse, repeated and
+empty EOF spans remain valid; the reader moves backwards when necessary rather than assuming
+all callers are monotonic. This does not change the general public random-access span API,
+allocate a full source-index array, or change grapheme coordinates.
+
+Every accepted input in `root-family-projection.tsv` is compared with the explicit family
+entry in tests only, including every record and every node span. That entry is an independent
+structural oracle, not a production fallback. Java checks both engines and retained snapshots;
+Rust checks its owned public tree. `root-expression.tsv` fixes the existing public root
+contracts, including comments containing a family emoji. `root-document-dispatch.tsv` fixes
+values, declarations, methods and expression CP boundaries. Capture ranges may include trailing
+trivia before a method; these are not grapheme or UTF-16 indexes.
+
+Complete document tails also repair previously rejected inputs such as
+`var $s as string set '๐๐' description='้ณ็ฌฆ'; $s + '!'` and
+`var $n as number set 1;$n<2`. Both Java engines and Rust now recognize and evaluate the entire
+document. Losing branches must not duplicate declarations/references or leave method metadata
+behind; the failure regression checks this before closing the context.
+
+## Verification and limits
+
+Use Java 21, Rust 1.85, the generator revision recorded in UBNFC_PIN/ubnfc-pin.txt, and an
+isolated Maven repository containing the chosen unlaxer source build. For this change the
+fixed parser dependency is source `faccb2c9`, version `3.3.0` (not a new Central publication).
+
+```sh
+mvn -Dmaven.repo.local=/tmp/unlaxer-tiny-root-choice-m2 -Dunlaxer.version=3.3.0 \
+ -Dtinyexpression.skipRailroad=true -Dgpg.skip=true -Dtinyexpression.rust.shared=true \
+ -Dtest=P4SingleRecognitionProjectionTest,P4ProjectionTextReaderTest,P4RustRootExpressionAcceptanceTest test
+RUSTUP_TOOLCHAIN=1.85.0 cargo test --manifest-path rust/Cargo.toml -p tinyexpression-rs \
+ --test root_family_projection --test java_differential --test parser_cli
+UBNFC_DIR=/path/to/pinned/ubnfc scripts/regenerate-ubnfc-parser.sh --check --require-full
+UBNFC_DIR=/path/to/pinned/ubnfc rust/check-generated.sh
+python3 scripts/generate-ubnfc-converter.py --check
+```
+
+The fixed 953-formula / 12,609-row Java golden is compared without rewriting expectations.
+A golden result compares value/type/bits or failure stage/class; diagnostic prose is not its
+cross-language contract. The new tests additionally check EOF rejection, Unicode CP failure
+positions, scope rollback, retained sources and typed evaluator use without a fallback.
+
+On the shared development host, the same 350-case Java engine comparison completed in
+11.166 s before this change and 8.627 s with the factored grammar. These are reference runs,
+not eligible dedicated-host throughput measurements or a claim of general speed improvement.
+The existing Classic mapper resource rejections for the x64 complex/comparison inputs are
+tracked independently by [Tiny #259](https://github.com/opaopa6969/tinyexpression/issues/259)
+and [unlaxer-parser #680](https://github.com/opaopa6969/unlaxer-parser/issues/680);
+neither resource limits nor their test expectations are relaxed here.
+Five fraud formulas and the complex fixture must be parsed and evaluated successfully when
+recording timing. A fast caught exception does not count as acceptance. Parent production
+latency and memory requirements remain subject to the dedicated evidence and open issues.
diff --git a/playground/scripts/check.mjs b/playground/scripts/check.mjs
index c020299c..004c53f3 100644
--- a/playground/scripts/check.mjs
+++ b/playground/scripts/check.mjs
@@ -10,7 +10,7 @@ import assert from 'node:assert/strict';
import Ajv2020 from 'ajv/dist/2020.js';
import { loadTinyExpression } from '../../rust/examples/wasm/tinyexpression.mjs';
import { toRequest, emptyState } from '../src/context.js';
-import { diagnose, describeFailure } from '../src/diagnostics.js';
+import { diagnose, describeFailure, parseDiagnostic } from '../src/diagnostics.js';
import { EXAMPLES, FORMULA_INFO_SAMPLE } from '../src/examples.js';
import { prepareTrace, stepEvents, stackAt, failingNode } from '../src/trace.js';
import { validate as validateGenerated } from '../src/generated/catalog-validator.js';
@@ -76,6 +76,30 @@ assert.equal(semi.message, '[TE006] ๆๆซใฎใปใใณใญใณใๅฟ
่ฆใงใใ
// The parser reports the failure after the whitespace: at the start of the next line's `$x`.
assert.equal(semi.from, "var $x as number set 1 description='x'\n".length);
+// Shared Java LSP/wasm oracle: classify only a double operator touching this failure.
+const operatorCases = JSON.parse(await readFile(join(root, 'catalog', 'fixtures', 'operator-diagnostics.json'), 'utf8'));
+for (const row of operatorCases) {
+ const actual = codeOf(row.input, ['a', 'b']);
+ assert.equal(actual.includes('TE023'), row.operator != null, JSON.stringify({ row, actual }));
+ if (row.operator != null) {
+ const failure = te.check(row.input).result;
+ assert.equal(failure.stage, 'parse', row.input);
+ assert.equal(failure.diagnostic.offset, row.failureCp, row.input);
+ const original = JSON.stringify(failure.diagnostic);
+ const located = parseDiagnostic(catalog, row.input, failure.diagnostic);
+ assert.equal(located.from, [...row.input].slice(0, failure.diagnostic.offset).join('').length, row.input);
+ assert.equal(JSON.stringify(failure.diagnostic), original, 'catalog lookup does not rewrite parser diagnostics');
+ const first = row.input.indexOf(row.operator);
+ for (const position of [first, first + 1]) {
+ const offset = [...row.input.slice(0, position)].length;
+ const synthetic = parseDiagnostic(catalog, row.input, { offset, expected: [] });
+ assert.equal(synthetic.code, 'TE023', JSON.stringify({ row, position }));
+ assert.equal(synthetic.from, position, 'display position still comes from the parser');
+ }
+ }
+}
+console.log(`operator diagnostic oracle: ${operatorCases.length} shared inputs, real wasm plus both boundary positions`);
+
// 4. runtime error texts
const zero = te.evalContext({ formula: '1 / 0', resultType: 'int', numberType: 'int' }).result;
assert.equal(describeFailure(catalog, '1 / 0', zero).code, 'ArithmeticException');
diff --git a/playground/src/diagnostics.js b/playground/src/diagnostics.js
index 951a2044..fee477d0 100644
--- a/playground/src/diagnostics.js
+++ b/playground/src/diagnostics.js
@@ -1,6 +1,6 @@
// Diagnostics from `te_check` with TE codes and texts from the language catalog (issue #201).
// Pure (no DOM): the editor's linter and scripts/check.mjs both call it.
-import { resolveErrorCode, lookupVariable, ja } from '../../catalog/scripts/catalog-lib.mjs';
+import { resolveErrorCode, lookupVariable, ja, operatorAtFailure } from '../../catalog/scripts/catalog-lib.mjs';
import { codePointToIndex, declaredVariables } from './context.js';
import { blankCodeBlocks } from './code-block.js';
@@ -25,7 +25,9 @@ export function fullMessage(entry) {
/** A parse diagnostic (Rust JSON) as a located, coded diagnostic. */
export function parseDiagnostic(catalog, formula, diagnostic) {
const from = Math.min(codePointToIndex(formula, diagnostic.offset), formula.length);
- const snippet = formula.slice(from, from + 20).trim();
+ // The parser may consume the valid first '&'/'|' before failing at the second.
+ // Normalize only the catalog lookup; keep the published parser position and expectations.
+ const snippet = operatorAtFailure(formula, from) ?? formula.slice(from, from + 20).trim();
const leading = formula.slice(0, from);
const code = resolveErrorCode(catalog, { expected: diagnostic.expected ?? [], snippet, leading });
const entry = errorEntry(catalog, code);
diff --git a/pom.xml b/pom.xml
index 15c5c722..107c3dbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -343,7 +343,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- org.unlaxer.tinyexpression.evaluator.ast.P4TypedAstEvaluatorTest,org.unlaxer.tinyexpression.evaluator.ast.AstEvaluatorParityCorpusTest,org.unlaxer.tinyexpression.evaluator.ast.AstEvaluatorBackendParityTest,org.unlaxer.tinyexpression.evaluator.ast.ThreeExecutionBackendParityTest,org.unlaxer.tinyexpression.p4.P4BackendParityTest,org.unlaxer.tinyexpression.p4.P4PreferredAstMapperPrecedenceTest,org.unlaxer.tinyexpression.p4.ubnfc.UbnfcParityTest,org.unlaxer.tinyexpression.loader.P4EngineModeMatrixTest
+ org.unlaxer.tinyexpression.evaluator.ast.P4TypedAstEvaluatorTest,org.unlaxer.tinyexpression.evaluator.ast.AstEvaluatorParityCorpusTest,org.unlaxer.tinyexpression.evaluator.ast.AstEvaluatorBackendParityTest,org.unlaxer.tinyexpression.evaluator.ast.ThreeExecutionBackendParityTest,org.unlaxer.tinyexpression.p4.P4BackendParityTest,org.unlaxer.tinyexpression.p4.P4PreferredAstMapperPrecedenceTest,org.unlaxer.tinyexpression.p4.ubnfc.UbnfcParityTest,org.unlaxer.tinyexpression.p4.ubnfc.P4SingleRecognitionProjectionTest,org.unlaxer.tinyexpression.p4.P4ProjectionTextReaderTest,org.unlaxer.tinyexpression.loader.P4EngineModeMatrixTest
true
diff --git a/rust/tinyexpression-rs/src/api.rs b/rust/tinyexpression-rs/src/api.rs
index 8ea11ea6..ff0d2e87 100644
--- a/rust/tinyexpression-rs/src/api.rs
+++ b/rust/tinyexpression-rs/src/api.rs
@@ -39,7 +39,7 @@ pub const VERSION: &str = env!("CARGO_PKG_VERSION");
/// fails when it differs from `ubnfc_commit` in `rust/ubnfc-pin.txt`.
pub const UBNFC_COMMIT: &str = "f54d6b90466ffde14066d32f911ed642b1e49201";
/// Exact P4 grammar source identity; checked against `rust/ubnfc-pin.txt` in CI.
-pub const GRAMMAR_SHA256: &str = "184cce54c70b0e3ebbdedaca5a0af0068ec56b2d7e33cda39d94f861c6433f46";
+pub const GRAMMAR_SHA256: &str = "a40d6f5f57c3b3a67e0c627bfc99c603304593087cf428b50bb85754e23f4daf";
/// One JSON response and the exit code that goes with it.
#[derive(Clone, Debug, PartialEq, Eq)]
diff --git a/rust/tinyexpression-rs/src/family_projection.rs b/rust/tinyexpression-rs/src/family_projection.rs
new file mode 100644
index 00000000..d8beed55
--- /dev/null
+++ b/rust/tinyexpression-rs/src/family_projection.rs
@@ -0,0 +1,370 @@
+//! Explicit family projection of a single successful recognition. No parser entry calls.
+use crate::generated::ast::{Ast, AstValue};
+use crate::Span;
+use std::cell::Cell;
+
+pub(crate) fn project(ast: &Ast, family: &str, source: &str) -> Result {
+ match ast {
+ Ast::FormulaExpr { expression, .. } => return project(expression, family, source),
+ Ast::ExpressionExpr { value, .. } => return project(value, family, source),
+ _ => {}
+ }
+ if family == "OBJECT" {
+ return Ok(match ast {
+ Ast::ObjectExpr { .. } => ast.clone(),
+ _ => Ast::ObjectExpr {
+ span: ast.span(),
+ value: Box::new(ast.clone()),
+ },
+ });
+ }
+ if matches!(ast, Ast::StringMatchExpr { .. }) {
+ return if family == "STRING" {
+ Ok(ast.clone())
+ } else {
+ Err(())
+ };
+ }
+ if matches!(ast, Ast::BooleanMatchExpr { .. }) {
+ return if family == "BOOLEAN" {
+ Ok(ast.clone())
+ } else {
+ Err(())
+ };
+ }
+ if family == "NUMBER" {
+ return Ok(ast.clone());
+ }
+ let layout: String = crate::runtime::select::strip_comments(source)
+ .into_iter()
+ .collect();
+ let projection = Projection::new(&layout);
+ if let Ast::NumberMatchExpr { .. } = ast {
+ return projection.match_node(ast, family);
+ }
+ if family == "STRING" {
+ projection.string_expression(ast)
+ } else {
+ projection.boolean_expression(ast)
+ }
+}
+
+pub(crate) fn with_root_span(mut ast: Ast, root_span: Span) -> Ast {
+ match &mut ast {
+ Ast::StringConcatExpr { span, .. }
+ | Ast::BooleanOrExpr { span, .. }
+ | Ast::ObjectExpr { span, .. }
+ | Ast::NumberMatchExpr { span, .. }
+ | Ast::StringMatchExpr { span, .. }
+ | Ast::BooleanMatchExpr { span, .. } => *span = root_span,
+ _ => {}
+ }
+ ast
+}
+
+struct Projection<'a> {
+ source: &'a str,
+ cursor: Cell<(usize, usize)>,
+}
+impl<'a> Projection<'a> {
+ fn new(source: &'a str) -> Self {
+ Self {
+ source,
+ cursor: Cell::new((0, 0)),
+ }
+ }
+
+ fn seek(&self, target: usize) -> Result {
+ let (mut cp, mut byte) = self.cursor.get();
+ while cp < target {
+ byte += self
+ .source
+ .get(byte..)
+ .and_then(|s| s.chars().next())
+ .ok_or(())?
+ .len_utf8();
+ cp += 1;
+ }
+ while cp > target {
+ byte -= self
+ .source
+ .get(..byte)
+ .and_then(|s| s.chars().next_back())
+ .ok_or(())?
+ .len_utf8();
+ cp -= 1;
+ }
+ self.cursor.set((cp, byte));
+ Ok(byte)
+ }
+
+ fn text(&self, span: Span) -> Result<&'a str, ()> {
+ if span.end < span.start {
+ return Err(());
+ }
+ let start = self.seek(span.start)?;
+ let end = self.seek(span.end)?;
+ self.source.get(start..end).ok_or(())
+ }
+
+ fn string_expression(&self, ast: &Ast) -> Result {
+ let span = ast.span();
+ match ast {
+ Ast::StringConcatExpr { .. } => Ok(ast.clone()),
+ Ast::BinaryExpr {
+ left, op, right, ..
+ } => {
+ if op.iter().any(|op| op != "+") {
+ return Err(());
+ }
+ Ok(Ast::StringConcatExpr {
+ span,
+ left: self.string_term(left)?,
+ op: op.clone(),
+ right: right
+ .iter()
+ .map(|value| self.string_term(value))
+ .collect::>()?,
+ })
+ }
+ _ => Ok(Ast::StringConcatExpr {
+ span,
+ left: self.string_atom(&AstValue::Node(Box::new(ast.clone())))?,
+ op: Vec::new(),
+ right: Vec::new(),
+ }),
+ }
+ }
+
+ fn string_term(&self, value: &AstValue) -> Result {
+ if let AstValue::Node(ast) = value {
+ if let Ast::BinaryExpr { left, op, .. } = ast.as_ref() {
+ if !op.is_empty() {
+ return Err(());
+ }
+ if let AstValue::Node(nested) = left {
+ if matches!(nested.as_ref(), Ast::BinaryExpr { .. }) {
+ return Ok(AstValue::Node(Box::new(self.string_expression(nested)?)));
+ }
+ }
+ return self.string_atom(left);
+ }
+ }
+ self.string_atom(value)
+ }
+
+ fn string_atom(&self, value: &AstValue) -> Result {
+ let AstValue::Node(ast) = value else {
+ return Err(());
+ };
+ let result = match ast.as_ref() {
+ Ast::VariableRefExpr { span, name, r#type } => {
+ let text = self.text(*span)?;
+ let body = text.trim().strip_prefix('$').ok_or(())?.trim_start();
+ // IDENTIFIER is ASCII in this grammar; byte and CP name lengths agree.
+ let tail = body.get(name.len()..).ok_or(())?;
+ if tail.trim().starts_with("as")
+ && r#type
+ .as_ref()
+ .is_some_and(|v| v.eq_ignore_ascii_case("string"))
+ {
+ Ast::StringTypedVariableRefExpr {
+ span: *span,
+ name: name.clone(),
+ }
+ } else {
+ *ast.clone()
+ }
+ }
+ Ast::StringTypedVariableRefExpr { .. }
+ | Ast::StringCastVariableRefExpr { .. }
+ | Ast::MethodInvocationExpr { .. }
+ | Ast::IfExpr { .. } => *ast.clone(),
+ Ast::NumberMatchExpr { .. } => self.match_node(ast, "STRING")?,
+ _ => return Err(()),
+ };
+ Ok(AstValue::Node(Box::new(result)))
+ }
+
+ fn boolean_expression(&self, ast: &Ast) -> Result {
+ if matches!(ast, Ast::BooleanOrExpr { .. }) {
+ return Ok(ast.clone());
+ }
+ let span = ast.span();
+ let mut atom = ast;
+ let mut nested_projection = None;
+ let mut factor_span = span;
+ if let Ast::BinaryExpr { left, op, .. } = ast {
+ if !op.is_empty() {
+ return Err(());
+ }
+ let AstValue::Node(node) = left else {
+ return Err(());
+ };
+ atom = node;
+ if let Ast::BinaryExpr {
+ left,
+ op,
+ span: term_span,
+ ..
+ } = atom
+ {
+ if !op.is_empty() {
+ return Err(());
+ }
+ factor_span = *term_span;
+ let AstValue::Node(node) = left else {
+ return Err(());
+ };
+ atom = node;
+ if matches!(atom, Ast::BinaryExpr { .. }) {
+ nested_projection = Some(self.boolean_expression(atom)?);
+ }
+ }
+ }
+ if let Some(ref nested) = nested_projection {
+ atom = nested;
+ }
+ let atom = match atom {
+ Ast::NumberMatchExpr { .. } => self.match_node(atom, "BOOLEAN")?,
+ Ast::VariableRefExpr { .. }
+ | Ast::MethodInvocationExpr { .. }
+ | Ast::IfExpr { .. }
+ | Ast::BooleanMatchExpr { .. }
+ | Ast::BooleanOrExpr { .. } => atom.clone(),
+ _ => return Err(()),
+ };
+ Ok(Ast::BooleanOrExpr {
+ span,
+ op: Vec::new(),
+ right: Vec::new(),
+ left: Box::new(Ast::BooleanAndExpr {
+ span,
+ op: Vec::new(),
+ right: Vec::new(),
+ left: Box::new(Ast::BooleanXorExpr {
+ span,
+ op: Vec::new(),
+ right: Vec::new(),
+ left: Box::new(Ast::BooleanFactorExpr {
+ span: factor_span,
+ value: AstValue::Node(Box::new(atom)),
+ }),
+ }),
+ }),
+ })
+ }
+
+ fn case_value(&self, ast: &Ast, family: &str) -> Result {
+ let Ast::NumberCaseValueExpr { span, value } = ast else {
+ return Err(());
+ };
+ if family == "STRING" {
+ Ok(Ast::StringCaseValueExpr {
+ span: *span,
+ value: Box::new(self.string_expression(value)?),
+ })
+ } else {
+ Ok(Ast::BooleanCaseValueExpr {
+ span: *span,
+ value: Box::new(self.boolean_expression(value)?),
+ })
+ }
+ }
+
+ fn case(&self, ast: &Ast, family: &str) -> Result {
+ let Ast::NumberCaseExpr {
+ span,
+ condition,
+ value,
+ } = ast
+ else {
+ return Err(());
+ };
+ let value = Box::new(self.case_value(value, family)?);
+ if family == "STRING" {
+ Ok(Ast::StringCaseExpr {
+ span: *span,
+ condition: condition.clone(),
+ value,
+ })
+ } else {
+ Ok(Ast::BooleanCaseExpr {
+ span: *span,
+ condition: condition.clone(),
+ value,
+ })
+ }
+ }
+
+ fn match_node(&self, ast: &Ast, family: &str) -> Result {
+ let Ast::NumberMatchExpr {
+ span,
+ firstCase,
+ moreCases,
+ defaultCase,
+ } = ast
+ else {
+ return Err(());
+ };
+ let first = Box::new(self.case(firstCase, family)?);
+ let more = moreCases
+ .iter()
+ .map(|case| self.case(case, family))
+ .collect::>()?;
+ let Ast::NumberDefaultCaseExpr {
+ span: default_span,
+ value,
+ } = defaultCase.as_ref()
+ else {
+ return Err(());
+ };
+ let default_value = Box::new(self.case_value(value, family)?);
+ if family == "STRING" {
+ Ok(Ast::StringMatchExpr {
+ span: *span,
+ firstCase: first,
+ moreCases: more,
+ defaultCase: Box::new(Ast::StringDefaultCaseExpr {
+ span: *default_span,
+ value: default_value,
+ }),
+ })
+ } else {
+ Ok(Ast::BooleanMatchExpr {
+ span: *span,
+ firstCase: first,
+ moreCases: more,
+ defaultCase: Box::new(Ast::BooleanDefaultCaseExpr {
+ span: *default_span,
+ value: default_value,
+ }),
+ })
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::Projection;
+ use crate::Span;
+
+ #[test]
+ fn projection_reader_handles_reverse_repeated_and_unicode_spans() {
+ let reader = Projection::new("a๐e\u{301}๐จโ๐ฉโ๐งโ๐ฆz");
+ for (start, end, expected) in [
+ (1, 2, "๐"),
+ (4, 11, "๐จโ๐ฉโ๐งโ๐ฆ"),
+ (0, 1, "a"),
+ (2, 4, "e\u{301}"),
+ (1, 2, "๐"),
+ (1, 2, "๐"),
+ (12, 12, ""),
+ ] {
+ assert_eq!(reader.text(Span { start, end }).unwrap(), expected);
+ }
+ assert!(reader.text(Span { start: 4, end: 3 }).is_err());
+ assert!(reader.text(Span { start: 12, end: 13 }).is_err());
+ assert_eq!(reader.text(Span { start: 0, end: 1 }).unwrap(), "a");
+ }
+}
diff --git a/rust/tinyexpression-rs/src/generated/ubnfc/ast.rs b/rust/tinyexpression-rs/src/generated/ubnfc/ast.rs
index 03a6b10a..22cf2410 100644
--- a/rust/tinyexpression-rs/src/generated/ubnfc/ast.rs
+++ b/rust/tinyexpression-rs/src/generated/ubnfc/ast.rs
@@ -1486,7 +1486,7 @@ pub const K_g_TinyExpressionP4AST_2e_VariableRefExpr: u16 = 86;
pub const K_g_TinyExpressionP4AST_2e_ExpressionExpr: u16 = 87;
pub(crate) const TYPE_IDS: &[&str] = &["text","null","TinyExpressionP4AST.FormulaExpr","TinyExpressionP4AST.CodeBlockExpr","TinyExpressionP4AST.ImportDeclarationExpr","TinyExpressionP4AST.QualifiedNameExpr","TinyExpressionP4AST.NumberVariableDeclarationExpr","TinyExpressionP4AST.StringVariableDeclarationExpr","TinyExpressionP4AST.BooleanVariableDeclarationExpr","TinyExpressionP4AST.ObjectVariableDeclarationExpr","TinyExpressionP4AST.OnlyIfAbsentExpr","TinyExpressionP4AST.NumberMethodDeclarationExpr","TinyExpressionP4AST.StringMethodDeclarationExpr","TinyExpressionP4AST.BooleanMethodDeclarationExpr","TinyExpressionP4AST.ObjectMethodDeclarationExpr","TinyExpressionP4AST.MethodParametersExpr","TinyExpressionP4AST.MethodParameterExpr","TinyExpressionP4AST.ExternalBooleanInvocationExpr","TinyExpressionP4AST.ExternalNumberInvocationExpr","TinyExpressionP4AST.ExternalStringInvocationExpr","TinyExpressionP4AST.ExternalObjectInvocationExpr","TinyExpressionP4AST.MethodInvocationExpr","TinyExpressionP4AST.TernaryExpr","TinyExpressionP4AST.ArgumentExpressionExpr","TinyExpressionP4AST.ArgumentsExpr","TinyExpressionP4AST.BinaryExpr","TinyExpressionP4AST.SinExpr","TinyExpressionP4AST.CosExpr","TinyExpressionP4AST.TanExpr","TinyExpressionP4AST.SqrtExpr","TinyExpressionP4AST.MinExpr","TinyExpressionP4AST.MaxExpr","TinyExpressionP4AST.RandomExpr","TinyExpressionP4AST.AbsExpr","TinyExpressionP4AST.RoundExpr","TinyExpressionP4AST.CeilExpr","TinyExpressionP4AST.FloorExpr","TinyExpressionP4AST.PowExpr","TinyExpressionP4AST.LogExpr","TinyExpressionP4AST.ExpExpr","TinyExpressionP4AST.ToNumExpr","TinyExpressionP4AST.ToUpperCaseExpr","TinyExpressionP4AST.ToLowerCaseExpr","TinyExpressionP4AST.TrimExpr","TinyExpressionP4AST.LengthExpr","TinyExpressionP4AST.ToUpperCaseDotExpr","TinyExpressionP4AST.ToLowerCaseDotExpr","TinyExpressionP4AST.TrimDotExpr","TinyExpressionP4AST.LengthDotExpr","TinyExpressionP4AST.StartsWithExpr","TinyExpressionP4AST.EndsWithExpr","TinyExpressionP4AST.ContainsExpr","TinyExpressionP4AST.InExpr","TinyExpressionP4AST.StartsWithDotExpr","TinyExpressionP4AST.EndsWithDotExpr","TinyExpressionP4AST.ContainsDotExpr","TinyExpressionP4AST.IsPresentExpr","TinyExpressionP4AST.InTimeRangeExpr","TinyExpressionP4AST.InDayTimeRangeExpr","TinyExpressionP4AST.SliceExpr","TinyExpressionP4AST.StringConcatExpr","TinyExpressionP4AST.StringCastVariableRefExpr","TinyExpressionP4AST.StringTypedVariableRefExpr","TinyExpressionP4AST.BooleanOrExpr","TinyExpressionP4AST.BooleanAndExpr","TinyExpressionP4AST.BooleanXorExpr","TinyExpressionP4AST.NotExpr","TinyExpressionP4AST.BooleanEqualityExpr","TinyExpressionP4AST.BooleanFactorExpr","TinyExpressionP4AST.StringComparisonExpr","TinyExpressionP4AST.ComparisonExpr","TinyExpressionP4AST.ObjectExpr","TinyExpressionP4AST.IfExpr","TinyExpressionP4AST.BranchExpressionExpr","TinyExpressionP4AST.NumberMatchExpr","TinyExpressionP4AST.NumberCaseExpr","TinyExpressionP4AST.NumberDefaultCaseExpr","TinyExpressionP4AST.NumberCaseValueExpr","TinyExpressionP4AST.StringMatchExpr","TinyExpressionP4AST.StringCaseExpr","TinyExpressionP4AST.StringDefaultCaseExpr","TinyExpressionP4AST.StringCaseValueExpr","TinyExpressionP4AST.BooleanMatchExpr","TinyExpressionP4AST.BooleanCaseExpr","TinyExpressionP4AST.BooleanDefaultCaseExpr","TinyExpressionP4AST.BooleanCaseValueExpr","TinyExpressionP4AST.VariableRefExpr","TinyExpressionP4AST.ExpressionExpr"];
pub(crate) const TYPE_NAMES: &[&str] = &["text","null","FormulaExpr","CodeBlockExpr","ImportDeclarationExpr","QualifiedNameExpr","NumberVariableDeclarationExpr","StringVariableDeclarationExpr","BooleanVariableDeclarationExpr","ObjectVariableDeclarationExpr","OnlyIfAbsentExpr","NumberMethodDeclarationExpr","StringMethodDeclarationExpr","BooleanMethodDeclarationExpr","ObjectMethodDeclarationExpr","MethodParametersExpr","MethodParameterExpr","ExternalBooleanInvocationExpr","ExternalNumberInvocationExpr","ExternalStringInvocationExpr","ExternalObjectInvocationExpr","MethodInvocationExpr","TernaryExpr","ArgumentExpressionExpr","ArgumentsExpr","BinaryExpr","SinExpr","CosExpr","TanExpr","SqrtExpr","MinExpr","MaxExpr","RandomExpr","AbsExpr","RoundExpr","CeilExpr","FloorExpr","PowExpr","LogExpr","ExpExpr","ToNumExpr","ToUpperCaseExpr","ToLowerCaseExpr","TrimExpr","LengthExpr","ToUpperCaseDotExpr","ToLowerCaseDotExpr","TrimDotExpr","LengthDotExpr","StartsWithExpr","EndsWithExpr","ContainsExpr","InExpr","StartsWithDotExpr","EndsWithDotExpr","ContainsDotExpr","IsPresentExpr","InTimeRangeExpr","InDayTimeRangeExpr","SliceExpr","StringConcatExpr","StringCastVariableRefExpr","StringTypedVariableRefExpr","BooleanOrExpr","BooleanAndExpr","BooleanXorExpr","NotExpr","BooleanEqualityExpr","BooleanFactorExpr","StringComparisonExpr","ComparisonExpr","ObjectExpr","IfExpr","BranchExpressionExpr","NumberMatchExpr","NumberCaseExpr","NumberDefaultCaseExpr","NumberCaseValueExpr","StringMatchExpr","StringCaseExpr","StringDefaultCaseExpr","StringCaseValueExpr","BooleanMatchExpr","BooleanCaseExpr","BooleanDefaultCaseExpr","BooleanCaseValueExpr","VariableRefExpr","ExpressionExpr"];
-pub(crate) const RULE_IDS: &[&str] = &["TinyExpressionP4::Formula", "TinyExpressionP4::CodeBlock", "TinyExpressionP4::ImportDeclaration", "TinyExpressionP4::ClassName", "TinyExpressionP4::VariableDeclaration", "TinyExpressionP4::NumberVariableDeclaration", "TinyExpressionP4::StringVariableDeclaration", "TinyExpressionP4::BooleanVariableDeclaration", "TinyExpressionP4::ObjectVariableDeclaration", "TinyExpressionP4::TypeHint", "TinyExpressionP4::NumberTypeHint", "TinyExpressionP4::StringTypeHint", "TinyExpressionP4::BooleanTypeHint", "TinyExpressionP4::ObjectTypeHint", "TinyExpressionP4::OnlyIfAbsent", "TinyExpressionP4::Description", "TinyExpressionP4::Annotation", "TinyExpressionP4::AnnotationParameters", "TinyExpressionP4::AnnotationParameter", "TinyExpressionP4::MethodDeclaration", "TinyExpressionP4::NumberMethodDeclaration", "TinyExpressionP4::StringMethodDeclaration", "TinyExpressionP4::BooleanMethodDeclaration", "TinyExpressionP4::ObjectMethodDeclaration", "TinyExpressionP4::MethodParameters", "TinyExpressionP4::MethodParameter", "TinyExpressionP4::NumberReturnType", "TinyExpressionP4::StringReturnType", "TinyExpressionP4::BooleanReturnType", "TinyExpressionP4::ObjectReturnType", "TinyExpressionP4::ReturnType", "TinyExpressionP4::ExternalBooleanInvocation", "TinyExpressionP4::ExternalNumberInvocation", "TinyExpressionP4::ExternalStringInvocation", "TinyExpressionP4::ExternalObjectInvocation", "TinyExpressionP4::MethodInvocationHeader", "TinyExpressionP4::MethodInvocation", "TinyExpressionP4::ArgumentTernary", "TinyExpressionP4::ArgumentExpression", "TinyExpressionP4::Arguments", "TinyExpressionP4::NumberExpression", "TinyExpressionP4::NumberTerm", "TinyExpressionP4::AddOp", "TinyExpressionP4::MulOp", "TinyExpressionP4::MathFunction", "TinyExpressionP4::SinFunction", "TinyExpressionP4::CosFunction", "TinyExpressionP4::TanFunction", "TinyExpressionP4::SqrtFunction", "TinyExpressionP4::MinFunction", "TinyExpressionP4::MaxFunction", "TinyExpressionP4::RandomFunction", "TinyExpressionP4::AbsFunction", "TinyExpressionP4::RoundFunction", "TinyExpressionP4::CeilFunction", "TinyExpressionP4::FloorFunction", "TinyExpressionP4::PowFunction", "TinyExpressionP4::LogFunction", "TinyExpressionP4::ExpFunction", "TinyExpressionP4::ToNumFunction", "TinyExpressionP4::NumberFactor", "TinyExpressionP4::ToUpperCaseFunction", "TinyExpressionP4::ToLowerCaseFunction", "TinyExpressionP4::TrimFunction", "TinyExpressionP4::LengthFunction", "TinyExpressionP4::LenFunction", "TinyExpressionP4::ToUpperCaseDotMethod", "TinyExpressionP4::ToLowerCaseDotMethod", "TinyExpressionP4::TrimDotMethod", "TinyExpressionP4::LengthDotMethod", "TinyExpressionP4::StartsWithFunction", "TinyExpressionP4::EndsWithFunction", "TinyExpressionP4::ContainsFunction", "TinyExpressionP4::InMethod", "TinyExpressionP4::StartsWithDotMethod", "TinyExpressionP4::EndsWithDotMethod", "TinyExpressionP4::ContainsDotMethod", "TinyExpressionP4::StringPredicateReceiver", "TinyExpressionP4::IsPresentFunction", "TinyExpressionP4::InTimeRangeFunction", "TinyExpressionP4::InDayTimeRangeFunction", "TinyExpressionP4::DayOfWeek", "TinyExpressionP4::SliceBaseReceiver", "TinyExpressionP4::SliceStartIndex", "TinyExpressionP4::SliceEndIndex", "TinyExpressionP4::SliceStepIndex", "TinyExpressionP4::SliceBaseExpression", "TinyExpressionP4::SliceNestedExpression", "TinyExpressionP4::SliceExpression", "TinyExpressionP4::StringExpression", "TinyExpressionP4::ParenthesizedStringExpression", "TinyExpressionP4::StringTerm", "TinyExpressionP4::StringCastVariable", "TinyExpressionP4::StringTypedVariable", "TinyExpressionP4::BooleanExpression", "TinyExpressionP4::BooleanAndExpression", "TinyExpressionP4::BooleanXorExpression", "TinyExpressionP4::NotExpression", "TinyExpressionP4::BooleanComparable", "TinyExpressionP4::BooleanEqualityExpression", "TinyExpressionP4::BooleanFactor", "TinyExpressionP4::StringComparisonExpression", "TinyExpressionP4::EqualityOp", "TinyExpressionP4::ComparisonExpression", "TinyExpressionP4::CompareOp", "TinyExpressionP4::ObjectExpression", "TinyExpressionP4::IfExpression", "TinyExpressionP4::BranchExpression", "TinyExpressionP4::TernaryExpression", "TinyExpressionP4::NumberMatchExpression", "TinyExpressionP4::NumberCase", "TinyExpressionP4::NumberDefaultCase", "TinyExpressionP4::NumberCaseValue", "TinyExpressionP4::StringMatchExpression", "TinyExpressionP4::StringCase", "TinyExpressionP4::StringDefaultCase", "TinyExpressionP4::StringCaseValue", "TinyExpressionP4::BooleanMatchExpression", "TinyExpressionP4::BooleanCase", "TinyExpressionP4::BooleanDefaultCase", "TinyExpressionP4::BooleanCaseValue", "TinyExpressionP4::VariableRef", "TinyExpressionP4::TypeKeyword", "TinyExpressionP4::Expression"];
+pub(crate) const RULE_IDS: &[&str] = &["TinyExpressionP4::Formula", "TinyExpressionP4::CodeBlock", "TinyExpressionP4::ImportDeclaration", "TinyExpressionP4::ClassName", "TinyExpressionP4::VariableDeclaration", "TinyExpressionP4::NumberVariableDeclaration", "TinyExpressionP4::StringVariableDeclaration", "TinyExpressionP4::BooleanVariableDeclaration", "TinyExpressionP4::ObjectVariableDeclaration", "TinyExpressionP4::TypeHint", "TinyExpressionP4::NumberTypeHint", "TinyExpressionP4::StringTypeHint", "TinyExpressionP4::BooleanTypeHint", "TinyExpressionP4::ObjectTypeHint", "TinyExpressionP4::OnlyIfAbsent", "TinyExpressionP4::Description", "TinyExpressionP4::Annotation", "TinyExpressionP4::AnnotationParameters", "TinyExpressionP4::AnnotationParameter", "TinyExpressionP4::MethodDeclaration", "TinyExpressionP4::NumberMethodDeclaration", "TinyExpressionP4::StringMethodDeclaration", "TinyExpressionP4::BooleanMethodDeclaration", "TinyExpressionP4::ObjectMethodDeclaration", "TinyExpressionP4::MethodParameters", "TinyExpressionP4::MethodParameter", "TinyExpressionP4::NumberReturnType", "TinyExpressionP4::StringReturnType", "TinyExpressionP4::BooleanReturnType", "TinyExpressionP4::ObjectReturnType", "TinyExpressionP4::ReturnType", "TinyExpressionP4::ExternalBooleanInvocation", "TinyExpressionP4::ExternalNumberInvocation", "TinyExpressionP4::ExternalStringInvocation", "TinyExpressionP4::ExternalObjectInvocation", "TinyExpressionP4::MethodInvocationHeader", "TinyExpressionP4::MethodInvocation", "TinyExpressionP4::ArgumentTernary", "TinyExpressionP4::ArgumentExpression", "TinyExpressionP4::Arguments", "TinyExpressionP4::NumberExpression", "TinyExpressionP4::NumberTerm", "TinyExpressionP4::AddOp", "TinyExpressionP4::MulOp", "TinyExpressionP4::MathFunction", "TinyExpressionP4::SinFunction", "TinyExpressionP4::CosFunction", "TinyExpressionP4::TanFunction", "TinyExpressionP4::SqrtFunction", "TinyExpressionP4::MinFunction", "TinyExpressionP4::MaxFunction", "TinyExpressionP4::RandomFunction", "TinyExpressionP4::AbsFunction", "TinyExpressionP4::RoundFunction", "TinyExpressionP4::CeilFunction", "TinyExpressionP4::FloorFunction", "TinyExpressionP4::PowFunction", "TinyExpressionP4::LogFunction", "TinyExpressionP4::ExpFunction", "TinyExpressionP4::ToNumFunction", "TinyExpressionP4::NumberFactor", "TinyExpressionP4::ToUpperCaseFunction", "TinyExpressionP4::ToLowerCaseFunction", "TinyExpressionP4::TrimFunction", "TinyExpressionP4::LengthFunction", "TinyExpressionP4::LenFunction", "TinyExpressionP4::ToUpperCaseDotMethod", "TinyExpressionP4::ToLowerCaseDotMethod", "TinyExpressionP4::TrimDotMethod", "TinyExpressionP4::LengthDotMethod", "TinyExpressionP4::StartsWithFunction", "TinyExpressionP4::EndsWithFunction", "TinyExpressionP4::ContainsFunction", "TinyExpressionP4::InMethod", "TinyExpressionP4::StartsWithDotMethod", "TinyExpressionP4::EndsWithDotMethod", "TinyExpressionP4::ContainsDotMethod", "TinyExpressionP4::StringPredicateReceiver", "TinyExpressionP4::IsPresentFunction", "TinyExpressionP4::InTimeRangeFunction", "TinyExpressionP4::InDayTimeRangeFunction", "TinyExpressionP4::DayOfWeek", "TinyExpressionP4::SliceBaseReceiver", "TinyExpressionP4::SliceStartIndex", "TinyExpressionP4::SliceEndIndex", "TinyExpressionP4::SliceStepIndex", "TinyExpressionP4::SliceBaseExpression", "TinyExpressionP4::SliceNestedExpression", "TinyExpressionP4::SliceExpression", "TinyExpressionP4::StringExpression", "TinyExpressionP4::ParenthesizedStringExpression", "TinyExpressionP4::StringTerm", "TinyExpressionP4::StringCastVariable", "TinyExpressionP4::StringTypedVariable", "TinyExpressionP4::BooleanExpression", "TinyExpressionP4::BooleanAndExpression", "TinyExpressionP4::BooleanXorExpression", "TinyExpressionP4::NotExpression", "TinyExpressionP4::BooleanComparable", "TinyExpressionP4::BooleanEqualityExpression", "TinyExpressionP4::BooleanFactor", "TinyExpressionP4::StringComparisonExpression", "TinyExpressionP4::EqualityOp", "TinyExpressionP4::ComparisonExpression", "TinyExpressionP4::CompareOp", "TinyExpressionP4::ObjectExpression", "TinyExpressionP4::IfExpression", "TinyExpressionP4::BranchExpression", "TinyExpressionP4::TernaryExpression", "TinyExpressionP4::NumberMatchExpression", "TinyExpressionP4::NumberCase", "TinyExpressionP4::NumberDefaultCase", "TinyExpressionP4::NumberCaseValue", "TinyExpressionP4::StringMatchExpression", "TinyExpressionP4::StringCase", "TinyExpressionP4::StringDefaultCase", "TinyExpressionP4::StringCaseValue", "TinyExpressionP4::BooleanMatchExpression", "TinyExpressionP4::BooleanCase", "TinyExpressionP4::BooleanDefaultCase", "TinyExpressionP4::BooleanCaseValue", "TinyExpressionP4::VariableRef", "TinyExpressionP4::TypeKeyword", "TinyExpressionP4::Expression", "TinyExpressionP4::NumberRootExpression", "TinyExpressionP4::BooleanRootExpression", "TinyExpressionP4::StringRootExpression", "TinyExpressionP4::ObjectRootExpression", "TinyExpressionP4::MethodRootExpression", "TinyExpressionP4::ParenthesizedRootExpression"];
/// `super::Ast` ใจๅใๅฝขใฎใๆจใธใฎๅ็
งใ
#[derive(Clone, Copy, Debug)]
pub enum Node<'t> { Text(&'t str), Null,
diff --git a/rust/tinyexpression-rs/src/generated/ubnfc/metadata.rs b/rust/tinyexpression-rs/src/generated/ubnfc/metadata.rs
index 992b1a21..ebd6a9b8 100644
--- a/rust/tinyexpression-rs/src/generated/ubnfc/metadata.rs
+++ b/rust/tinyexpression-rs/src/generated/ubnfc/metadata.rs
@@ -1,5 +1,5 @@
//! Grammar metadata; offsets in catalog sites refer to capture IDs, not input positions.
#[derive(Clone,Copy,Debug,PartialEq,Eq)] pub struct Catalog {pub rule_id:&'static str,pub rule:&'static str,pub context:&'static str,pub captures:&'static [&'static str],pub site_ids:&'static [&'static str]}
pub const CATALOGS:&[Catalog]=&[
-Catalog{rule_id:"TinyExpressionP4::VariableRef",rule:"VariableRef",context:"variable",captures:&["name", "type"],site_ids:&["expr:tools/tinyexpression-p4-lsp-vscode/grammar/tinyexpression-p4.ubnf:24688:24698:body/1/tokenRef/capture/0", "expr:tools/tinyexpression-p4-lsp-vscode/grammar/tinyexpression-p4.ubnf:24716:24727:body/2/0/1/ruleRef/capture/0"]},
+Catalog{rule_id:"TinyExpressionP4::VariableRef",rule:"VariableRef",context:"variable",captures:&["name", "type"],site_ids:&["expr:tools/tinyexpression-p4-lsp-vscode/grammar/tinyexpression-p4.ubnf:25252:25262:body/1/tokenRef/capture/0", "expr:tools/tinyexpression-p4-lsp-vscode/grammar/tinyexpression-p4.ubnf:25280:25291:body/2/0/1/ruleRef/capture/0"]},
];
diff --git a/rust/tinyexpression-rs/src/generated/ubnfc/parser.rs b/rust/tinyexpression-rs/src/generated/ubnfc/parser.rs
index ad09e1dd..acba3285 100644
--- a/rust/tinyexpression-rs/src/generated/ubnfc/parser.rs
+++ b/rust/tinyexpression-rs/src/generated/ubnfc/parser.rs
@@ -191,6 +191,12 @@ Ok(match (grammar,entry) {
("TinyExpressionP4",Some("VariableRef"))=>parser.r121_c(State::default()),
("TinyExpressionP4",Some("TypeKeyword"))=>parser.r122_c(State::default()),
("TinyExpressionP4",Some("Expression"))=>parser.r123_c(State::default()),
+("TinyExpressionP4",Some("NumberRootExpression"))=>parser.r124_c(State::default()),
+("TinyExpressionP4",Some("BooleanRootExpression"))=>parser.r125_c(State::default()),
+("TinyExpressionP4",Some("StringRootExpression"))=>parser.r126_c(State::default()),
+("TinyExpressionP4",Some("ObjectRootExpression"))=>parser.r127_c(State::default()),
+("TinyExpressionP4",Some("MethodRootExpression"))=>parser.r128_c(State::default()),
+("TinyExpressionP4",Some("ParenthesizedRootExpression"))=>parser.r129_c(State::default()),
_=>return Err("unsupported grammar or entry"),})}
// D-070: `parse_entry_budget` / `parse_entry_escalated` ใฏ `parse_entry_with_options` ใใ
// ๅใซ็ฝฎใใdriver.rs ใฎ scanner_hook / examples/p4-rust ใฎ build.rs ใฏใใฎ้ขๆฐใ
@@ -259,7 +265,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["FormulaPa
self.depth-=1;out.diag=self.diag_rule(0,out.diag);out
}
fn r1_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e13_c(state);
+let mut out=self.e41_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:1,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -268,7 +274,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["CodeBlock
self.depth-=1;out.diag=self.diag_rule(1,out.diag);out
}
fn r2_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e21_c(state);
+let mut out=self.e49_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:2,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -277,7 +283,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'import'"
self.depth-=1;out.diag=self.diag_rule(2,out.diag);out
}
fn r3_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e31_c(state);
+let mut out=self.e59_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:3,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -286,7 +292,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["ClassName
self.depth-=1;out.diag=self.diag_rule(3,out.diag);out
}
fn r4_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e37_c(state);
+let mut out=self.e65_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:4,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -295,10 +301,10 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'$'", "';
self.depth-=1;out.diag=self.diag_rule(4,out.diag);out
}
fn r5_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e42_c(state);
+let mut out=self.e70_c(state);
if out.ok {
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[11],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==11 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[21],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==21 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -310,10 +316,10 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'variable
self.depth-=1;out.diag=self.diag_rule(5,out.diag);out
}
fn r6_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e60_c(state);
+let mut out=self.e88_c(state);
if out.ok {
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[15],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==15 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[25],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==25 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -325,10 +331,10 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'variable
self.depth-=1;out.diag=self.diag_rule(6,out.diag);out
}
fn r7_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e78_c(state);
+let mut out=self.e106_c(state);
if out.ok {
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[19],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==19 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[29],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==29 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -340,10 +346,10 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'variable
self.depth-=1;out.diag=self.diag_rule(7,out.diag);out
}
fn r8_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e96_c(state);
+let mut out=self.e124_c(state);
if out.ok {
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[23],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==23 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[33],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==33 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -355,7 +361,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'variable
self.depth-=1;out.diag=self.diag_rule(8,out.diag);out
}
fn r9_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e114_c(state);
+let mut out=self.e142_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:9,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -364,7 +370,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'as'", "'
self.depth-=1;out.diag=self.diag_rule(9,out.diag);out
}
fn r10_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e127_c(state);
+let mut out=self.e155_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:10,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -373,7 +379,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'as'", "'
self.depth-=1;out.diag=self.diag_rule(10,out.diag);out
}
fn r11_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e136_c(state);
+let mut out=self.e164_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:11,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -382,7 +388,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'as'", "'
self.depth-=1;out.diag=self.diag_rule(11,out.diag);out
}
fn r12_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e143_c(state);
+let mut out=self.e171_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:12,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -391,7 +397,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'as'", "'
self.depth-=1;out.diag=self.diag_rule(12,out.diag);out
}
fn r13_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e150_c(state);
+let mut out=self.e178_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:13,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -400,7 +406,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'as'", "'
self.depth-=1;out.diag=self.diag_rule(13,out.diag);out
}
fn r14_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e157_c(state);
+let mut out=self.e185_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:14,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -409,7 +415,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'if'", "'
self.depth-=1;out.diag=self.diag_rule(14,out.diag);out
}
fn r15_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e161_c(state);
+let mut out=self.e189_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:15,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -418,7 +424,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'descript
self.depth-=1;out.diag=self.diag_rule(15,out.diag);out
}
fn r16_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e165_c(state);
+let mut out=self.e193_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:16,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -427,7 +433,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'@'", "'(
self.depth-=1;out.diag=self.diag_rule(16,out.diag);out
}
fn r17_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e172_c(state);
+let mut out=self.e200_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:17,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -436,7 +442,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'='"]);}
self.depth-=1;out.diag=self.diag_rule(17,out.diag);out
}
fn r18_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e178_c(state);
+let mut out=self.e206_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:18,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -445,7 +451,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'='"]);}
self.depth-=1;out.diag=self.diag_rule(18,out.diag);out
}
fn r19_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e182_c(state);
+let mut out=self.e210_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:19,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -455,11 +461,11 @@ self.depth-=1;out.diag=self.diag_rule(19,out.diag);out
}
fn r20_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
self.effect_scope_at(ScanEffect::Enter,"lexical",self.cp(state.consumed),0,"NumberMethodDeclaration");
-let mut out=self.e187_c(state);
+let mut out=self.e215_c(state);
if out.ok {
self.effect_scope_at(ScanEffect::Leave,"lexical",self.cp(out.state.consumed),0,"NumberMethodDeclaration");
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[27],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==27 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[37],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==37 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -472,11 +478,11 @@ self.depth-=1;out.diag=self.diag_rule(20,out.diag);out
}
fn r21_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
self.effect_scope_at(ScanEffect::Enter,"lexical",self.cp(state.consumed),0,"StringMethodDeclaration");
-let mut out=self.e197_c(state);
+let mut out=self.e225_c(state);
if out.ok {
self.effect_scope_at(ScanEffect::Leave,"lexical",self.cp(out.state.consumed),0,"StringMethodDeclaration");
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[30],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==30 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[40],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==40 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -489,11 +495,11 @@ self.depth-=1;out.diag=self.diag_rule(21,out.diag);out
}
fn r22_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
self.effect_scope_at(ScanEffect::Enter,"lexical",self.cp(state.consumed),0,"BooleanMethodDeclaration");
-let mut out=self.e207_c(state);
+let mut out=self.e235_c(state);
if out.ok {
self.effect_scope_at(ScanEffect::Leave,"lexical",self.cp(out.state.consumed),0,"BooleanMethodDeclaration");
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[33],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==33 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[43],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==43 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -506,11 +512,11 @@ self.depth-=1;out.diag=self.diag_rule(22,out.diag);out
}
fn r23_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
self.effect_scope_at(ScanEffect::Enter,"lexical",self.cp(state.consumed),0,"ObjectMethodDeclaration");
-let mut out=self.e217_c(state);
+let mut out=self.e245_c(state);
if out.ok {
self.effect_scope_at(ScanEffect::Leave,"lexical",self.cp(out.state.consumed),0,"ObjectMethodDeclaration");
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[36],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==36 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[46],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==46 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -522,7 +528,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'object'"
self.depth-=1;out.diag=self.diag_rule(23,out.diag);out
}
fn r24_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e227_c(state);
+let mut out=self.e255_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:24,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -531,10 +537,10 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["MethodPar
self.depth-=1;out.diag=self.diag_rule(24,out.diag);out
}
fn r25_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e233_c(state);
+let mut out=self.e261_c(state);
if out.ok {
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[41],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==41 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[51],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==51 {
self.effect_at(ScanEffect::Declare{name,offset_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -546,7 +552,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'$'"]);}
self.depth-=1;out.diag=self.diag_rule(25,out.diag);out
}
fn r26_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e240_c(state);
+let mut out=self.e268_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:26,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -555,7 +561,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'number'"
self.depth-=1;out.diag=self.diag_rule(26,out.diag);out
}
fn r27_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e243_c(state);
+let mut out=self.e271_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:27,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -564,7 +570,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'string'"
self.depth-=1;out.diag=self.diag_rule(27,out.diag);out
}
fn r28_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e245_c(state);
+let mut out=self.e273_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:28,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -573,7 +579,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'boolean'
self.depth-=1;out.diag=self.diag_rule(28,out.diag);out
}
fn r29_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e247_c(state);
+let mut out=self.e275_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:29,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -582,7 +588,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'object'"
self.depth-=1;out.diag=self.diag_rule(29,out.diag);out
}
fn r30_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e249_c(state);
+let mut out=self.e277_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:30,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -591,7 +597,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'number'"
self.depth-=1;out.diag=self.diag_rule(30,out.diag);out
}
fn r31_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e254_c(state);
+let mut out=self.e282_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:31,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -600,7 +606,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'external
self.depth-=1;out.diag=self.diag_rule(31,out.diag);out
}
fn r32_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e275_c(state);
+let mut out=self.e303_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:32,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -609,7 +615,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'external
self.depth-=1;out.diag=self.diag_rule(32,out.diag);out
}
fn r33_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e301_c(state);
+let mut out=self.e329_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:33,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -618,7 +624,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'external
self.depth-=1;out.diag=self.diag_rule(33,out.diag);out
}
fn r34_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e322_c(state);
+let mut out=self.e350_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:34,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -627,7 +633,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'external
self.depth-=1;out.diag=self.diag_rule(34,out.diag);out
}
fn r35_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e343_c(state);
+let mut out=self.e371_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:35,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -636,10 +642,10 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'call'",
self.depth-=1;out.diag=self.diag_rule(35,out.diag);out
}
fn r36_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e349_c(state);
+let mut out=self.e377_c(state);
if out.ok {
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[59],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==59 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[69],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==69 {
self.effect_at(ScanEffect::Use{name,offset_cp,len_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -651,7 +657,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'internal
self.depth-=1;out.diag=self.diag_rule(36,out.diag);out
}
fn r37_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e356_c(state);
+let mut out=self.e384_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:37,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -660,7 +666,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'?'", "':
self.depth-=1;out.diag=self.diag_rule(37,out.diag);out
}
fn r38_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e362_c(state);
+let mut out=self.e390_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:38,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -669,7 +675,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["ArgumentE
self.depth-=1;out.diag=self.diag_rule(38,out.diag);out
}
fn r39_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e367_c(state);
+let mut out=self.e395_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:39,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -678,7 +684,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["Arguments
self.depth-=1;out.diag=self.diag_rule(39,out.diag);out
}
fn r40_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e373_c(state);
+let mut out=self.e401_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:40,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -687,7 +693,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["NumberExp
self.depth-=1;out.diag=self.diag_rule(40,out.diag);out
}
fn r41_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e379_c(state);
+let mut out=self.e407_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:41,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -696,7 +702,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["NumberTer
self.depth-=1;out.diag=self.diag_rule(41,out.diag);out
}
fn r42_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e385_c(state);
+let mut out=self.e413_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:42,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -705,7 +711,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'+'", "'-
self.depth-=1;out.diag=self.diag_rule(42,out.diag);out
}
fn r43_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e388_c(state);
+let mut out=self.e416_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:43,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -714,7 +720,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'*'", "'/
self.depth-=1;out.diag=self.diag_rule(43,out.diag);out
}
fn r44_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e391_c(state);
+let mut out=self.e419_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:44,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -723,7 +729,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'sin'", "
self.depth-=1;out.diag=self.diag_rule(44,out.diag);out
}
fn r45_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e406_c(state);
+let mut out=self.e434_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:45,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -732,7 +738,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'sin'", "
self.depth-=1;out.diag=self.diag_rule(45,out.diag);out
}
fn r46_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e411_c(state);
+let mut out=self.e439_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:46,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -741,7 +747,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'cos'", "
self.depth-=1;out.diag=self.diag_rule(46,out.diag);out
}
fn r47_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e416_c(state);
+let mut out=self.e444_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:47,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -750,7 +756,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'tan'", "
self.depth-=1;out.diag=self.diag_rule(47,out.diag);out
}
fn r48_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e421_c(state);
+let mut out=self.e449_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:48,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -759,7 +765,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'sqrt'",
self.depth-=1;out.diag=self.diag_rule(48,out.diag);out
}
fn r49_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e426_c(state);
+let mut out=self.e454_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:49,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -768,7 +774,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'min'", "
self.depth-=1;out.diag=self.diag_rule(49,out.diag);out
}
fn r50_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e435_c(state);
+let mut out=self.e463_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:50,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -777,7 +783,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'max'", "
self.depth-=1;out.diag=self.diag_rule(50,out.diag);out
}
fn r51_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e444_c(state);
+let mut out=self.e472_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:51,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -786,7 +792,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'random'"
self.depth-=1;out.diag=self.diag_rule(51,out.diag);out
}
fn r52_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e448_c(state);
+let mut out=self.e476_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:52,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -795,7 +801,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'abs'", "
self.depth-=1;out.diag=self.diag_rule(52,out.diag);out
}
fn r53_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e453_c(state);
+let mut out=self.e481_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:53,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -804,7 +810,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'round'",
self.depth-=1;out.diag=self.diag_rule(53,out.diag);out
}
fn r54_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e458_c(state);
+let mut out=self.e486_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:54,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -813,7 +819,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'ceil'",
self.depth-=1;out.diag=self.diag_rule(54,out.diag);out
}
fn r55_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e463_c(state);
+let mut out=self.e491_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:55,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -822,7 +828,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'floor'",
self.depth-=1;out.diag=self.diag_rule(55,out.diag);out
}
fn r56_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e468_c(state);
+let mut out=self.e496_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:56,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -831,7 +837,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'pow'", "
self.depth-=1;out.diag=self.diag_rule(56,out.diag);out
}
fn r57_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e475_c(state);
+let mut out=self.e503_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:57,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -840,7 +846,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'log'", "
self.depth-=1;out.diag=self.diag_rule(57,out.diag);out
}
fn r58_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e480_c(state);
+let mut out=self.e508_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:58,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -849,7 +855,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'exp'", "
self.depth-=1;out.diag=self.diag_rule(58,out.diag);out
}
fn r59_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e485_c(state);
+let mut out=self.e513_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:59,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -858,7 +864,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'toNum'",
self.depth-=1;out.diag=self.diag_rule(59,out.diag);out
}
fn r60_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e492_c(state);
+let mut out=self.e520_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:60,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -867,7 +873,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'('", "'?
self.depth-=1;out.diag=self.diag_rule(60,out.diag);out
}
fn r61_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e509_c(state);
+let mut out=self.e537_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:61,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -876,7 +882,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'toUpperC
self.depth-=1;out.diag=self.diag_rule(61,out.diag);out
}
fn r62_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e514_c(state);
+let mut out=self.e542_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:62,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -885,7 +891,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'toLowerC
self.depth-=1;out.diag=self.diag_rule(62,out.diag);out
}
fn r63_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e519_c(state);
+let mut out=self.e547_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:63,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -894,7 +900,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'trim'",
self.depth-=1;out.diag=self.diag_rule(63,out.diag);out
}
fn r64_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e524_c(state);
+let mut out=self.e552_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:64,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -903,7 +909,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'length'"
self.depth-=1;out.diag=self.diag_rule(64,out.diag);out
}
fn r65_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e529_c(state);
+let mut out=self.e557_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:65,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -912,7 +918,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'len'", "
self.depth-=1;out.diag=self.diag_rule(65,out.diag);out
}
fn r66_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e534_c(state);
+let mut out=self.e562_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:66,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -921,7 +927,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.toUpper
self.depth-=1;out.diag=self.diag_rule(66,out.diag);out
}
fn r67_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e539_c(state);
+let mut out=self.e567_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:67,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -930,7 +936,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.toLower
self.depth-=1;out.diag=self.diag_rule(67,out.diag);out
}
fn r68_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e544_c(state);
+let mut out=self.e572_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:68,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -939,7 +945,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.trim'",
self.depth-=1;out.diag=self.diag_rule(68,out.diag);out
}
fn r69_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e549_c(state);
+let mut out=self.e577_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:69,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -948,7 +954,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.length'
self.depth-=1;out.diag=self.diag_rule(69,out.diag);out
}
fn r70_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e554_c(state);
+let mut out=self.e582_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:70,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -957,7 +963,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'startsWi
self.depth-=1;out.diag=self.diag_rule(70,out.diag);out
}
fn r71_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e565_c(state);
+let mut out=self.e593_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:71,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -966,7 +972,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'endsWith
self.depth-=1;out.diag=self.diag_rule(71,out.diag);out
}
fn r72_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e576_c(state);
+let mut out=self.e604_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:72,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -975,7 +981,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'contains
self.depth-=1;out.diag=self.diag_rule(72,out.diag);out
}
fn r73_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e587_c(state);
+let mut out=self.e615_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:73,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -984,7 +990,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.in'", "
self.depth-=1;out.diag=self.diag_rule(73,out.diag);out
}
fn r74_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e597_c(state);
+let mut out=self.e625_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:74,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -993,7 +999,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.startsW
self.depth-=1;out.diag=self.diag_rule(74,out.diag);out
}
fn r75_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e607_c(state);
+let mut out=self.e635_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:75,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1002,7 +1008,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.endsWit
self.depth-=1;out.diag=self.diag_rule(75,out.diag);out
}
fn r76_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e617_c(state);
+let mut out=self.e645_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:76,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1011,7 +1017,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'.contain
self.depth-=1;out.diag=self.diag_rule(76,out.diag);out
}
fn r77_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e627_c(state);
+let mut out=self.e655_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:77,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1020,7 +1026,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'toLowerC
self.depth-=1;out.diag=self.diag_rule(77,out.diag);out
}
fn r78_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e632_c(state);
+let mut out=self.e660_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:78,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1029,7 +1035,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'isPresen
self.depth-=1;out.diag=self.diag_rule(78,out.diag);out
}
fn r79_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e637_c(state);
+let mut out=self.e665_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:79,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1038,7 +1044,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'inTimeRa
self.depth-=1;out.diag=self.diag_rule(79,out.diag);out
}
fn r80_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e644_c(state);
+let mut out=self.e672_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:80,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1047,7 +1053,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'inDayTim
self.depth-=1;out.diag=self.diag_rule(80,out.diag);out
}
fn r81_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e655_c(state);
+let mut out=self.e683_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:81,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1056,7 +1062,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'MONDAY'"
self.depth-=1;out.diag=self.diag_rule(81,out.diag);out
}
fn r82_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e663_c(state);
+let mut out=self.e691_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:82,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1065,7 +1071,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'external
self.depth-=1;out.diag=self.diag_rule(82,out.diag);out
}
fn r83_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e679_c(state);
+let mut out=self.e707_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:83,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1074,7 +1080,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["SliceStar
self.depth-=1;out.diag=self.diag_rule(83,out.diag);out
}
fn r84_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e681_c(state);
+let mut out=self.e709_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:84,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1083,7 +1089,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["SliceEndI
self.depth-=1;out.diag=self.diag_rule(84,out.diag);out
}
fn r85_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e683_c(state);
+let mut out=self.e711_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:85,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1092,7 +1098,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["SliceStep
self.depth-=1;out.diag=self.diag_rule(85,out.diag);out
}
fn r86_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e685_c(state);
+let mut out=self.e713_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:86,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1101,7 +1107,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'['", "':
self.depth-=1;out.diag=self.diag_rule(86,out.diag);out
}
fn r87_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e742_c(state);
+let mut out=self.e770_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:87,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1110,7 +1116,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'['", "':
self.depth-=1;out.diag=self.diag_rule(87,out.diag);out
}
fn r88_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e799_c(state);
+let mut out=self.e827_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:88,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1119,7 +1125,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["SliceExpr
self.depth-=1;out.diag=self.diag_rule(88,out.diag);out
}
fn r89_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e802_c(state);
+let mut out=self.e830_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:89,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1128,7 +1134,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["StringExp
self.depth-=1;out.diag=self.diag_rule(89,out.diag);out
}
fn r90_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e808_c(state);
+let mut out=self.e836_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:90,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1137,7 +1143,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'('", "')
self.depth-=1;out.diag=self.diag_rule(90,out.diag);out
}
fn r91_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e812_c(state);
+let mut out=self.e840_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:91,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1146,7 +1152,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'match'",
self.depth-=1;out.diag=self.diag_rule(91,out.diag);out
}
fn r92_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e829_c(state);
+let mut out=self.e857_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:92,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1155,7 +1161,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'('", "'s
self.depth-=1;out.diag=self.diag_rule(92,out.diag);out
}
fn r93_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e838_c(state);
+let mut out=self.e866_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:93,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1164,7 +1170,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'$'", "'a
self.depth-=1;out.diag=self.diag_rule(93,out.diag);out
}
fn r94_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e846_c(state);
+let mut out=self.e874_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:94,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1173,7 +1179,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BooleanEx
self.depth-=1;out.diag=self.diag_rule(94,out.diag);out
}
fn r95_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e852_c(state);
+let mut out=self.e880_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:95,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1182,7 +1188,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BooleanAn
self.depth-=1;out.diag=self.diag_rule(95,out.diag);out
}
fn r96_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e858_c(state);
+let mut out=self.e886_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:96,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1191,7 +1197,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BooleanXo
self.depth-=1;out.diag=self.diag_rule(96,out.diag);out
}
fn r97_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e864_c(state);
+let mut out=self.e892_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:97,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1200,7 +1206,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'not'", "
self.depth-=1;out.diag=self.diag_rule(97,out.diag);out
}
fn r98_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e869_c(state);
+let mut out=self.e897_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:98,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1209,7 +1215,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'not'", "
self.depth-=1;out.diag=self.diag_rule(98,out.diag);out
}
fn r99_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e892_c(state);
+let mut out=self.e920_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:99,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1218,7 +1224,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BooleanEq
self.depth-=1;out.diag=self.diag_rule(99,out.diag);out
}
fn r100_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e896_c(state);
+let mut out=self.e924_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:100,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1227,7 +1233,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BooleanFa
self.depth-=1;out.diag=self.diag_rule(100,out.diag);out
}
fn r101_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e901_c(state);
+let mut out=self.e929_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:101,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1236,7 +1242,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["StringCom
self.depth-=1;out.diag=self.diag_rule(101,out.diag);out
}
fn r102_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e905_c(state);
+let mut out=self.e933_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:102,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1245,7 +1251,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'=='", "'
self.depth-=1;out.diag=self.diag_rule(102,out.diag);out
}
fn r103_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e908_c(state);
+let mut out=self.e936_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:103,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1254,7 +1260,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["Compariso
self.depth-=1;out.diag=self.diag_rule(103,out.diag);out
}
fn r104_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e912_c(state);
+let mut out=self.e940_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:104,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1263,7 +1269,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'=='", "'
self.depth-=1;out.diag=self.diag_rule(104,out.diag);out
}
fn r105_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e919_c(state);
+let mut out=self.e947_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:105,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1272,7 +1278,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["ObjectExp
self.depth-=1;out.diag=self.diag_rule(105,out.diag);out
}
fn r106_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e926_c(state);
+let mut out=self.e954_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:106,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1281,7 +1287,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'if'", "'
self.depth-=1;out.diag=self.diag_rule(106,out.diag);out
}
fn r107_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e938_c(state);
+let mut out=self.e966_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:107,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1290,7 +1296,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BranchExp
self.depth-=1;out.diag=self.diag_rule(107,out.diag);out
}
fn r108_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e947_c(state);
+let mut out=self.e975_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:108,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1299,7 +1305,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'('", "'?
self.depth-=1;out.diag=self.diag_rule(108,out.diag);out
}
fn r109_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e955_c(state);
+let mut out=self.e983_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:109,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1308,7 +1314,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'match'",
self.depth-=1;out.diag=self.diag_rule(109,out.diag);out
}
fn r110_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e966_c(state);
+let mut out=self.e994_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:110,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1317,7 +1323,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'->'"]);}
self.depth-=1;out.diag=self.diag_rule(110,out.diag);out
}
fn r111_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e970_c(state);
+let mut out=self.e998_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:111,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1326,7 +1332,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'default'
self.depth-=1;out.diag=self.diag_rule(111,out.diag);out
}
fn r112_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e974_c(state);
+let mut out=self.e1002_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:112,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1335,7 +1341,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["NumberCas
self.depth-=1;out.diag=self.diag_rule(112,out.diag);out
}
fn r113_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e976_c(state);
+let mut out=self.e1004_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:113,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1344,7 +1350,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'match'",
self.depth-=1;out.diag=self.diag_rule(113,out.diag);out
}
fn r114_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e987_c(state);
+let mut out=self.e1015_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:114,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1353,7 +1359,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'->'"]);}
self.depth-=1;out.diag=self.diag_rule(114,out.diag);out
}
fn r115_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e991_c(state);
+let mut out=self.e1019_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:115,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1362,7 +1368,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'default'
self.depth-=1;out.diag=self.diag_rule(115,out.diag);out
}
fn r116_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e995_c(state);
+let mut out=self.e1023_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:116,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1371,7 +1377,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["StringCas
self.depth-=1;out.diag=self.diag_rule(116,out.diag);out
}
fn r117_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e997_c(state);
+let mut out=self.e1025_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:117,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1380,7 +1386,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'match'",
self.depth-=1;out.diag=self.diag_rule(117,out.diag);out
}
fn r118_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e1008_c(state);
+let mut out=self.e1036_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:118,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1389,7 +1395,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'->'"]);}
self.depth-=1;out.diag=self.diag_rule(118,out.diag);out
}
fn r119_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e1012_c(state);
+let mut out=self.e1040_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:119,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1398,7 +1404,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'default'
self.depth-=1;out.diag=self.diag_rule(119,out.diag);out
}
fn r120_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e1016_c(state);
+let mut out=self.e1044_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:120,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1407,10 +1413,10 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BooleanCa
self.depth-=1;out.diag=self.diag_rule(120,out.diag);out
}
fn r121_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e1018_c(state);
+let mut out=self.e1046_c(state);
if out.ok {
-let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[240],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
-if site==240 {
+let mut scope_sites=self.take_scope();self.scope_captures(out.events,&[250],&mut scope_sites);for &(site,span) in &scope_sites { let name=self.text(span);if name.is_empty() {continue;}let offset_cp=self.cp(span[0]);let len_cp=self.cp(span[1])-offset_cp;
+if site==250 {
self.effect_at(ScanEffect::Use{name,offset_cp,len_cp},"lexical",offset_cp,len_cp);
}
let _=(offset_cp,len_cp); }
@@ -1422,7 +1428,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'$'"]);}
self.depth-=1;out.diag=self.diag_rule(121,out.diag);out
}
fn r122_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e1026_c(state);
+let mut out=self.e1054_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:122,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1431,7 +1437,7 @@ if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'number'"
self.depth-=1;out.diag=self.diag_rule(122,out.diag);out
}
fn r123_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
-let mut out=self.e1037_c(state);
+let mut out=self.e1065_c(state);
if out.ok {
let end=out.state.consumed;
out.events=self.event(Event::Rule {rule:123,span:[state.consumed,end],child:out.events,caps:(0,0)});
@@ -1439,6 +1445,60 @@ out.events=self.event(Event::Rule {rule:123,span:[state.consumed,end],child:out.
if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'('", "')'"]);}
self.depth-=1;out.diag=self.diag_rule(123,out.diag);out
}
+fn r124_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
+let mut out=self.e1075_c(state);
+if out.ok {
+let end=out.state.consumed;
+out.events=self.event(Event::Rule {rule:124,span:[state.consumed,end],child:out.events,caps:(0,0)});
+} else { self.restore(mark); }
+if !out.ok {self.display_failures(state.consumed.max(state.matched),&["NumberRootExpressionParser"]);}
+self.depth-=1;out.diag=self.diag_rule(124,out.diag);out
+}
+fn r125_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
+let mut out=self.e1077_c(state);
+if out.ok {
+let end=out.state.consumed;
+out.events=self.event(Event::Rule {rule:125,span:[state.consumed,end],child:out.events,caps:(0,0)});
+} else { self.restore(mark); }
+if !out.ok {self.display_failures(state.consumed.max(state.matched),&["BooleanRootExpressionParser"]);}
+self.depth-=1;out.diag=self.diag_rule(125,out.diag);out
+}
+fn r126_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
+let mut out=self.e1079_c(state);
+if out.ok {
+let end=out.state.consumed;
+out.events=self.event(Event::Rule {rule:126,span:[state.consumed,end],child:out.events,caps:(0,0)});
+} else { self.restore(mark); }
+if !out.ok {self.display_failures(state.consumed.max(state.matched),&["StringRootExpressionParser"]);}
+self.depth-=1;out.diag=self.diag_rule(126,out.diag);out
+}
+fn r127_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
+let mut out=self.e1081_c(state);
+if out.ok {
+let end=out.state.consumed;
+out.events=self.event(Event::Rule {rule:127,span:[state.consumed,end],child:out.events,caps:(0,0)});
+} else { self.restore(mark); }
+if !out.ok {self.display_failures(state.consumed.max(state.matched),&["ObjectRootExpressionParser"]);}
+self.depth-=1;out.diag=self.diag_rule(127,out.diag);out
+}
+fn r128_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
+let mut out=self.e1083_c(state);
+if out.ok {
+let end=out.state.consumed;
+out.events=self.event(Event::Rule {rule:128,span:[state.consumed,end],child:out.events,caps:(0,0)});
+} else { self.restore(mark); }
+if !out.ok {self.display_failures(state.consumed.max(state.matched),&["MethodRootExpressionParser"]);}
+self.depth-=1;out.diag=self.diag_rule(128,out.diag);out
+}
+fn r129_c(&mut self,state:State)->Step { if let Some(limit)=self.enter_rule(state) {return limit;}self.statistics.rule_evaluations+=1;let mark=self.mark();
+let mut out=self.e1085_c(state);
+if out.ok {
+let end=out.state.consumed;
+out.events=self.event(Event::Rule {rule:129,span:[state.consumed,end],child:out.events,caps:(0,0)});
+} else { self.restore(mark); }
+if !out.ok {self.display_failures(state.consumed.max(state.matched),&["'('", "')'"]);}
+self.depth-=1;out.diag=self.diag_rule(129,out.diag);out
+}
fn e0_c(&mut self,state:State)->Step {
let mark=self.mark();
let key=Key {expression:0,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
@@ -1464,10 +1524,6 @@ let child=self.e7_c(out.state);out=self.combine(out,child);if !out.ok {out.state
let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
let child=self.e9_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e10_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e12_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
@@ -1601,176 +1657,199 @@ out
fn e9_c(&mut self,state:State)->Step {
let mut out=self.b9_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:3,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["FormulaGroup0Parser"]);}
out
}
fn b9_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.r123_c(out.state);
+out=self.e10_c(out.state);
out
}
fn e10_c(&mut self,state:State)->Step {
let mut out=self.b10_c(state);
if out.ok {
-out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["Repeat"]);}
+} else {self.display_failures(state.consumed.max(state.matched),&["FormulaGroup0Parser"]);}
out
}
fn b10_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out.state=state.begin();
-let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e11_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
-out.events=self.join(out.events,child.events);count+=1;
-if before.position::()==out.state.position::() {break;}
-}
-let _=count;
-if false {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
-out.state=if out.ok {state.commit(out.state)} else {state};
+out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
+let ct=self.input.cp_at(self.skip_0::(out.state.begin()).position::()).map(|(c,_)|c);
+self.restore(mark);let mut child=self.e11_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);let mut child=self.e16_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);let mut child=self.e21_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);let mut child=self.e26_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,99|105))) {self.guard_e31_c(out.state.begin())} else {self.e31_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,40))) {self.guard_e36_c(out.state.begin())} else {self.e36_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
+};
out
}
fn e11_c(&mut self,state:State)->Step {
let mut out=self.b11_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:4,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
fn b11_c(&mut self,mut state:State)->Step {
+state.reset=false;
let mut out=Step::yes(state);
-out=self.r19_c(out.state);
+out.state=state.begin();
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e12_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e13_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e15_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e12_c(&mut self,state:State)->Step {
-let mut out=self.b12_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b12_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,12,0);
-} else {self.display_failures(state.consumed.max(state.matched),&["EOFParser"]);}
+out.events=self.event(Event::Capture {site:3,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b12_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.token_7::(out.state,"EOF","EOFParser");
+out=self.r124_c(out.state);
out
}
fn e13_c(&mut self,state:State)->Step {
let mut out=self.b13_c(state);
if out.ok {
-} else {self.display_failures(state.consumed.max(state.matched),&[]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["Repeat"]);}
out
}
fn b13_c(&mut self,mut state:State)->Step {
-state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e14_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let mut count=0usize;loop {let mark=self.mark();let before=out.state;
+let mut child=self.e14_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+out.events=self.join(out.events,child.events);count+=1;
+if before.position::()==out.state.position::() {break;}
+}
+let _=count;
+if false {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e14_c(&mut self,state:State)->Step {
let mut out=self.b14_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:5,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["CodeBlockGroup0Parser", "__CaptureSite"]);}
+out.events=self.event(Event::Capture {site:4,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b14_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.e15_c(out.state);
+out=self.r19_c(out.state);
out
}
fn e15_c(&mut self,state:State)->Step {
-let mut out=self.b15_c(state);
+let mut out=self.b15_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-} else {self.display_failures(state.consumed.max(state.matched),&["CodeBlockGroup0Parser"]);}
+out.events=self.relabel_token(out.events,15,0);
+} else {self.display_failures(state.consumed.max(state.matched),&["EOFParser"]);}
out
}
fn b15_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
-self.restore(mark);let mut child=self.e16_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
-if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=self.e17_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
-if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
-};
+out=self.token_7::(out.state,"EOF","EOFParser");
out
}
fn e16_c(&mut self,state:State)->Step {
-let mut out=self.b16_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b16_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,16,1);
-} else {self.display_failures(state.consumed.max(state.matched),&["LONG_CODE_BLOCKParser"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
fn b16_c(&mut self,mut state:State)->Step {
+state.reset=false;
let mut out=Step::yes(state);
-out=self.token_6::(out.state,"LONG_CODE_BLOCK","LONG_CODE_BLOCKParser");
+out.state=state.begin();
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e17_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e18_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e20_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e17_c(&mut self,state:State)->Step {
let mut out=self.b17_c(state);
if out.ok {
-} else {self.display_failures(state.consumed.max(state.matched),&[]);}
+out.events=self.event(Event::Capture {site:5,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b17_c(&mut self,mut state:State)->Step {
-state.reset=false;
let mut out=Step::yes(state);
-out.state=state.begin();
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e18_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e19_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e20_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-out.state=if out.ok {state.commit(out.state)} else {state};
+out=self.r125_c(out.state);
out
}
fn e18_c(&mut self,state:State)->Step {
-let mut out=self.b18_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b18_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,18,1);
-} else {self.display_failures(state.consumed.max(state.matched),&["CODE_STARTParser"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["Repeat"]);}
out
}
fn b18_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.token_3::(out.state,"CODE_START","CODE_STARTParser");
+out.state=state.begin();
+let mut count=0usize;loop {let mark=self.mark();let before=out.state;
+let mut child=self.e19_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+out.events=self.join(out.events,child.events);count+=1;
+if before.position::()==out.state.position::() {break;}
+}
+let _=count;
+if false {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
+out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e19_c(&mut self,state:State)->Step {
-let mut out=self.b19_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b19_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,19,1);
-} else {self.display_failures(state.consumed.max(state.matched),&["CODE_BODYParser"]);}
+out.events=self.event(Event::Capture {site:6,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b19_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.token_4::(out.state,"CODE_BODY","CODE_BODYParser");
+out=self.r19_c(out.state);
out
}
fn e20_c(&mut self,state:State)->Step {
let mut out=self.b20_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,20,1);
-} else {self.display_failures(state.consumed.max(state.matched),&["CODE_ENDParser"]);}
+out.events=self.relabel_token(out.events,20,0);
+} else {self.display_failures(state.consumed.max(state.matched),&["EOFParser"]);}
out
}
fn b20_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.token_5::(out.state,"CODE_END","CODE_ENDParser");
+out=self.token_7::(out.state,"EOF","EOFParser");
out
}
fn e21_c(&mut self,state:State)->Step {
let mut out=self.b21_c(state);
if out.ok {
-out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:true,text:false});
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
@@ -1783,148 +1862,148 @@ let child=self.e22_c(out.state);out=self.combine(out,child);if !out.ok {out.stat
let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
let child=self.e23_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e24_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e28_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e29_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e30_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e25_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e22_c(&mut self,state:State)->Step {
-let mut out=self.b22_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b22_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,22,2);
-} else {self.display_failures(state.consumed.max(state.matched),&["'import'"]);}
+out.events=self.event(Event::Capture {site:7,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b22_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.literal::(out.state,"import",true,64,false,"import");
-if !out.ok {self.display_fail(state.consumed.max(state.matched),"'import'");}
+out=self.r126_c(out.state);
out
}
fn e23_c(&mut self,state:State)->Step {
let mut out=self.b23_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:6,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["Repeat"]);}
out
}
fn b23_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.r3_c(out.state);
+out.state=state.begin();
+let mut count=0usize;loop {let mark=self.mark();let before=out.state;
+let mut child=self.e24_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+out.events=self.join(out.events,child.events);count+=1;
+if before.position::()==out.state.position::() {break;}
+}
+let _=count;
+if false {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
+out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e24_c(&mut self,state:State)->Step {
let mut out=self.b24_c(state);
if out.ok {
-} else {self.display_failures(state.consumed.max(state.matched),&["'#'"]);}
+out.events=self.event(Event::Capture {site:8,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b24_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out.state=state.begin();
-let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e25_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
-out.events=self.join(out.events,child.events);count+=1;
-if before.position::()==out.state.position::() {break;}
-if count>=1 {break;}
-}
-let _=count;
-if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
-out.state=if out.ok {state.commit(out.state)} else {state};
+out=self.r19_c(out.state);
out
}
fn e25_c(&mut self,state:State)->Step {
-let mut out=self.b25_c(state);
+let mut out=self.b25_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-} else {self.display_failures(state.consumed.max(state.matched),&["'#'"]);}
+out.events=self.relabel_token(out.events,25,0);
+} else {self.display_failures(state.consumed.max(state.matched),&["EOFParser"]);}
out
}
fn b25_c(&mut self,mut state:State)->Step {
-state.reset=false;
let mut out=Step::yes(state);
-out.state=state.begin();
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e26_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-let child=self.e27_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
-out.state=if out.ok {state.commit(out.state)} else {state};
+out=self.token_7::(out.state,"EOF","EOFParser");
out
}
fn e26_c(&mut self,state:State)->Step {
-let mut out=self.b26_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b26_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,26,2);
-} else {self.display_failures(state.consumed.max(state.matched),&["'#'"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
fn b26_c(&mut self,mut state:State)->Step {
+state.reset=false;
let mut out=Step::yes(state);
-out=self.literal::(out.state,"#",true,1,false,"#");
-if !out.ok {self.display_fail(state.consumed.max(state.matched),"'#'");}
+out.state=state.begin();
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e27_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e28_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e30_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e27_c(&mut self,state:State)->Step {
-let mut out=self.b27_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b27_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,27,2);
-out.events=self.event(Event::Capture {site:7,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
+out.events=self.event(Event::Capture {site:9,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b27_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
+out=self.r127_c(out.state);
out
}
fn e28_c(&mut self,state:State)->Step {
-let mut out=self.b28_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b28_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,28,2);
-} else {self.display_failures(state.consumed.max(state.matched),&["'as'"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["Repeat"]);}
out
}
fn b28_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.literal::(out.state,"as",true,47,false,"as");
-if !out.ok {self.display_fail(state.consumed.max(state.matched),"'as'");}
+out.state=state.begin();
+let mut count=0usize;loop {let mark=self.mark();let before=out.state;
+let mut child=self.e29_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+out.events=self.join(out.events,child.events);count+=1;
+if before.position::()==out.state.position::() {break;}
+}
+let _=count;
+if false {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
+out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e29_c(&mut self,state:State)->Step {
-let mut out=self.b29_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b29_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,29,2);
-out.events=self.event(Event::Capture {site:8,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
+out.events=self.event(Event::Capture {site:10,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b29_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
+out=self.r19_c(out.state);
out
}
fn e30_c(&mut self,state:State)->Step {
let mut out=self.b30_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,30,2);
-} else {self.display_failures(state.consumed.max(state.matched),&["';'"]);}
+out.events=self.relabel_token(out.events,30,0);
+} else {self.display_failures(state.consumed.max(state.matched),&["EOFParser"]);}
out
}
fn b30_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.literal::(out.state,";",true,22,false,";");
-if !out.ok {self.display_fail(state.consumed.max(state.matched),"';'");}
+out=self.token_7::(out.state,"EOF","EOFParser");
out
}
fn e31_c(&mut self,state:State)->Step {
let mut out=self.b31_c(state);
if out.ok {
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
@@ -1932,31 +2011,33 @@ fn b31_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
let child=self.e32_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
let child=self.e33_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
-let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e35_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
fn e32_c(&mut self,state:State)->Step {
-let mut out=self.b32_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let mut out=self.b32_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,32,3);
-out.events=self.event(Event::Capture {site:9,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
-} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
+out.events=self.event(Event::Capture {site:11,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b32_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
+out=self.r128_c(out.state);
out
}
fn e33_c(&mut self,state:State)->Step {
let mut out=self.b33_c(state);
if out.ok {
-} else {self.display_failures(state.consumed.max(state.matched),&["'.'"]);}
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["Repeat"]);}
out
}
fn b33_c(&mut self,mut state:State)->Step {
@@ -1975,239 +2056,658 @@ out
fn e34_c(&mut self,state:State)->Step {
let mut out=self.b34_c(state);
if out.ok {
-} else {self.display_failures(state.consumed.max(state.matched),&["'.'"]);}
+out.events=self.event(Event::Capture {site:12,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
fn b34_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.r19_c(out.state);
+out
+}
+fn e35_c(&mut self,state:State)->Step {
+let mut out=self.b35_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,35,0);
+} else {self.display_failures(state.consumed.max(state.matched),&["EOFParser"]);}
+out
+}
+fn b35_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_7::(out.state,"EOF","EOFParser");
+out
+}
+fn e36_c(&mut self,state:State)->Step {
+let mut out=self.b36_c(state);
+if out.ok {
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
+out
+}
+fn b36_c(&mut self,mut state:State)->Step {
+state.reset=false;
+let mut out=Step::yes(state);
+out.state=state.begin();
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e37_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e38_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e40_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e37_c(&mut self,state:State)->Step {
+let mut out=self.b37_c(state);
+if out.ok {
+out.events=self.event(Event::Capture {site:13,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["'('", "')'"]);}
+out
+}
+fn b37_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.r129_c(out.state);
+out
+}
+fn e38_c(&mut self,state:State)->Step {
+let mut out=self.b38_c(state);
+if out.ok {
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["Repeat"]);}
+out
+}
+fn b38_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out.state=state.begin();
+let mut count=0usize;loop {let mark=self.mark();let before=out.state;
+let mut child=self.e39_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+out.events=self.join(out.events,child.events);count+=1;
+if before.position::()==out.state.position::() {break;}
+}
+let _=count;
+if false {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e39_c(&mut self,state:State)->Step {
+let mut out=self.b39_c(state);
+if out.ok {
+out.events=self.event(Event::Capture {site:14,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
+out
+}
+fn b39_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.r19_c(out.state);
+out
+}
+fn e40_c(&mut self,state:State)->Step {
+let mut out=self.b40_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,40,0);
+} else {self.display_failures(state.consumed.max(state.matched),&["EOFParser"]);}
+out
+}
+fn b40_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_7::(out.state,"EOF","EOFParser");
+out
+}
+fn e41_c(&mut self,state:State)->Step {
+let mut out=self.b41_c(state);
+if out.ok {
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
+out
+}
+fn b41_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e35_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e42_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e36_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e42_c(&mut self,state:State)->Step {
+let mut out=self.b42_c(state);
+if out.ok {
+out.events=self.event(Event::Capture {site:15,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["CodeBlockGroup0Parser", "__CaptureSite"]);}
+out
+}
+fn b42_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.e43_c(out.state);
+out
+}
+fn e43_c(&mut self,state:State)->Step {
+let mut out=self.b43_c(state);
+if out.ok {
+} else {self.display_failures(state.consumed.max(state.matched),&["CodeBlockGroup0Parser"]);}
+out
+}
+fn b43_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
+self.restore(mark);let mut child=self.e44_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);let mut child=self.e45_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
+self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
+};
+out
+}
+fn e44_c(&mut self,state:State)->Step {
+let mut out=self.b44_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,44,1);
+} else {self.display_failures(state.consumed.max(state.matched),&["LONG_CODE_BLOCKParser"]);}
+out
+}
+fn b44_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_6::(out.state,"LONG_CODE_BLOCK","LONG_CODE_BLOCKParser");
+out
+}
+fn e45_c(&mut self,state:State)->Step {
+let mut out=self.b45_c(state);
+if out.ok {
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
+out
+}
+fn b45_c(&mut self,mut state:State)->Step {
+state.reset=false;
+let mut out=Step::yes(state);
+out.state=state.begin();
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let child=self.e46_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let child=self.e47_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let child=self.e48_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e35_c(&mut self,state:State)->Step {
-let mut out=self.b35_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e46_c(&mut self,state:State)->Step {
+let mut out=self.b46_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,46,1);
+} else {self.display_failures(state.consumed.max(state.matched),&["CODE_STARTParser"]);}
+out
+}
+fn b46_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_3::(out.state,"CODE_START","CODE_STARTParser");
+out
+}
+fn e47_c(&mut self,state:State)->Step {
+let mut out=self.b47_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,47,1);
+} else {self.display_failures(state.consumed.max(state.matched),&["CODE_BODYParser"]);}
+out
+}
+fn b47_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_4::(out.state,"CODE_BODY","CODE_BODYParser");
+out
+}
+fn e48_c(&mut self,state:State)->Step {
+let mut out=self.b48_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,48,1);
+} else {self.display_failures(state.consumed.max(state.matched),&["CODE_ENDParser"]);}
+out
+}
+fn b48_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_5::(out.state,"CODE_END","CODE_ENDParser");
+out
+}
+fn e49_c(&mut self,state:State)->Step {
+let mut out=self.b49_c(state);
+if out.ok {
+out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:true,text:false});
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
+out
+}
+fn b49_c(&mut self,mut state:State)->Step {
+state.reset=false;
+let mut out=Step::yes(state);
+out.state=state.begin();
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e50_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e51_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e52_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e56_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e57_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e58_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e50_c(&mut self,state:State)->Step {
+let mut out=self.b50_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,50,2);
+} else {self.display_failures(state.consumed.max(state.matched),&["'import'"]);}
+out
+}
+fn b50_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.literal::(out.state,"import",true,64,false,"import");
+if !out.ok {self.display_fail(state.consumed.max(state.matched),"'import'");}
+out
+}
+fn e51_c(&mut self,state:State)->Step {
+let mut out=self.b51_c(state);
+if out.ok {
+out.events=self.event(Event::Capture {site:16,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
+out
+}
+fn b51_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.r3_c(out.state);
+out
+}
+fn e52_c(&mut self,state:State)->Step {
+let mut out=self.b52_c(state);
+if out.ok {
+} else {self.display_failures(state.consumed.max(state.matched),&["'#'"]);}
+out
+}
+fn b52_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out.state=state.begin();
+let mut count=0usize;loop {let mark=self.mark();let before=out.state;
+let mut child=self.e53_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+out.events=self.join(out.events,child.events);count+=1;
+if before.position::()==out.state.position::() {break;}
+if count>=1 {break;}
+}
+let _=count;
+if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e53_c(&mut self,state:State)->Step {
+let mut out=self.b53_c(state);
+if out.ok {
+} else {self.display_failures(state.consumed.max(state.matched),&["'#'"]);}
+out
+}
+fn b53_c(&mut self,mut state:State)->Step {
+state.reset=false;
+let mut out=Step::yes(state);
+out.state=state.begin();
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e54_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+let child=self.e55_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_0::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e54_c(&mut self,state:State)->Step {
+let mut out=self.b54_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,54,2);
+} else {self.display_failures(state.consumed.max(state.matched),&["'#'"]);}
+out
+}
+fn b54_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.literal::(out.state,"#",true,1,false,"#");
+if !out.ok {self.display_fail(state.consumed.max(state.matched),"'#'");}
+out
+}
+fn e55_c(&mut self,state:State)->Step {
+let mut out=self.b55_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,55,2);
+out.events=self.event(Event::Capture {site:17,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
+out
+}
+fn b55_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
+out
+}
+fn e56_c(&mut self,state:State)->Step {
+let mut out=self.b56_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,56,2);
+} else {self.display_failures(state.consumed.max(state.matched),&["'as'"]);}
+out
+}
+fn b56_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.literal::(out.state,"as",true,47,false,"as");
+if !out.ok {self.display_fail(state.consumed.max(state.matched),"'as'");}
+out
+}
+fn e57_c(&mut self,state:State)->Step {
+let mut out=self.b57_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,57,2);
+out.events=self.event(Event::Capture {site:18,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
+out
+}
+fn b57_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
+out
+}
+fn e58_c(&mut self,state:State)->Step {
+let mut out=self.b58_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,58,2);
+} else {self.display_failures(state.consumed.max(state.matched),&["';'"]);}
+out
+}
+fn b58_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.literal::(out.state,";",true,22,false,";");
+if !out.ok {self.display_fail(state.consumed.max(state.matched),"';'");}
+out
+}
+fn e59_c(&mut self,state:State)->Step {
+let mut out=self.b59_c(state);
+if out.ok {
+} else {self.display_failures(state.consumed.max(state.matched),&[]);}
+out
+}
+fn b59_c(&mut self,mut state:State)->Step {
+state.reset=false;
+let mut out=Step::yes(state);
+out.state=state.begin();
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let child=self.e60_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let child=self.e61_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e60_c(&mut self,state:State)->Step {
+let mut out=self.b60_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,60,3);
+out.events=self.event(Event::Capture {site:19,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
+out
+}
+fn b60_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
+out
+}
+fn e61_c(&mut self,state:State)->Step {
+let mut out=self.b61_c(state);
if out.ok {
-out.events=self.relabel_token(out.events,35,3);
} else {self.display_failures(state.consumed.max(state.matched),&["'.'"]);}
out
}
-fn b35_c(&mut self,mut state:State)->Step {
+fn b61_c(&mut self,mut state:State)->Step {
+let mut out=Step::yes(state);
+out.state=state.begin();
+let mut count=0usize;loop {let mark=self.mark();let before=out.state;
+let mut child=self.e62_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+out.events=self.join(out.events,child.events);count+=1;
+if before.position::()==out.state.position::() {break;}
+}
+let _=count;
+if false {out.ok=false;out.state=state;let d=self.diag_fail(state.position::(),"expression");out.diag=self.diag_join(out.diag,d);}
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e62_c(&mut self,state:State)->Step {
+let mut out=self.b62_c(state);
+if out.ok {
+} else {self.display_failures(state.consumed.max(state.matched),&["'.'"]);}
+out
+}
+fn b62_c(&mut self,mut state:State)->Step {
+state.reset=false;
+let mut out=Step::yes(state);
+out.state=state.begin();
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let child=self.e63_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+let child=self.e64_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
+out.state=if out.ok {state.commit(out.state)} else {state};
+out
+}
+fn e63_c(&mut self,state:State)->Step {
+let mut out=self.b63_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+if out.ok {
+out.events=self.relabel_token(out.events,63,3);
+} else {self.display_failures(state.consumed.max(state.matched),&["'.'"]);}
+out
+}
+fn b63_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,".",true,11,false,".");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'.'");}
out
}
-fn e36_c(&mut self,state:State)->Step {
-let mut out=self.b36_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e64_c(&mut self,state:State)->Step {
+let mut out=self.b64_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,36,3);
-out.events=self.event(Event::Capture {site:10,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.relabel_token(out.events,64,3);
+out.events=self.event(Event::Capture {site:20,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
out
}
-fn b36_c(&mut self,mut state:State)->Step {
+fn b64_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
out
}
-fn e37_c(&mut self,state:State)->Step {
+fn e65_c(&mut self,state:State)->Step {
let mark=self.mark();
-let key=Key {expression:37,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
-self.display_enter(state.consumed.max(state.matched));let mut out=self.b37_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let key=Key {expression:65,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
+self.display_enter(state.consumed.max(state.matched));let mut out=self.b65_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
} else {self.restore(mark);self.display_failures(state.consumed.max(state.matched),&[]);}
if (out.ok && true) || (!out.ok && true) {self.store(key,out,mark);}self.display_leave();
out
}
-fn b37_c(&mut self,mut state:State)->Step {
+fn b65_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
let ct=self.input.cp_at(self.skip_0::(out.state.begin()).position::()).map(|(c,_)|c);
-self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e38_c(out.state.begin())} else {self.e38_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e66_c(out.state.begin())} else {self.e66_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e39_c(out.state.begin())} else {self.e39_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e67_c(out.state.begin())} else {self.e67_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e40_c(out.state.begin())} else {self.e40_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e68_c(out.state.begin())} else {self.e68_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e41_c(out.state.begin())} else {self.e41_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=if self.options.predict && !out.state.invert && !(ct.is_some_and(|c| matches!(c as u32,118))) {self.guard_e69_c(out.state.begin())} else {self.e69_c(out.state.begin())};diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
};
out
}
-fn e38_c(&mut self,state:State)->Step {
-let mut out=self.b38_c(state);
+fn e66_c(&mut self,state:State)->Step {
+let mut out=self.b66_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b38_c(&mut self,mut state:State)->Step {
+fn b66_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r5_c(out.state);
out
}
-fn e39_c(&mut self,state:State)->Step {
-let mut out=self.b39_c(state);
+fn e67_c(&mut self,state:State)->Step {
+let mut out=self.b67_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b39_c(&mut self,mut state:State)->Step {
+fn b67_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r6_c(out.state);
out
}
-fn e40_c(&mut self,state:State)->Step {
-let mut out=self.b40_c(state);
+fn e68_c(&mut self,state:State)->Step {
+let mut out=self.b68_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b40_c(&mut self,mut state:State)->Step {
+fn b68_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r7_c(out.state);
out
}
-fn e41_c(&mut self,state:State)->Step {
-let mut out=self.b41_c(state);
+fn e69_c(&mut self,state:State)->Step {
+let mut out=self.b69_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b41_c(&mut self,mut state:State)->Step {
+fn b69_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r8_c(out.state);
out
}
-fn e42_c(&mut self,state:State)->Step {
+fn e70_c(&mut self,state:State)->Step {
let mark=self.mark();
-let key=Key {expression:42,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
-self.display_enter(state.consumed.max(state.matched));let mut out=self.b42_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let key=Key {expression:70,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
+self.display_enter(state.consumed.max(state.matched));let mut out=self.b70_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.restore(mark);self.display_failures(state.consumed.max(state.matched),&[]);}
if (out.ok && true) || (!out.ok && true) {self.store(key,out,mark);}self.display_leave();
out
}
-fn b42_c(&mut self,mut state:State)->Step {
+fn b70_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e43_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e71_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e47_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e75_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e48_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e76_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e49_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e77_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e51_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e79_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e57_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e85_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e59_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e87_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e43_c(&mut self,state:State)->Step {
-let mut out=self.b43_c(state);
+fn e71_c(&mut self,state:State)->Step {
+let mut out=self.b71_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b43_c(&mut self,mut state:State)->Step {
+fn b71_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.e44_c(out.state);
+out=self.e72_c(out.state);
out
}
-fn e44_c(&mut self,state:State)->Step {
-let mut out=self.b44_c(state);
+fn e72_c(&mut self,state:State)->Step {
+let mut out=self.b72_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b44_c(&mut self,mut state:State)->Step {
+fn b72_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
-self.restore(mark);let mut child=self.e45_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e73_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=self.e46_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e74_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
};
out
}
-fn e45_c(&mut self,state:State)->Step {
-let mut out=self.b45_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e73_c(&mut self,state:State)->Step {
+let mut out=self.b73_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,45,5);
+out.events=self.relabel_token(out.events,73,5);
} else {self.display_failures(state.consumed.max(state.matched),&["'variable'"]);}
out
}
-fn b45_c(&mut self,mut state:State)->Step {
+fn b73_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"variable",true,94,false,"variable");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'variable'");}
out
}
-fn e46_c(&mut self,state:State)->Step {
-let mut out=self.b46_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e74_c(&mut self,state:State)->Step {
+let mut out=self.b74_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,46,5);
+out.events=self.relabel_token(out.events,74,5);
} else {self.display_failures(state.consumed.max(state.matched),&["'var'"]);}
out
}
-fn b46_c(&mut self,mut state:State)->Step {
+fn b74_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"var",true,93,false,"var");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'var'");}
out
}
-fn e47_c(&mut self,state:State)->Step {
-let mut out=self.b47_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e75_c(&mut self,state:State)->Step {
+let mut out=self.b75_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,47,5);
+out.events=self.relabel_token(out.events,75,5);
} else {self.display_failures(state.consumed.max(state.matched),&["'$'"]);}
out
}
-fn b47_c(&mut self,mut state:State)->Step {
+fn b75_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"$",true,2,false,"$");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'$'");}
out
}
-fn e48_c(&mut self,state:State)->Step {
-let mut out=self.b48_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e76_c(&mut self,state:State)->Step {
+let mut out=self.b76_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,48,5);
-out.events=self.event(Event::Capture {site:11,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.relabel_token(out.events,76,5);
+out.events=self.event(Event::Capture {site:21,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
out
}
-fn b48_c(&mut self,mut state:State)->Step {
+fn b76_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
out
}
-fn e49_c(&mut self,state:State)->Step {
-let mut out=self.b49_c(state);
+fn e77_c(&mut self,state:State)->Step {
+let mut out=self.b77_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b49_c(&mut self,mut state:State)->Step {
+fn b77_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e50_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e78_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2217,29 +2717,29 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b50_c(state);
+fn e78_c(&mut self,state:State)->Step {
+let mut out=self.b78_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b50_c(&mut self,mut state:State)->Step {
+fn b78_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r10_c(out.state);
out
}
-fn e51_c(&mut self,state:State)->Step {
-let mut out=self.b51_c(state);
+fn e79_c(&mut self,state:State)->Step {
+let mut out=self.b79_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b51_c(&mut self,mut state:State)->Step {
+fn b79_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e52_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e80_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2249,52 +2749,52 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b52_c(state);
+fn e80_c(&mut self,state:State)->Step {
+let mut out=self.b80_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b52_c(&mut self,mut state:State)->Step {
+fn b80_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e53_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e81_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e54_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e82_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e56_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e84_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e53_c(&mut self,state:State)->Step {
-let mut out=self.b53_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e81_c(&mut self,state:State)->Step {
+let mut out=self.b81_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,53,5);
+out.events=self.relabel_token(out.events,81,5);
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b53_c(&mut self,mut state:State)->Step {
+fn b81_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"set",true,82,false,"set");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'set'");}
out
}
-fn e54_c(&mut self,state:State)->Step {
-let mut out=self.b54_c(state);
+fn e82_c(&mut self,state:State)->Step {
+let mut out=self.b82_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:true,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b54_c(&mut self,mut state:State)->Step {
+fn b82_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e55_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e83_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2304,41 +2804,41 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b55_c(state);
+fn e83_c(&mut self,state:State)->Step {
+let mut out=self.b83_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:12,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:22,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'exists'", "'if'", "'not'"]);}
out
}
-fn b55_c(&mut self,mut state:State)->Step {
+fn b83_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r14_c(out.state);
out
}
-fn e56_c(&mut self,state:State)->Step {
-let mut out=self.b56_c(state);
+fn e84_c(&mut self,state:State)->Step {
+let mut out=self.b84_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:13,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:23,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
-fn b56_c(&mut self,mut state:State)->Step {
+fn b84_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r40_c(out.state);
out
}
-fn e57_c(&mut self,state:State)->Step {
-let mut out=self.b57_c(state);
+fn e85_c(&mut self,state:State)->Step {
+let mut out=self.b85_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b57_c(&mut self,mut state:State)->Step {
+fn b85_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e58_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e86_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2348,154 +2848,154 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b58_c(state);
+fn e86_c(&mut self,state:State)->Step {
+let mut out=self.b86_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:14,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:24,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'='", "'description'"]);}
out
}
-fn b58_c(&mut self,mut state:State)->Step {
+fn b86_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r15_c(out.state);
out
}
-fn e59_c(&mut self,state:State)->Step {
-let mut out=self.b59_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e87_c(&mut self,state:State)->Step {
+let mut out=self.b87_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,59,5);
+out.events=self.relabel_token(out.events,87,5);
} else {self.display_failures(state.consumed.max(state.matched),&["';'"]);}
out
}
-fn b59_c(&mut self,mut state:State)->Step {
+fn b87_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,";",true,22,false,";");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"';'");}
out
}
-fn e60_c(&mut self,state:State)->Step {
+fn e88_c(&mut self,state:State)->Step {
let mark=self.mark();
-let key=Key {expression:60,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
-self.display_enter(state.consumed.max(state.matched));let mut out=self.b60_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let key=Key {expression:88,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
+self.display_enter(state.consumed.max(state.matched));let mut out=self.b88_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.restore(mark);self.display_failures(state.consumed.max(state.matched),&[]);}
if (out.ok && true) || (!out.ok && true) {self.store(key,out,mark);}self.display_leave();
out
}
-fn b60_c(&mut self,mut state:State)->Step {
+fn b88_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e61_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e89_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e65_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e93_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e66_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e94_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e67_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e95_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e69_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e97_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e75_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e103_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e77_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e105_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e61_c(&mut self,state:State)->Step {
-let mut out=self.b61_c(state);
+fn e89_c(&mut self,state:State)->Step {
+let mut out=self.b89_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b61_c(&mut self,mut state:State)->Step {
+fn b89_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.e62_c(out.state);
+out=self.e90_c(out.state);
out
}
-fn e62_c(&mut self,state:State)->Step {
-let mut out=self.b62_c(state);
+fn e90_c(&mut self,state:State)->Step {
+let mut out=self.b90_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b62_c(&mut self,mut state:State)->Step {
+fn b90_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
-self.restore(mark);let mut child=self.e63_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e91_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=self.e64_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e92_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
};
out
}
-fn e63_c(&mut self,state:State)->Step {
-let mut out=self.b63_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e91_c(&mut self,state:State)->Step {
+let mut out=self.b91_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,63,6);
+out.events=self.relabel_token(out.events,91,6);
} else {self.display_failures(state.consumed.max(state.matched),&["'variable'"]);}
out
}
-fn b63_c(&mut self,mut state:State)->Step {
+fn b91_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"variable",true,94,false,"variable");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'variable'");}
out
}
-fn e64_c(&mut self,state:State)->Step {
-let mut out=self.b64_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e92_c(&mut self,state:State)->Step {
+let mut out=self.b92_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,64,6);
+out.events=self.relabel_token(out.events,92,6);
} else {self.display_failures(state.consumed.max(state.matched),&["'var'"]);}
out
}
-fn b64_c(&mut self,mut state:State)->Step {
+fn b92_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"var",true,93,false,"var");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'var'");}
out
}
-fn e65_c(&mut self,state:State)->Step {
-let mut out=self.b65_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e93_c(&mut self,state:State)->Step {
+let mut out=self.b93_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,65,6);
+out.events=self.relabel_token(out.events,93,6);
} else {self.display_failures(state.consumed.max(state.matched),&["'$'"]);}
out
}
-fn b65_c(&mut self,mut state:State)->Step {
+fn b93_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"$",true,2,false,"$");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'$'");}
out
}
-fn e66_c(&mut self,state:State)->Step {
-let mut out=self.b66_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e94_c(&mut self,state:State)->Step {
+let mut out=self.b94_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,66,6);
-out.events=self.event(Event::Capture {site:15,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.relabel_token(out.events,94,6);
+out.events=self.event(Event::Capture {site:25,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
out
}
-fn b66_c(&mut self,mut state:State)->Step {
+fn b94_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
out
}
-fn e67_c(&mut self,state:State)->Step {
-let mut out=self.b67_c(state);
+fn e95_c(&mut self,state:State)->Step {
+let mut out=self.b95_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b67_c(&mut self,mut state:State)->Step {
+fn b95_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e68_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e96_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2505,29 +3005,29 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b68_c(state);
+fn e96_c(&mut self,state:State)->Step {
+let mut out=self.b96_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b68_c(&mut self,mut state:State)->Step {
+fn b96_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r11_c(out.state);
out
}
-fn e69_c(&mut self,state:State)->Step {
-let mut out=self.b69_c(state);
+fn e97_c(&mut self,state:State)->Step {
+let mut out=self.b97_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b69_c(&mut self,mut state:State)->Step {
+fn b97_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e70_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e98_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2537,52 +3037,52 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b70_c(state);
+fn e98_c(&mut self,state:State)->Step {
+let mut out=self.b98_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b70_c(&mut self,mut state:State)->Step {
+fn b98_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e71_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e99_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e72_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e100_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e74_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e102_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e71_c(&mut self,state:State)->Step {
-let mut out=self.b71_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e99_c(&mut self,state:State)->Step {
+let mut out=self.b99_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,71,6);
+out.events=self.relabel_token(out.events,99,6);
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b71_c(&mut self,mut state:State)->Step {
+fn b99_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"set",true,82,false,"set");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'set'");}
out
}
-fn e72_c(&mut self,state:State)->Step {
-let mut out=self.b72_c(state);
+fn e100_c(&mut self,state:State)->Step {
+let mut out=self.b100_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:true,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b72_c(&mut self,mut state:State)->Step {
+fn b100_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e73_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e101_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2592,41 +3092,41 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b73_c(state);
+fn e101_c(&mut self,state:State)->Step {
+let mut out=self.b101_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:16,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:26,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'exists'", "'if'", "'not'"]);}
out
}
-fn b73_c(&mut self,mut state:State)->Step {
+fn b101_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r14_c(out.state);
out
}
-fn e74_c(&mut self,state:State)->Step {
-let mut out=self.b74_c(state);
+fn e102_c(&mut self,state:State)->Step {
+let mut out=self.b102_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:17,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:27,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
-fn b74_c(&mut self,mut state:State)->Step {
+fn b102_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r89_c(out.state);
out
}
-fn e75_c(&mut self,state:State)->Step {
-let mut out=self.b75_c(state);
+fn e103_c(&mut self,state:State)->Step {
+let mut out=self.b103_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b75_c(&mut self,mut state:State)->Step {
+fn b103_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e76_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e104_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2636,154 +3136,154 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b76_c(state);
+fn e104_c(&mut self,state:State)->Step {
+let mut out=self.b104_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:18,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:28,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'='", "'description'"]);}
out
}
-fn b76_c(&mut self,mut state:State)->Step {
+fn b104_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r15_c(out.state);
out
}
-fn e77_c(&mut self,state:State)->Step {
-let mut out=self.b77_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e105_c(&mut self,state:State)->Step {
+let mut out=self.b105_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,77,6);
+out.events=self.relabel_token(out.events,105,6);
} else {self.display_failures(state.consumed.max(state.matched),&["';'"]);}
out
}
-fn b77_c(&mut self,mut state:State)->Step {
+fn b105_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,";",true,22,false,";");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"';'");}
out
}
-fn e78_c(&mut self,state:State)->Step {
+fn e106_c(&mut self,state:State)->Step {
let mark=self.mark();
-let key=Key {expression:78,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
-self.display_enter(state.consumed.max(state.matched));let mut out=self.b78_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let key=Key {expression:106,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
+self.display_enter(state.consumed.max(state.matched));let mut out=self.b106_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.restore(mark);self.display_failures(state.consumed.max(state.matched),&[]);}
if (out.ok && true) || (!out.ok && true) {self.store(key,out,mark);}self.display_leave();
out
}
-fn b78_c(&mut self,mut state:State)->Step {
+fn b106_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e79_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e107_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e83_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e111_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e84_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e112_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e85_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e113_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e87_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e115_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e93_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e121_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e95_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e123_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e79_c(&mut self,state:State)->Step {
-let mut out=self.b79_c(state);
+fn e107_c(&mut self,state:State)->Step {
+let mut out=self.b107_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b79_c(&mut self,mut state:State)->Step {
+fn b107_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.e80_c(out.state);
+out=self.e108_c(out.state);
out
}
-fn e80_c(&mut self,state:State)->Step {
-let mut out=self.b80_c(state);
+fn e108_c(&mut self,state:State)->Step {
+let mut out=self.b108_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b80_c(&mut self,mut state:State)->Step {
+fn b108_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
-self.restore(mark);let mut child=self.e81_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e109_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=self.e82_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e110_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
};
out
}
-fn e81_c(&mut self,state:State)->Step {
-let mut out=self.b81_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e109_c(&mut self,state:State)->Step {
+let mut out=self.b109_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,81,7);
+out.events=self.relabel_token(out.events,109,7);
} else {self.display_failures(state.consumed.max(state.matched),&["'variable'"]);}
out
}
-fn b81_c(&mut self,mut state:State)->Step {
+fn b109_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"variable",true,94,false,"variable");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'variable'");}
out
}
-fn e82_c(&mut self,state:State)->Step {
-let mut out=self.b82_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e110_c(&mut self,state:State)->Step {
+let mut out=self.b110_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,82,7);
+out.events=self.relabel_token(out.events,110,7);
} else {self.display_failures(state.consumed.max(state.matched),&["'var'"]);}
out
}
-fn b82_c(&mut self,mut state:State)->Step {
+fn b110_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"var",true,93,false,"var");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'var'");}
out
}
-fn e83_c(&mut self,state:State)->Step {
-let mut out=self.b83_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e111_c(&mut self,state:State)->Step {
+let mut out=self.b111_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,83,7);
+out.events=self.relabel_token(out.events,111,7);
} else {self.display_failures(state.consumed.max(state.matched),&["'$'"]);}
out
}
-fn b83_c(&mut self,mut state:State)->Step {
+fn b111_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"$",true,2,false,"$");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'$'");}
out
}
-fn e84_c(&mut self,state:State)->Step {
-let mut out=self.b84_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e112_c(&mut self,state:State)->Step {
+let mut out=self.b112_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,84,7);
-out.events=self.event(Event::Capture {site:19,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.relabel_token(out.events,112,7);
+out.events=self.event(Event::Capture {site:29,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
out
}
-fn b84_c(&mut self,mut state:State)->Step {
+fn b112_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
out
}
-fn e85_c(&mut self,state:State)->Step {
-let mut out=self.b85_c(state);
+fn e113_c(&mut self,state:State)->Step {
+let mut out=self.b113_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b85_c(&mut self,mut state:State)->Step {
+fn b113_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e86_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e114_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2793,29 +3293,29 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b86_c(state);
+fn e114_c(&mut self,state:State)->Step {
+let mut out=self.b114_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b86_c(&mut self,mut state:State)->Step {
+fn b114_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r12_c(out.state);
out
}
-fn e87_c(&mut self,state:State)->Step {
-let mut out=self.b87_c(state);
+fn e115_c(&mut self,state:State)->Step {
+let mut out=self.b115_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b87_c(&mut self,mut state:State)->Step {
+fn b115_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e88_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e116_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2825,52 +3325,52 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b88_c(state);
+fn e116_c(&mut self,state:State)->Step {
+let mut out=self.b116_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b88_c(&mut self,mut state:State)->Step {
+fn b116_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e89_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e117_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e90_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e118_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e92_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e120_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e89_c(&mut self,state:State)->Step {
-let mut out=self.b89_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e117_c(&mut self,state:State)->Step {
+let mut out=self.b117_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,89,7);
+out.events=self.relabel_token(out.events,117,7);
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b89_c(&mut self,mut state:State)->Step {
+fn b117_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"set",true,82,false,"set");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'set'");}
out
}
-fn e90_c(&mut self,state:State)->Step {
-let mut out=self.b90_c(state);
+fn e118_c(&mut self,state:State)->Step {
+let mut out=self.b118_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:true,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b90_c(&mut self,mut state:State)->Step {
+fn b118_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e91_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e119_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2880,41 +3380,41 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b91_c(state);
+fn e119_c(&mut self,state:State)->Step {
+let mut out=self.b119_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:20,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:30,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'exists'", "'if'", "'not'"]);}
out
}
-fn b91_c(&mut self,mut state:State)->Step {
+fn b119_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r14_c(out.state);
out
}
-fn e92_c(&mut self,state:State)->Step {
-let mut out=self.b92_c(state);
+fn e120_c(&mut self,state:State)->Step {
+let mut out=self.b120_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:21,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:31,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
-fn b92_c(&mut self,mut state:State)->Step {
+fn b120_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r94_c(out.state);
out
}
-fn e93_c(&mut self,state:State)->Step {
-let mut out=self.b93_c(state);
+fn e121_c(&mut self,state:State)->Step {
+let mut out=self.b121_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b93_c(&mut self,mut state:State)->Step {
+fn b121_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e94_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e122_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -2924,154 +3424,154 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b94_c(state);
+fn e122_c(&mut self,state:State)->Step {
+let mut out=self.b122_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:22,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:32,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'='", "'description'"]);}
out
}
-fn b94_c(&mut self,mut state:State)->Step {
+fn b122_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r15_c(out.state);
out
}
-fn e95_c(&mut self,state:State)->Step {
-let mut out=self.b95_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e123_c(&mut self,state:State)->Step {
+let mut out=self.b123_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,95,7);
+out.events=self.relabel_token(out.events,123,7);
} else {self.display_failures(state.consumed.max(state.matched),&["';'"]);}
out
}
-fn b95_c(&mut self,mut state:State)->Step {
+fn b123_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,";",true,22,false,";");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"';'");}
out
}
-fn e96_c(&mut self,state:State)->Step {
+fn e124_c(&mut self,state:State)->Step {
let mark=self.mark();
-let key=Key {expression:96,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
-self.display_enter(state.consumed.max(state.matched));let mut out=self.b96_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+let key=Key {expression:124,state,matched_mode:false,version:self.scope.state_version()};if let Some(hit)=self.lookup(key) {return hit;}
+self.display_enter(state.consumed.max(state.matched));let mut out=self.b124_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.restore(mark);self.display_failures(state.consumed.max(state.matched),&[]);}
if (out.ok && true) || (!out.ok && true) {self.store(key,out,mark);}self.display_leave();
out
}
-fn b96_c(&mut self,mut state:State)->Step {
+fn b124_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e97_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e125_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e101_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e129_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e102_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e130_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e103_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e131_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e105_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e133_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e111_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e139_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e113_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e141_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e97_c(&mut self,state:State)->Step {
-let mut out=self.b97_c(state);
+fn e125_c(&mut self,state:State)->Step {
+let mut out=self.b125_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b97_c(&mut self,mut state:State)->Step {
+fn b125_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
-out=self.e98_c(out.state);
+out=self.e126_c(out.state);
out
}
-fn e98_c(&mut self,state:State)->Step {
-let mut out=self.b98_c(state);
+fn e126_c(&mut self,state:State)->Step {
+let mut out=self.b126_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["'var'", "'variable'"]);}
out
}
-fn b98_c(&mut self,mut state:State)->Step {
+fn b126_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out='choice: {let mark=self.mark();let mut diagnostic=Diag::NONE;let mut best:Option<(Step,[usize;2])>=None;
-self.restore(mark);let mut child=self.e99_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e127_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
-self.restore(mark);let mut child=self.e100_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
+self.restore(mark);let mut child=self.e128_c(out.state.begin());diagnostic=self.diag_join(diagnostic,child.diag);
if child.ok {child.state=out.state.commit(child.state);child.diag=diagnostic;break 'choice child;}
self.restore(mark);break 'choice if let Some((mut child,effects))=best {self.replay_effects(effects);child.diag=diagnostic;child} else {out.ok=false;out.diag=diagnostic;out};
};
out
}
-fn e99_c(&mut self,state:State)->Step {
-let mut out=self.b99_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e127_c(&mut self,state:State)->Step {
+let mut out=self.b127_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,99,8);
+out.events=self.relabel_token(out.events,127,8);
} else {self.display_failures(state.consumed.max(state.matched),&["'variable'"]);}
out
}
-fn b99_c(&mut self,mut state:State)->Step {
+fn b127_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"variable",true,94,false,"variable");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'variable'");}
out
}
-fn e100_c(&mut self,state:State)->Step {
-let mut out=self.b100_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e128_c(&mut self,state:State)->Step {
+let mut out=self.b128_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,100,8);
+out.events=self.relabel_token(out.events,128,8);
} else {self.display_failures(state.consumed.max(state.matched),&["'var'"]);}
out
}
-fn b100_c(&mut self,mut state:State)->Step {
+fn b128_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"var",true,93,false,"var");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'var'");}
out
}
-fn e101_c(&mut self,state:State)->Step {
-let mut out=self.b101_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e129_c(&mut self,state:State)->Step {
+let mut out=self.b129_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,101,8);
+out.events=self.relabel_token(out.events,129,8);
} else {self.display_failures(state.consumed.max(state.matched),&["'$'"]);}
out
}
-fn b101_c(&mut self,mut state:State)->Step {
+fn b129_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"$",true,2,false,"$");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'$'");}
out
}
-fn e102_c(&mut self,state:State)->Step {
-let mut out=self.b102_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e130_c(&mut self,state:State)->Step {
+let mut out=self.b130_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,102,8);
-out.events=self.event(Event::Capture {site:23,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.relabel_token(out.events,130,8);
+out.events=self.event(Event::Capture {site:33,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["IDENTIFIERParser", "__CaptureSite"]);}
out
}
-fn b102_c(&mut self,mut state:State)->Step {
+fn b130_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.token_1::(out.state,"IDENTIFIER","IDENTIFIERParser");
out
}
-fn e103_c(&mut self,state:State)->Step {
-let mut out=self.b103_c(state);
+fn e131_c(&mut self,state:State)->Step {
+let mut out=self.b131_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b103_c(&mut self,mut state:State)->Step {
+fn b131_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e104_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e132_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -3081,29 +3581,29 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b104_c(state);
+fn e132_c(&mut self,state:State)->Step {
+let mut out=self.b132_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&[]);}
out
}
-fn b104_c(&mut self,mut state:State)->Step {
+fn b132_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r13_c(out.state);
out
}
-fn e105_c(&mut self,state:State)->Step {
-let mut out=self.b105_c(state);
+fn e133_c(&mut self,state:State)->Step {
+let mut out=self.b133_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b105_c(&mut self,mut state:State)->Step {
+fn b133_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e106_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e134_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -3113,52 +3613,52 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b106_c(state);
+fn e134_c(&mut self,state:State)->Step {
+let mut out=self.b134_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:false,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b106_c(&mut self,mut state:State)->Step {
+fn b134_c(&mut self,mut state:State)->Step {
state.reset=false;
let mut out=Step::yes(state);
out.state=state.begin();
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e107_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e135_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e108_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e136_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
-let child=self.e110_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
+let child=self.e138_c(out.state);out=self.combine(out,child);if !out.ok {out.state=state;return out;}
let trivia=self.trivia_1::(out.state);out=self.combine(out,trivia);
out.state=if out.ok {state.commit(out.state)} else {state};
out
}
-fn e107_c(&mut self,state:State)->Step {
-let mut out=self.b107_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
+fn e135_c(&mut self,state:State)->Step {
+let mut out=self.b135_c(state);self.display_reach(out.state.consumed.max(out.state.matched));
if out.ok {
-out.events=self.relabel_token(out.events,107,8);
+out.events=self.relabel_token(out.events,135,8);
} else {self.display_failures(state.consumed.max(state.matched),&["'set'"]);}
out
}
-fn b107_c(&mut self,mut state:State)->Step {
+fn b135_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.literal::(out.state,"set",true,82,false,"set");
if !out.ok {self.display_fail(state.consumed.max(state.matched),"'set'");}
out
}
-fn e108_c(&mut self,state:State)->Step {
-let mut out=self.b108_c(state);
+fn e136_c(&mut self,state:State)->Step {
+let mut out=self.b136_c(state);
if out.ok {
out.events=self.event(Event::Values{span:[state.consumed,out.state.consumed],child:out.events,wrap:true,text:false});
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b108_c(&mut self,mut state:State)->Step {
+fn b136_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e109_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e137_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::() {break;}
if count>=1 {break;}
@@ -3168,41 +3668,41 @@ if count>1 {out.ok=false;out.state=state;let d=self.diag_fail(state.position::Step {
-let mut out=self.b109_c(state);
+fn e137_c(&mut self,state:State)->Step {
+let mut out=self.b137_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:24,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:34,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["'exists'", "'if'", "'not'"]);}
out
}
-fn b109_c(&mut self,mut state:State)->Step {
+fn b137_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r14_c(out.state);
out
}
-fn e110_c(&mut self,state:State)->Step {
-let mut out=self.b110_c(state);
+fn e138_c(&mut self,state:State)->Step {
+let mut out=self.b138_c(state);
if out.ok {
-out.events=self.event(Event::Capture {site:25,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
+out.events=self.event(Event::Capture {site:35,span:[state.consumed,out.state.consumed],child:out.events,token_extent:false});
} else {self.display_failures(state.consumed.max(state.matched),&["__CaptureSite"]);}
out
}
-fn b110_c(&mut self,mut state:State)->Step {
+fn b138_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out=self.r105_c(out.state);
out
}
-fn e111_c(&mut self,state:State)->Step {
-let mut out=self.b111_c(state);
+fn e139_c(&mut self,state:State)->Step {
+let mut out=self.b139_c(state);
if out.ok {
} else {self.display_failures(state.consumed.max(state.matched),&["Optional"]);}
out
}
-fn b111_c(&mut self,mut state:State)->Step {
+fn b139_c(&mut self,mut state:State)->Step {
let mut out=Step::yes(state);
out.state=state.begin();
let mut count=0usize;loop {let mark=self.mark();let before=out.state;
-let mut child=self.e112_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
+let mut child=self.e140_c(out.state);out.diag=self.diag_join(out.diag,child.diag);out.state=child.state;if !child.ok {self.restore(mark);break;}
out.events=self.join(out.events,child.events);count+=1;
if before.position::()==out.state.position::