From bcd00ebb7fa790de18ae5c28b0fe83137d2029c6 Mon Sep 17 00:00:00 2001 From: Boris Batkin Date: Wed, 13 May 2026 19:23:34 -0700 Subject: [PATCH 1/5] infer: assume-alias substitution reports at use-site MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When `InferTypes::visit(ExprVar*)` substitutes an `assume` alias, the cloned subtree now carries the use-site's LineInfo instead of the alias definition site's. Lint and any other diagnostic on substituted nodes now reports where the user wrote the code, not where the alias was declared. Concretely: assume tabi = tab[2] // line 1 summ(tab[1], tabi) // line 2 <-- error reported HERE now Previously the table-lookup-collision lint flagged line 1; now it flags line 2. Knock-on: `tests/language/failed_assume_loop.das` — the two `y` errors in the cloned `y+y` body now collapse onto the same `{x}` use-site position and dedup to one error with (×2), so the expected 30838 count drops from 4 to 3. The (×2) suffix preserves the info that the substituted body had two failing references. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/ast/ast_infer_type.cpp | 2 +- tests/language/failed_assume_loop.das | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ast/ast_infer_type.cpp b/src/ast/ast_infer_type.cpp index d6f95f67b..6bc18aa7d 100644 --- a/src/ast/ast_infer_type.cpp +++ b/src/ast/ast_infer_type.cpp @@ -4044,7 +4044,7 @@ namespace das { if (ita.expr->alias == expr->name) { reportAstChanged(); auto csub = ita.expr->subexpr->clone(); - // forceAt(csub, ita.expr->at); + forceAt(csub, expr->at); return csub; } } diff --git a/tests/language/failed_assume_loop.das b/tests/language/failed_assume_loop.das index 38f12eeb2..66b95f7f5 100644 --- a/tests/language/failed_assume_loop.das +++ b/tests/language/failed_assume_loop.das @@ -1,6 +1,6 @@ options gen2 // test for circular assume detection -expect 30838:4, 31101:2 +expect 30838:3, 31101:2 def test_direct_loop { assume x = y + y From 3c5cd6f31936cc3c16c40950755a4106b08a32c4 Mon Sep 17 00:00:00 2001 From: Boris Batkin Date: Wed, 13 May 2026 21:19:43 -0700 Subject: [PATCH 2/5] parser/gen2: synthesize trailing semi at EOF without newline Top-level statements that need SEMICOLON terminator (`options X`, `require X`, `expect X`, top-level reader macros) failed to parse when sitting as the last thing in a file lacking a trailing `\n`: options gen2 options log <- error[30151] at this token The natural newline rule emits a synthetic semicolon when not nested and not after a keyword; the `<>` rule skipped that emission and returned 0 immediately. The legacy gen1 lexer already handles this via `BEGIN(indent)` + return SEMICOLON; gen2 was an oversight. Fix: add a dedicated `eof_done` flex state. The first EOF in `` emits `das_indent_char` under the same predicate the `\n` rule uses (`!das_keyword && !das_nested_parentheses && !das_nested_square_braces`) and switches to `eof_done`; that state's `<>` rule returns 0. No C++-side flag, no state-reset to remember in `das2_yybegin`. Also rides along: two blind-mouse cache cards from this morning's pages.yml debugging. Co-Authored-By: Claude Opus 4.7 (1M context) --- ...0-only-clones-need-install-activate-too.md | 47 + ...-blocks-pr-workflows-split-build-deploy.md | 61 + src/parser/ds2_lexer.cpp | 1463 +++++++++-------- src/parser/ds2_lexer.lpp | 14 + src/parser/lex2.yy.h | 5 +- tests-cpp/small/test_eof_no_newline.cpp | 39 + 6 files changed, 904 insertions(+), 725 deletions(-) create mode 100644 mouse-data/docs/emsdk-step0-only-clones-need-install-activate-too.md create mode 100644 mouse-data/docs/github-pages-env-protection-blocks-pr-workflows-split-build-deploy.md create mode 100644 tests-cpp/small/test_eof_no_newline.cpp diff --git a/mouse-data/docs/emsdk-step0-only-clones-need-install-activate-too.md b/mouse-data/docs/emsdk-step0-only-clones-need-install-activate-too.md new file mode 100644 index 000000000..8e1a7523d --- /dev/null +++ b/mouse-data/docs/emsdk-step0-only-clones-need-install-activate-too.md @@ -0,0 +1,47 @@ +--- +slug: emsdk-step0-only-clones-need-install-activate-too +title: Why does my CI Emscripten WASM build fail with "Could not find toolchain file" when the emsdk repo was cloned successfully? +created: 2026-05-14 +last_verified: 2026-05-14 +links: [] +--- + +**`step0_emsdk_install.sh` (a one-liner: `git clone https://github.com/emscripten-core/emsdk.git`) only clones the emsdk *wrapper*. The actual Emscripten toolchain — `emsdk/upstream/emscripten/`, which is what `-DCMAKE_TOOLCHAIN_FILE=.../Emscripten.cmake` resolves against — only lands after you also run `./emsdk install ` and `./emsdk activate `.** + +Without the install+activate, `emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake` does not exist, cmake errors with: +``` +CMake Error at .../CMakeDetermineSystem.cmake:159 (message): + Could not find toolchain file: + "../emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" +``` + +The trap: `step0_emsdk_install.sh` looks like it's doing the install. It's only doing the clone. The actual install is in the activate script (`step1_emsdk_activate_linux.sh`): + +```bash +./emsdk/emsdk install latest +./emsdk/emsdk activate latest +source ./emsdk_env.sh +``` + +## CI recipe + +```yaml +- name: "Build WASM (Emscripten)" + run: | + set -eux + cd web + bash step0_emsdk_install.sh # clone wrapper + ./emsdk/emsdk install latest # download toolchain (~1 GB) + ./emsdk/emsdk activate latest # set version pointer + bash -c "source emsdk/emsdk_env.sh && \ + cd build && cmake ... && ninja" +``` + +`source ./emsdk_env.sh` only sets env vars; without `install + activate` first, the env points at nothing useful. Pin to a specific version (`install 3.1.74`) for reproducible deploys instead of `latest`. + +## Where this bit me + +daslang.io Forge redesign (PR #2648): the new pages.yml shipped without the install+activate pair, so the WASM build stage failed every deploy. `continue-on-error: true` painted it green in the run summary, and the original staging guard `if [ -d web/output ]` was satisfied (cmake configure created the empty dir even on failure) — silent breakage for hours. The round-5 placeholder gate `if [ -f web/output/daslang_static.js ]` surfaced it loudly when the post-merge deploy finally served the "Runtime rebuild in progress" page. Fixed by adding the two missing commands in [pages.yml](.github/workflows/pages.yml) ahead of the cmake call. + +## Questions +- Why does my CI Emscripten WASM build fail with "Could not find toolchain file" when the emsdk repo was cloned successfully? diff --git a/mouse-data/docs/github-pages-env-protection-blocks-pr-workflows-split-build-deploy.md b/mouse-data/docs/github-pages-env-protection-blocks-pr-workflows-split-build-deploy.md new file mode 100644 index 000000000..de90d2b45 --- /dev/null +++ b/mouse-data/docs/github-pages-env-protection-blocks-pr-workflows-split-build-deploy.md @@ -0,0 +1,61 @@ +--- +slug: github-pages-env-protection-blocks-pr-workflows-split-build-deploy +title: Why does my GitHub Actions Pages workflow fail instantly on PRs with "Branch is not allowed to deploy to github-pages due to environment protection rules"? +created: 2026-05-14 +last_verified: 2026-05-14 +links: [] +--- + +**The `environment:` block at the job level is the culprit. Attaching `environment: github-pages` to a job causes GitHub to evaluate the environment's deployment-branch protection rule *before* any step runs — and PR branches don't match the rule's "only deploy from default branch" default.** + +Symptoms: +- Job conclusion: `failure` +- `started_at` ≈ `completed_at` (1-2 seconds) +- `runner_id: 0`, `runner_name: ""` (no runner ever assigned) +- `steps: []` (no step recorded) +- Annotation: `Branch "refs/pull/N/merge" is not allowed to deploy to github-pages due to environment protection rules.` + +The check fires for `refs/pull/N/merge` (the synthetic merge ref PRs use), `workflow_dispatch` on a non-default branch, and any other non-master push. The deploy steps inside the job are correctly gated by `if: github.ref == 'refs/heads/master'`, but that gate never gets to fire because the job-level `environment:` declaration is what triggers the protection check. + +## Two fixes + +**Defense-in-depth (correct):** split into separate jobs. + +```yaml +jobs: + build: # runs everywhere, no environment attached + steps: + - ... real build steps ... + - if: github.ref == 'refs/heads/master' + uses: actions/upload-pages-artifact@v3 + + deploy: # only on master, environment attached, env rule satisfied + if: github.ref == 'refs/heads/master' + needs: build + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - id: deployment + uses: actions/deploy-pages@v4 +``` + +PR builds now run to completion (real CI signal), the env protection rule still gates the actual publish, and the workflow's master-only `if:` is the primary gate. + +**Quick unblock (defense-out):** disable the environment's branch protection. + +```bash +gh api -X PUT repos/OWNER/REPO/environments/github-pages \ + --input - <<<'{"deployment_branch_policy": null}' +``` + +Trade-off: the workflow's step-level `if:` checks become the only barrier. For personal-project repos, fine. For shared infra, prefer the split. + +**Why `*` wildcard policy doesn't work:** GitHub's deployment-branch policies match against branch names like `master` / `feature/x`. The synthetic `refs/pull/N/merge` ref is neither a branch nor a tag — `*` matches nothing in this case. + +## Where this bit me + +dasImgui PR #24 (2026-05-13): the docs.yml workflow had `environment: github-pages` at the job level, so every PR build instant-failed. First docs PR on the repo, so the latent issue surfaced. PR #25 (split build/deploy) fixed the structure; the protection rule was restored to default-branch-only after the refactor landed. + +## Questions +- Why does my GitHub Actions Pages workflow fail instantly on PRs with "Branch is not allowed to deploy to github-pages due to environment protection rules"? diff --git a/src/parser/ds2_lexer.cpp b/src/parser/ds2_lexer.cpp index 3006140cc..fd1b5a524 100644 --- a/src/parser/ds2_lexer.cpp +++ b/src/parser/ds2_lexer.cpp @@ -589,81 +589,81 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[667] = +static const flex_int16_t yy_accept[669] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 25, 25, 0, 0, 238, 237, 236, 233, - 235, 236, 135, 236, 236, 236, 236, 236, 179, 178, - 236, 236, 236, 236, 236, 165, 165, 236, 236, 236, - 236, 236, 134, 181, 236, 180, 236, 134, 134, 134, + 0, 0, 25, 25, 0, 0, 0, 0, 238, 237, + 236, 233, 235, 236, 135, 236, 236, 236, 236, 236, + 179, 178, 236, 236, 236, 236, 236, 165, 165, 236, + 236, 236, 236, 236, 134, 181, 236, 180, 236, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 183, 236, 182, - 20, 19, 18, 17, 13, 20, 14, 24, 22, 21, - 23, 9, 10, 9, 9, 9, 6, 5, 26, 25, - 12, 11, 223, 0, 189, 0, 0, 0, 0, 0, - - 0, 0, 0, 208, 212, 215, 0, 0, 2, 207, - 218, 204, 219, 205, 202, 186, 170, 3, 4, 206, - 171, 165, 0, 172, 161, 163, 0, 165, 176, 161, - 163, 184, 201, 203, 227, 220, 188, 222, 232, 221, - 225, 200, 198, 199, 134, 0, 234, 217, 214, 134, - 134, 134, 134, 92, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 183, + 236, 182, 20, 19, 18, 17, 13, 20, 14, 24, + 22, 21, 23, 9, 10, 9, 9, 9, 6, 5, + 26, 25, 12, 11, 223, 0, 189, 0, 0, 0, + + 0, 0, 0, 0, 0, 208, 212, 215, 0, 0, + 2, 207, 218, 204, 219, 205, 202, 186, 170, 3, + 4, 206, 171, 165, 0, 172, 161, 163, 0, 165, + 176, 161, 163, 184, 201, 203, 227, 220, 188, 222, + 232, 221, 225, 200, 198, 199, 134, 0, 234, 217, + 214, 134, 134, 134, 134, 92, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 31, 134, 83, 93, 134, 134, + 134, 134, 134, 134, 134, 134, 31, 134, 83, 93, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 216, - 187, 213, 16, 15, 8, 7, 26, 25, 0, 194, - 193, 196, 190, 197, 191, 195, 192, 209, 159, 159, - 0, 0, 0, 0, 0, 0, 185, 0, 170, 174, - 0, 0, 235, 0, 164, 170, 0, 171, 175, 0, - 0, 173, 162, 160, 169, 0, 226, 229, 228, 224, - 211, 134, 134, 39, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 37, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 29, 134, 134, - 134, 134, 134, 134, 114, 134, 134, 134, 42, 134, - - 102, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 49, 134, 134, 134, 134, 134, 134, 134, 45, - 134, 134, 134, 134, 134, 210, 0, 151, 151, 158, - 157, 152, 155, 154, 156, 153, 0, 170, 0, 0, - 170, 174, 0, 0, 171, 173, 177, 0, 169, 167, - 168, 168, 231, 230, 134, 95, 134, 134, 106, 134, - 134, 107, 134, 134, 69, 134, 134, 134, 134, 134, - 134, 134, 33, 35, 48, 134, 134, 134, 134, 134, - 134, 134, 134, 54, 134, 134, 134, 134, 118, 119, - - 120, 134, 115, 134, 134, 134, 0, 0, 134, 96, - 134, 134, 134, 71, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 104, - 134, 101, 121, 134, 134, 134, 134, 0, 0, 134, - 108, 134, 134, 38, 134, 0, 143, 150, 150, 149, - 149, 144, 144, 147, 147, 146, 146, 148, 148, 145, - 145, 0, 170, 168, 166, 134, 79, 134, 134, 60, - 99, 134, 47, 66, 134, 134, 134, 94, 134, 134, - 134, 105, 134, 134, 130, 134, 134, 134, 134, 134, - 116, 117, 134, 53, 134, 0, 134, 134, 134, 134, - - 134, 134, 112, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 78, 134, 64, 134, 134, 134, 126, - 127, 128, 134, 123, 134, 134, 134, 134, 0, 134, - 68, 30, 98, 0, 142, 141, 136, 139, 138, 140, - 137, 134, 40, 134, 134, 134, 134, 103, 129, 77, - 134, 134, 134, 131, 132, 133, 134, 134, 134, 134, - 134, 134, 62, 0, 41, 55, 134, 134, 134, 134, - 56, 134, 134, 134, 134, 97, 74, 86, 134, 91, - 109, 46, 134, 134, 134, 124, 125, 134, 89, 70, - 113, 0, 43, 134, 0, 134, 134, 28, 134, 81, - - 134, 36, 134, 134, 134, 134, 27, 90, 134, 134, - 57, 134, 87, 110, 50, 134, 59, 134, 134, 134, - 134, 51, 134, 134, 134, 65, 0, 76, 122, 67, - 85, 134, 61, 134, 84, 82, 58, 73, 134, 134, - 134, 134, 75, 52, 100, 134, 111, 1, 134, 63, - 134, 88, 134, 32, 134, 134, 134, 134, 134, 80, - 72, 34, 134, 134, 44, 0 + 134, 216, 187, 213, 16, 15, 8, 7, 26, 25, + 0, 194, 193, 196, 190, 197, 191, 195, 192, 209, + 159, 159, 0, 0, 0, 0, 0, 0, 185, 0, + 170, 174, 0, 0, 235, 0, 164, 170, 0, 171, + 175, 0, 0, 173, 162, 160, 169, 0, 226, 229, + 228, 224, 211, 134, 134, 39, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 37, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 29, + 134, 134, 134, 134, 134, 134, 114, 134, 134, 134, + + 42, 134, 102, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 49, 134, 134, 134, 134, 134, 134, + 134, 45, 134, 134, 134, 134, 134, 210, 0, 151, + 151, 158, 157, 152, 155, 154, 156, 153, 0, 170, + 0, 0, 170, 174, 0, 0, 171, 173, 177, 0, + 169, 167, 168, 168, 231, 230, 134, 95, 134, 134, + 106, 134, 134, 107, 134, 134, 69, 134, 134, 134, + 134, 134, 134, 134, 33, 35, 48, 134, 134, 134, + 134, 134, 134, 134, 134, 54, 134, 134, 134, 134, + + 118, 119, 120, 134, 115, 134, 134, 134, 0, 0, + 134, 96, 134, 134, 134, 71, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 104, 134, 101, 121, 134, 134, 134, 134, 0, + 0, 134, 108, 134, 134, 38, 134, 0, 143, 150, + 150, 149, 149, 144, 144, 147, 147, 146, 146, 148, + 148, 145, 145, 0, 170, 168, 166, 134, 79, 134, + 134, 60, 99, 134, 47, 66, 134, 134, 134, 94, + 134, 134, 134, 105, 134, 134, 130, 134, 134, 134, + 134, 134, 116, 117, 134, 53, 134, 0, 134, 134, + + 134, 134, 134, 134, 112, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 78, 134, 64, 134, 134, + 134, 126, 127, 128, 134, 123, 134, 134, 134, 134, + 0, 134, 68, 30, 98, 0, 142, 141, 136, 139, + 138, 140, 137, 134, 40, 134, 134, 134, 134, 103, + 129, 77, 134, 134, 134, 131, 132, 133, 134, 134, + 134, 134, 134, 134, 62, 0, 41, 55, 134, 134, + 134, 134, 56, 134, 134, 134, 134, 97, 74, 86, + 134, 91, 109, 46, 134, 134, 134, 124, 125, 134, + 89, 70, 113, 0, 43, 134, 0, 134, 134, 28, + + 134, 81, 134, 36, 134, 134, 134, 134, 27, 90, + 134, 134, 57, 134, 87, 110, 50, 134, 59, 134, + 134, 134, 134, 51, 134, 134, 134, 65, 0, 76, + 122, 67, 85, 134, 61, 134, 84, 82, 58, 73, + 134, 134, 134, 134, 75, 52, 100, 134, 111, 1, + 134, 63, 134, 88, 134, 32, 134, 134, 134, 134, + 134, 80, 72, 34, 134, 134, 44, 0 } ; static const YY_CHAR yy_ec[256] = @@ -710,300 +710,300 @@ static const YY_CHAR yy_meta[75] = 9, 1, 1, 1 } ; -static const flex_int16_t yy_base[696] = +static const flex_int16_t yy_base[698] = { 0, 0, 0, 0, 0, 73, 79, 76, 82, 84, 86, - 1110, 1109, 89, 93, 1108, 1107, 1109, 1114, 1114, 1114, - 1114, 1077, 1114, 86, 110, 1076, 89, 1064, 1114, 1114, - 85, 86, 100, 114, 129, 159, 83, 93, 116, 94, - 96, 135, 0, 1114, 167, 1114, 99, 157, 133, 106, - 104, 143, 167, 141, 177, 168, 1045, 140, 106, 171, - 179, 189, 197, 190, 192, 177, 1049, 1114, 224, 1114, - 1114, 1114, 1114, 1114, 1114, 196, 1114, 1114, 1114, 1114, - 1114, 1114, 1114, 1114, 1083, 1087, 1114, 1114, 0, 256, - 1114, 1114, 1114, 252, 1114, 0, 0, 0, 0, 0, - - 0, 0, 0, 1114, 1070, 1114, 1088, 247, 1114, 1114, - 1114, 1114, 1114, 1114, 1114, 1080, 292, 1114, 261, 1114, - 331, 139, 308, 1114, 1114, 234, 0, 227, 1114, 1046, - 254, 1114, 1114, 1114, 255, 1114, 1114, 1114, 1114, 1114, - 256, 1114, 1114, 1114, 0, 298, 1114, 1114, 1066, 1032, - 1045, 1047, 1030, 1028, 1026, 1025, 1029, 1028, 1036, 243, - 1039, 1026, 288, 1018, 241, 1017, 1021, 1024, 239, 1020, - 1016, 1019, 1018, 1011, 0, 1014, 273, 0, 1023, 312, - 1008, 1022, 1003, 1013, 206, 1018, 1004, 1012, 1018, 1006, - 313, 1017, 1016, 1015, 262, 1013, 1002, 224, 998, 997, - - 998, 284, 1007, 1008, 991, 998, 310, 987, 1000, 1114, - 1114, 1019, 1114, 1114, 1114, 1114, 0, 367, 368, 1114, - 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 307, 335, - 1037, 1036, 1035, 1034, 1033, 1032, 1114, 381, 1114, 1114, - 991, 360, 1114, 395, 1114, 381, 402, 1114, 1114, 990, - 418, 398, 1114, 1114, 397, 1022, 1009, 1114, 1114, 1008, - 1114, 973, 974, 0, 989, 969, 974, 981, 983, 974, - 983, 964, 963, 963, 312, 979, 974, 973, 975, 970, - 970, 962, 328, 955, 971, 966, 969, 0, 966, 963, - 953, 955, 954, 961, 434, 946, 957, 959, 417, 940, - - 0, 948, 941, 948, 939, 937, 933, 942, 945, 937, - 937, 929, 928, 936, 929, 928, 925, 394, 932, 927, - 936, 0, 929, 934, 919, 924, 935, 934, 921, 462, - 929, 915, 920, 922, 918, 1114, 448, 946, 945, 345, - 347, 348, 412, 413, 414, 429, 462, 441, 489, 478, - 1114, 1114, 920, 497, 476, 1114, 1114, 919, 472, 1114, - 499, 502, 1114, 1114, 907, 0, 899, 910, 0, 912, - 910, 0, 909, 898, 0, 899, 897, 906, 894, 894, - 906, 900, 0, 0, 0, 907, 900, 903, 896, 902, - 886, 885, 886, 0, 893, 881, 886, 918, 0, 0, - - 0, 919, 0, 896, 885, 891, 511, 920, 882, 0, - 891, 877, 873, 0, 888, 879, 882, 865, 866, 875, - 866, 877, 876, 861, 870, 865, 874, 871, 864, 0, - 869, 484, 519, 864, 866, 853, 863, 546, 895, 867, - 0, 862, 861, 0, 861, 903, 1114, 881, 880, 879, - 878, 877, 876, 875, 874, 873, 872, 871, 870, 869, - 868, 546, 525, 1114, 1114, 848, 0, 843, 842, 0, - 0, 829, 0, 0, 832, 833, 838, 0, 837, 822, - 837, 0, 828, 839, 529, 828, 835, 832, 830, 810, - 0, 0, 777, 0, 794, 837, 787, 770, 775, 778, - - 766, 779, 800, 775, 773, 758, 760, 764, 763, 767, - 761, 754, 740, 0, 757, 0, 752, 725, 756, 0, - 0, 0, 757, 0, 716, 729, 708, 721, 768, 711, - 0, 0, 0, 0, 1114, 1114, 1114, 1114, 1114, 1114, - 1114, 720, 0, 705, 710, 694, 694, 0, 0, 0, - 703, 681, 703, 0, 0, 0, 689, 683, 692, 689, - 688, 678, 0, 734, 1114, 0, 676, 665, 678, 676, - 0, 701, 662, 655, 666, 0, 0, 0, 655, 670, - 0, 0, 649, 483, 655, 0, 0, 651, 0, 0, - 678, 701, 1114, 638, 681, 622, 619, 0, 530, 0, - - 515, 0, 516, 519, 516, 500, 0, 0, 501, 500, - 0, 511, 0, 0, 0, 499, 0, 493, 494, 506, - 498, 0, 476, 467, 483, 0, 499, 0, 0, 0, - 0, 434, 0, 418, 0, 0, 0, 0, 384, 349, - 353, 319, 0, 0, 0, 307, 0, 1114, 294, 0, - 272, 0, 266, 0, 228, 180, 152, 122, 77, 0, - 0, 0, 78, 53, 0, 1114, 582, 594, 606, 618, - 630, 642, 654, 666, 673, 685, 697, 708, 719, 730, - 741, 752, 763, 774, 785, 792, 796, 803, 810, 817, - 824, 831, 843, 855, 867 + 1110, 1109, 89, 93, 1108, 1107, 0, 0, 1109, 1114, + 1114, 1114, 1114, 1077, 1114, 86, 110, 1076, 89, 1064, + 1114, 1114, 85, 86, 100, 114, 129, 159, 83, 93, + 116, 94, 96, 135, 0, 1114, 167, 1114, 99, 157, + 133, 106, 104, 143, 167, 141, 177, 168, 1045, 140, + 106, 171, 179, 189, 197, 190, 192, 177, 1049, 1114, + 224, 1114, 1114, 1114, 1114, 1114, 1114, 196, 1114, 1114, + 1114, 1114, 1114, 1114, 1114, 1114, 1083, 1087, 1114, 1114, + 0, 256, 1114, 1114, 1114, 252, 1114, 0, 0, 0, + + 0, 0, 0, 0, 0, 1114, 1070, 1114, 1088, 247, + 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1080, 292, 1114, + 261, 1114, 331, 139, 308, 1114, 1114, 234, 0, 227, + 1114, 1046, 254, 1114, 1114, 1114, 255, 1114, 1114, 1114, + 1114, 1114, 256, 1114, 1114, 1114, 0, 298, 1114, 1114, + 1066, 1032, 1045, 1047, 1030, 1028, 1026, 1025, 1029, 1028, + 1036, 243, 1039, 1026, 288, 1018, 241, 1017, 1021, 1024, + 239, 1020, 1016, 1019, 1018, 1011, 0, 1014, 273, 0, + 1023, 312, 1008, 1022, 1003, 1013, 206, 1018, 1004, 1012, + 1018, 1006, 313, 1017, 1016, 1015, 262, 1013, 1002, 224, + + 998, 997, 998, 284, 1007, 1008, 991, 998, 310, 987, + 1000, 1114, 1114, 1019, 1114, 1114, 1114, 1114, 0, 367, + 368, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, + 307, 335, 1037, 1036, 1035, 1034, 1033, 1032, 1114, 381, + 1114, 1114, 991, 360, 1114, 395, 1114, 381, 402, 1114, + 1114, 990, 418, 398, 1114, 1114, 397, 1022, 1009, 1114, + 1114, 1008, 1114, 973, 974, 0, 989, 969, 974, 981, + 983, 974, 983, 964, 963, 963, 312, 979, 974, 973, + 975, 970, 970, 962, 328, 955, 971, 966, 969, 0, + 966, 963, 953, 955, 954, 961, 434, 946, 957, 959, + + 417, 940, 0, 948, 941, 948, 939, 937, 933, 942, + 945, 937, 937, 929, 928, 936, 929, 928, 925, 394, + 932, 927, 936, 0, 929, 934, 919, 924, 935, 934, + 921, 462, 929, 915, 920, 922, 918, 1114, 448, 946, + 945, 345, 347, 348, 412, 413, 414, 429, 462, 441, + 489, 478, 1114, 1114, 920, 497, 476, 1114, 1114, 919, + 472, 1114, 499, 502, 1114, 1114, 907, 0, 899, 910, + 0, 912, 910, 0, 909, 898, 0, 899, 897, 906, + 894, 894, 906, 900, 0, 0, 0, 907, 900, 903, + 896, 902, 886, 885, 886, 0, 893, 881, 886, 918, + + 0, 0, 0, 919, 0, 896, 885, 891, 511, 920, + 882, 0, 891, 877, 873, 0, 888, 879, 882, 865, + 866, 875, 866, 877, 876, 861, 870, 865, 874, 871, + 864, 0, 869, 484, 519, 864, 866, 853, 863, 546, + 895, 867, 0, 862, 861, 0, 861, 903, 1114, 881, + 880, 879, 878, 877, 876, 875, 874, 873, 872, 871, + 870, 869, 868, 546, 525, 1114, 1114, 848, 0, 843, + 842, 0, 0, 829, 0, 0, 832, 833, 838, 0, + 837, 822, 837, 0, 828, 839, 529, 828, 835, 832, + 830, 810, 0, 0, 777, 0, 794, 837, 787, 770, + + 775, 778, 766, 779, 800, 775, 773, 758, 760, 764, + 763, 767, 761, 754, 740, 0, 757, 0, 752, 725, + 756, 0, 0, 0, 757, 0, 716, 729, 708, 721, + 768, 711, 0, 0, 0, 0, 1114, 1114, 1114, 1114, + 1114, 1114, 1114, 720, 0, 705, 710, 694, 694, 0, + 0, 0, 703, 681, 703, 0, 0, 0, 689, 683, + 692, 689, 688, 678, 0, 734, 1114, 0, 676, 665, + 678, 676, 0, 701, 662, 655, 666, 0, 0, 0, + 655, 670, 0, 0, 649, 483, 655, 0, 0, 651, + 0, 0, 678, 701, 1114, 638, 681, 622, 619, 0, + + 530, 0, 515, 0, 516, 519, 516, 500, 0, 0, + 501, 500, 0, 511, 0, 0, 0, 499, 0, 493, + 494, 506, 498, 0, 476, 467, 483, 0, 499, 0, + 0, 0, 0, 434, 0, 418, 0, 0, 0, 0, + 384, 349, 353, 319, 0, 0, 0, 307, 0, 1114, + 294, 0, 272, 0, 266, 0, 228, 180, 152, 122, + 77, 0, 0, 0, 78, 53, 0, 1114, 582, 594, + 606, 618, 630, 642, 654, 666, 673, 685, 697, 708, + 719, 730, 741, 752, 763, 774, 785, 792, 796, 803, + 810, 817, 824, 831, 843, 855, 867 } ; -static const flex_int16_t yy_def[696] = +static const flex_int16_t yy_def[698] = { 0, - 667, 667, 666, 3, 668, 668, 669, 669, 670, 670, - 671, 671, 672, 672, 673, 673, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 674, 666, 666, - 666, 666, 666, 666, 666, 666, 36, 666, 666, 666, - 666, 666, 675, 666, 666, 666, 666, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 676, 666, - 666, 666, 666, 666, 666, 677, 678, 679, 680, 681, - - 682, 683, 684, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 685, 666, - 666, 36, 666, 666, 666, 666, 686, 687, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 675, 666, 666, 666, 666, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - - 675, 675, 675, 675, 675, 675, 675, 675, 675, 666, - 666, 666, 666, 666, 666, 666, 676, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 685, 666, 685, 666, 121, 666, 666, 666, 666, - 666, 688, 666, 666, 689, 666, 666, 666, 666, 666, - 666, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 690, 685, 666, - 666, 666, 666, 666, 691, 666, 666, 666, 689, 666, - 666, 666, 666, 666, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - - 675, 675, 675, 675, 675, 675, 666, 666, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 666, 666, 675, - 675, 675, 675, 675, 675, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 692, 666, 666, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 693, 675, 675, 675, 675, - - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 694, 675, - 675, 675, 675, 695, 666, 666, 666, 666, 666, 666, - 666, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 693, 666, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 694, 666, 675, 695, 675, 675, 675, 675, 675, - - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 666, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 666, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 0, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666 + 669, 669, 668, 3, 670, 670, 671, 671, 672, 672, + 673, 673, 674, 674, 675, 675, 669, 669, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 676, + 668, 668, 668, 668, 668, 668, 668, 668, 38, 668, + 668, 668, 668, 668, 677, 668, 668, 668, 668, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 678, 668, 668, 668, 668, 668, 668, 679, 680, 681, + + 682, 683, 684, 685, 686, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 687, 668, 668, 38, 668, 668, 668, 668, 688, 689, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 677, 668, 668, 668, + 668, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 668, 668, 668, 668, 668, 668, 668, 678, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 687, 668, 687, 668, 123, 668, 668, + 668, 668, 668, 690, 668, 668, 691, 668, 668, 668, + 668, 668, 668, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 692, + 687, 668, 668, 668, 668, 668, 693, 668, 668, 668, + 691, 668, 668, 668, 668, 668, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + + 677, 677, 677, 677, 677, 677, 677, 677, 668, 668, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 668, + 668, 677, 677, 677, 677, 677, 677, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 694, 668, 668, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 695, 677, 677, + + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 696, 677, 677, 677, 677, 697, 668, 668, 668, 668, + 668, 668, 668, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 695, 668, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 696, 668, 677, 697, 677, 677, 677, + + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 668, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 668, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 0, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668 } ; static const flex_int16_t yy_nxt[1189] = { 0, - 19, 20, 21, 20, 20, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 19, 33, 34, 35, - 36, 37, 37, 37, 37, 37, 37, 37, 38, 39, - 40, 41, 42, 43, 43, 43, 43, 43, 43, 43, - 44, 45, 46, 47, 43, 19, 48, 49, 50, 51, - 52, 53, 54, 43, 55, 43, 56, 57, 58, 59, - 60, 43, 61, 62, 63, 64, 65, 66, 43, 67, - 43, 68, 69, 70, 72, 73, 74, 79, 80, 75, - 72, 73, 74, 79, 80, 75, 83, 84, 83, 84, - 90, 18, 18, 90, 90, 18, 18, 90, 85, 105, - - 85, 111, 665, 86, 109, 86, 94, 94, 94, 94, - 94, 94, 94, 94, 76, 110, 112, 113, 95, 106, - 76, 132, 666, 133, 138, 139, 140, 141, 664, 148, - 114, 115, 116, 134, 117, 117, 117, 117, 117, 117, - 117, 117, 149, 118, 77, 135, 136, 663, 119, 81, - 77, 666, 160, 142, 163, 81, 96, 97, 98, 120, - 99, 100, 161, 164, 101, 162, 185, 143, 146, 147, - 146, 146, 186, 662, 102, 144, 103, 121, 666, 122, - 122, 122, 122, 122, 122, 122, 122, 156, 137, 157, - 183, 173, 158, 123, 124, 159, 125, 126, 127, 165, - - 174, 166, 213, 128, 150, 184, 151, 666, 129, 123, - 124, 167, 152, 168, 180, 130, 661, 187, 181, 153, - 154, 169, 155, 170, 131, 190, 171, 127, 175, 191, - 207, 208, 172, 188, 176, 177, 189, 214, 205, 192, - 178, 179, 193, 196, 201, 256, 194, 197, 202, 660, - 203, 206, 204, 195, 210, 211, 303, 218, 230, 198, - 218, 253, 199, 243, 125, 126, 200, 213, 219, 213, - 304, 254, 94, 94, 94, 94, 94, 94, 94, 94, - 244, 253, 659, 125, 257, 258, 259, 260, 231, 321, - 254, 254, 131, 322, 232, 280, 212, 285, 233, 146, - - 147, 146, 146, 272, 281, 234, 273, 286, 317, 235, - 254, 236, 117, 117, 117, 117, 117, 117, 117, 117, - 658, 293, 657, 251, 318, 251, 238, 239, 252, 252, - 252, 252, 252, 252, 252, 252, 294, 295, 326, 276, - 656, 240, 238, 239, 277, 338, 340, 327, 241, 245, - 278, 246, 246, 246, 246, 246, 246, 246, 246, 297, - 332, 310, 243, 655, 333, 247, 248, 311, 218, 298, - 654, 218, 339, 338, 312, 377, 378, 313, 386, 244, - 249, 247, 248, 448, 387, 450, 452, 250, 337, 337, - 337, 337, 337, 337, 337, 337, 347, 243, 347, 666, - - 339, 348, 348, 348, 348, 348, 348, 348, 348, 653, - 449, 652, 451, 453, 349, 350, 351, 354, 407, 354, - 407, 407, 355, 355, 355, 355, 355, 355, 355, 355, - 352, 350, 351, 356, 360, 361, 408, 353, 252, 252, - 252, 252, 252, 252, 252, 252, 651, 357, 426, 356, - 454, 456, 458, 360, 358, 398, 399, 400, 401, 427, - 402, 403, 362, 438, 446, 438, 438, 460, 337, 337, - 337, 337, 337, 337, 337, 337, 239, 455, 457, 459, - 650, 439, 348, 348, 348, 348, 348, 348, 348, 348, - 240, 243, 239, 462, 461, 462, 649, 241, 463, 463, - - 463, 463, 463, 463, 463, 463, 648, 647, 349, 360, - 361, 248, 407, 646, 407, 407, 440, 355, 355, 355, - 355, 355, 355, 355, 355, 249, 464, 248, 360, 464, - 408, 621, 250, 517, 622, 645, 465, 362, 518, 465, - 519, 520, 521, 522, 641, 523, 524, 438, 642, 438, - 438, 554, 555, 556, 644, 465, 643, 640, 465, 639, - 351, 638, 637, 636, 635, 439, 463, 463, 463, 463, - 463, 463, 463, 463, 352, 634, 351, 633, 632, 631, - 630, 353, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 71, 71, 71, 71, 71, 71, - - 71, 71, 71, 71, 71, 71, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 107, 107, 629, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 145, 145, - 145, 145, 145, 145, 145, 217, 628, 627, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 220, 220, 220, - - 220, 220, 626, 593, 625, 624, 623, 220, 221, 221, - 221, 221, 221, 620, 619, 618, 617, 616, 221, 222, - 222, 222, 222, 222, 615, 614, 613, 612, 611, 222, - 223, 223, 223, 223, 223, 610, 565, 609, 608, 607, - 223, 224, 224, 224, 224, 224, 606, 605, 604, 603, - 602, 224, 225, 225, 225, 225, 225, 601, 600, 599, - 598, 597, 225, 226, 226, 226, 226, 226, 596, 594, - 593, 591, 590, 226, 227, 227, 227, 227, 227, 589, - 588, 587, 586, 585, 227, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 255, 255, 255, - - 128, 128, 584, 583, 582, 128, 581, 128, 252, 580, - 252, 579, 578, 577, 252, 359, 359, 359, 576, 359, - 575, 359, 348, 574, 348, 573, 572, 571, 348, 355, - 570, 355, 569, 568, 567, 355, 463, 566, 463, 565, - 563, 562, 463, 564, 564, 564, 564, 564, 564, 564, - 564, 564, 564, 564, 564, 592, 592, 592, 592, 592, - 592, 592, 592, 592, 592, 592, 592, 595, 595, 595, - 561, 595, 595, 595, 595, 595, 595, 595, 595, 560, - 559, 558, 557, 553, 552, 551, 550, 549, 548, 547, - 546, 545, 544, 543, 542, 541, 541, 540, 540, 539, - - 539, 538, 538, 537, 537, 536, 536, 535, 535, 534, - 533, 532, 531, 530, 529, 528, 527, 526, 525, 516, - 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, - 505, 504, 503, 502, 501, 500, 499, 498, 497, 496, - 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, - 485, 484, 483, 482, 481, 480, 479, 478, 477, 476, - 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, - 357, 352, 447, 447, 445, 444, 443, 442, 441, 437, - 436, 435, 434, 433, 432, 431, 430, 429, 428, 425, - 424, 423, 422, 421, 420, 419, 418, 417, 416, 415, - - 414, 413, 412, 411, 410, 409, 406, 405, 404, 397, - 396, 395, 394, 393, 392, 391, 390, 389, 388, 385, - 384, 383, 382, 381, 380, 379, 376, 375, 374, 373, - 372, 371, 370, 369, 368, 367, 366, 365, 364, 363, - 245, 249, 240, 346, 345, 344, 343, 342, 341, 336, - 335, 334, 331, 330, 329, 328, 325, 324, 323, 320, - 319, 316, 315, 314, 309, 308, 307, 306, 305, 302, - 301, 300, 299, 296, 292, 291, 290, 289, 288, 287, - 284, 283, 282, 279, 275, 274, 271, 270, 269, 268, - 267, 266, 265, 264, 263, 262, 261, 129, 237, 229, - - 228, 216, 215, 209, 182, 108, 104, 93, 666, 92, - 92, 88, 88, 17, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666 + 21, 22, 23, 22, 22, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 21, 35, 36, 37, + 38, 39, 39, 39, 39, 39, 39, 39, 40, 41, + 42, 43, 44, 45, 45, 45, 45, 45, 45, 45, + 46, 47, 48, 49, 45, 21, 50, 51, 52, 53, + 54, 55, 56, 45, 57, 45, 58, 59, 60, 61, + 62, 45, 63, 64, 65, 66, 67, 68, 45, 69, + 45, 70, 71, 72, 74, 75, 76, 81, 82, 77, + 74, 75, 76, 81, 82, 77, 85, 86, 85, 86, + 92, 20, 20, 92, 92, 20, 20, 92, 87, 107, + + 87, 113, 667, 88, 111, 88, 96, 96, 96, 96, + 96, 96, 96, 96, 78, 112, 114, 115, 97, 108, + 78, 134, 668, 135, 140, 141, 142, 143, 666, 150, + 116, 117, 118, 136, 119, 119, 119, 119, 119, 119, + 119, 119, 151, 120, 79, 137, 138, 665, 121, 83, + 79, 668, 162, 144, 165, 83, 98, 99, 100, 122, + 101, 102, 163, 166, 103, 164, 187, 145, 148, 149, + 148, 148, 188, 664, 104, 146, 105, 123, 668, 124, + 124, 124, 124, 124, 124, 124, 124, 158, 139, 159, + 185, 175, 160, 125, 126, 161, 127, 128, 129, 167, + + 176, 168, 215, 130, 152, 186, 153, 668, 131, 125, + 126, 169, 154, 170, 182, 132, 663, 189, 183, 155, + 156, 171, 157, 172, 133, 192, 173, 129, 177, 193, + 209, 210, 174, 190, 178, 179, 191, 216, 207, 194, + 180, 181, 195, 198, 203, 258, 196, 199, 204, 662, + 205, 208, 206, 197, 212, 213, 305, 220, 232, 200, + 220, 255, 201, 245, 127, 128, 202, 215, 221, 215, + 306, 256, 96, 96, 96, 96, 96, 96, 96, 96, + 246, 255, 661, 127, 259, 260, 261, 262, 233, 323, + 256, 256, 133, 324, 234, 282, 214, 287, 235, 148, + + 149, 148, 148, 274, 283, 236, 275, 288, 319, 237, + 256, 238, 119, 119, 119, 119, 119, 119, 119, 119, + 660, 295, 659, 253, 320, 253, 240, 241, 254, 254, + 254, 254, 254, 254, 254, 254, 296, 297, 328, 278, + 658, 242, 240, 241, 279, 340, 342, 329, 243, 247, + 280, 248, 248, 248, 248, 248, 248, 248, 248, 299, + 334, 312, 245, 657, 335, 249, 250, 313, 220, 300, + 656, 220, 341, 340, 314, 379, 380, 315, 388, 246, + 251, 249, 250, 450, 389, 452, 454, 252, 339, 339, + 339, 339, 339, 339, 339, 339, 349, 245, 349, 668, + + 341, 350, 350, 350, 350, 350, 350, 350, 350, 655, + 451, 654, 453, 455, 351, 352, 353, 356, 409, 356, + 409, 409, 357, 357, 357, 357, 357, 357, 357, 357, + 354, 352, 353, 358, 362, 363, 410, 355, 254, 254, + 254, 254, 254, 254, 254, 254, 653, 359, 428, 358, + 456, 458, 460, 362, 360, 400, 401, 402, 403, 429, + 404, 405, 364, 440, 448, 440, 440, 462, 339, 339, + 339, 339, 339, 339, 339, 339, 241, 457, 459, 461, + 652, 441, 350, 350, 350, 350, 350, 350, 350, 350, + 242, 245, 241, 464, 463, 464, 651, 243, 465, 465, + + 465, 465, 465, 465, 465, 465, 650, 649, 351, 362, + 363, 250, 409, 648, 409, 409, 442, 357, 357, 357, + 357, 357, 357, 357, 357, 251, 466, 250, 362, 466, + 410, 623, 252, 519, 624, 647, 467, 364, 520, 467, + 521, 522, 523, 524, 643, 525, 526, 440, 644, 440, + 440, 556, 557, 558, 646, 467, 645, 642, 467, 641, + 353, 640, 639, 638, 637, 441, 465, 465, 465, 465, + 465, 465, 465, 465, 354, 636, 353, 635, 634, 633, + 632, 355, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 73, 73, 73, 73, 73, 73, + + 73, 73, 73, 73, 73, 73, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 109, 109, 631, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 147, 147, + 147, 147, 147, 147, 147, 219, 630, 629, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 222, 222, 222, + + 222, 222, 628, 595, 627, 626, 625, 222, 223, 223, + 223, 223, 223, 622, 621, 620, 619, 618, 223, 224, + 224, 224, 224, 224, 617, 616, 615, 614, 613, 224, + 225, 225, 225, 225, 225, 612, 567, 611, 610, 609, + 225, 226, 226, 226, 226, 226, 608, 607, 606, 605, + 604, 226, 227, 227, 227, 227, 227, 603, 602, 601, + 600, 599, 227, 228, 228, 228, 228, 228, 598, 596, + 595, 593, 592, 228, 229, 229, 229, 229, 229, 591, + 590, 589, 588, 587, 229, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 257, 257, 257, + + 130, 130, 586, 585, 584, 130, 583, 130, 254, 582, + 254, 581, 580, 579, 254, 361, 361, 361, 578, 361, + 577, 361, 350, 576, 350, 575, 574, 573, 350, 357, + 572, 357, 571, 570, 569, 357, 465, 568, 465, 567, + 565, 564, 465, 566, 566, 566, 566, 566, 566, 566, + 566, 566, 566, 566, 566, 594, 594, 594, 594, 594, + 594, 594, 594, 594, 594, 594, 594, 597, 597, 597, + 563, 597, 597, 597, 597, 597, 597, 597, 597, 562, + 561, 560, 559, 555, 554, 553, 552, 551, 550, 549, + 548, 547, 546, 545, 544, 543, 543, 542, 542, 541, + + 541, 540, 540, 539, 539, 538, 538, 537, 537, 536, + 535, 534, 533, 532, 531, 530, 529, 528, 527, 518, + 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, + 507, 506, 505, 504, 503, 502, 501, 500, 499, 498, + 497, 496, 495, 494, 493, 492, 491, 490, 489, 488, + 487, 486, 485, 484, 483, 482, 481, 480, 479, 478, + 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, + 359, 354, 449, 449, 447, 446, 445, 444, 443, 439, + 438, 437, 436, 435, 434, 433, 432, 431, 430, 427, + 426, 425, 424, 423, 422, 421, 420, 419, 418, 417, + + 416, 415, 414, 413, 412, 411, 408, 407, 406, 399, + 398, 397, 396, 395, 394, 393, 392, 391, 390, 387, + 386, 385, 384, 383, 382, 381, 378, 377, 376, 375, + 374, 373, 372, 371, 370, 369, 368, 367, 366, 365, + 247, 251, 242, 348, 347, 346, 345, 344, 343, 338, + 337, 336, 333, 332, 331, 330, 327, 326, 325, 322, + 321, 318, 317, 316, 311, 310, 309, 308, 307, 304, + 303, 302, 301, 298, 294, 293, 292, 291, 290, 289, + 286, 285, 284, 281, 277, 276, 273, 272, 271, 270, + 269, 268, 267, 266, 265, 264, 263, 131, 239, 231, + + 230, 218, 217, 211, 184, 110, 106, 95, 668, 94, + 94, 90, 90, 19, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668 } ; static const flex_int16_t yy_chk[1189] = @@ -1017,127 +1017,127 @@ static const flex_int16_t yy_chk[1189] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 7, 7, 5, 6, 6, 6, 8, 8, 6, 9, 9, 10, 10, - 13, 13, 13, 13, 14, 14, 14, 14, 9, 27, - - 10, 32, 664, 9, 31, 10, 24, 24, 24, 24, - 24, 24, 24, 24, 5, 31, 32, 33, 25, 27, - 6, 38, 37, 38, 40, 40, 41, 41, 663, 47, - 33, 33, 34, 39, 34, 34, 34, 34, 34, 34, - 34, 34, 47, 35, 5, 39, 39, 659, 35, 7, - 6, 37, 50, 42, 51, 8, 25, 25, 25, 35, - 25, 25, 50, 51, 25, 50, 59, 42, 45, 45, - 45, 45, 59, 658, 25, 42, 25, 36, 122, 36, - 36, 36, 36, 36, 36, 36, 36, 49, 39, 49, - 58, 54, 49, 36, 36, 49, 36, 36, 36, 52, - - 54, 52, 76, 36, 48, 58, 48, 122, 36, 36, - 36, 52, 48, 53, 56, 36, 657, 60, 56, 48, - 48, 53, 48, 53, 36, 61, 53, 36, 55, 61, - 66, 66, 53, 60, 55, 55, 60, 76, 65, 62, - 55, 55, 62, 63, 64, 128, 62, 63, 64, 656, - 64, 65, 64, 62, 69, 69, 185, 90, 108, 63, - 90, 126, 63, 119, 128, 128, 63, 76, 94, 76, - 185, 126, 94, 94, 94, 94, 94, 94, 94, 94, - 119, 131, 655, 128, 135, 135, 141, 141, 108, 198, - 126, 131, 128, 198, 108, 165, 69, 169, 108, 146, - - 146, 146, 146, 160, 165, 108, 160, 169, 195, 108, - 131, 108, 117, 117, 117, 117, 117, 117, 117, 117, - 653, 177, 651, 123, 195, 123, 117, 117, 123, 123, - 123, 123, 123, 123, 123, 123, 177, 177, 202, 163, - 649, 117, 117, 117, 163, 229, 230, 202, 117, 121, - 163, 121, 121, 121, 121, 121, 121, 121, 121, 180, - 207, 191, 242, 646, 207, 121, 121, 191, 218, 180, - 642, 218, 229, 230, 191, 275, 275, 191, 283, 242, - 121, 121, 121, 340, 283, 341, 342, 121, 219, 219, - 219, 219, 219, 219, 219, 219, 238, 244, 238, 246, - - 230, 238, 238, 238, 238, 238, 238, 238, 238, 641, - 340, 640, 341, 342, 244, 246, 246, 247, 299, 247, - 299, 299, 247, 247, 247, 247, 247, 247, 247, 247, - 246, 246, 246, 252, 255, 255, 299, 246, 251, 251, - 251, 251, 251, 251, 251, 251, 639, 252, 318, 252, - 343, 344, 345, 255, 252, 295, 295, 295, 295, 318, - 295, 295, 255, 330, 337, 330, 330, 346, 337, 337, - 337, 337, 337, 337, 337, 337, 348, 343, 344, 345, - 634, 330, 347, 347, 347, 347, 347, 347, 347, 347, - 348, 349, 348, 350, 346, 350, 632, 348, 350, 350, - - 350, 350, 350, 350, 350, 350, 627, 625, 349, 359, - 359, 355, 407, 624, 407, 407, 330, 354, 354, 354, - 354, 354, 354, 354, 354, 355, 361, 355, 359, 362, - 407, 584, 355, 432, 584, 623, 361, 359, 432, 362, - 433, 433, 433, 433, 619, 433, 433, 438, 619, 438, - 438, 485, 485, 485, 621, 361, 620, 618, 362, 616, - 463, 612, 610, 609, 606, 438, 462, 462, 462, 462, - 462, 462, 462, 462, 463, 605, 463, 604, 603, 601, - 599, 463, 667, 667, 667, 667, 667, 667, 667, 667, - 667, 667, 667, 667, 668, 668, 668, 668, 668, 668, - - 668, 668, 668, 668, 668, 668, 669, 669, 669, 669, - 669, 669, 669, 669, 669, 669, 669, 669, 670, 670, - 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 672, 672, 672, 672, 672, 672, 672, 672, - 672, 672, 672, 672, 673, 673, 673, 673, 673, 673, - 673, 673, 673, 673, 673, 673, 674, 674, 597, 674, - 674, 674, 674, 674, 674, 674, 674, 674, 675, 675, - 675, 675, 675, 675, 675, 676, 596, 595, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 677, 677, 677, - - 677, 677, 594, 592, 591, 588, 585, 677, 678, 678, - 678, 678, 678, 583, 580, 579, 575, 574, 678, 679, - 679, 679, 679, 679, 573, 572, 570, 569, 568, 679, - 680, 680, 680, 680, 680, 567, 564, 562, 561, 560, - 680, 681, 681, 681, 681, 681, 559, 558, 557, 553, - 552, 681, 682, 682, 682, 682, 682, 551, 547, 546, - 545, 544, 682, 683, 683, 683, 683, 683, 542, 530, - 529, 528, 527, 683, 684, 684, 684, 684, 684, 526, - 525, 523, 519, 518, 684, 685, 685, 685, 685, 685, - 685, 685, 685, 685, 685, 685, 685, 686, 686, 686, - - 687, 687, 517, 515, 513, 687, 512, 687, 688, 511, - 688, 510, 509, 508, 688, 689, 689, 689, 507, 689, - 506, 689, 690, 505, 690, 504, 503, 502, 690, 691, - 501, 691, 500, 499, 498, 691, 692, 497, 692, 496, - 495, 493, 692, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 693, 693, 694, 694, 694, 694, 694, - 694, 694, 694, 694, 694, 694, 694, 695, 695, 695, - 490, 695, 695, 695, 695, 695, 695, 695, 695, 489, - 488, 487, 486, 484, 483, 481, 480, 479, 477, 476, - 475, 472, 469, 468, 466, 461, 460, 459, 458, 457, - - 456, 455, 454, 453, 452, 451, 450, 449, 448, 446, - 445, 443, 442, 440, 439, 437, 436, 435, 434, 431, - 429, 428, 427, 426, 425, 424, 423, 422, 421, 420, - 419, 418, 417, 416, 415, 413, 412, 411, 409, 408, - 406, 405, 404, 402, 398, 397, 396, 395, 393, 392, - 391, 390, 389, 388, 387, 386, 382, 381, 380, 379, - 378, 377, 376, 374, 373, 371, 370, 368, 367, 365, - 358, 353, 339, 338, 335, 334, 333, 332, 331, 329, - 328, 327, 326, 325, 324, 323, 321, 320, 319, 317, - 316, 315, 314, 313, 312, 311, 310, 309, 308, 307, - - 306, 305, 304, 303, 302, 300, 298, 297, 296, 294, - 293, 292, 291, 290, 289, 287, 286, 285, 284, 282, - 281, 280, 279, 278, 277, 276, 274, 273, 272, 271, - 270, 269, 268, 267, 266, 265, 263, 262, 260, 257, - 256, 250, 241, 236, 235, 234, 233, 232, 231, 212, - 209, 208, 206, 205, 204, 203, 201, 200, 199, 197, - 196, 194, 193, 192, 190, 189, 188, 187, 186, 184, - 183, 182, 181, 179, 176, 174, 173, 172, 171, 170, - 168, 167, 166, 164, 162, 161, 159, 158, 157, 156, - 155, 154, 153, 152, 151, 150, 149, 130, 116, 107, - - 105, 86, 85, 67, 57, 28, 26, 22, 17, 16, - 15, 12, 11, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666 + 13, 13, 13, 13, 14, 14, 14, 14, 9, 29, + + 10, 34, 666, 9, 33, 10, 26, 26, 26, 26, + 26, 26, 26, 26, 5, 33, 34, 35, 27, 29, + 6, 40, 39, 40, 42, 42, 43, 43, 665, 49, + 35, 35, 36, 41, 36, 36, 36, 36, 36, 36, + 36, 36, 49, 37, 5, 41, 41, 661, 37, 7, + 6, 39, 52, 44, 53, 8, 27, 27, 27, 37, + 27, 27, 52, 53, 27, 52, 61, 44, 47, 47, + 47, 47, 61, 660, 27, 44, 27, 38, 124, 38, + 38, 38, 38, 38, 38, 38, 38, 51, 41, 51, + 60, 56, 51, 38, 38, 51, 38, 38, 38, 54, + + 56, 54, 78, 38, 50, 60, 50, 124, 38, 38, + 38, 54, 50, 55, 58, 38, 659, 62, 58, 50, + 50, 55, 50, 55, 38, 63, 55, 38, 57, 63, + 68, 68, 55, 62, 57, 57, 62, 78, 67, 64, + 57, 57, 64, 65, 66, 130, 64, 65, 66, 658, + 66, 67, 66, 64, 71, 71, 187, 92, 110, 65, + 92, 128, 65, 121, 130, 130, 65, 78, 96, 78, + 187, 128, 96, 96, 96, 96, 96, 96, 96, 96, + 121, 133, 657, 130, 137, 137, 143, 143, 110, 200, + 128, 133, 130, 200, 110, 167, 71, 171, 110, 148, + + 148, 148, 148, 162, 167, 110, 162, 171, 197, 110, + 133, 110, 119, 119, 119, 119, 119, 119, 119, 119, + 655, 179, 653, 125, 197, 125, 119, 119, 125, 125, + 125, 125, 125, 125, 125, 125, 179, 179, 204, 165, + 651, 119, 119, 119, 165, 231, 232, 204, 119, 123, + 165, 123, 123, 123, 123, 123, 123, 123, 123, 182, + 209, 193, 244, 648, 209, 123, 123, 193, 220, 182, + 644, 220, 231, 232, 193, 277, 277, 193, 285, 244, + 123, 123, 123, 342, 285, 343, 344, 123, 221, 221, + 221, 221, 221, 221, 221, 221, 240, 246, 240, 248, + + 232, 240, 240, 240, 240, 240, 240, 240, 240, 643, + 342, 642, 343, 344, 246, 248, 248, 249, 301, 249, + 301, 301, 249, 249, 249, 249, 249, 249, 249, 249, + 248, 248, 248, 254, 257, 257, 301, 248, 253, 253, + 253, 253, 253, 253, 253, 253, 641, 254, 320, 254, + 345, 346, 347, 257, 254, 297, 297, 297, 297, 320, + 297, 297, 257, 332, 339, 332, 332, 348, 339, 339, + 339, 339, 339, 339, 339, 339, 350, 345, 346, 347, + 636, 332, 349, 349, 349, 349, 349, 349, 349, 349, + 350, 351, 350, 352, 348, 352, 634, 350, 352, 352, + + 352, 352, 352, 352, 352, 352, 629, 627, 351, 361, + 361, 357, 409, 626, 409, 409, 332, 356, 356, 356, + 356, 356, 356, 356, 356, 357, 363, 357, 361, 364, + 409, 586, 357, 434, 586, 625, 363, 361, 434, 364, + 435, 435, 435, 435, 621, 435, 435, 440, 621, 440, + 440, 487, 487, 487, 623, 363, 622, 620, 364, 618, + 465, 614, 612, 611, 608, 440, 464, 464, 464, 464, + 464, 464, 464, 464, 465, 607, 465, 606, 605, 603, + 601, 465, 669, 669, 669, 669, 669, 669, 669, 669, + 669, 669, 669, 669, 670, 670, 670, 670, 670, 670, + + 670, 670, 670, 670, 670, 670, 671, 671, 671, 671, + 671, 671, 671, 671, 671, 671, 671, 671, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, + 673, 673, 674, 674, 674, 674, 674, 674, 674, 674, + 674, 674, 674, 674, 675, 675, 675, 675, 675, 675, + 675, 675, 675, 675, 675, 675, 676, 676, 599, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 677, 677, + 677, 677, 677, 677, 677, 678, 598, 597, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 679, 679, 679, + + 679, 679, 596, 594, 593, 590, 587, 679, 680, 680, + 680, 680, 680, 585, 582, 581, 577, 576, 680, 681, + 681, 681, 681, 681, 575, 574, 572, 571, 570, 681, + 682, 682, 682, 682, 682, 569, 566, 564, 563, 562, + 682, 683, 683, 683, 683, 683, 561, 560, 559, 555, + 554, 683, 684, 684, 684, 684, 684, 553, 549, 548, + 547, 546, 684, 685, 685, 685, 685, 685, 544, 532, + 531, 530, 529, 685, 686, 686, 686, 686, 686, 528, + 527, 525, 521, 520, 686, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 688, 688, 688, + + 689, 689, 519, 517, 515, 689, 514, 689, 690, 513, + 690, 512, 511, 510, 690, 691, 691, 691, 509, 691, + 508, 691, 692, 507, 692, 506, 505, 504, 692, 693, + 503, 693, 502, 501, 500, 693, 694, 499, 694, 498, + 497, 495, 694, 695, 695, 695, 695, 695, 695, 695, + 695, 695, 695, 695, 695, 696, 696, 696, 696, 696, + 696, 696, 696, 696, 696, 696, 696, 697, 697, 697, + 492, 697, 697, 697, 697, 697, 697, 697, 697, 491, + 490, 489, 488, 486, 485, 483, 482, 481, 479, 478, + 477, 474, 471, 470, 468, 463, 462, 461, 460, 459, + + 458, 457, 456, 455, 454, 453, 452, 451, 450, 448, + 447, 445, 444, 442, 441, 439, 438, 437, 436, 433, + 431, 430, 429, 428, 427, 426, 425, 424, 423, 422, + 421, 420, 419, 418, 417, 415, 414, 413, 411, 410, + 408, 407, 406, 404, 400, 399, 398, 397, 395, 394, + 393, 392, 391, 390, 389, 388, 384, 383, 382, 381, + 380, 379, 378, 376, 375, 373, 372, 370, 369, 367, + 360, 355, 341, 340, 337, 336, 335, 334, 333, 331, + 330, 329, 328, 327, 326, 325, 323, 322, 321, 319, + 318, 317, 316, 315, 314, 313, 312, 311, 310, 309, + + 308, 307, 306, 305, 304, 302, 300, 299, 298, 296, + 295, 294, 293, 292, 291, 289, 288, 287, 286, 284, + 283, 282, 281, 280, 279, 278, 276, 275, 274, 273, + 272, 271, 270, 269, 268, 267, 265, 264, 262, 259, + 258, 252, 243, 238, 237, 236, 235, 234, 233, 214, + 211, 210, 208, 207, 206, 205, 203, 202, 201, 199, + 198, 196, 195, 194, 192, 191, 190, 189, 188, 186, + 185, 184, 183, 181, 178, 176, 175, 174, 173, 172, + 170, 169, 168, 166, 164, 163, 161, 160, 159, 158, + 157, 156, 155, 154, 153, 152, 151, 132, 118, 109, + + 107, 88, 87, 69, 59, 30, 28, 24, 19, 16, + 15, 12, 11, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668 } ; /* Table of booleans, true if rule could match eol. */ @@ -1233,6 +1233,7 @@ void das_accept_cpp_comment ( vector & crdi, yyscan_t scanner, #define cpp_comment 5 #define include 6 #define reader 7 +#define eof_done 8 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way @@ -1504,10 +1505,10 @@ YY_DECL } { -#line 77 "ds2_lexer.lpp" +#line 78 "ds2_lexer.lpp" -#line 1510 "ds2_lexer.cpp" +#line 1511 "ds2_lexer.cpp" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1534,13 +1535,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 667 ) + if ( yy_current_state >= 669 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 666 ); + while ( yy_current_state != 668 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1575,7 +1576,7 @@ YY_DECL case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 79 "ds2_lexer.lpp" +#line 80 "ds2_lexer.lpp" { string txt = yytext; int lRow, lCol; @@ -1601,12 +1602,12 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 101 "ds2_lexer.lpp" +#line 102 "ds2_lexer.lpp" das2_yyfatalerror(yylloc_param,yyscanner,"Unexpected */", CompilationError::invalid_line); return LEXER_ERROR; YY_BREAK case 3: YY_RULE_SETUP -#line 102 "ds2_lexer.lpp" +#line 103 "ds2_lexer.lpp" { BEGIN(c_comment); yyextra->das_c_style_depth = 1; @@ -1618,7 +1619,7 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 110 "ds2_lexer.lpp" +#line 111 "ds2_lexer.lpp" { BEGIN(cpp_comment); if ( !yyextra->g_CommentReaders.empty() ) { @@ -1630,7 +1631,7 @@ YY_RULE_SETUP case 5: /* rule 5 can match eol */ YY_RULE_SETUP -#line 117 "ds2_lexer.lpp" +#line 118 "ds2_lexer.lpp" { BEGIN(normal); unput('\n'); @@ -1641,12 +1642,12 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(cpp_comment): -#line 125 "ds2_lexer.lpp" +#line 126 "ds2_lexer.lpp" BEGIN(normal); YY_BREAK case 6: YY_RULE_SETUP -#line 126 "ds2_lexer.lpp" +#line 127 "ds2_lexer.lpp" { if ( !yyextra->g_CommentReaders.empty() ) { auto tak = tokAt(yyscanner,*yylloc_param); @@ -1656,14 +1657,14 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 132 "ds2_lexer.lpp" +#line 133 "ds2_lexer.lpp" { yyextra->das_c_style_depth ++; } YY_BREAK case 8: YY_RULE_SETUP -#line 135 "ds2_lexer.lpp" +#line 136 "ds2_lexer.lpp" { yyextra->das_c_style_depth --; if ( yyextra->das_c_style_depth==0 ) { @@ -1677,7 +1678,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 145 "ds2_lexer.lpp" +#line 146 "ds2_lexer.lpp" { /* skipping comment body */ if ( !yyextra->g_CommentReaders.empty() ) { auto tak = tokAt(yyscanner,*yylloc_param); @@ -1688,7 +1689,7 @@ YY_RULE_SETUP case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 151 "ds2_lexer.lpp" +#line 152 "ds2_lexer.lpp" { /* skipping comment eol */ if ( !yyextra->g_CommentReaders.empty() ) { auto tak = tokAt(yyscanner,*yylloc_param); @@ -1697,14 +1698,14 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(c_comment): -#line 157 "ds2_lexer.lpp" +#line 158 "ds2_lexer.lpp" { das2_yyfatalerror(yylloc_param,yyscanner,"end of file encountered inside c-style comment", CompilationError::exceeds_file); BEGIN(normal); } YY_BREAK case YY_STATE_EOF(reader): -#line 161 "ds2_lexer.lpp" +#line 162 "ds2_lexer.lpp" { das2_yyfatalerror(yylloc_param,yyscanner,"reader constant exceeds file", CompilationError::exceeds_file); BEGIN(normal); @@ -1714,7 +1715,7 @@ case YY_STATE_EOF(reader): case 11: /* rule 11 can match eol */ YY_RULE_SETUP -#line 166 "ds2_lexer.lpp" +#line 167 "ds2_lexer.lpp" { YY2NEWLINE(yyscanner); yylval_param->ch = yytext[0]; @@ -1723,7 +1724,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 171 "ds2_lexer.lpp" +#line 172 "ds2_lexer.lpp" { yylval_param->ch = yytext[0]; return STRING_CHARACTER; @@ -1731,7 +1732,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 175 "ds2_lexer.lpp" +#line 176 "ds2_lexer.lpp" { // assert(nested_sb==0); BEGIN(normal); @@ -1740,7 +1741,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 180 "ds2_lexer.lpp" +#line 181 "ds2_lexer.lpp" { if ( yyextra->das_nested_sb ) { das2_yyfatalerror(yylloc_param,yyscanner,"nested string constants are not allowed", CompilationError::invalid_string); @@ -1753,7 +1754,7 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(strb): -#line 190 "ds2_lexer.lpp" +#line 191 "ds2_lexer.lpp" { das2_yyfatalerror(yylloc_param,yyscanner,"string constant exceeds file", CompilationError::exceeds_file); BEGIN(normal); @@ -1762,14 +1763,14 @@ case YY_STATE_EOF(strb): YY_BREAK case 15: YY_RULE_SETUP -#line 195 "ds2_lexer.lpp" +#line 196 "ds2_lexer.lpp" { return STRING_CHARACTER_ESC; } YY_BREAK case 16: YY_RULE_SETUP -#line 198 "ds2_lexer.lpp" +#line 199 "ds2_lexer.lpp" { yylval_param->ch = yytext[1]; return STRING_CHARACTER; @@ -1777,13 +1778,13 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 202 "ds2_lexer.lpp" +#line 203 "ds2_lexer.lpp" /* do exactly nothing */ YY_BREAK case 18: /* rule 18 can match eol */ YY_RULE_SETUP -#line 203 "ds2_lexer.lpp" +#line 204 "ds2_lexer.lpp" { yylval_param->ch = *yytext; YY2NEWLINE(yyscanner); @@ -1792,7 +1793,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 208 "ds2_lexer.lpp" +#line 209 "ds2_lexer.lpp" { yylval_param->ch = *yytext; return STRING_CHARACTER; @@ -1800,14 +1801,14 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 212 "ds2_lexer.lpp" +#line 213 "ds2_lexer.lpp" { yylval_param->ch = *yytext; return STRING_CHARACTER; } YY_BREAK case YY_STATE_EOF(strfmt): -#line 216 "ds2_lexer.lpp" +#line 217 "ds2_lexer.lpp" { das2_yyfatalerror(yylloc_param,yyscanner,"string format exceeds file", CompilationError::exceeds_file); BEGIN(normal); @@ -1817,7 +1818,7 @@ case YY_STATE_EOF(strfmt): case 21: /* rule 21 can match eol */ YY_RULE_SETUP -#line 221 "ds2_lexer.lpp" +#line 222 "ds2_lexer.lpp" { yylval_param->ch = *yytext; YY2NEWLINE(yyscanner); @@ -1826,7 +1827,7 @@ YY_RULE_SETUP YY_BREAK case 22: YY_RULE_SETUP -#line 226 "ds2_lexer.lpp" +#line 227 "ds2_lexer.lpp" { yylval_param->ch = *yytext; return STRING_CHARACTER; @@ -1834,7 +1835,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 230 "ds2_lexer.lpp" +#line 231 "ds2_lexer.lpp" { BEGIN(normal); unput('}'); @@ -1842,7 +1843,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 234 "ds2_lexer.lpp" +#line 235 "ds2_lexer.lpp" { yylval_param->ch = *yytext; return STRING_CHARACTER; @@ -1850,12 +1851,12 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 238 "ds2_lexer.lpp" +#line 239 "ds2_lexer.lpp" /* eat the whitespace */ YY_BREAK case 26: YY_RULE_SETUP -#line 239 "ds2_lexer.lpp" +#line 240 "ds2_lexer.lpp" { /* got the include file name */ auto cfi = yyextra->g_FileAccessStack.back(); string incFileName = yyextra->g_Access->getIncludeFileName(cfi->name,yytext); @@ -1881,78 +1882,78 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 262 "ds2_lexer.lpp" +#line 263 "ds2_lexer.lpp" BEGIN(include); YY_BREAK case 28: YY_RULE_SETUP -#line 263 "ds2_lexer.lpp" +#line 264 "ds2_lexer.lpp" return DAS_CAPTURE; YY_BREAK case 29: YY_RULE_SETUP -#line 264 "ds2_lexer.lpp" +#line 265 "ds2_lexer.lpp" return DAS_FOR; YY_BREAK case 30: YY_RULE_SETUP -#line 265 "ds2_lexer.lpp" +#line 266 "ds2_lexer.lpp" return DAS_WHILE; YY_BREAK case 31: YY_RULE_SETUP -#line 266 "ds2_lexer.lpp" +#line 267 "ds2_lexer.lpp" return DAS_IF; YY_BREAK case 32: YY_RULE_SETUP -#line 267 "ds2_lexer.lpp" +#line 268 "ds2_lexer.lpp" return DAS_STATIC_IF; YY_BREAK case 33: YY_RULE_SETUP -#line 268 "ds2_lexer.lpp" +#line 269 "ds2_lexer.lpp" return DAS_ELIF; YY_BREAK case 34: YY_RULE_SETUP -#line 269 "ds2_lexer.lpp" +#line 270 "ds2_lexer.lpp" return DAS_STATIC_ELIF; YY_BREAK case 35: YY_RULE_SETUP -#line 270 "ds2_lexer.lpp" +#line 271 "ds2_lexer.lpp" return DAS_ELSE; YY_BREAK case 36: YY_RULE_SETUP -#line 271 "ds2_lexer.lpp" +#line 272 "ds2_lexer.lpp" return DAS_FINALLY; YY_BREAK case 37: YY_RULE_SETUP -#line 272 "ds2_lexer.lpp" +#line 273 "ds2_lexer.lpp" return DAS_DEF; YY_BREAK case 38: YY_RULE_SETUP -#line 273 "ds2_lexer.lpp" +#line 274 "ds2_lexer.lpp" return DAS_WITH; YY_BREAK case 39: YY_RULE_SETUP -#line 274 "ds2_lexer.lpp" +#line 275 "ds2_lexer.lpp" return DAS_AKA; YY_BREAK case 40: YY_RULE_SETUP -#line 275 "ds2_lexer.lpp" +#line 276 "ds2_lexer.lpp" return DAS_ASSUME; YY_BREAK case 41: /* rule 41 can match eol */ YY_RULE_SETUP -#line 276 "ds2_lexer.lpp" +#line 277 "ds2_lexer.lpp" { // TODO: comment reader after let where? unput('\n'); das_accept_cpp_comment(yyextra->g_CommentReaders, yyscanner, *yylloc_param, yytext); @@ -1961,13 +1962,13 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 281 "ds2_lexer.lpp" +#line 282 "ds2_lexer.lpp" return DAS_LET; YY_BREAK case 43: /* rule 43 can match eol */ YY_RULE_SETUP -#line 282 "ds2_lexer.lpp" +#line 283 "ds2_lexer.lpp" { // TODO: comment reader after var where? unput('\n'); das_accept_cpp_comment(yyextra->g_CommentReaders, yyscanner, *yylloc_param, yytext); @@ -1976,457 +1977,457 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 287 "ds2_lexer.lpp" +#line 288 "ds2_lexer.lpp" return DAS_UNINITIALIZED; YY_BREAK case 45: YY_RULE_SETUP -#line 288 "ds2_lexer.lpp" +#line 289 "ds2_lexer.lpp" return DAS_VAR; YY_BREAK case 46: YY_RULE_SETUP -#line 289 "ds2_lexer.lpp" +#line 290 "ds2_lexer.lpp" return DAS_STRUCT; YY_BREAK case 47: YY_RULE_SETUP -#line 290 "ds2_lexer.lpp" +#line 291 "ds2_lexer.lpp" return DAS_CLASS; YY_BREAK case 48: YY_RULE_SETUP -#line 291 "ds2_lexer.lpp" +#line 292 "ds2_lexer.lpp" return DAS_ENUM; YY_BREAK case 49: YY_RULE_SETUP -#line 292 "ds2_lexer.lpp" +#line 293 "ds2_lexer.lpp" return DAS_TRY; YY_BREAK case 50: YY_RULE_SETUP -#line 293 "ds2_lexer.lpp" +#line 294 "ds2_lexer.lpp" return DAS_CATCH; YY_BREAK case 51: YY_RULE_SETUP -#line 294 "ds2_lexer.lpp" +#line 295 "ds2_lexer.lpp" return DAS_TYPEDEF; YY_BREAK case 52: YY_RULE_SETUP -#line 295 "ds2_lexer.lpp" +#line 296 "ds2_lexer.lpp" return DAS_TYPEDECL; YY_BREAK case 53: YY_RULE_SETUP -#line 296 "ds2_lexer.lpp" +#line 297 "ds2_lexer.lpp" return DAS_LABEL; YY_BREAK case 54: YY_RULE_SETUP -#line 297 "ds2_lexer.lpp" +#line 298 "ds2_lexer.lpp" return DAS_GOTO; YY_BREAK case 55: YY_RULE_SETUP -#line 298 "ds2_lexer.lpp" +#line 299 "ds2_lexer.lpp" return DAS_MODULE; YY_BREAK case 56: YY_RULE_SETUP -#line 299 "ds2_lexer.lpp" +#line 300 "ds2_lexer.lpp" return DAS_PUBLIC; YY_BREAK case 57: YY_RULE_SETUP -#line 300 "ds2_lexer.lpp" +#line 301 "ds2_lexer.lpp" return DAS_OPTIONS; YY_BREAK case 58: YY_RULE_SETUP -#line 301 "ds2_lexer.lpp" +#line 302 "ds2_lexer.lpp" return DAS_OPERATOR; YY_BREAK case 59: YY_RULE_SETUP -#line 302 "ds2_lexer.lpp" +#line 303 "ds2_lexer.lpp" return DAS_REQUIRE; YY_BREAK case 60: YY_RULE_SETUP -#line 303 "ds2_lexer.lpp" +#line 304 "ds2_lexer.lpp" return DAS_TBLOCK; YY_BREAK case 61: YY_RULE_SETUP -#line 304 "ds2_lexer.lpp" +#line 305 "ds2_lexer.lpp" return DAS_TFUNCTION; YY_BREAK case 62: YY_RULE_SETUP -#line 305 "ds2_lexer.lpp" +#line 306 "ds2_lexer.lpp" return DAS_TLAMBDA; YY_BREAK case 63: YY_RULE_SETUP -#line 306 "ds2_lexer.lpp" +#line 307 "ds2_lexer.lpp" return DAS_GENERATOR; YY_BREAK case 64: YY_RULE_SETUP -#line 307 "ds2_lexer.lpp" +#line 308 "ds2_lexer.lpp" return DAS_TTUPLE; YY_BREAK case 65: YY_RULE_SETUP -#line 308 "ds2_lexer.lpp" +#line 309 "ds2_lexer.lpp" return DAS_TVARIANT; YY_BREAK case 66: YY_RULE_SETUP -#line 309 "ds2_lexer.lpp" +#line 310 "ds2_lexer.lpp" return DAS_CONST; YY_BREAK case 67: YY_RULE_SETUP -#line 310 "ds2_lexer.lpp" +#line 311 "ds2_lexer.lpp" return DAS_CONTINUE; YY_BREAK case 68: YY_RULE_SETUP -#line 311 "ds2_lexer.lpp" +#line 312 "ds2_lexer.lpp" return DAS_WHERE; YY_BREAK case 69: YY_RULE_SETUP -#line 312 "ds2_lexer.lpp" +#line 313 "ds2_lexer.lpp" return DAS_CAST; YY_BREAK case 70: YY_RULE_SETUP -#line 313 "ds2_lexer.lpp" +#line 314 "ds2_lexer.lpp" return DAS_UPCAST; YY_BREAK case 71: YY_RULE_SETUP -#line 314 "ds2_lexer.lpp" +#line 315 "ds2_lexer.lpp" return DAS_PASS; YY_BREAK case 72: YY_RULE_SETUP -#line 315 "ds2_lexer.lpp" +#line 316 "ds2_lexer.lpp" return DAS_REINTERPRET; YY_BREAK case 73: YY_RULE_SETUP -#line 316 "ds2_lexer.lpp" +#line 317 "ds2_lexer.lpp" return DAS_OVERRIDE; YY_BREAK case 74: YY_RULE_SETUP -#line 317 "ds2_lexer.lpp" +#line 318 "ds2_lexer.lpp" return DAS_SEALED; YY_BREAK case 75: YY_RULE_SETUP -#line 318 "ds2_lexer.lpp" +#line 319 "ds2_lexer.lpp" return DAS_TEMPLATE; YY_BREAK case 76: YY_RULE_SETUP -#line 319 "ds2_lexer.lpp" +#line 320 "ds2_lexer.lpp" return DAS_ABSTRACT; YY_BREAK case 77: YY_RULE_SETUP -#line 320 "ds2_lexer.lpp" +#line 321 "ds2_lexer.lpp" return DAS_EXPECT; YY_BREAK case 78: YY_RULE_SETUP -#line 321 "ds2_lexer.lpp" +#line 322 "ds2_lexer.lpp" return DAS_TABLE; YY_BREAK case 79: YY_RULE_SETUP -#line 322 "ds2_lexer.lpp" +#line 323 "ds2_lexer.lpp" return DAS_ARRAY; YY_BREAK case 80: YY_RULE_SETUP -#line 323 "ds2_lexer.lpp" +#line 324 "ds2_lexer.lpp" return DAS_FIXED_ARRAY; YY_BREAK case 81: YY_RULE_SETUP -#line 324 "ds2_lexer.lpp" +#line 325 "ds2_lexer.lpp" return DAS_DEFAULT; YY_BREAK case 82: YY_RULE_SETUP -#line 325 "ds2_lexer.lpp" +#line 326 "ds2_lexer.lpp" return DAS_ITERATOR; YY_BREAK case 83: YY_RULE_SETUP -#line 326 "ds2_lexer.lpp" +#line 327 "ds2_lexer.lpp" return DAS_IN; YY_BREAK case 84: YY_RULE_SETUP -#line 327 "ds2_lexer.lpp" +#line 328 "ds2_lexer.lpp" return DAS_IMPLICIT; YY_BREAK case 85: YY_RULE_SETUP -#line 328 "ds2_lexer.lpp" +#line 329 "ds2_lexer.lpp" return DAS_EXPLICIT; YY_BREAK case 86: YY_RULE_SETUP -#line 329 "ds2_lexer.lpp" +#line 330 "ds2_lexer.lpp" return DAS_SHARED; YY_BREAK case 87: YY_RULE_SETUP -#line 330 "ds2_lexer.lpp" +#line 331 "ds2_lexer.lpp" return DAS_PRIVATE; YY_BREAK case 88: YY_RULE_SETUP -#line 331 "ds2_lexer.lpp" +#line 332 "ds2_lexer.lpp" return DAS_SMART_PTR; YY_BREAK case 89: YY_RULE_SETUP -#line 332 "ds2_lexer.lpp" +#line 333 "ds2_lexer.lpp" return DAS_UNSAFE; YY_BREAK case 90: YY_RULE_SETUP -#line 333 "ds2_lexer.lpp" +#line 334 "ds2_lexer.lpp" return DAS_INSCOPE; YY_BREAK case 91: YY_RULE_SETUP -#line 334 "ds2_lexer.lpp" +#line 335 "ds2_lexer.lpp" return DAS_STATIC; YY_BREAK case 92: YY_RULE_SETUP -#line 335 "ds2_lexer.lpp" +#line 336 "ds2_lexer.lpp" return DAS_AS; YY_BREAK case 93: YY_RULE_SETUP -#line 336 "ds2_lexer.lpp" +#line 337 "ds2_lexer.lpp" return DAS_IS; YY_BREAK case 94: YY_RULE_SETUP -#line 337 "ds2_lexer.lpp" +#line 338 "ds2_lexer.lpp" return DAS_DEREF; YY_BREAK case 95: YY_RULE_SETUP -#line 338 "ds2_lexer.lpp" +#line 339 "ds2_lexer.lpp" return DAS_ADDR; YY_BREAK case 96: YY_RULE_SETUP -#line 339 "ds2_lexer.lpp" +#line 340 "ds2_lexer.lpp" return DAS_NULL; YY_BREAK case 97: YY_RULE_SETUP -#line 340 "ds2_lexer.lpp" +#line 341 "ds2_lexer.lpp" return DAS_RETURN; YY_BREAK case 98: YY_RULE_SETUP -#line 341 "ds2_lexer.lpp" +#line 342 "ds2_lexer.lpp" return DAS_YIELD; YY_BREAK case 99: YY_RULE_SETUP -#line 342 "ds2_lexer.lpp" +#line 343 "ds2_lexer.lpp" return DAS_BREAK; YY_BREAK case 100: YY_RULE_SETUP -#line 343 "ds2_lexer.lpp" +#line 344 "ds2_lexer.lpp" return DAS_TYPEINFO; YY_BREAK case 101: YY_RULE_SETUP -#line 344 "ds2_lexer.lpp" +#line 345 "ds2_lexer.lpp" return DAS_TYPE; YY_BREAK case 102: YY_RULE_SETUP -#line 345 "ds2_lexer.lpp" +#line 346 "ds2_lexer.lpp" return DAS_NEWT; YY_BREAK case 103: YY_RULE_SETUP -#line 346 "ds2_lexer.lpp" +#line 347 "ds2_lexer.lpp" return DAS_DELETE; YY_BREAK case 104: YY_RULE_SETUP -#line 347 "ds2_lexer.lpp" +#line 348 "ds2_lexer.lpp" return DAS_TRUE; YY_BREAK case 105: YY_RULE_SETUP -#line 348 "ds2_lexer.lpp" +#line 349 "ds2_lexer.lpp" return DAS_FALSE; YY_BREAK case 106: YY_RULE_SETUP -#line 349 "ds2_lexer.lpp" +#line 350 "ds2_lexer.lpp" return DAS_TAUTO; YY_BREAK case 107: YY_RULE_SETUP -#line 350 "ds2_lexer.lpp" +#line 351 "ds2_lexer.lpp" return DAS_TBOOL; YY_BREAK case 108: YY_RULE_SETUP -#line 351 "ds2_lexer.lpp" +#line 352 "ds2_lexer.lpp" return DAS_TVOID; YY_BREAK case 109: YY_RULE_SETUP -#line 352 "ds2_lexer.lpp" +#line 353 "ds2_lexer.lpp" return DAS_TSTRING; YY_BREAK case 110: YY_RULE_SETUP -#line 353 "ds2_lexer.lpp" +#line 354 "ds2_lexer.lpp" return DAS_TRANGE64; YY_BREAK case 111: YY_RULE_SETUP -#line 354 "ds2_lexer.lpp" +#line 355 "ds2_lexer.lpp" return DAS_TURANGE64; YY_BREAK case 112: YY_RULE_SETUP -#line 355 "ds2_lexer.lpp" +#line 356 "ds2_lexer.lpp" return DAS_TRANGE; YY_BREAK case 113: YY_RULE_SETUP -#line 356 "ds2_lexer.lpp" +#line 357 "ds2_lexer.lpp" return DAS_TURANGE; YY_BREAK case 114: YY_RULE_SETUP -#line 357 "ds2_lexer.lpp" +#line 358 "ds2_lexer.lpp" return DAS_TINT; YY_BREAK case 115: YY_RULE_SETUP -#line 358 "ds2_lexer.lpp" +#line 359 "ds2_lexer.lpp" return DAS_TINT8; YY_BREAK case 116: YY_RULE_SETUP -#line 359 "ds2_lexer.lpp" +#line 360 "ds2_lexer.lpp" return DAS_TINT16; YY_BREAK case 117: YY_RULE_SETUP -#line 360 "ds2_lexer.lpp" +#line 361 "ds2_lexer.lpp" return DAS_TINT64; YY_BREAK case 118: YY_RULE_SETUP -#line 361 "ds2_lexer.lpp" +#line 362 "ds2_lexer.lpp" return DAS_TINT2; YY_BREAK case 119: YY_RULE_SETUP -#line 362 "ds2_lexer.lpp" +#line 363 "ds2_lexer.lpp" return DAS_TINT3; YY_BREAK case 120: YY_RULE_SETUP -#line 363 "ds2_lexer.lpp" +#line 364 "ds2_lexer.lpp" return DAS_TINT4; YY_BREAK case 121: YY_RULE_SETUP -#line 364 "ds2_lexer.lpp" +#line 365 "ds2_lexer.lpp" return DAS_TUINT; YY_BREAK case 122: YY_RULE_SETUP -#line 365 "ds2_lexer.lpp" +#line 366 "ds2_lexer.lpp" return DAS_TBITFIELD; YY_BREAK case 123: YY_RULE_SETUP -#line 366 "ds2_lexer.lpp" +#line 367 "ds2_lexer.lpp" return DAS_TUINT8; YY_BREAK case 124: YY_RULE_SETUP -#line 367 "ds2_lexer.lpp" +#line 368 "ds2_lexer.lpp" return DAS_TUINT16; YY_BREAK case 125: YY_RULE_SETUP -#line 368 "ds2_lexer.lpp" +#line 369 "ds2_lexer.lpp" return DAS_TUINT64; YY_BREAK case 126: YY_RULE_SETUP -#line 369 "ds2_lexer.lpp" +#line 370 "ds2_lexer.lpp" return DAS_TUINT2; YY_BREAK case 127: YY_RULE_SETUP -#line 370 "ds2_lexer.lpp" +#line 371 "ds2_lexer.lpp" return DAS_TUINT3; YY_BREAK case 128: YY_RULE_SETUP -#line 371 "ds2_lexer.lpp" +#line 372 "ds2_lexer.lpp" return DAS_TUINT4; YY_BREAK case 129: YY_RULE_SETUP -#line 372 "ds2_lexer.lpp" +#line 373 "ds2_lexer.lpp" return DAS_TDOUBLE; YY_BREAK case 130: YY_RULE_SETUP -#line 373 "ds2_lexer.lpp" +#line 374 "ds2_lexer.lpp" return DAS_TFLOAT; YY_BREAK case 131: YY_RULE_SETUP -#line 374 "ds2_lexer.lpp" +#line 375 "ds2_lexer.lpp" return DAS_TFLOAT2; YY_BREAK case 132: YY_RULE_SETUP -#line 375 "ds2_lexer.lpp" +#line 376 "ds2_lexer.lpp" return DAS_TFLOAT3; YY_BREAK case 133: YY_RULE_SETUP -#line 376 "ds2_lexer.lpp" +#line 377 "ds2_lexer.lpp" return DAS_TFLOAT4; YY_BREAK case 134: YY_RULE_SETUP -#line 377 "ds2_lexer.lpp" +#line 378 "ds2_lexer.lpp" { yylval_param->s = new string(yytext); #if DAS_TRACK_ALLOC @@ -2437,7 +2438,7 @@ YY_RULE_SETUP YY_BREAK case 135: YY_RULE_SETUP -#line 384 "ds2_lexer.lpp" +#line 385 "ds2_lexer.lpp" { BEGIN(strb); return BEGIN_STRING; @@ -2445,127 +2446,127 @@ YY_RULE_SETUP YY_BREAK case 136: YY_RULE_SETUP -#line 388 "ds2_lexer.lpp" +#line 389 "ds2_lexer.lpp" yylval_param->ui = 8; return UNSIGNED_INT8; YY_BREAK case 137: YY_RULE_SETUP -#line 389 "ds2_lexer.lpp" +#line 390 "ds2_lexer.lpp" yylval_param->ui = 9; return UNSIGNED_INT8; YY_BREAK case 138: YY_RULE_SETUP -#line 390 "ds2_lexer.lpp" +#line 391 "ds2_lexer.lpp" yylval_param->ui = 10; return UNSIGNED_INT8; YY_BREAK case 139: YY_RULE_SETUP -#line 391 "ds2_lexer.lpp" +#line 392 "ds2_lexer.lpp" yylval_param->ui = 12; return UNSIGNED_INT8; YY_BREAK case 140: YY_RULE_SETUP -#line 392 "ds2_lexer.lpp" +#line 393 "ds2_lexer.lpp" yylval_param->ui = 13; return UNSIGNED_INT8; YY_BREAK case 141: YY_RULE_SETUP -#line 393 "ds2_lexer.lpp" +#line 394 "ds2_lexer.lpp" yylval_param->ui = '\\'; return UNSIGNED_INT8; YY_BREAK case 142: YY_RULE_SETUP -#line 394 "ds2_lexer.lpp" +#line 395 "ds2_lexer.lpp" yylval_param->ui = '\''; return UNSIGNED_INT8; YY_BREAK case 143: YY_RULE_SETUP -#line 395 "ds2_lexer.lpp" +#line 396 "ds2_lexer.lpp" yylval_param->ui = uint32_t(yytext[1]); return UNSIGNED_INT8; YY_BREAK case 144: YY_RULE_SETUP -#line 397 "ds2_lexer.lpp" +#line 398 "ds2_lexer.lpp" yylval_param->ui = 8; return UNSIGNED_INTEGER; YY_BREAK case 145: YY_RULE_SETUP -#line 398 "ds2_lexer.lpp" +#line 399 "ds2_lexer.lpp" yylval_param->ui = 9; return UNSIGNED_INTEGER; YY_BREAK case 146: YY_RULE_SETUP -#line 399 "ds2_lexer.lpp" +#line 400 "ds2_lexer.lpp" yylval_param->ui = 10; return UNSIGNED_INTEGER; YY_BREAK case 147: YY_RULE_SETUP -#line 400 "ds2_lexer.lpp" +#line 401 "ds2_lexer.lpp" yylval_param->ui = 12; return UNSIGNED_INTEGER; YY_BREAK case 148: YY_RULE_SETUP -#line 401 "ds2_lexer.lpp" +#line 402 "ds2_lexer.lpp" yylval_param->ui = 13; return UNSIGNED_INTEGER; YY_BREAK case 149: YY_RULE_SETUP -#line 402 "ds2_lexer.lpp" +#line 403 "ds2_lexer.lpp" yylval_param->ui = '\\'; return UNSIGNED_INTEGER; YY_BREAK case 150: YY_RULE_SETUP -#line 403 "ds2_lexer.lpp" +#line 404 "ds2_lexer.lpp" yylval_param->ui = '\''; return UNSIGNED_INTEGER; YY_BREAK case 151: YY_RULE_SETUP -#line 404 "ds2_lexer.lpp" +#line 405 "ds2_lexer.lpp" yylval_param->ui = uint32_t(yytext[1]); return UNSIGNED_INTEGER; YY_BREAK case 152: YY_RULE_SETUP -#line 406 "ds2_lexer.lpp" +#line 407 "ds2_lexer.lpp" yylval_param->i = 8; return INTEGER; YY_BREAK case 153: YY_RULE_SETUP -#line 407 "ds2_lexer.lpp" +#line 408 "ds2_lexer.lpp" yylval_param->i = 9; return INTEGER; YY_BREAK case 154: YY_RULE_SETUP -#line 408 "ds2_lexer.lpp" +#line 409 "ds2_lexer.lpp" yylval_param->i = 10; return INTEGER; YY_BREAK case 155: YY_RULE_SETUP -#line 409 "ds2_lexer.lpp" +#line 410 "ds2_lexer.lpp" yylval_param->i = 12; return INTEGER; YY_BREAK case 156: YY_RULE_SETUP -#line 410 "ds2_lexer.lpp" +#line 411 "ds2_lexer.lpp" yylval_param->i = 13; return INTEGER; YY_BREAK case 157: YY_RULE_SETUP -#line 411 "ds2_lexer.lpp" +#line 412 "ds2_lexer.lpp" yylval_param->i = '\\'; return INTEGER; YY_BREAK case 158: YY_RULE_SETUP -#line 412 "ds2_lexer.lpp" +#line 413 "ds2_lexer.lpp" yylval_param->i = '\''; return INTEGER; YY_BREAK case 159: YY_RULE_SETUP -#line 414 "ds2_lexer.lpp" +#line 415 "ds2_lexer.lpp" yylval_param->i = int32_t(yytext[1]); return INTEGER; YY_BREAK case 160: YY_RULE_SETUP -#line 415 "ds2_lexer.lpp" +#line 416 "ds2_lexer.lpp" { char temptext[128]; int templength = skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2580,7 +2581,7 @@ YY_RULE_SETUP YY_BREAK case 161: YY_RULE_SETUP -#line 426 "ds2_lexer.lpp" +#line 427 "ds2_lexer.lpp" { char temptext[128]; int templength = skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2595,7 +2596,7 @@ YY_RULE_SETUP YY_BREAK case 162: YY_RULE_SETUP -#line 437 "ds2_lexer.lpp" +#line 438 "ds2_lexer.lpp" { char temptext[128]; int templength = skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2612,7 +2613,7 @@ YY_RULE_SETUP YY_BREAK case 163: YY_RULE_SETUP -#line 450 "ds2_lexer.lpp" +#line 451 "ds2_lexer.lpp" { char temptext[128]; int templength = skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2627,7 +2628,7 @@ YY_RULE_SETUP YY_BREAK case 164: YY_RULE_SETUP -#line 461 "ds2_lexer.lpp" +#line 462 "ds2_lexer.lpp" { char temptext[128]; int templength = skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2646,7 +2647,7 @@ YY_RULE_SETUP YY_BREAK case 165: YY_RULE_SETUP -#line 476 "ds2_lexer.lpp" +#line 477 "ds2_lexer.lpp" { char temptext[128]; int templength = skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2661,7 +2662,7 @@ YY_RULE_SETUP YY_BREAK case 166: YY_RULE_SETUP -#line 487 "ds2_lexer.lpp" +#line 488 "ds2_lexer.lpp" { char temptext[128]; skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2676,7 +2677,7 @@ YY_RULE_SETUP YY_BREAK case 167: YY_RULE_SETUP -#line 498 "ds2_lexer.lpp" +#line 499 "ds2_lexer.lpp" { char temptext[128]; skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2691,7 +2692,7 @@ YY_RULE_SETUP YY_BREAK case 168: YY_RULE_SETUP -#line 509 "ds2_lexer.lpp" +#line 510 "ds2_lexer.lpp" { char temptext[128]; int templength = skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2718,7 +2719,7 @@ YY_RULE_SETUP YY_BREAK case 169: YY_RULE_SETUP -#line 532 "ds2_lexer.lpp" +#line 533 "ds2_lexer.lpp" { char temptext[128]; skip_underscode(yytext,temptext,temptext+sizeof(temptext)); @@ -2733,7 +2734,7 @@ YY_RULE_SETUP YY_BREAK case 170: YY_RULE_SETUP -#line 543 "ds2_lexer.lpp" +#line 544 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->fd); if ( res.ec == std::errc::result_out_of_range ) { @@ -2746,7 +2747,7 @@ YY_RULE_SETUP YY_BREAK case 171: YY_RULE_SETUP -#line 552 "ds2_lexer.lpp" +#line 553 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->fd); if ( res.ec == std::errc::result_out_of_range ) { @@ -2760,7 +2761,7 @@ YY_RULE_SETUP YY_BREAK case 172: YY_RULE_SETUP -#line 562 "ds2_lexer.lpp" +#line 563 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->fd); if ( res.ec == std::errc::result_out_of_range ) { @@ -2773,7 +2774,7 @@ YY_RULE_SETUP YY_BREAK case 173: YY_RULE_SETUP -#line 571 "ds2_lexer.lpp" +#line 572 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->fd); if ( res.ec == std::errc::result_out_of_range ) { @@ -2786,7 +2787,7 @@ YY_RULE_SETUP YY_BREAK case 174: YY_RULE_SETUP -#line 580 "ds2_lexer.lpp" +#line 581 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->d); if ( res.ec == std::errc::result_out_of_range ) { @@ -2799,7 +2800,7 @@ YY_RULE_SETUP YY_BREAK case 175: YY_RULE_SETUP -#line 589 "ds2_lexer.lpp" +#line 590 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->d); if ( res.ec == std::errc::result_out_of_range ) { @@ -2812,7 +2813,7 @@ YY_RULE_SETUP YY_BREAK case 176: YY_RULE_SETUP -#line 598 "ds2_lexer.lpp" +#line 599 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->d); if ( res.ec == std::errc::result_out_of_range ) { @@ -2825,7 +2826,7 @@ YY_RULE_SETUP YY_BREAK case 177: YY_RULE_SETUP -#line 607 "ds2_lexer.lpp" +#line 608 "ds2_lexer.lpp" { auto res = fast_float::from_chars(yytext, yytext+strlen(yytext), yylval_param->d); if ( res.ec == std::errc::result_out_of_range ) { @@ -2838,7 +2839,7 @@ YY_RULE_SETUP YY_BREAK case 178: YY_RULE_SETUP -#line 616 "ds2_lexer.lpp" +#line 617 "ds2_lexer.lpp" { if ( !yyextra->das_nested_parentheses ) { das2_yyfatalerror(yylloc_param,yyscanner,"mismatching parentheses", CompilationError::mismatching_parens); @@ -2850,7 +2851,7 @@ YY_RULE_SETUP YY_BREAK case 179: YY_RULE_SETUP -#line 624 "ds2_lexer.lpp" +#line 625 "ds2_lexer.lpp" { yyextra->das_nested_parentheses ++; return '('; @@ -2858,7 +2859,7 @@ YY_RULE_SETUP YY_BREAK case 180: YY_RULE_SETUP -#line 628 "ds2_lexer.lpp" +#line 629 "ds2_lexer.lpp" { if ( !yyextra->das_nested_square_braces ) { das2_yyfatalerror(yylloc_param,yyscanner,"mismatching square braces", CompilationError::mismatching_parens); @@ -2870,7 +2871,7 @@ YY_RULE_SETUP YY_BREAK case 181: YY_RULE_SETUP -#line 636 "ds2_lexer.lpp" +#line 637 "ds2_lexer.lpp" { yyextra->das_nested_square_braces ++; return '['; @@ -2878,7 +2879,7 @@ YY_RULE_SETUP YY_BREAK case 182: YY_RULE_SETUP -#line 640 "ds2_lexer.lpp" +#line 641 "ds2_lexer.lpp" { if ( yyextra->das_nested_sb ) { yyextra->das_nested_sb --; @@ -2900,7 +2901,7 @@ YY_RULE_SETUP YY_BREAK case 183: YY_RULE_SETUP -#line 658 "ds2_lexer.lpp" +#line 659 "ds2_lexer.lpp" { if ( yyextra->das_nested_sb ) { yyextra->das_nested_sb ++; @@ -2912,90 +2913,90 @@ YY_RULE_SETUP YY_BREAK case 184: YY_RULE_SETUP -#line 666 "ds2_lexer.lpp" +#line 667 "ds2_lexer.lpp" return COLCOL; YY_BREAK case 185: YY_RULE_SETUP -#line 667 "ds2_lexer.lpp" +#line 668 "ds2_lexer.lpp" return MTAG_DOTDOTDOT; YY_BREAK case 186: YY_RULE_SETUP -#line 668 "ds2_lexer.lpp" +#line 669 "ds2_lexer.lpp" return DOTDOT; YY_BREAK case 187: YY_RULE_SETUP -#line 669 "ds2_lexer.lpp" +#line 670 "ds2_lexer.lpp" return RPIPE; YY_BREAK case 188: YY_RULE_SETUP -#line 670 "ds2_lexer.lpp" +#line 671 "ds2_lexer.lpp" return LPIPE; YY_BREAK case 189: YY_RULE_SETUP -#line 671 "ds2_lexer.lpp" +#line 672 "ds2_lexer.lpp" return MTAG_E; YY_BREAK case 190: /* rule 190 can match eol */ YY_RULE_SETUP -#line 672 "ds2_lexer.lpp" +#line 673 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_E; YY_BREAK case 191: /* rule 191 can match eol */ YY_RULE_SETUP -#line 673 "ds2_lexer.lpp" +#line 674 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_I; YY_BREAK case 192: /* rule 192 can match eol */ YY_RULE_SETUP -#line 674 "ds2_lexer.lpp" +#line 675 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_V; YY_BREAK case 193: /* rule 193 can match eol */ YY_RULE_SETUP -#line 675 "ds2_lexer.lpp" +#line 676 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_B; YY_BREAK case 194: /* rule 194 can match eol */ YY_RULE_SETUP -#line 676 "ds2_lexer.lpp" +#line 677 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_A; YY_BREAK case 195: /* rule 195 can match eol */ YY_RULE_SETUP -#line 677 "ds2_lexer.lpp" +#line 678 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_T; YY_BREAK case 196: /* rule 196 can match eol */ YY_RULE_SETUP -#line 678 "ds2_lexer.lpp" +#line 679 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_C; YY_BREAK case 197: /* rule 197 can match eol */ YY_RULE_SETUP -#line 679 "ds2_lexer.lpp" +#line 680 "ds2_lexer.lpp" unput(yytext[yyleng-1]); return MTAG_F; YY_BREAK case 198: YY_RULE_SETUP -#line 680 "ds2_lexer.lpp" +#line 681 "ds2_lexer.lpp" return QQ; YY_BREAK case 199: YY_RULE_SETUP -#line 681 "ds2_lexer.lpp" +#line 682 "ds2_lexer.lpp" { yyextra->das_nested_square_braces ++; return QBRA; @@ -3003,127 +3004,127 @@ YY_RULE_SETUP YY_BREAK case 200: YY_RULE_SETUP -#line 685 "ds2_lexer.lpp" +#line 686 "ds2_lexer.lpp" return QDOT; YY_BREAK case 201: YY_RULE_SETUP -#line 686 "ds2_lexer.lpp" +#line 687 "ds2_lexer.lpp" return CLONEEQU; YY_BREAK case 202: YY_RULE_SETUP -#line 687 "ds2_lexer.lpp" +#line 688 "ds2_lexer.lpp" return RARROW; YY_BREAK case 203: YY_RULE_SETUP -#line 688 "ds2_lexer.lpp" +#line 689 "ds2_lexer.lpp" return LARROW; YY_BREAK case 204: YY_RULE_SETUP -#line 689 "ds2_lexer.lpp" +#line 690 "ds2_lexer.lpp" return ADDEQU; YY_BREAK case 205: YY_RULE_SETUP -#line 690 "ds2_lexer.lpp" +#line 691 "ds2_lexer.lpp" return SUBEQU; YY_BREAK case 206: YY_RULE_SETUP -#line 691 "ds2_lexer.lpp" +#line 692 "ds2_lexer.lpp" return DIVEQU; YY_BREAK case 207: YY_RULE_SETUP -#line 692 "ds2_lexer.lpp" +#line 693 "ds2_lexer.lpp" return MULEQU; YY_BREAK case 208: YY_RULE_SETUP -#line 693 "ds2_lexer.lpp" +#line 694 "ds2_lexer.lpp" return MODEQU; YY_BREAK case 209: YY_RULE_SETUP -#line 694 "ds2_lexer.lpp" +#line 695 "ds2_lexer.lpp" return ANDANDEQU; YY_BREAK case 210: YY_RULE_SETUP -#line 695 "ds2_lexer.lpp" +#line 696 "ds2_lexer.lpp" return OROREQU; YY_BREAK case 211: YY_RULE_SETUP -#line 696 "ds2_lexer.lpp" +#line 697 "ds2_lexer.lpp" return XORXOREQU; YY_BREAK case 212: YY_RULE_SETUP -#line 697 "ds2_lexer.lpp" +#line 698 "ds2_lexer.lpp" return ANDAND; YY_BREAK case 213: YY_RULE_SETUP -#line 698 "ds2_lexer.lpp" +#line 699 "ds2_lexer.lpp" return OROR; YY_BREAK case 214: YY_RULE_SETUP -#line 699 "ds2_lexer.lpp" +#line 700 "ds2_lexer.lpp" return XORXOR; YY_BREAK case 215: YY_RULE_SETUP -#line 700 "ds2_lexer.lpp" +#line 701 "ds2_lexer.lpp" return ANDEQU; YY_BREAK case 216: YY_RULE_SETUP -#line 701 "ds2_lexer.lpp" +#line 702 "ds2_lexer.lpp" return OREQU; YY_BREAK case 217: YY_RULE_SETUP -#line 702 "ds2_lexer.lpp" +#line 703 "ds2_lexer.lpp" return XOREQU; YY_BREAK case 218: YY_RULE_SETUP -#line 703 "ds2_lexer.lpp" +#line 704 "ds2_lexer.lpp" return ADDADD; YY_BREAK case 219: YY_RULE_SETUP -#line 704 "ds2_lexer.lpp" +#line 705 "ds2_lexer.lpp" return SUBSUB; YY_BREAK case 220: YY_RULE_SETUP -#line 705 "ds2_lexer.lpp" +#line 706 "ds2_lexer.lpp" return LEEQU; YY_BREAK case 221: YY_RULE_SETUP -#line 706 "ds2_lexer.lpp" +#line 707 "ds2_lexer.lpp" return GREQU; YY_BREAK case 222: YY_RULE_SETUP -#line 707 "ds2_lexer.lpp" +#line 708 "ds2_lexer.lpp" return EQUEQU; YY_BREAK case 223: YY_RULE_SETUP -#line 708 "ds2_lexer.lpp" +#line 709 "ds2_lexer.lpp" return NOTEQU; YY_BREAK case 224: YY_RULE_SETUP -#line 709 "ds2_lexer.lpp" +#line 710 "ds2_lexer.lpp" { if ( yyextra->das_arrow_depth ) { unput('>'); @@ -3137,7 +3138,7 @@ YY_RULE_SETUP YY_BREAK case 225: YY_RULE_SETUP -#line 719 "ds2_lexer.lpp" +#line 720 "ds2_lexer.lpp" { if ( yyextra->das_arrow_depth ) { unput('>'); @@ -3150,48 +3151,48 @@ YY_RULE_SETUP YY_BREAK case 226: YY_RULE_SETUP -#line 728 "ds2_lexer.lpp" +#line 729 "ds2_lexer.lpp" return ROTL; YY_BREAK case 227: YY_RULE_SETUP -#line 729 "ds2_lexer.lpp" +#line 730 "ds2_lexer.lpp" return SHL; YY_BREAK case 228: YY_RULE_SETUP -#line 730 "ds2_lexer.lpp" +#line 731 "ds2_lexer.lpp" return SHREQU; YY_BREAK case 229: YY_RULE_SETUP -#line 731 "ds2_lexer.lpp" +#line 732 "ds2_lexer.lpp" return SHLEQU; YY_BREAK case 230: YY_RULE_SETUP -#line 732 "ds2_lexer.lpp" +#line 733 "ds2_lexer.lpp" return ROTREQU; YY_BREAK case 231: YY_RULE_SETUP -#line 733 "ds2_lexer.lpp" +#line 734 "ds2_lexer.lpp" return ROTLEQU; YY_BREAK case 232: YY_RULE_SETUP -#line 734 "ds2_lexer.lpp" +#line 735 "ds2_lexer.lpp" return MAPTO; YY_BREAK case 233: YY_RULE_SETUP -#line 735 "ds2_lexer.lpp" +#line 736 "ds2_lexer.lpp" /* skip white space */ YY_BREAK case 234: /* rule 234 can match eol */ YY_RULE_SETUP -#line 737 "ds2_lexer.lpp" +#line 738 "ds2_lexer.lpp" { YYCOLUMN(yyextra->das_yycolumn = 0, "NEW LINE (with line break)"); } @@ -3199,7 +3200,7 @@ YY_RULE_SETUP case 235: /* rule 235 can match eol */ YY_RULE_SETUP -#line 740 "ds2_lexer.lpp" +#line 741 "ds2_lexer.lpp" { YYCOLUMN(yyextra->das_yycolumn = 0, "NEW LINE (with tail end)"); das_accept_cpp_comment(yyextra->g_CommentReaders, yyscanner, *yylloc_param, yytext); @@ -3221,9 +3222,21 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(normal): -#line 759 "ds2_lexer.lpp" +#line 760 "ds2_lexer.lpp" { if ( yyextra->g_FileAccessStack.size()==1 ) { + if ( !yyextra->das_keyword + && !yyextra->das_nested_parentheses + && !yyextra->das_nested_square_braces ) { + // synthesize the trailing newline-emission for files that lack a + // final '\n', so top-level statements terminated by SEMICOLON + // (options X, require X, expect X, top-level reader macros) parse + // even when sitting at EOF. Switching to eof_done makes the next + // EOF re-entry a no-op return-0 — same trick gen1 uses via + // BEGIN(indent) at ds_lexer.lpp:1106. + BEGIN(eof_done); + return yyextra->das_indent_char; + } YYCOLUMN(yyextra->das_yycolumn = 0,"EOF"); return 0; } else { @@ -3234,17 +3247,21 @@ case YY_STATE_EOF(normal): } } YY_BREAK +case YY_STATE_EOF(eof_done): +#line 783 "ds2_lexer.lpp" +{ YYCOLUMN(yyextra->das_yycolumn = 0,"EOF"); return 0; } + YY_BREAK case 236: YY_RULE_SETUP -#line 770 "ds2_lexer.lpp" +#line 784 "ds2_lexer.lpp" return *yytext; YY_BREAK case 237: YY_RULE_SETUP -#line 772 "ds2_lexer.lpp" +#line 786 "ds2_lexer.lpp" ECHO; YY_BREAK -#line 3247 "ds2_lexer.cpp" +#line 3264 "ds2_lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(include): yyterminate(); @@ -3545,7 +3562,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 667 ) + if ( yy_current_state >= 669 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -3574,11 +3591,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 667 ) + if ( yy_current_state >= 669 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 666); + yy_is_jam = (yy_current_state == 668); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -4438,7 +4455,7 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 772 "ds2_lexer.lpp" +#line 786 "ds2_lexer.lpp" void das2_strfmt ( yyscan_t yyscanner ) { diff --git a/src/parser/ds2_lexer.lpp b/src/parser/ds2_lexer.lpp index 5eee11f24..c7e7d5952 100644 --- a/src/parser/ds2_lexer.lpp +++ b/src/parser/ds2_lexer.lpp @@ -73,6 +73,7 @@ void das_accept_cpp_comment ( vector & crdi, yyscan_t scanner, %x cpp_comment %x include %x reader +%x eof_done %% @@ -758,6 +759,18 @@ void das_accept_cpp_comment ( vector & crdi, yyscan_t scanner, } <> { if ( yyextra->g_FileAccessStack.size()==1 ) { + if ( !yyextra->das_keyword + && !yyextra->das_nested_parentheses + && !yyextra->das_nested_square_braces ) { + // synthesize the trailing newline-emission for files that lack a + // final '\n', so top-level statements terminated by SEMICOLON + // (options X, require X, expect X, top-level reader macros) parse + // even when sitting at EOF. Switching to eof_done makes the next + // EOF re-entry a no-op return-0 — same trick gen1 uses via + // BEGIN(indent) at ds_lexer.lpp:1106. + BEGIN(eof_done); + return yyextra->das_indent_char; + } YYCOLUMN(yyextra->das_yycolumn = 0,"EOF"); return 0; } else { @@ -767,6 +780,7 @@ void das_accept_cpp_comment ( vector & crdi, yyscan_t scanner, yyextra->das_line_no.pop_back(); } } +<> { YYCOLUMN(yyextra->das_yycolumn = 0,"EOF"); return 0; } . return *yytext; %% diff --git a/src/parser/lex2.yy.h b/src/parser/lex2.yy.h index d189ddda6..64dbe1ebb 100644 --- a/src/parser/lex2.yy.h +++ b/src/parser/lex2.yy.h @@ -452,6 +452,7 @@ void yyfree ( void * , yyscan_t yyscanner ); #define cpp_comment 5 #define include 6 #define reader 7 +#define eof_done 8 #endif @@ -719,9 +720,9 @@ extern int yylex \ #undef yyTABLES_NAME #endif -#line 772 "ds2_lexer.lpp" +#line 786 "ds2_lexer.lpp" -#line 725 "lex2.yy.h" +#line 726 "lex2.yy.h" #undef das2_yyIN_HEADER #endif /* das2_yyHEADER_H */ diff --git a/tests-cpp/small/test_eof_no_newline.cpp b/tests-cpp/small/test_eof_no_newline.cpp new file mode 100644 index 000000000..3d21399bf --- /dev/null +++ b/tests-cpp/small/test_eof_no_newline.cpp @@ -0,0 +1,39 @@ +#include + +#include "daScript/daScript.h" + +using namespace das; + +namespace { + +static ProgramPtr compileLiteral(const char * src, uint32_t len) { + TextPrinter tout; + ModuleGroup dummyLibGroup; + auto fAccess = make_smart(); + const string name = "eof_no_newline_test.das"; + fAccess->setFileInfo(name, make_unique(src, len, /*own*/false)); + return compileDaScript(name, fAccess, tout, dummyLibGroup); +} + +} // namespace + +TEST_CASE("gen2: top-level statement at EOF without trailing newline") { + SUBCASE("options X at EOF, no trailing newline") { + static const char src[] = "options gen2\noptions no_aot"; + auto p = compileLiteral(src, uint32_t(sizeof(src) - 1)); + REQUIRE(p); + CHECK_FALSE(p->failed()); + } + SUBCASE("require X at EOF, no trailing newline") { + static const char src[] = "options gen2\nrequire daslib/strings_boost"; + auto p = compileLiteral(src, uint32_t(sizeof(src) - 1)); + REQUIRE(p); + CHECK_FALSE(p->failed()); + } + SUBCASE("control: trailing newline still parses (no double-emit regression)") { + static const char src[] = "options gen2\noptions no_aot\n"; + auto p = compileLiteral(src, uint32_t(sizeof(src) - 1)); + REQUIRE(p); + CHECK_FALSE(p->failed()); + } +} From ecfa06ae388bf521b095ab533449fb56cb3baf5f Mon Sep 17 00:00:00 2001 From: Boris Batkin Date: Wed, 13 May 2026 23:33:20 -0700 Subject: [PATCH 3/5] doc/css: cover das domain in dark theme, dim return type & field labels `.rst-content dl.py dt, dl.c dt, dl.cpp dt, dl.rst dt` did not cover the custom `das` Sphinx domain, so signature boxes on stdlib pages rendered with sphinx_rtd_theme's white default. Switch to the domain-agnostic `dt.sig-object` selector (every Sphinx 4+ directive signature carries that class) and add inner-span rules so the function name picks up --amber and params/return type sit at --fg-dim instead of inheriting sphinx_rtd_theme's dark-blue. Field-list label and bold param names drop one notch via a new --fg-soft token (halfway between --fg and --fg-dim) so "Arguments:" / parameter names don't read as a wall of white in long type signatures. --- doc/source/_static/custom.css | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/doc/source/_static/custom.css b/doc/source/_static/custom.css index beb90e8b0..28db94349 100644 --- a/doc/source/_static/custom.css +++ b/doc/source/_static/custom.css @@ -15,6 +15,7 @@ --bg-2: #15130f; --bg-3: #1c1a14; --fg: #e8e2d2; + --fg-soft: #c1baa9; --fg-dim: #9b9281; --fg-faint: #5b5547; --rule: #2a2620; @@ -264,17 +265,37 @@ a:hover { color: var(--fg) !important; border-bottom-color: var(--fg) !important text-transform: uppercase; } -/* Domain signatures (function/class/etc. directives) */ -.rst-content dl.py dt, -.rst-content dl.c dt, -.rst-content dl.cpp dt, -.rst-content dl.rst dt { +/* Domain signatures (function/class/etc. directives). + * Sphinx 4+ tags every directive signature dt with `sig sig-object DOMAIN`, + * so one selector covers py/c/cpp/rst plus the custom `das` domain. */ +.rst-content dt.sig-object { background: var(--bg-2) !important; border: 1px solid var(--rule) !important; border-radius: 4px; - color: var(--fg); + color: var(--fg) !important; font-family: var(--font-mono); } +/* Signature inner spans — sphinx_rtd_theme paints them dark-blue/black on + * white by default, which is unreadable on the dark background. Map them + * onto the same palette the code-block highlighter uses. */ +.rst-content dt.sig-object .sig-name, +.rst-content dt.sig-object .sig-name.descname { color: var(--amber) !important; } +.rst-content dt.sig-object .sig-prename, +.rst-content dt.sig-object .sig-prename.descclassname { color: var(--fg-dim) !important; } +.rst-content dt.sig-object .sig-paren, +.rst-content dt.sig-object .sig-param, +.rst-content dt.sig-object .sig-param .n, +.rst-content dt.sig-object .sig-param .pre, +.rst-content dt.sig-object .sig-return, +/* daslang return type renders as bare .pre direct-children of dt, outside + * any sig-return wrapper — dim those too. */ +.rst-content dt.sig-object > .pre { color: var(--fg-dim) !important; } + +/* Field lists (Arguments:, Returns:, etc.). The "Arguments:" label and the + * bold parameter names sit at full --fg by default, which reads as a wall + * of white in long type signatures — recess them one notch toward grey. */ +.rst-content dl.field-list > dt, +.rst-content dl.field-list strong { color: var(--fg-soft) !important; } /* Footer */ .rst-footer-buttons .btn { From 3e30dabf7dff60baf60a0653967fe9b7cd19b686 Mon Sep 17 00:00:00 2001 From: Boris Batkin Date: Thu, 14 May 2026 00:09:08 -0700 Subject: [PATCH 4/5] site: fix install snippet, add playground link, wire playground URL history MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - index.html / downloads.html: replace bogus `daslang run hello.das` with `daslang hello.das` (no `run` subcommand), swap the AOT block for JIT (`-jit hello.das`) since that's the real "native speed" knob without a C++ build step, and wrap the releases URL in an `` so it's clickable. - Build-from-source tab: fix the binary path (`./build/daslang`, not `./bin/daslang` — single-config Make/Ninja lands the binary in `build/`), use `cmake -B build -S . -DCMAKE_BUILD_TYPE=Release` + parallel `-j 8`, and drop the leftover `run` from the run line. - Top nav: add a `playground` link after `community` in both index.html and downloads.html. - Visible "daScript" labels → "daslang" (the URLs themselves still point at the real `/daScript` repo so the links work; copy-paste commands keep the real URL too, and the SEO `` keeps the legacy term). - forge.css: `white-space: nowrap` on `.forge-stat__n` so the hero stats "interp · AOT · JIT" and "embed · standalone" no longer wrap onto two lines. Playground (web/ui/src/main.js + site/playground/playground-init.js): - `runCode()` now `history.pushState`s the share URL on every Run (skipping no-op pushes when state hasn't changed). The address bar becomes the share link, so users don't have to hunt for the share button before copying. - New `popstate` listener re-runs `applySharedCodeFromHash`, so Browser Back/Forward walks a real history of code changes — each Run is a navigable entry. Co-Authored-By: Claude Opus 4.7 (1M context) --- site/downloads.html | 5 +++-- site/files/forge.css | 2 +- site/index.html | 21 +++++++++++---------- site/playground/playground-init.js | 4 ++++ web/ui/src/main.js | 12 ++++++++++++ 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/site/downloads.html b/site/downloads.html index 881ac8fe0..0955da5f4 100644 --- a/site/downloads.html +++ b/site/downloads.html @@ -29,6 +29,7 @@ downloads blog community + playground
@@ -71,7 +72,7 @@

Pre-built binaries

GitHub Releases. Pick the archive that matches your platform, unzip, add to PATH.

- github.com/GaijinEntertainment/daScript/releases → + github.com/GaijinEntertainment/daslang/releases →
@@ -82,7 +83,7 @@

Pre-built binaries

all tags
diff --git a/site/files/forge.css b/site/files/forge.css index b4be17329..04d64ea13 100644 --- a/site/files/forge.css +++ b/site/files/forge.css @@ -240,7 +240,7 @@ button { font: inherit; border: 0; background: none; color: inherit; cursor: poi font-family: var(--font-mono); font-size: 12px; } -.forge-stat__n { color: var(--fg); font-size: 22px; } +.forge-stat__n { color: var(--fg); font-size: 22px; white-space: nowrap; } .forge-stat__l { color: var(--fg-faint); margin-top: 2px; } /* ───── Terminal / code panel (hero right column) ───── */ diff --git a/site/index.html b/site/index.html index c74744017..c8ee5fbec 100644 --- a/site/index.html +++ b/site/index.html @@ -40,6 +40,7 @@ downloads blog community + playground
@@ -118,7 +119,7 @@

} }
-
$ daslang run hello.das
+
$ daslang hello.das
hello, world
tick 0 · tick 1 · tick 2
✓ 0.42 ms · interpreted
@@ -262,7 +263,7 @@

Grab a release. Or build from source.

build straight from the repo. AOT compiles to a single C++ stub you link with your host.

- github.com/GaijinEntertainment/daScript → + github.com/GaijinEntertainment/daslang →
@@ -272,26 +273,26 @@

Grab a release. Or build from source.

# 1 — grab a pre-built binary
-
$ open https://github.com/GaijinEntertainment/daScript/releases
+
# pick the archive for your platform, unzip, add to PATH
# 2 — verify it runs
$ daslang --version
-
$ daslang run hello.das
+
$ daslang hello.das
-
# 3 — (optional) AOT to C++ for native speed
-
$ daslang -aot main.das main_aot.cpp
+
# 3 — (optional) JIT to native via LLVM for max speed
+
$ daslang -jit hello.das
# requires CMake ≥ 3.15 and a C++17 compiler
$ git clone https://github.com/GaijinEntertainment/daScript.git daslang
$ cd daslang && git submodule update --init --recursive
-
$ cmake -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo
-
$ cmake --build build --target daslang --config RelWithDebInfo
+
$ cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
+
$ cmake --build build --config Release -j 8
-
# the binary lands in ./bin/daslang
-
$ ./bin/daslang run hello.das
+
# the binary lands in ./build/daslang
+
$ ./build/daslang hello.das
diff --git a/site/playground/playground-init.js b/site/playground/playground-init.js index a1a806d0b..0abbdf48a 100644 --- a/site/playground/playground-init.js +++ b/site/playground/playground-init.js @@ -65,3 +65,7 @@ if (document.readyState === 'loading') { } else { applySharedCodeFromHash(); } + +// Run (in main.js) pushes a new history entry on each invocation; popstate +// fires when the user navigates Back/Forward and replays the recorded state. +window.addEventListener('popstate', applySharedCodeFromHash); diff --git a/web/ui/src/main.js b/web/ui/src/main.js index 02ae1f2ef..3aad10797 100644 --- a/web/ui/src/main.js +++ b/web/ui/src/main.js @@ -111,6 +111,16 @@ loadSample = function(filesByName) { // executed program no longer matches the visible tab state. var __lastWrittenFiles = new Set(); +// Sync the URL hash with the current playground state. Run is the natural +// "snapshot" moment — the address bar then IS the share link (no need to hunt +// for the share button), and Back/Forward navigate a real history of code +// changes (see the popstate listener in playground-init.js). +function syncUrlToState() { + if (!window.pgBuildShareUrl) return; + const url = window.pgBuildShareUrl(); + if (url && url !== location.href) history.pushState(null, '', url); +} + runCode = function() { // Multi-file: sync MEMFS with the current pgState (unlink stale, write // current), then run main.das. Falls back to the single-buffer path when @@ -126,9 +136,11 @@ runCode = function() { FS.writeFile(name, doc.getValue()); } __lastWrittenFiles = current; + syncUrlToState(); Module.callMain(['main.das']); return; } + syncUrlToState(); runScript(code.getValue()); } From 4fdf6d1c491451708487e423e0816977b9fd0b22 Mon Sep 17 00:00:00 2001 From: Boris Batkin Date: Thu, 14 May 2026 00:20:50 -0700 Subject: [PATCH 5/5] cli: add --version / -version flag Prints daslang version (MAJOR.MINOR.PATCH from platform.h) and exits 0. The version string was already shown as the first line of `daslang` no-args help, but there was no way to query it programmatically without parsing help output or pulling the binary's strings. Co-Authored-By: Claude Opus 4.7 (1M context) --- utils/daScript/main.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils/daScript/main.cpp b/utils/daScript/main.cpp index 36040fb5a..cc4f387df 100644 --- a/utils/daScript/main.cpp +++ b/utils/daScript/main.cpp @@ -408,6 +408,7 @@ void print_help() { tout << "daslang version " << DAS_VERSION_MAJOR << "." << DAS_VERSION_MINOR << "." << DAS_VERSION_PATCH << "\n" << "daslang scriptName1 {scriptName2} .. {-main mainFnName} {-log} {-pause} -- {script arguments}\n" + << " --version, -version print daslang version and exit\n" << " -main set entry function name (default: main)\n" << " -v2syntax enable version 2 syntax (uses braces {} for code blocks) [default]\n" << " -v1syntax enable version 1 syntax (uses Python-style indentation for code blocks)\n" @@ -490,6 +491,10 @@ int MAIN_FUNC_NAME ( int argc, char * argv[] ) { return das_aot_main(argc, argv); } use_utf8(); + if ( argc==2 && (strcmp(argv[1],"--version")==0 || strcmp(argv[1],"-version")==0) ) { + tout << DAS_VERSION_MAJOR << "." << DAS_VERSION_MINOR << "." << DAS_VERSION_PATCH << "\n"; + return 0; + } if ( argc<=1 ) { print_help(); return -1;