From 6cc247cd748e7f96415e22992dce6b7864f12d5c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:36:14 +0200 Subject: [PATCH 001/257] Reverted version of ts-node back to 9.1.1 --- package.json | 2 +- pnpm-lock.yaml | 103 ++++++++++--------------------------------------- 2 files changed, 22 insertions(+), 83 deletions(-) diff --git a/package.json b/package.json index e5a4b3ee3..41843b4dc 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "size-limit": "8.2.4", "source-map-support": "0.5.21", "ts-mocha": "10.0.0", - "ts-node": "10.9.1", + "ts-node": "9.1.1", "tsify": "5.0.4", "uglify-js": "3.17.4", "uuid": "9.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7bf52185e..37911b6a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,7 +18,6 @@ specifiers: antlr4ts-cli: 0.5.0-alpha.4 browserify: 17.0.0 chai: 4.3.6 - coverage-badge-creator: 1.0.15 eslint: 8.32.0 json-parse-even-better-errors: 3.0.0 minimist: 1.2.7 @@ -30,7 +29,7 @@ specifiers: size-limit: 8.2.4 source-map-support: 0.5.21 ts-mocha: 10.0.0 - ts-node: 10.9.1 + ts-node: 9.1.1 tsify: 5.0.4 tslib: ~2.4.1 typescript: 4.9.4 @@ -59,7 +58,6 @@ devDependencies: antlr4ts-cli: 0.5.0-alpha.4 browserify: 17.0.0 chai: 4.3.6 - coverage-badge-creator: 1.0.15 eslint: 8.32.0 json-parse-even-better-errors: 3.0.0 minimist: 1.2.7 @@ -71,7 +69,7 @@ devDependencies: size-limit: 8.2.4 source-map-support: 0.5.21 ts-mocha: 10.0.0_mocha@10.2.0 - ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq + ts-node: 9.1.1_typescript@4.9.4 tsify: 5.0.4_g4eddkh7z3uakxvcfln5bjmn3m typescript: 4.9.4 uglify-js: 3.17.4 @@ -281,13 +279,6 @@ packages: to-fast-properties: 2.0.0 dev: true - /@cspotcode/source-map-support/0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@eslint/eslintrc/1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -396,13 +387,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping/0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -548,22 +532,6 @@ packages: - webpack-cli dev: true - /@tsconfig/node10/1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - - /@tsconfig/node12/1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14/1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16/1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true - /@types/chai/4.3.0: resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} dev: true @@ -910,11 +878,6 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn-walk/8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} @@ -1552,11 +1515,6 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /coverage-badge-creator/1.0.15: - resolution: {integrity: sha512-J6D3ZXJt2JfhBX8klkFGg+NbE9zYkfRsesWOB2+Pt7udCr7g1KBrSkG1P9WyZfiBrEb2pILmLgw9fXVlIHiIog==} - hasBin: true - dev: true - /create-ecdh/4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: @@ -2051,7 +2009,7 @@ packages: dev: true /fast-levenshtein/2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} dependencies: fastest-levenshtein: 1.0.16 dev: true @@ -3788,8 +3746,8 @@ packages: dev: true /strip-bom/3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, tarball: strip-bom/-/strip-bom-3.0.0.tgz} + engines: {node: '>=0.10.0'} dependencies: is-utf8: 0.2.1 dev: true @@ -3983,37 +3941,6 @@ packages: tsconfig-paths: 3.14.1 dev: true - /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.11.18 - acorn: 8.8.1 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.4 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /ts-node/7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} @@ -4029,6 +3956,22 @@ packages: yn: 2.0.0 dev: true + /ts-node/9.1.1_typescript@4.9.4: + resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} + engines: {node: '>=10.0.0'} + hasBin: true + peerDependencies: + typescript: '>=2.7' + dependencies: + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + source-map-support: 0.5.21 + typescript: 4.9.4 + yn: 3.1.1 + dev: true + /tsconfig-paths/3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} requiresBuild: true @@ -4218,10 +4161,6 @@ packages: hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - /vm-browserify/1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true From 48ec9af75aa71966522f487733bc8378c0a86a29 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:37:30 +0200 Subject: [PATCH 002/257] Removed usually redundant build in package.json when generating the antlr4 parser This is due to the fact generating the parser should be preferably done on the root level, as the lexer and parser are usually also referenced in other packages --- kipper/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kipper/core/package.json b/kipper/core/package.json index 7272fd96f..fdd172da6 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -64,7 +64,7 @@ "build": "tsc", "version": "pnpm version", "antlr4ts": "antlr4ts -visitor -o ./src/compiler/parser/antlr ./KipperLexer.g4 ./KipperParser.g4", - "postantlr4ts": "pnpm run build && run-script-os", + "postantlr4ts": "run-script-os", "postantlr4ts:linux:macos:default": "cp ./src/compiler/parser/antlr/*.interp ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./", "postantlr4ts:windows": "copy .\\src\\compiler\\parser\\antlr\\*.interp .\\lib\\compiler\\parser\\antlr\\ /Y && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\lib\\compiler\\parser\\antlr\\ && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\", "lint": "pnpm run tslint", From 97eea04c973a6784899df38918142cd8e769f9e5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:37:53 +0200 Subject: [PATCH 003/257] Cleaned up tests and removed unneeded imports --- .../semantic-errors/identifier-already-used-by-variable.ts | 2 +- .../semantic-errors/identifier-already-used-function.ts | 2 +- .../semantic-errors/incomplete-returns-in-code-paths.ts | 4 ++-- test/module/core/errors/semantic-errors/invalid-assignment.ts | 2 +- .../errors/semantic-errors/invalid-relational-comparison.ts | 2 +- test/module/core/errors/syntax-errors/syntax-error.ts | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts b/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts index e00a7395f..cf72c206b 100644 --- a/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts +++ b/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts @@ -1,4 +1,4 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler, KipperError } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/identifier-already-used-function.ts b/test/module/core/errors/semantic-errors/identifier-already-used-function.ts index 78dc1b1c9..7d1997828 100644 --- a/test/module/core/errors/semantic-errors/identifier-already-used-function.ts +++ b/test/module/core/errors/semantic-errors/identifier-already-used-function.ts @@ -1,4 +1,4 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler, KipperError } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts b/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts index 793e97428..65a4dd66c 100644 --- a/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts +++ b/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts @@ -1,5 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; -import { defaultConfig, ensureErrorWasReported, ensureTracebackDataExists } from "../index"; +import { KipperCompiler, KipperError } from "@kipper/core"; +import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; describe("IncompleteReturnsInCodePathsError", () => { diff --git a/test/module/core/errors/semantic-errors/invalid-assignment.ts b/test/module/core/errors/semantic-errors/invalid-assignment.ts index 95a7d7fee..b88c078c4 100644 --- a/test/module/core/errors/semantic-errors/invalid-assignment.ts +++ b/test/module/core/errors/semantic-errors/invalid-assignment.ts @@ -1,5 +1,5 @@ import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; -import { defaultConfig, defaultTarget, ensureErrorWasReported, ensureTracebackDataExists } from "../index"; +import { defaultConfig, defaultTarget, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; describe("InvalidAssignmentError", () => { diff --git a/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts b/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts index bb462be68..bb239b323 100644 --- a/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts +++ b/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts @@ -1,5 +1,5 @@ import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; -import { defaultConfig, ensureErrorWasReported, ensureTracebackDataExists } from "../index"; +import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; describe("InvalidRelationalComparisonTypeError", () => { diff --git a/test/module/core/errors/syntax-errors/syntax-error.ts b/test/module/core/errors/syntax-errors/syntax-error.ts index 0da62fde0..758b411e9 100644 --- a/test/module/core/errors/syntax-errors/syntax-error.ts +++ b/test/module/core/errors/syntax-errors/syntax-error.ts @@ -1,4 +1,4 @@ -import { KipperCompiler, KipperCompileResult, KipperError, LexerOrParserSyntaxError } from "@kipper/core"; +import { KipperCompiler, KipperError, LexerOrParserSyntaxError } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; From ebe1c8d61eb84989f07c3b0f3c42f89b3ea9c67a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:38:10 +0200 Subject: [PATCH 004/257] Re-gen of pnpm-lock.yaml --- kipper/cli/pnpm-lock.yaml | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 7798287de..96ae23996 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -160,7 +160,6 @@ packages: treeverse: 1.0.4 walk-up-path: 1.0.0 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -190,8 +189,6 @@ packages: promise-retry: 2.0.1 semver: 7.3.8 which: 2.0.2 - transitivePeerDependencies: - - bluebird dev: true /@npmcli/installed-package-contents/1.0.7: @@ -222,7 +219,6 @@ packages: pacote: 12.0.3 semver: 7.3.8 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -272,7 +268,6 @@ packages: node-gyp: 8.4.1 read-package-json-fast: 2.0.3 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -1037,8 +1032,6 @@ packages: ssri: 8.0.1 tar: 6.1.13 unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird dev: true /cacache/16.1.3: @@ -1063,8 +1056,6 @@ packages: ssri: 9.0.1 tar: 6.1.13 unique-filename: 2.0.1 - transitivePeerDependencies: - - bluebird dev: true /cacheable-lookup/5.0.4: @@ -2307,7 +2298,6 @@ packages: socks-proxy-agent: 7.0.0 ssri: 9.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -2332,7 +2322,6 @@ packages: socks-proxy-agent: 6.2.1 ssri: 8.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -2578,7 +2567,6 @@ packages: tar: 6.1.13 which: 2.0.2 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -2681,7 +2669,6 @@ packages: minizlib: 2.1.2 npm-package-arg: 8.1.5 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -2749,7 +2736,6 @@ packages: yeoman-generator: 5.7.0_yeoman-environment@3.13.0 yosay: 2.0.2 transitivePeerDependencies: - - bluebird - encoding - supports-color dev: true @@ -2887,7 +2873,6 @@ packages: ssri: 8.0.1 tar: 6.1.13 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -3008,11 +2993,6 @@ packages: /promise-inflight/1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true dev: true /promise-retry/2.0.1: @@ -3477,8 +3457,8 @@ packages: dev: true /strip-bom/3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, tarball: strip-bom/-/strip-bom-3.0.0.tgz} + engines: {node: '>=0.10.0'} dependencies: is-utf8: 0.2.1 dev: true @@ -3950,7 +3930,6 @@ packages: textextensions: 5.15.0 untildify: 4.0.0 transitivePeerDependencies: - - bluebird - supports-color dev: true From ce5a727a3ce62de1a1ee6cf9a52fdf517a5a69d9 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:38:17 +0200 Subject: [PATCH 005/257] Prettified README.md --- kipper/cli/README.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 02248080b..a667e1cc6 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -21,9 +21,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/cli)](https://packagephobia.com/result?p=@kipper/cli) -* [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -38,6 +39,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -49,16 +51,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -187,6 +191,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/version.ts)_ + ## Copyright and License From dd619223fa7e464241dff55009ddfa5c4ccd07aa Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:40:52 +0200 Subject: [PATCH 006/257] Implemented syntax for f-strings The update for the lexer syntax also includes the introduction of new parsing modes to support the complex recognition of nested expressions and sub-parts of f-strings --- kipper/core/KipperLexer.g4 | 109 +- kipper/core/KipperLexer.tokens | 254 +- kipper/core/KipperParser.g4 | 13 +- kipper/core/KipperParser.tokens | 254 +- .../compiler/parser/antlr/KipperLexer.interp | 35 +- .../compiler/parser/antlr/KipperLexer.tokens | 254 +- .../src/compiler/parser/antlr/KipperLexer.ts | 864 +++--- .../compiler/parser/antlr/KipperParser.interp | 20 +- .../compiler/parser/antlr/KipperParser.tokens | 254 +- .../src/compiler/parser/antlr/KipperParser.ts | 2375 ++++++++++------- .../parser/antlr/KipperParserListener.ts | 24 + .../parser/antlr/KipperParserVisitor.ts | 16 + .../parser/antlr/base/KipperLexerBase.ts | 29 + 13 files changed, 2601 insertions(+), 1900 deletions(-) create mode 100644 kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts diff --git a/kipper/core/KipperLexer.g4 b/kipper/core/KipperLexer.g4 index 18c3f1745..0c61f0830 100644 --- a/kipper/core/KipperLexer.g4 +++ b/kipper/core/KipperLexer.g4 @@ -5,15 +5,25 @@ lexer grammar KipperLexer; channels { - // Channel for all types of comments - COMMENT + COMMENT // Channel for all types of comments +} + +tokens { + FStringExpStart +} + +options { + superClass=KipperLexerBase; +} + +@lexer::header { + import KipperLexerBase from "./base/KipperLexerBase"; } -// Comments are at the lowest priority of lexing BlockComment - : '/*' .*? '*/' + : '/*' .*? '*/' -> channel(COMMENT) - ; + ; LineComment : '//' ~[\r\n\u2028\u2029]* @@ -82,6 +92,12 @@ LeftParen : '('; RightParen : ')'; LeftBracket : '['; RightBracket : ']'; + +// FString Literal Braces - End Brace should trigger popMode as we go back to the FSTRING mode +// This lexer rule should only be invoked when inside a FString literal +FStringExpEnd : {this.insideFString()}? '}' -> popMode; + +// General braces LeftBrace : '{'; RightBrace : '}'; @@ -130,14 +146,6 @@ IntegerConstant | BinaryConstant ; -SingleQuoteFStringLiteral - : 'f\'' SingleQuoteSCharSequence? '\'' - ; - -DoubleQuoteFStringLiteral - : 'f"' DoubleQuoteSCharSequence? '"' - ; - SingleQuoteStringLiteral : '\'' SingleQuoteSCharSequence? '\'' ; @@ -150,17 +158,47 @@ FloatingConstant : DecimalFloatingConstant ; -Whitespace - : [\t\u000B\u000C\u0020\u00A0]+ - -> channel(HIDDEN) - ; +// Whitespaces and newlines are always hidden, so they are not included in the parsing process but still visible +Whitespace : [\t\u000B\u000C\u0020\u00A0]+ -> channel(HIDDEN); +Newline : [\r\n\u2028\u2029] -> channel(HIDDEN); -Newline - : [\r\n\u2028\u2029] - -> channel(HIDDEN) - ; +// FString Start Quotes - Will change the mode to one of the FString modes +FStringSingleQuoteStart : 'f\'' {this.incrementFStringDepth()} -> pushMode(SINGLE_QUOTE_FSTRING); +FStringDoubleQuoteStart : 'f"' {this.incrementFStringDepth()} -> pushMode(DOUBLE_QUOTE_FSTRING); + +// ---------------------------------------------------- +// Special FString mode for single quotes +// ---------------------------------------------------- +mode SINGLE_QUOTE_FSTRING; + +// Push to the default mode to allow for expression parsing +FStringSingleQuoteExpStart : {this.insideFString()}? '{' -> type(FStringExpStart), pushMode(DEFAULT_MODE); + +// Pop the FString mode when the end of the FString literal is reached +// -> we go back to the previous mode (usually DEFAULT_MODE) +FStringSingleQuoteEnd : '\'' {this.decrementFStringDepth()} -> popMode; -// Fragment rules for the lexer +// FString Atom - Text between the braces +FStringSingleQuoteAtom : SingleQuoteFStringSCharSequence; + +// ---------------------------------------------------- +// Special FString mode for double quotes +// ---------------------------------------------------- +mode DOUBLE_QUOTE_FSTRING; + +// Push to the default mode to allow for expression parsing +FStringDoubleQuoteExpStart : {this.insideFString()}? '{' -> type(FStringExpStart), pushMode(DEFAULT_MODE); + +// Pop the FString mode when the end of the FString literal is reached +// -> we go back to the previous mode (usually DEFAULT_MODE) +FStringDoubleQuoteEnd : '"' {this.decrementFStringDepth()} -> popMode; + +// FString Atom - Text between the braces +FStringDoubleQuoteAtom : DoubleQuoteFStringSCharSequence; + +// ---------------------------------------------------- +// Fragment rules for the lexer - Not in any mode +// ---------------------------------------------------- fragment IdentifierNondigit : Nondigit @@ -263,7 +301,7 @@ EscapeSequence fragment SimpleEscapeSequence - : '\\' ['"?abfnrtv\\] + : '\\' ['"{}?abfnrtv\\] ; fragment @@ -276,6 +314,31 @@ HexadecimalEscapeSequence : '\\x' HexadecimalDigit+ ; +// FString Literal content +fragment +SingleQuoteFStringSCharSequence + : SingleQuoteFStringSChar+ + ; + +fragment +SingleQuoteFStringSChar + : ~['\\\r\n{}] + | EscapeSequence + ; + +fragment +DoubleQuoteFStringSCharSequence + : DoubleQuoteFStringSChar+ + ; + +fragment +DoubleQuoteFStringSChar + : ~["\\\r\n{}] + | EscapeSequence + ; + +// Standard String Literal content + fragment SingleQuoteSCharSequence : SingleQuoteSChar+ diff --git a/kipper/core/KipperLexer.tokens b/kipper/core/KipperLexer.tokens index 4ce00d897..a8e8b39b6 100644 --- a/kipper/core/KipperLexer.tokens +++ b/kipper/core/KipperLexer.tokens @@ -1,129 +1,135 @@ -BlockComment=1 -LineComment=2 -Const=3 -Var=4 -As=5 -Spread=6 -Switch=7 -Case=8 -Default=9 -Break=10 -Continue=11 -Do=12 -While=13 -If=14 -Else=15 -For=16 -Enum=17 -DefFunc=18 -Return=19 -CallFunc=20 -RetIndicator=21 -True=22 -False=23 -Typeof=24 -Void=25 -Null=26 -Undefined=27 -Comma=28 -SemiColon=29 -QuestionMark=30 -Colon=31 -LeftParen=32 -RightParen=33 -LeftBracket=34 -RightBracket=35 -LeftBrace=36 -RightBrace=37 -Plus=38 -PlusPlus=39 -Minus=40 -MinusMinus=41 -Star=42 -Div=43 -Mod=44 -PowerTo=45 -AndAnd=46 -OrOr=47 -Not=48 -Assign=49 -PlusAssign=50 -MinusAssign=51 -StarAssign=52 -DivAssign=53 -ModAssign=54 -Equal=55 -NotEqual=56 -Less=57 -LessEqual=58 -Greater=59 -GreaterEqual=60 -Dot=61 -Identifier=62 -IntegerConstant=63 -SingleQuoteFStringLiteral=64 -DoubleQuoteFStringLiteral=65 +FStringExpStart=1 +BlockComment=2 +LineComment=3 +Const=4 +Var=5 +As=6 +Spread=7 +Switch=8 +Case=9 +Default=10 +Break=11 +Continue=12 +Do=13 +While=14 +If=15 +Else=16 +For=17 +Enum=18 +DefFunc=19 +Return=20 +CallFunc=21 +RetIndicator=22 +True=23 +False=24 +Typeof=25 +Void=26 +Null=27 +Undefined=28 +Comma=29 +SemiColon=30 +QuestionMark=31 +Colon=32 +LeftParen=33 +RightParen=34 +LeftBracket=35 +RightBracket=36 +FStringExpEnd=37 +LeftBrace=38 +RightBrace=39 +Plus=40 +PlusPlus=41 +Minus=42 +MinusMinus=43 +Star=44 +Div=45 +Mod=46 +PowerTo=47 +AndAnd=48 +OrOr=49 +Not=50 +Assign=51 +PlusAssign=52 +MinusAssign=53 +StarAssign=54 +DivAssign=55 +ModAssign=56 +Equal=57 +NotEqual=58 +Less=59 +LessEqual=60 +Greater=61 +GreaterEqual=62 +Dot=63 +Identifier=64 +IntegerConstant=65 SingleQuoteStringLiteral=66 DoubleQuoteStringLiteral=67 FloatingConstant=68 Whitespace=69 Newline=70 -'const'=3 -'var'=4 -'as'=5 -'...'=6 -'switch'=7 -'case'=8 -'default'=9 -'break'=10 -'continue'=11 -'do'=12 -'while'=13 -'if'=14 -'else'=15 -'for'=16 -'enum'=17 -'def'=18 -'return'=19 -'call'=20 -'->'=21 -'true'=22 -'false'=23 -'typeof'=24 -'void'=25 -'null'=26 -'undefined'=27 -','=28 -';'=29 -'?'=30 -':'=31 -'('=32 -')'=33 -'['=34 -']'=35 -'{'=36 -'}'=37 -'+'=38 -'++'=39 -'-'=40 -'--'=41 -'*'=42 -'/'=43 -'%'=44 -'**'=45 -'&&'=46 -'||'=47 -'!'=48 -'='=49 -'+='=50 -'-='=51 -'*='=52 -'/='=53 -'%='=54 -'=='=55 -'!='=56 -'<'=57 -'<='=58 -'>'=59 -'>='=60 -'.'=61 +FStringSingleQuoteStart=71 +FStringDoubleQuoteStart=72 +FStringSingleQuoteEnd=73 +FStringSingleQuoteAtom=74 +FStringDoubleQuoteEnd=75 +FStringDoubleQuoteAtom=76 +'const'=4 +'var'=5 +'as'=6 +'...'=7 +'switch'=8 +'case'=9 +'default'=10 +'break'=11 +'continue'=12 +'do'=13 +'while'=14 +'if'=15 +'else'=16 +'for'=17 +'enum'=18 +'def'=19 +'return'=20 +'call'=21 +'->'=22 +'true'=23 +'false'=24 +'typeof'=25 +'void'=26 +'null'=27 +'undefined'=28 +','=29 +';'=30 +'?'=31 +':'=32 +'('=33 +')'=34 +'['=35 +']'=36 +'{'=38 +'}'=39 +'+'=40 +'++'=41 +'-'=42 +'--'=43 +'*'=44 +'/'=45 +'%'=46 +'**'=47 +'&&'=48 +'||'=49 +'!'=50 +'='=51 +'+='=52 +'-='=53 +'*='=54 +'/='=55 +'%='=56 +'=='=57 +'!='=58 +'<'=59 +'<='=60 +'>'=61 +'>='=62 +'.'=63 diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 5b9017947..104478358 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -182,7 +182,18 @@ stringPrimaryExpression ; fStringPrimaryExpression - : SingleQuoteFStringLiteral | DoubleQuoteFStringLiteral + : FStringSingleQuoteStart fStringSingleQuoteAtom* FStringSingleQuoteEnd + | FStringDoubleQuoteStart fStringDoubleQuoteAtom* FStringDoubleQuoteEnd + ; + +fStringSingleQuoteAtom + : FStringSingleQuoteAtom + | FStringExpStart expression? FStringExpEnd + ; + +fStringDoubleQuoteAtom + : FStringDoubleQuoteAtom + | FStringExpStart expression? FStringExpEnd ; numberPrimaryExpression diff --git a/kipper/core/KipperParser.tokens b/kipper/core/KipperParser.tokens index 4ce00d897..a8e8b39b6 100644 --- a/kipper/core/KipperParser.tokens +++ b/kipper/core/KipperParser.tokens @@ -1,129 +1,135 @@ -BlockComment=1 -LineComment=2 -Const=3 -Var=4 -As=5 -Spread=6 -Switch=7 -Case=8 -Default=9 -Break=10 -Continue=11 -Do=12 -While=13 -If=14 -Else=15 -For=16 -Enum=17 -DefFunc=18 -Return=19 -CallFunc=20 -RetIndicator=21 -True=22 -False=23 -Typeof=24 -Void=25 -Null=26 -Undefined=27 -Comma=28 -SemiColon=29 -QuestionMark=30 -Colon=31 -LeftParen=32 -RightParen=33 -LeftBracket=34 -RightBracket=35 -LeftBrace=36 -RightBrace=37 -Plus=38 -PlusPlus=39 -Minus=40 -MinusMinus=41 -Star=42 -Div=43 -Mod=44 -PowerTo=45 -AndAnd=46 -OrOr=47 -Not=48 -Assign=49 -PlusAssign=50 -MinusAssign=51 -StarAssign=52 -DivAssign=53 -ModAssign=54 -Equal=55 -NotEqual=56 -Less=57 -LessEqual=58 -Greater=59 -GreaterEqual=60 -Dot=61 -Identifier=62 -IntegerConstant=63 -SingleQuoteFStringLiteral=64 -DoubleQuoteFStringLiteral=65 +FStringExpStart=1 +BlockComment=2 +LineComment=3 +Const=4 +Var=5 +As=6 +Spread=7 +Switch=8 +Case=9 +Default=10 +Break=11 +Continue=12 +Do=13 +While=14 +If=15 +Else=16 +For=17 +Enum=18 +DefFunc=19 +Return=20 +CallFunc=21 +RetIndicator=22 +True=23 +False=24 +Typeof=25 +Void=26 +Null=27 +Undefined=28 +Comma=29 +SemiColon=30 +QuestionMark=31 +Colon=32 +LeftParen=33 +RightParen=34 +LeftBracket=35 +RightBracket=36 +FStringExpEnd=37 +LeftBrace=38 +RightBrace=39 +Plus=40 +PlusPlus=41 +Minus=42 +MinusMinus=43 +Star=44 +Div=45 +Mod=46 +PowerTo=47 +AndAnd=48 +OrOr=49 +Not=50 +Assign=51 +PlusAssign=52 +MinusAssign=53 +StarAssign=54 +DivAssign=55 +ModAssign=56 +Equal=57 +NotEqual=58 +Less=59 +LessEqual=60 +Greater=61 +GreaterEqual=62 +Dot=63 +Identifier=64 +IntegerConstant=65 SingleQuoteStringLiteral=66 DoubleQuoteStringLiteral=67 FloatingConstant=68 Whitespace=69 Newline=70 -'const'=3 -'var'=4 -'as'=5 -'...'=6 -'switch'=7 -'case'=8 -'default'=9 -'break'=10 -'continue'=11 -'do'=12 -'while'=13 -'if'=14 -'else'=15 -'for'=16 -'enum'=17 -'def'=18 -'return'=19 -'call'=20 -'->'=21 -'true'=22 -'false'=23 -'typeof'=24 -'void'=25 -'null'=26 -'undefined'=27 -','=28 -';'=29 -'?'=30 -':'=31 -'('=32 -')'=33 -'['=34 -']'=35 -'{'=36 -'}'=37 -'+'=38 -'++'=39 -'-'=40 -'--'=41 -'*'=42 -'/'=43 -'%'=44 -'**'=45 -'&&'=46 -'||'=47 -'!'=48 -'='=49 -'+='=50 -'-='=51 -'*='=52 -'/='=53 -'%='=54 -'=='=55 -'!='=56 -'<'=57 -'<='=58 -'>'=59 -'>='=60 -'.'=61 +FStringSingleQuoteStart=71 +FStringDoubleQuoteStart=72 +FStringSingleQuoteEnd=73 +FStringSingleQuoteAtom=74 +FStringDoubleQuoteEnd=75 +FStringDoubleQuoteAtom=76 +'const'=4 +'var'=5 +'as'=6 +'...'=7 +'switch'=8 +'case'=9 +'default'=10 +'break'=11 +'continue'=12 +'do'=13 +'while'=14 +'if'=15 +'else'=16 +'for'=17 +'enum'=18 +'def'=19 +'return'=20 +'call'=21 +'->'=22 +'true'=23 +'false'=24 +'typeof'=25 +'void'=26 +'null'=27 +'undefined'=28 +','=29 +';'=30 +'?'=31 +':'=32 +'('=33 +')'=34 +'['=35 +']'=36 +'{'=38 +'}'=39 +'+'=40 +'++'=41 +'-'=42 +'--'=43 +'*'=44 +'/'=45 +'%'=46 +'**'=47 +'&&'=48 +'||'=49 +'!'=50 +'='=51 +'+='=52 +'-='=53 +'*='=54 +'/='=55 +'%='=56 +'=='=57 +'!='=58 +'<'=59 +'<='=60 +'>'=61 +'>='=62 +'.'=63 diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.interp b/kipper/core/src/compiler/parser/antlr/KipperLexer.interp index 58e4a6696..c67e06923 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.interp +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.interp @@ -2,6 +2,7 @@ token literal names: null null null +null 'const' 'var' 'as' @@ -35,6 +36,7 @@ null ')' '[' ']' +null '{' '}' '+' @@ -70,9 +72,14 @@ null null null null +null +null +null +null token symbolic names: null +FStringExpStart BlockComment LineComment Const @@ -108,6 +115,7 @@ LeftParen RightParen LeftBracket RightBracket +FStringExpEnd LeftBrace RightBrace Plus @@ -136,13 +144,17 @@ GreaterEqual Dot Identifier IntegerConstant -SingleQuoteFStringLiteral -DoubleQuoteFStringLiteral SingleQuoteStringLiteral DoubleQuoteStringLiteral FloatingConstant Whitespace Newline +FStringSingleQuoteStart +FStringDoubleQuoteStart +FStringSingleQuoteEnd +FStringSingleQuoteAtom +FStringDoubleQuoteEnd +FStringDoubleQuoteAtom rule names: BlockComment @@ -180,6 +192,7 @@ LeftParen RightParen LeftBracket RightBracket +FStringExpEnd LeftBrace RightBrace Plus @@ -208,13 +221,19 @@ GreaterEqual Dot Identifier IntegerConstant -SingleQuoteFStringLiteral -DoubleQuoteFStringLiteral SingleQuoteStringLiteral DoubleQuoteStringLiteral FloatingConstant Whitespace Newline +FStringSingleQuoteStart +FStringDoubleQuoteStart +FStringSingleQuoteExpStart +FStringSingleQuoteEnd +FStringSingleQuoteAtom +FStringDoubleQuoteExpStart +FStringDoubleQuoteEnd +FStringDoubleQuoteAtom IdentifierNondigit Nondigit Digit @@ -237,6 +256,10 @@ EscapeSequence SimpleEscapeSequence OctalEscapeSequence HexadecimalEscapeSequence +SingleQuoteFStringSCharSequence +SingleQuoteFStringSChar +DoubleQuoteFStringSCharSequence +DoubleQuoteFStringSChar SingleQuoteSCharSequence SingleQuoteSChar DoubleQuoteSCharSequence @@ -251,6 +274,8 @@ COMMENT mode names: DEFAULT_MODE +SINGLE_QUOTE_FSTRING +DOUBLE_QUOTE_FSTRING atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 72, 615, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 200, 10, 2, 12, 2, 14, 2, 203, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 214, 10, 3, 12, 3, 14, 3, 217, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 7, 63, 441, 10, 63, 12, 63, 14, 63, 444, 11, 63, 3, 64, 3, 64, 3, 64, 3, 64, 5, 64, 450, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 456, 10, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 464, 10, 66, 3, 66, 3, 66, 3, 67, 3, 67, 5, 67, 470, 10, 67, 3, 67, 3, 67, 3, 68, 3, 68, 5, 68, 476, 10, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 6, 70, 483, 10, 70, 13, 70, 14, 70, 484, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 6, 75, 500, 10, 75, 13, 75, 14, 75, 501, 3, 76, 3, 76, 3, 76, 6, 76, 507, 10, 76, 13, 76, 14, 76, 508, 3, 77, 3, 77, 3, 77, 6, 77, 514, 10, 77, 13, 77, 14, 77, 515, 3, 78, 3, 78, 3, 78, 6, 78, 521, 10, 78, 13, 78, 14, 78, 522, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 5, 83, 535, 10, 83, 3, 83, 3, 83, 3, 83, 5, 83, 540, 10, 83, 3, 84, 5, 84, 543, 10, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 5, 84, 550, 10, 84, 3, 85, 3, 85, 5, 85, 554, 10, 85, 3, 85, 3, 85, 3, 86, 6, 86, 559, 10, 86, 13, 86, 14, 86, 560, 3, 87, 3, 87, 3, 88, 6, 88, 566, 10, 88, 13, 88, 14, 88, 567, 3, 89, 3, 89, 5, 89, 572, 10, 89, 3, 90, 3, 90, 3, 90, 5, 90, 577, 10, 90, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 5, 92, 585, 10, 92, 3, 92, 5, 92, 588, 10, 92, 3, 93, 3, 93, 3, 93, 3, 93, 6, 93, 594, 10, 93, 13, 93, 14, 93, 595, 3, 94, 6, 94, 599, 10, 94, 13, 94, 14, 94, 600, 3, 95, 3, 95, 5, 95, 605, 10, 95, 3, 96, 6, 96, 608, 10, 96, 13, 96, 14, 96, 609, 3, 97, 3, 97, 5, 97, 614, 10, 97, 3, 201, 2, 2, 98, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 2, 145, 2, 2, 147, 2, 2, 149, 2, 2, 151, 2, 2, 153, 2, 2, 155, 2, 2, 157, 2, 2, 159, 2, 2, 161, 2, 2, 163, 2, 2, 165, 2, 2, 167, 2, 2, 169, 2, 2, 171, 2, 2, 173, 2, 2, 175, 2, 2, 177, 2, 2, 179, 2, 2, 181, 2, 2, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 3, 2, 18, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 12, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 621, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 3, 195, 3, 2, 2, 2, 5, 209, 3, 2, 2, 2, 7, 220, 3, 2, 2, 2, 9, 226, 3, 2, 2, 2, 11, 230, 3, 2, 2, 2, 13, 233, 3, 2, 2, 2, 15, 237, 3, 2, 2, 2, 17, 244, 3, 2, 2, 2, 19, 249, 3, 2, 2, 2, 21, 257, 3, 2, 2, 2, 23, 263, 3, 2, 2, 2, 25, 272, 3, 2, 2, 2, 27, 275, 3, 2, 2, 2, 29, 281, 3, 2, 2, 2, 31, 284, 3, 2, 2, 2, 33, 289, 3, 2, 2, 2, 35, 293, 3, 2, 2, 2, 37, 298, 3, 2, 2, 2, 39, 302, 3, 2, 2, 2, 41, 309, 3, 2, 2, 2, 43, 314, 3, 2, 2, 2, 45, 317, 3, 2, 2, 2, 47, 322, 3, 2, 2, 2, 49, 328, 3, 2, 2, 2, 51, 335, 3, 2, 2, 2, 53, 340, 3, 2, 2, 2, 55, 345, 3, 2, 2, 2, 57, 355, 3, 2, 2, 2, 59, 357, 3, 2, 2, 2, 61, 359, 3, 2, 2, 2, 63, 361, 3, 2, 2, 2, 65, 363, 3, 2, 2, 2, 67, 365, 3, 2, 2, 2, 69, 367, 3, 2, 2, 2, 71, 369, 3, 2, 2, 2, 73, 371, 3, 2, 2, 2, 75, 373, 3, 2, 2, 2, 77, 375, 3, 2, 2, 2, 79, 377, 3, 2, 2, 2, 81, 380, 3, 2, 2, 2, 83, 382, 3, 2, 2, 2, 85, 385, 3, 2, 2, 2, 87, 387, 3, 2, 2, 2, 89, 389, 3, 2, 2, 2, 91, 391, 3, 2, 2, 2, 93, 394, 3, 2, 2, 2, 95, 397, 3, 2, 2, 2, 97, 400, 3, 2, 2, 2, 99, 402, 3, 2, 2, 2, 101, 404, 3, 2, 2, 2, 103, 407, 3, 2, 2, 2, 105, 410, 3, 2, 2, 2, 107, 413, 3, 2, 2, 2, 109, 416, 3, 2, 2, 2, 111, 419, 3, 2, 2, 2, 113, 422, 3, 2, 2, 2, 115, 425, 3, 2, 2, 2, 117, 427, 3, 2, 2, 2, 119, 430, 3, 2, 2, 2, 121, 432, 3, 2, 2, 2, 123, 435, 3, 2, 2, 2, 125, 437, 3, 2, 2, 2, 127, 449, 3, 2, 2, 2, 129, 451, 3, 2, 2, 2, 131, 459, 3, 2, 2, 2, 133, 467, 3, 2, 2, 2, 135, 473, 3, 2, 2, 2, 137, 479, 3, 2, 2, 2, 139, 482, 3, 2, 2, 2, 141, 488, 3, 2, 2, 2, 143, 492, 3, 2, 2, 2, 145, 494, 3, 2, 2, 2, 147, 496, 3, 2, 2, 2, 149, 499, 3, 2, 2, 2, 151, 503, 3, 2, 2, 2, 153, 510, 3, 2, 2, 2, 155, 517, 3, 2, 2, 2, 157, 524, 3, 2, 2, 2, 159, 526, 3, 2, 2, 2, 161, 528, 3, 2, 2, 2, 163, 530, 3, 2, 2, 2, 165, 539, 3, 2, 2, 2, 167, 549, 3, 2, 2, 2, 169, 551, 3, 2, 2, 2, 171, 558, 3, 2, 2, 2, 173, 562, 3, 2, 2, 2, 175, 565, 3, 2, 2, 2, 177, 571, 3, 2, 2, 2, 179, 576, 3, 2, 2, 2, 181, 578, 3, 2, 2, 2, 183, 581, 3, 2, 2, 2, 185, 589, 3, 2, 2, 2, 187, 598, 3, 2, 2, 2, 189, 604, 3, 2, 2, 2, 191, 607, 3, 2, 2, 2, 193, 613, 3, 2, 2, 2, 195, 196, 7, 49, 2, 2, 196, 197, 7, 44, 2, 2, 197, 201, 3, 2, 2, 2, 198, 200, 11, 2, 2, 2, 199, 198, 3, 2, 2, 2, 200, 203, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 202, 204, 3, 2, 2, 2, 203, 201, 3, 2, 2, 2, 204, 205, 7, 44, 2, 2, 205, 206, 7, 49, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 8, 2, 2, 2, 208, 4, 3, 2, 2, 2, 209, 210, 7, 49, 2, 2, 210, 211, 7, 49, 2, 2, 211, 215, 3, 2, 2, 2, 212, 214, 10, 2, 2, 2, 213, 212, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 218, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 218, 219, 8, 3, 2, 2, 219, 6, 3, 2, 2, 2, 220, 221, 7, 101, 2, 2, 221, 222, 7, 113, 2, 2, 222, 223, 7, 112, 2, 2, 223, 224, 7, 117, 2, 2, 224, 225, 7, 118, 2, 2, 225, 8, 3, 2, 2, 2, 226, 227, 7, 120, 2, 2, 227, 228, 7, 99, 2, 2, 228, 229, 7, 116, 2, 2, 229, 10, 3, 2, 2, 2, 230, 231, 7, 99, 2, 2, 231, 232, 7, 117, 2, 2, 232, 12, 3, 2, 2, 2, 233, 234, 7, 48, 2, 2, 234, 235, 7, 48, 2, 2, 235, 236, 7, 48, 2, 2, 236, 14, 3, 2, 2, 2, 237, 238, 7, 117, 2, 2, 238, 239, 7, 121, 2, 2, 239, 240, 7, 107, 2, 2, 240, 241, 7, 118, 2, 2, 241, 242, 7, 101, 2, 2, 242, 243, 7, 106, 2, 2, 243, 16, 3, 2, 2, 2, 244, 245, 7, 101, 2, 2, 245, 246, 7, 99, 2, 2, 246, 247, 7, 117, 2, 2, 247, 248, 7, 103, 2, 2, 248, 18, 3, 2, 2, 2, 249, 250, 7, 102, 2, 2, 250, 251, 7, 103, 2, 2, 251, 252, 7, 104, 2, 2, 252, 253, 7, 99, 2, 2, 253, 254, 7, 119, 2, 2, 254, 255, 7, 110, 2, 2, 255, 256, 7, 118, 2, 2, 256, 20, 3, 2, 2, 2, 257, 258, 7, 100, 2, 2, 258, 259, 7, 116, 2, 2, 259, 260, 7, 103, 2, 2, 260, 261, 7, 99, 2, 2, 261, 262, 7, 109, 2, 2, 262, 22, 3, 2, 2, 2, 263, 264, 7, 101, 2, 2, 264, 265, 7, 113, 2, 2, 265, 266, 7, 112, 2, 2, 266, 267, 7, 118, 2, 2, 267, 268, 7, 107, 2, 2, 268, 269, 7, 112, 2, 2, 269, 270, 7, 119, 2, 2, 270, 271, 7, 103, 2, 2, 271, 24, 3, 2, 2, 2, 272, 273, 7, 102, 2, 2, 273, 274, 7, 113, 2, 2, 274, 26, 3, 2, 2, 2, 275, 276, 7, 121, 2, 2, 276, 277, 7, 106, 2, 2, 277, 278, 7, 107, 2, 2, 278, 279, 7, 110, 2, 2, 279, 280, 7, 103, 2, 2, 280, 28, 3, 2, 2, 2, 281, 282, 7, 107, 2, 2, 282, 283, 7, 104, 2, 2, 283, 30, 3, 2, 2, 2, 284, 285, 7, 103, 2, 2, 285, 286, 7, 110, 2, 2, 286, 287, 7, 117, 2, 2, 287, 288, 7, 103, 2, 2, 288, 32, 3, 2, 2, 2, 289, 290, 7, 104, 2, 2, 290, 291, 7, 113, 2, 2, 291, 292, 7, 116, 2, 2, 292, 34, 3, 2, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 112, 2, 2, 295, 296, 7, 119, 2, 2, 296, 297, 7, 111, 2, 2, 297, 36, 3, 2, 2, 2, 298, 299, 7, 102, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 104, 2, 2, 301, 38, 3, 2, 2, 2, 302, 303, 7, 116, 2, 2, 303, 304, 7, 103, 2, 2, 304, 305, 7, 118, 2, 2, 305, 306, 7, 119, 2, 2, 306, 307, 7, 116, 2, 2, 307, 308, 7, 112, 2, 2, 308, 40, 3, 2, 2, 2, 309, 310, 7, 101, 2, 2, 310, 311, 7, 99, 2, 2, 311, 312, 7, 110, 2, 2, 312, 313, 7, 110, 2, 2, 313, 42, 3, 2, 2, 2, 314, 315, 7, 47, 2, 2, 315, 316, 7, 64, 2, 2, 316, 44, 3, 2, 2, 2, 317, 318, 7, 118, 2, 2, 318, 319, 7, 116, 2, 2, 319, 320, 7, 119, 2, 2, 320, 321, 7, 103, 2, 2, 321, 46, 3, 2, 2, 2, 322, 323, 7, 104, 2, 2, 323, 324, 7, 99, 2, 2, 324, 325, 7, 110, 2, 2, 325, 326, 7, 117, 2, 2, 326, 327, 7, 103, 2, 2, 327, 48, 3, 2, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 123, 2, 2, 330, 331, 7, 114, 2, 2, 331, 332, 7, 103, 2, 2, 332, 333, 7, 113, 2, 2, 333, 334, 7, 104, 2, 2, 334, 50, 3, 2, 2, 2, 335, 336, 7, 120, 2, 2, 336, 337, 7, 113, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 102, 2, 2, 339, 52, 3, 2, 2, 2, 340, 341, 7, 112, 2, 2, 341, 342, 7, 119, 2, 2, 342, 343, 7, 110, 2, 2, 343, 344, 7, 110, 2, 2, 344, 54, 3, 2, 2, 2, 345, 346, 7, 119, 2, 2, 346, 347, 7, 112, 2, 2, 347, 348, 7, 102, 2, 2, 348, 349, 7, 103, 2, 2, 349, 350, 7, 104, 2, 2, 350, 351, 7, 107, 2, 2, 351, 352, 7, 112, 2, 2, 352, 353, 7, 103, 2, 2, 353, 354, 7, 102, 2, 2, 354, 56, 3, 2, 2, 2, 355, 356, 7, 46, 2, 2, 356, 58, 3, 2, 2, 2, 357, 358, 7, 61, 2, 2, 358, 60, 3, 2, 2, 2, 359, 360, 7, 65, 2, 2, 360, 62, 3, 2, 2, 2, 361, 362, 7, 60, 2, 2, 362, 64, 3, 2, 2, 2, 363, 364, 7, 42, 2, 2, 364, 66, 3, 2, 2, 2, 365, 366, 7, 43, 2, 2, 366, 68, 3, 2, 2, 2, 367, 368, 7, 93, 2, 2, 368, 70, 3, 2, 2, 2, 369, 370, 7, 95, 2, 2, 370, 72, 3, 2, 2, 2, 371, 372, 7, 125, 2, 2, 372, 74, 3, 2, 2, 2, 373, 374, 7, 127, 2, 2, 374, 76, 3, 2, 2, 2, 375, 376, 7, 45, 2, 2, 376, 78, 3, 2, 2, 2, 377, 378, 7, 45, 2, 2, 378, 379, 7, 45, 2, 2, 379, 80, 3, 2, 2, 2, 380, 381, 7, 47, 2, 2, 381, 82, 3, 2, 2, 2, 382, 383, 7, 47, 2, 2, 383, 384, 7, 47, 2, 2, 384, 84, 3, 2, 2, 2, 385, 386, 7, 44, 2, 2, 386, 86, 3, 2, 2, 2, 387, 388, 7, 49, 2, 2, 388, 88, 3, 2, 2, 2, 389, 390, 7, 39, 2, 2, 390, 90, 3, 2, 2, 2, 391, 392, 7, 44, 2, 2, 392, 393, 7, 44, 2, 2, 393, 92, 3, 2, 2, 2, 394, 395, 7, 40, 2, 2, 395, 396, 7, 40, 2, 2, 396, 94, 3, 2, 2, 2, 397, 398, 7, 126, 2, 2, 398, 399, 7, 126, 2, 2, 399, 96, 3, 2, 2, 2, 400, 401, 7, 35, 2, 2, 401, 98, 3, 2, 2, 2, 402, 403, 7, 63, 2, 2, 403, 100, 3, 2, 2, 2, 404, 405, 7, 45, 2, 2, 405, 406, 7, 63, 2, 2, 406, 102, 3, 2, 2, 2, 407, 408, 7, 47, 2, 2, 408, 409, 7, 63, 2, 2, 409, 104, 3, 2, 2, 2, 410, 411, 7, 44, 2, 2, 411, 412, 7, 63, 2, 2, 412, 106, 3, 2, 2, 2, 413, 414, 7, 49, 2, 2, 414, 415, 7, 63, 2, 2, 415, 108, 3, 2, 2, 2, 416, 417, 7, 39, 2, 2, 417, 418, 7, 63, 2, 2, 418, 110, 3, 2, 2, 2, 419, 420, 7, 63, 2, 2, 420, 421, 7, 63, 2, 2, 421, 112, 3, 2, 2, 2, 422, 423, 7, 35, 2, 2, 423, 424, 7, 63, 2, 2, 424, 114, 3, 2, 2, 2, 425, 426, 7, 62, 2, 2, 426, 116, 3, 2, 2, 2, 427, 428, 7, 62, 2, 2, 428, 429, 7, 63, 2, 2, 429, 118, 3, 2, 2, 2, 430, 431, 7, 64, 2, 2, 431, 120, 3, 2, 2, 2, 432, 433, 7, 64, 2, 2, 433, 434, 7, 63, 2, 2, 434, 122, 3, 2, 2, 2, 435, 436, 7, 48, 2, 2, 436, 124, 3, 2, 2, 2, 437, 442, 5, 143, 72, 2, 438, 441, 5, 143, 72, 2, 439, 441, 5, 147, 74, 2, 440, 438, 3, 2, 2, 2, 440, 439, 3, 2, 2, 2, 441, 444, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 126, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 450, 5, 149, 75, 2, 446, 450, 5, 153, 77, 2, 447, 450, 5, 155, 78, 2, 448, 450, 5, 151, 76, 2, 449, 445, 3, 2, 2, 2, 449, 446, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 448, 3, 2, 2, 2, 450, 128, 3, 2, 2, 2, 451, 452, 7, 104, 2, 2, 452, 453, 7, 41, 2, 2, 453, 455, 3, 2, 2, 2, 454, 456, 5, 187, 94, 2, 455, 454, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 458, 7, 41, 2, 2, 458, 130, 3, 2, 2, 2, 459, 460, 7, 104, 2, 2, 460, 461, 7, 36, 2, 2, 461, 463, 3, 2, 2, 2, 462, 464, 5, 191, 96, 2, 463, 462, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 466, 7, 36, 2, 2, 466, 132, 3, 2, 2, 2, 467, 469, 7, 41, 2, 2, 468, 470, 5, 187, 94, 2, 469, 468, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 472, 7, 41, 2, 2, 472, 134, 3, 2, 2, 2, 473, 475, 7, 36, 2, 2, 474, 476, 5, 191, 96, 2, 475, 474, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 478, 7, 36, 2, 2, 478, 136, 3, 2, 2, 2, 479, 480, 5, 165, 83, 2, 480, 138, 3, 2, 2, 2, 481, 483, 9, 3, 2, 2, 482, 481, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 487, 8, 70, 3, 2, 487, 140, 3, 2, 2, 2, 488, 489, 9, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 8, 71, 3, 2, 491, 142, 3, 2, 2, 2, 492, 493, 5, 145, 73, 2, 493, 144, 3, 2, 2, 2, 494, 495, 9, 4, 2, 2, 495, 146, 3, 2, 2, 2, 496, 497, 9, 5, 2, 2, 497, 148, 3, 2, 2, 2, 498, 500, 5, 147, 74, 2, 499, 498, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 150, 3, 2, 2, 2, 503, 504, 7, 50, 2, 2, 504, 506, 9, 6, 2, 2, 505, 507, 5, 159, 80, 2, 506, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 506, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 152, 3, 2, 2, 2, 510, 511, 7, 50, 2, 2, 511, 513, 9, 7, 2, 2, 512, 514, 5, 161, 81, 2, 513, 512, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 154, 3, 2, 2, 2, 517, 518, 7, 50, 2, 2, 518, 520, 9, 8, 2, 2, 519, 521, 5, 163, 82, 2, 520, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 520, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 156, 3, 2, 2, 2, 524, 525, 9, 9, 2, 2, 525, 158, 3, 2, 2, 2, 526, 527, 9, 10, 2, 2, 527, 160, 3, 2, 2, 2, 528, 529, 9, 11, 2, 2, 529, 162, 3, 2, 2, 2, 530, 531, 9, 12, 2, 2, 531, 164, 3, 2, 2, 2, 532, 534, 5, 167, 84, 2, 533, 535, 5, 169, 85, 2, 534, 533, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 540, 3, 2, 2, 2, 536, 537, 5, 171, 86, 2, 537, 538, 5, 169, 85, 2, 538, 540, 3, 2, 2, 2, 539, 532, 3, 2, 2, 2, 539, 536, 3, 2, 2, 2, 540, 166, 3, 2, 2, 2, 541, 543, 5, 171, 86, 2, 542, 541, 3, 2, 2, 2, 542, 543, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 545, 7, 48, 2, 2, 545, 550, 5, 171, 86, 2, 546, 547, 5, 171, 86, 2, 547, 548, 7, 48, 2, 2, 548, 550, 3, 2, 2, 2, 549, 542, 3, 2, 2, 2, 549, 546, 3, 2, 2, 2, 550, 168, 3, 2, 2, 2, 551, 553, 9, 13, 2, 2, 552, 554, 5, 173, 87, 2, 553, 552, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 556, 5, 171, 86, 2, 556, 170, 3, 2, 2, 2, 557, 559, 5, 147, 74, 2, 558, 557, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 558, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 172, 3, 2, 2, 2, 562, 563, 9, 14, 2, 2, 563, 174, 3, 2, 2, 2, 564, 566, 5, 177, 89, 2, 565, 564, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 176, 3, 2, 2, 2, 569, 572, 10, 15, 2, 2, 570, 572, 5, 179, 90, 2, 571, 569, 3, 2, 2, 2, 571, 570, 3, 2, 2, 2, 572, 178, 3, 2, 2, 2, 573, 577, 5, 181, 91, 2, 574, 577, 5, 183, 92, 2, 575, 577, 5, 185, 93, 2, 576, 573, 3, 2, 2, 2, 576, 574, 3, 2, 2, 2, 576, 575, 3, 2, 2, 2, 577, 180, 3, 2, 2, 2, 578, 579, 7, 94, 2, 2, 579, 580, 9, 16, 2, 2, 580, 182, 3, 2, 2, 2, 581, 582, 7, 94, 2, 2, 582, 584, 5, 161, 81, 2, 583, 585, 5, 161, 81, 2, 584, 583, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 587, 3, 2, 2, 2, 586, 588, 5, 161, 81, 2, 587, 586, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 184, 3, 2, 2, 2, 589, 590, 7, 94, 2, 2, 590, 591, 7, 122, 2, 2, 591, 593, 3, 2, 2, 2, 592, 594, 5, 163, 82, 2, 593, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 593, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 186, 3, 2, 2, 2, 597, 599, 5, 189, 95, 2, 598, 597, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 598, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 188, 3, 2, 2, 2, 602, 605, 10, 15, 2, 2, 603, 605, 5, 179, 90, 2, 604, 602, 3, 2, 2, 2, 604, 603, 3, 2, 2, 2, 605, 190, 3, 2, 2, 2, 606, 608, 5, 193, 97, 2, 607, 606, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 607, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 192, 3, 2, 2, 2, 611, 614, 10, 17, 2, 2, 612, 614, 5, 179, 90, 2, 613, 611, 3, 2, 2, 2, 613, 612, 3, 2, 2, 2, 614, 194, 3, 2, 2, 2, 33, 2, 201, 215, 440, 442, 449, 455, 463, 469, 475, 484, 501, 508, 515, 522, 534, 539, 542, 549, 553, 560, 567, 571, 576, 584, 587, 595, 600, 604, 609, 613, 4, 2, 4, 2, 2, 3, 2] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 78, 686, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 224, 10, 2, 12, 2, 14, 2, 227, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 238, 10, 3, 12, 3, 14, 3, 241, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 7, 64, 470, 10, 64, 12, 64, 14, 64, 473, 11, 64, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 479, 10, 65, 3, 66, 3, 66, 5, 66, 483, 10, 66, 3, 66, 3, 66, 3, 67, 3, 67, 5, 67, 489, 10, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 6, 69, 496, 10, 69, 13, 69, 14, 69, 497, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 6, 82, 553, 10, 82, 13, 82, 14, 82, 554, 3, 83, 3, 83, 3, 83, 6, 83, 560, 10, 83, 13, 83, 14, 83, 561, 3, 84, 3, 84, 3, 84, 6, 84, 567, 10, 84, 13, 84, 14, 84, 568, 3, 85, 3, 85, 3, 85, 6, 85, 574, 10, 85, 13, 85, 14, 85, 575, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 5, 90, 588, 10, 90, 3, 90, 3, 90, 3, 90, 5, 90, 593, 10, 90, 3, 91, 5, 91, 596, 10, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 5, 91, 603, 10, 91, 3, 92, 3, 92, 5, 92, 607, 10, 92, 3, 92, 3, 92, 3, 93, 6, 93, 612, 10, 93, 13, 93, 14, 93, 613, 3, 94, 3, 94, 3, 95, 6, 95, 619, 10, 95, 13, 95, 14, 95, 620, 3, 96, 3, 96, 5, 96, 625, 10, 96, 3, 97, 3, 97, 3, 97, 5, 97, 630, 10, 97, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 5, 99, 638, 10, 99, 3, 99, 5, 99, 641, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 6, 100, 647, 10, 100, 13, 100, 14, 100, 648, 3, 101, 6, 101, 652, 10, 101, 13, 101, 14, 101, 653, 3, 102, 3, 102, 5, 102, 658, 10, 102, 3, 103, 6, 103, 661, 10, 103, 13, 103, 14, 103, 662, 3, 104, 3, 104, 5, 104, 667, 10, 104, 3, 105, 6, 105, 670, 10, 105, 13, 105, 14, 105, 671, 3, 106, 3, 106, 5, 106, 676, 10, 106, 3, 107, 6, 107, 679, 10, 107, 13, 107, 14, 107, 680, 3, 108, 3, 108, 5, 108, 685, 10, 108, 3, 225, 2, 2, 109, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 2, 149, 2, 75, 151, 2, 76, 153, 2, 2, 155, 2, 77, 157, 2, 78, 159, 2, 2, 161, 2, 2, 163, 2, 2, 165, 2, 2, 167, 2, 2, 169, 2, 2, 171, 2, 2, 173, 2, 2, 175, 2, 2, 177, 2, 2, 179, 2, 2, 181, 2, 2, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 5, 2, 3, 4, 20, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 688, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 3, 147, 3, 2, 2, 2, 3, 149, 3, 2, 2, 2, 3, 151, 3, 2, 2, 2, 4, 153, 3, 2, 2, 2, 4, 155, 3, 2, 2, 2, 4, 157, 3, 2, 2, 2, 5, 219, 3, 2, 2, 2, 7, 233, 3, 2, 2, 2, 9, 244, 3, 2, 2, 2, 11, 250, 3, 2, 2, 2, 13, 254, 3, 2, 2, 2, 15, 257, 3, 2, 2, 2, 17, 261, 3, 2, 2, 2, 19, 268, 3, 2, 2, 2, 21, 273, 3, 2, 2, 2, 23, 281, 3, 2, 2, 2, 25, 287, 3, 2, 2, 2, 27, 296, 3, 2, 2, 2, 29, 299, 3, 2, 2, 2, 31, 305, 3, 2, 2, 2, 33, 308, 3, 2, 2, 2, 35, 313, 3, 2, 2, 2, 37, 317, 3, 2, 2, 2, 39, 322, 3, 2, 2, 2, 41, 326, 3, 2, 2, 2, 43, 333, 3, 2, 2, 2, 45, 338, 3, 2, 2, 2, 47, 341, 3, 2, 2, 2, 49, 346, 3, 2, 2, 2, 51, 352, 3, 2, 2, 2, 53, 359, 3, 2, 2, 2, 55, 364, 3, 2, 2, 2, 57, 369, 3, 2, 2, 2, 59, 379, 3, 2, 2, 2, 61, 381, 3, 2, 2, 2, 63, 383, 3, 2, 2, 2, 65, 385, 3, 2, 2, 2, 67, 387, 3, 2, 2, 2, 69, 389, 3, 2, 2, 2, 71, 391, 3, 2, 2, 2, 73, 393, 3, 2, 2, 2, 75, 395, 3, 2, 2, 2, 77, 400, 3, 2, 2, 2, 79, 402, 3, 2, 2, 2, 81, 404, 3, 2, 2, 2, 83, 406, 3, 2, 2, 2, 85, 409, 3, 2, 2, 2, 87, 411, 3, 2, 2, 2, 89, 414, 3, 2, 2, 2, 91, 416, 3, 2, 2, 2, 93, 418, 3, 2, 2, 2, 95, 420, 3, 2, 2, 2, 97, 423, 3, 2, 2, 2, 99, 426, 3, 2, 2, 2, 101, 429, 3, 2, 2, 2, 103, 431, 3, 2, 2, 2, 105, 433, 3, 2, 2, 2, 107, 436, 3, 2, 2, 2, 109, 439, 3, 2, 2, 2, 111, 442, 3, 2, 2, 2, 113, 445, 3, 2, 2, 2, 115, 448, 3, 2, 2, 2, 117, 451, 3, 2, 2, 2, 119, 454, 3, 2, 2, 2, 121, 456, 3, 2, 2, 2, 123, 459, 3, 2, 2, 2, 125, 461, 3, 2, 2, 2, 127, 464, 3, 2, 2, 2, 129, 466, 3, 2, 2, 2, 131, 478, 3, 2, 2, 2, 133, 480, 3, 2, 2, 2, 135, 486, 3, 2, 2, 2, 137, 492, 3, 2, 2, 2, 139, 495, 3, 2, 2, 2, 141, 501, 3, 2, 2, 2, 143, 505, 3, 2, 2, 2, 145, 512, 3, 2, 2, 2, 147, 519, 3, 2, 2, 2, 149, 525, 3, 2, 2, 2, 151, 530, 3, 2, 2, 2, 153, 532, 3, 2, 2, 2, 155, 538, 3, 2, 2, 2, 157, 543, 3, 2, 2, 2, 159, 545, 3, 2, 2, 2, 161, 547, 3, 2, 2, 2, 163, 549, 3, 2, 2, 2, 165, 552, 3, 2, 2, 2, 167, 556, 3, 2, 2, 2, 169, 563, 3, 2, 2, 2, 171, 570, 3, 2, 2, 2, 173, 577, 3, 2, 2, 2, 175, 579, 3, 2, 2, 2, 177, 581, 3, 2, 2, 2, 179, 583, 3, 2, 2, 2, 181, 592, 3, 2, 2, 2, 183, 602, 3, 2, 2, 2, 185, 604, 3, 2, 2, 2, 187, 611, 3, 2, 2, 2, 189, 615, 3, 2, 2, 2, 191, 618, 3, 2, 2, 2, 193, 624, 3, 2, 2, 2, 195, 629, 3, 2, 2, 2, 197, 631, 3, 2, 2, 2, 199, 634, 3, 2, 2, 2, 201, 642, 3, 2, 2, 2, 203, 651, 3, 2, 2, 2, 205, 657, 3, 2, 2, 2, 207, 660, 3, 2, 2, 2, 209, 666, 3, 2, 2, 2, 211, 669, 3, 2, 2, 2, 213, 675, 3, 2, 2, 2, 215, 678, 3, 2, 2, 2, 217, 684, 3, 2, 2, 2, 219, 220, 7, 49, 2, 2, 220, 221, 7, 44, 2, 2, 221, 225, 3, 2, 2, 2, 222, 224, 11, 2, 2, 2, 223, 222, 3, 2, 2, 2, 224, 227, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 226, 228, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 228, 229, 7, 44, 2, 2, 229, 230, 7, 49, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 8, 2, 2, 2, 232, 6, 3, 2, 2, 2, 233, 234, 7, 49, 2, 2, 234, 235, 7, 49, 2, 2, 235, 239, 3, 2, 2, 2, 236, 238, 10, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 242, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 243, 8, 3, 2, 2, 243, 8, 3, 2, 2, 2, 244, 245, 7, 101, 2, 2, 245, 246, 7, 113, 2, 2, 246, 247, 7, 112, 2, 2, 247, 248, 7, 117, 2, 2, 248, 249, 7, 118, 2, 2, 249, 10, 3, 2, 2, 2, 250, 251, 7, 120, 2, 2, 251, 252, 7, 99, 2, 2, 252, 253, 7, 116, 2, 2, 253, 12, 3, 2, 2, 2, 254, 255, 7, 99, 2, 2, 255, 256, 7, 117, 2, 2, 256, 14, 3, 2, 2, 2, 257, 258, 7, 48, 2, 2, 258, 259, 7, 48, 2, 2, 259, 260, 7, 48, 2, 2, 260, 16, 3, 2, 2, 2, 261, 262, 7, 117, 2, 2, 262, 263, 7, 121, 2, 2, 263, 264, 7, 107, 2, 2, 264, 265, 7, 118, 2, 2, 265, 266, 7, 101, 2, 2, 266, 267, 7, 106, 2, 2, 267, 18, 3, 2, 2, 2, 268, 269, 7, 101, 2, 2, 269, 270, 7, 99, 2, 2, 270, 271, 7, 117, 2, 2, 271, 272, 7, 103, 2, 2, 272, 20, 3, 2, 2, 2, 273, 274, 7, 102, 2, 2, 274, 275, 7, 103, 2, 2, 275, 276, 7, 104, 2, 2, 276, 277, 7, 99, 2, 2, 277, 278, 7, 119, 2, 2, 278, 279, 7, 110, 2, 2, 279, 280, 7, 118, 2, 2, 280, 22, 3, 2, 2, 2, 281, 282, 7, 100, 2, 2, 282, 283, 7, 116, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 99, 2, 2, 285, 286, 7, 109, 2, 2, 286, 24, 3, 2, 2, 2, 287, 288, 7, 101, 2, 2, 288, 289, 7, 113, 2, 2, 289, 290, 7, 112, 2, 2, 290, 291, 7, 118, 2, 2, 291, 292, 7, 107, 2, 2, 292, 293, 7, 112, 2, 2, 293, 294, 7, 119, 2, 2, 294, 295, 7, 103, 2, 2, 295, 26, 3, 2, 2, 2, 296, 297, 7, 102, 2, 2, 297, 298, 7, 113, 2, 2, 298, 28, 3, 2, 2, 2, 299, 300, 7, 121, 2, 2, 300, 301, 7, 106, 2, 2, 301, 302, 7, 107, 2, 2, 302, 303, 7, 110, 2, 2, 303, 304, 7, 103, 2, 2, 304, 30, 3, 2, 2, 2, 305, 306, 7, 107, 2, 2, 306, 307, 7, 104, 2, 2, 307, 32, 3, 2, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 110, 2, 2, 310, 311, 7, 117, 2, 2, 311, 312, 7, 103, 2, 2, 312, 34, 3, 2, 2, 2, 313, 314, 7, 104, 2, 2, 314, 315, 7, 113, 2, 2, 315, 316, 7, 116, 2, 2, 316, 36, 3, 2, 2, 2, 317, 318, 7, 103, 2, 2, 318, 319, 7, 112, 2, 2, 319, 320, 7, 119, 2, 2, 320, 321, 7, 111, 2, 2, 321, 38, 3, 2, 2, 2, 322, 323, 7, 102, 2, 2, 323, 324, 7, 103, 2, 2, 324, 325, 7, 104, 2, 2, 325, 40, 3, 2, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 103, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 119, 2, 2, 330, 331, 7, 116, 2, 2, 331, 332, 7, 112, 2, 2, 332, 42, 3, 2, 2, 2, 333, 334, 7, 101, 2, 2, 334, 335, 7, 99, 2, 2, 335, 336, 7, 110, 2, 2, 336, 337, 7, 110, 2, 2, 337, 44, 3, 2, 2, 2, 338, 339, 7, 47, 2, 2, 339, 340, 7, 64, 2, 2, 340, 46, 3, 2, 2, 2, 341, 342, 7, 118, 2, 2, 342, 343, 7, 116, 2, 2, 343, 344, 7, 119, 2, 2, 344, 345, 7, 103, 2, 2, 345, 48, 3, 2, 2, 2, 346, 347, 7, 104, 2, 2, 347, 348, 7, 99, 2, 2, 348, 349, 7, 110, 2, 2, 349, 350, 7, 117, 2, 2, 350, 351, 7, 103, 2, 2, 351, 50, 3, 2, 2, 2, 352, 353, 7, 118, 2, 2, 353, 354, 7, 123, 2, 2, 354, 355, 7, 114, 2, 2, 355, 356, 7, 103, 2, 2, 356, 357, 7, 113, 2, 2, 357, 358, 7, 104, 2, 2, 358, 52, 3, 2, 2, 2, 359, 360, 7, 120, 2, 2, 360, 361, 7, 113, 2, 2, 361, 362, 7, 107, 2, 2, 362, 363, 7, 102, 2, 2, 363, 54, 3, 2, 2, 2, 364, 365, 7, 112, 2, 2, 365, 366, 7, 119, 2, 2, 366, 367, 7, 110, 2, 2, 367, 368, 7, 110, 2, 2, 368, 56, 3, 2, 2, 2, 369, 370, 7, 119, 2, 2, 370, 371, 7, 112, 2, 2, 371, 372, 7, 102, 2, 2, 372, 373, 7, 103, 2, 2, 373, 374, 7, 104, 2, 2, 374, 375, 7, 107, 2, 2, 375, 376, 7, 112, 2, 2, 376, 377, 7, 103, 2, 2, 377, 378, 7, 102, 2, 2, 378, 58, 3, 2, 2, 2, 379, 380, 7, 46, 2, 2, 380, 60, 3, 2, 2, 2, 381, 382, 7, 61, 2, 2, 382, 62, 3, 2, 2, 2, 383, 384, 7, 65, 2, 2, 384, 64, 3, 2, 2, 2, 385, 386, 7, 60, 2, 2, 386, 66, 3, 2, 2, 2, 387, 388, 7, 42, 2, 2, 388, 68, 3, 2, 2, 2, 389, 390, 7, 43, 2, 2, 390, 70, 3, 2, 2, 2, 391, 392, 7, 93, 2, 2, 392, 72, 3, 2, 2, 2, 393, 394, 7, 95, 2, 2, 394, 74, 3, 2, 2, 2, 395, 396, 6, 37, 2, 2, 396, 397, 7, 127, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 8, 37, 3, 2, 399, 76, 3, 2, 2, 2, 400, 401, 7, 125, 2, 2, 401, 78, 3, 2, 2, 2, 402, 403, 7, 127, 2, 2, 403, 80, 3, 2, 2, 2, 404, 405, 7, 45, 2, 2, 405, 82, 3, 2, 2, 2, 406, 407, 7, 45, 2, 2, 407, 408, 7, 45, 2, 2, 408, 84, 3, 2, 2, 2, 409, 410, 7, 47, 2, 2, 410, 86, 3, 2, 2, 2, 411, 412, 7, 47, 2, 2, 412, 413, 7, 47, 2, 2, 413, 88, 3, 2, 2, 2, 414, 415, 7, 44, 2, 2, 415, 90, 3, 2, 2, 2, 416, 417, 7, 49, 2, 2, 417, 92, 3, 2, 2, 2, 418, 419, 7, 39, 2, 2, 419, 94, 3, 2, 2, 2, 420, 421, 7, 44, 2, 2, 421, 422, 7, 44, 2, 2, 422, 96, 3, 2, 2, 2, 423, 424, 7, 40, 2, 2, 424, 425, 7, 40, 2, 2, 425, 98, 3, 2, 2, 2, 426, 427, 7, 126, 2, 2, 427, 428, 7, 126, 2, 2, 428, 100, 3, 2, 2, 2, 429, 430, 7, 35, 2, 2, 430, 102, 3, 2, 2, 2, 431, 432, 7, 63, 2, 2, 432, 104, 3, 2, 2, 2, 433, 434, 7, 45, 2, 2, 434, 435, 7, 63, 2, 2, 435, 106, 3, 2, 2, 2, 436, 437, 7, 47, 2, 2, 437, 438, 7, 63, 2, 2, 438, 108, 3, 2, 2, 2, 439, 440, 7, 44, 2, 2, 440, 441, 7, 63, 2, 2, 441, 110, 3, 2, 2, 2, 442, 443, 7, 49, 2, 2, 443, 444, 7, 63, 2, 2, 444, 112, 3, 2, 2, 2, 445, 446, 7, 39, 2, 2, 446, 447, 7, 63, 2, 2, 447, 114, 3, 2, 2, 2, 448, 449, 7, 63, 2, 2, 449, 450, 7, 63, 2, 2, 450, 116, 3, 2, 2, 2, 451, 452, 7, 35, 2, 2, 452, 453, 7, 63, 2, 2, 453, 118, 3, 2, 2, 2, 454, 455, 7, 62, 2, 2, 455, 120, 3, 2, 2, 2, 456, 457, 7, 62, 2, 2, 457, 458, 7, 63, 2, 2, 458, 122, 3, 2, 2, 2, 459, 460, 7, 64, 2, 2, 460, 124, 3, 2, 2, 2, 461, 462, 7, 64, 2, 2, 462, 463, 7, 63, 2, 2, 463, 126, 3, 2, 2, 2, 464, 465, 7, 48, 2, 2, 465, 128, 3, 2, 2, 2, 466, 471, 5, 159, 79, 2, 467, 470, 5, 159, 79, 2, 468, 470, 5, 163, 81, 2, 469, 467, 3, 2, 2, 2, 469, 468, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 130, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 479, 5, 165, 82, 2, 475, 479, 5, 169, 84, 2, 476, 479, 5, 171, 85, 2, 477, 479, 5, 167, 83, 2, 478, 474, 3, 2, 2, 2, 478, 475, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 478, 477, 3, 2, 2, 2, 479, 132, 3, 2, 2, 2, 480, 482, 7, 41, 2, 2, 481, 483, 5, 211, 105, 2, 482, 481, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 485, 7, 41, 2, 2, 485, 134, 3, 2, 2, 2, 486, 488, 7, 36, 2, 2, 487, 489, 5, 215, 107, 2, 488, 487, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 7, 36, 2, 2, 491, 136, 3, 2, 2, 2, 492, 493, 5, 181, 90, 2, 493, 138, 3, 2, 2, 2, 494, 496, 9, 3, 2, 2, 495, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 8, 69, 4, 2, 500, 140, 3, 2, 2, 2, 501, 502, 9, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 504, 8, 70, 4, 2, 504, 142, 3, 2, 2, 2, 505, 506, 7, 104, 2, 2, 506, 507, 7, 41, 2, 2, 507, 508, 3, 2, 2, 2, 508, 509, 8, 71, 5, 2, 509, 510, 3, 2, 2, 2, 510, 511, 8, 71, 6, 2, 511, 144, 3, 2, 2, 2, 512, 513, 7, 104, 2, 2, 513, 514, 7, 36, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 8, 72, 7, 2, 516, 517, 3, 2, 2, 2, 517, 518, 8, 72, 8, 2, 518, 146, 3, 2, 2, 2, 519, 520, 6, 73, 3, 2, 520, 521, 7, 125, 2, 2, 521, 522, 3, 2, 2, 2, 522, 523, 8, 73, 9, 2, 523, 524, 8, 73, 10, 2, 524, 148, 3, 2, 2, 2, 525, 526, 7, 41, 2, 2, 526, 527, 8, 74, 11, 2, 527, 528, 3, 2, 2, 2, 528, 529, 8, 74, 3, 2, 529, 150, 3, 2, 2, 2, 530, 531, 5, 203, 101, 2, 531, 152, 3, 2, 2, 2, 532, 533, 6, 76, 4, 2, 533, 534, 7, 125, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 8, 76, 9, 2, 536, 537, 8, 76, 10, 2, 537, 154, 3, 2, 2, 2, 538, 539, 7, 36, 2, 2, 539, 540, 8, 77, 12, 2, 540, 541, 3, 2, 2, 2, 541, 542, 8, 77, 3, 2, 542, 156, 3, 2, 2, 2, 543, 544, 5, 207, 103, 2, 544, 158, 3, 2, 2, 2, 545, 546, 5, 161, 80, 2, 546, 160, 3, 2, 2, 2, 547, 548, 9, 4, 2, 2, 548, 162, 3, 2, 2, 2, 549, 550, 9, 5, 2, 2, 550, 164, 3, 2, 2, 2, 551, 553, 5, 163, 81, 2, 552, 551, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 552, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 166, 3, 2, 2, 2, 556, 557, 7, 50, 2, 2, 557, 559, 9, 6, 2, 2, 558, 560, 5, 175, 87, 2, 559, 558, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 168, 3, 2, 2, 2, 563, 564, 7, 50, 2, 2, 564, 566, 9, 7, 2, 2, 565, 567, 5, 177, 88, 2, 566, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 170, 3, 2, 2, 2, 570, 571, 7, 50, 2, 2, 571, 573, 9, 8, 2, 2, 572, 574, 5, 179, 89, 2, 573, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 172, 3, 2, 2, 2, 577, 578, 9, 9, 2, 2, 578, 174, 3, 2, 2, 2, 579, 580, 9, 10, 2, 2, 580, 176, 3, 2, 2, 2, 581, 582, 9, 11, 2, 2, 582, 178, 3, 2, 2, 2, 583, 584, 9, 12, 2, 2, 584, 180, 3, 2, 2, 2, 585, 587, 5, 183, 91, 2, 586, 588, 5, 185, 92, 2, 587, 586, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 593, 3, 2, 2, 2, 589, 590, 5, 187, 93, 2, 590, 591, 5, 185, 92, 2, 591, 593, 3, 2, 2, 2, 592, 585, 3, 2, 2, 2, 592, 589, 3, 2, 2, 2, 593, 182, 3, 2, 2, 2, 594, 596, 5, 187, 93, 2, 595, 594, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 598, 7, 48, 2, 2, 598, 603, 5, 187, 93, 2, 599, 600, 5, 187, 93, 2, 600, 601, 7, 48, 2, 2, 601, 603, 3, 2, 2, 2, 602, 595, 3, 2, 2, 2, 602, 599, 3, 2, 2, 2, 603, 184, 3, 2, 2, 2, 604, 606, 9, 13, 2, 2, 605, 607, 5, 189, 94, 2, 606, 605, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 5, 187, 93, 2, 609, 186, 3, 2, 2, 2, 610, 612, 5, 163, 81, 2, 611, 610, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 611, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 188, 3, 2, 2, 2, 615, 616, 9, 14, 2, 2, 616, 190, 3, 2, 2, 2, 617, 619, 5, 193, 96, 2, 618, 617, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 618, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 192, 3, 2, 2, 2, 622, 625, 10, 15, 2, 2, 623, 625, 5, 195, 97, 2, 624, 622, 3, 2, 2, 2, 624, 623, 3, 2, 2, 2, 625, 194, 3, 2, 2, 2, 626, 630, 5, 197, 98, 2, 627, 630, 5, 199, 99, 2, 628, 630, 5, 201, 100, 2, 629, 626, 3, 2, 2, 2, 629, 627, 3, 2, 2, 2, 629, 628, 3, 2, 2, 2, 630, 196, 3, 2, 2, 2, 631, 632, 7, 94, 2, 2, 632, 633, 9, 16, 2, 2, 633, 198, 3, 2, 2, 2, 634, 635, 7, 94, 2, 2, 635, 637, 5, 177, 88, 2, 636, 638, 5, 177, 88, 2, 637, 636, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 640, 3, 2, 2, 2, 639, 641, 5, 177, 88, 2, 640, 639, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 200, 3, 2, 2, 2, 642, 643, 7, 94, 2, 2, 643, 644, 7, 122, 2, 2, 644, 646, 3, 2, 2, 2, 645, 647, 5, 179, 89, 2, 646, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 202, 3, 2, 2, 2, 650, 652, 5, 205, 102, 2, 651, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 651, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 204, 3, 2, 2, 2, 655, 658, 10, 17, 2, 2, 656, 658, 5, 195, 97, 2, 657, 655, 3, 2, 2, 2, 657, 656, 3, 2, 2, 2, 658, 206, 3, 2, 2, 2, 659, 661, 5, 209, 104, 2, 660, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 208, 3, 2, 2, 2, 664, 667, 10, 18, 2, 2, 665, 667, 5, 195, 97, 2, 666, 664, 3, 2, 2, 2, 666, 665, 3, 2, 2, 2, 667, 210, 3, 2, 2, 2, 668, 670, 5, 213, 106, 2, 669, 668, 3, 2, 2, 2, 670, 671, 3, 2, 2, 2, 671, 669, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 212, 3, 2, 2, 2, 673, 676, 10, 15, 2, 2, 674, 676, 5, 195, 97, 2, 675, 673, 3, 2, 2, 2, 675, 674, 3, 2, 2, 2, 676, 214, 3, 2, 2, 2, 677, 679, 5, 217, 108, 2, 678, 677, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 216, 3, 2, 2, 2, 682, 685, 10, 19, 2, 2, 683, 685, 5, 195, 97, 2, 684, 682, 3, 2, 2, 2, 684, 683, 3, 2, 2, 2, 685, 218, 3, 2, 2, 2, 37, 2, 3, 4, 225, 239, 469, 471, 478, 482, 488, 497, 554, 561, 568, 575, 587, 592, 595, 602, 606, 613, 620, 624, 629, 637, 640, 648, 653, 657, 662, 666, 671, 675, 680, 684, 13, 2, 4, 2, 6, 2, 2, 2, 3, 2, 3, 71, 2, 7, 3, 2, 3, 72, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 74, 4, 3, 77, 5] \ No newline at end of file diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens b/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens index 4ce00d897..a8e8b39b6 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens @@ -1,129 +1,135 @@ -BlockComment=1 -LineComment=2 -Const=3 -Var=4 -As=5 -Spread=6 -Switch=7 -Case=8 -Default=9 -Break=10 -Continue=11 -Do=12 -While=13 -If=14 -Else=15 -For=16 -Enum=17 -DefFunc=18 -Return=19 -CallFunc=20 -RetIndicator=21 -True=22 -False=23 -Typeof=24 -Void=25 -Null=26 -Undefined=27 -Comma=28 -SemiColon=29 -QuestionMark=30 -Colon=31 -LeftParen=32 -RightParen=33 -LeftBracket=34 -RightBracket=35 -LeftBrace=36 -RightBrace=37 -Plus=38 -PlusPlus=39 -Minus=40 -MinusMinus=41 -Star=42 -Div=43 -Mod=44 -PowerTo=45 -AndAnd=46 -OrOr=47 -Not=48 -Assign=49 -PlusAssign=50 -MinusAssign=51 -StarAssign=52 -DivAssign=53 -ModAssign=54 -Equal=55 -NotEqual=56 -Less=57 -LessEqual=58 -Greater=59 -GreaterEqual=60 -Dot=61 -Identifier=62 -IntegerConstant=63 -SingleQuoteFStringLiteral=64 -DoubleQuoteFStringLiteral=65 +FStringExpStart=1 +BlockComment=2 +LineComment=3 +Const=4 +Var=5 +As=6 +Spread=7 +Switch=8 +Case=9 +Default=10 +Break=11 +Continue=12 +Do=13 +While=14 +If=15 +Else=16 +For=17 +Enum=18 +DefFunc=19 +Return=20 +CallFunc=21 +RetIndicator=22 +True=23 +False=24 +Typeof=25 +Void=26 +Null=27 +Undefined=28 +Comma=29 +SemiColon=30 +QuestionMark=31 +Colon=32 +LeftParen=33 +RightParen=34 +LeftBracket=35 +RightBracket=36 +FStringExpEnd=37 +LeftBrace=38 +RightBrace=39 +Plus=40 +PlusPlus=41 +Minus=42 +MinusMinus=43 +Star=44 +Div=45 +Mod=46 +PowerTo=47 +AndAnd=48 +OrOr=49 +Not=50 +Assign=51 +PlusAssign=52 +MinusAssign=53 +StarAssign=54 +DivAssign=55 +ModAssign=56 +Equal=57 +NotEqual=58 +Less=59 +LessEqual=60 +Greater=61 +GreaterEqual=62 +Dot=63 +Identifier=64 +IntegerConstant=65 SingleQuoteStringLiteral=66 DoubleQuoteStringLiteral=67 FloatingConstant=68 Whitespace=69 Newline=70 -'const'=3 -'var'=4 -'as'=5 -'...'=6 -'switch'=7 -'case'=8 -'default'=9 -'break'=10 -'continue'=11 -'do'=12 -'while'=13 -'if'=14 -'else'=15 -'for'=16 -'enum'=17 -'def'=18 -'return'=19 -'call'=20 -'->'=21 -'true'=22 -'false'=23 -'typeof'=24 -'void'=25 -'null'=26 -'undefined'=27 -','=28 -';'=29 -'?'=30 -':'=31 -'('=32 -')'=33 -'['=34 -']'=35 -'{'=36 -'}'=37 -'+'=38 -'++'=39 -'-'=40 -'--'=41 -'*'=42 -'/'=43 -'%'=44 -'**'=45 -'&&'=46 -'||'=47 -'!'=48 -'='=49 -'+='=50 -'-='=51 -'*='=52 -'/='=53 -'%='=54 -'=='=55 -'!='=56 -'<'=57 -'<='=58 -'>'=59 -'>='=60 -'.'=61 +FStringSingleQuoteStart=71 +FStringDoubleQuoteStart=72 +FStringSingleQuoteEnd=73 +FStringSingleQuoteAtom=74 +FStringDoubleQuoteEnd=75 +FStringDoubleQuoteAtom=76 +'const'=4 +'var'=5 +'as'=6 +'...'=7 +'switch'=8 +'case'=9 +'default'=10 +'break'=11 +'continue'=12 +'do'=13 +'while'=14 +'if'=15 +'else'=16 +'for'=17 +'enum'=18 +'def'=19 +'return'=20 +'call'=21 +'->'=22 +'true'=23 +'false'=24 +'typeof'=25 +'void'=26 +'null'=27 +'undefined'=28 +','=29 +';'=30 +'?'=31 +':'=32 +'('=33 +')'=34 +'['=35 +']'=36 +'{'=38 +'}'=39 +'+'=40 +'++'=41 +'-'=42 +'--'=43 +'*'=44 +'/'=45 +'%'=46 +'**'=47 +'&&'=48 +'||'=49 +'!'=50 +'='=51 +'+='=52 +'-='=53 +'*='=54 +'/='=55 +'%='=56 +'=='=57 +'!='=58 +'<'=59 +'<='=60 +'>'=61 +'>='=62 +'.'=63 diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts index 755589617..9c366d450 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts @@ -1,5 +1,7 @@ // Generated from ./KipperLexer.g4 by ANTLR 4.9.0-SNAPSHOT +import KipperLexerBase from "./base/KipperLexerBase"; + import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; @@ -13,84 +15,92 @@ import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; -export class KipperLexer extends Lexer { - public static readonly BlockComment = 1; - public static readonly LineComment = 2; - public static readonly Const = 3; - public static readonly Var = 4; - public static readonly As = 5; - public static readonly Spread = 6; - public static readonly Switch = 7; - public static readonly Case = 8; - public static readonly Default = 9; - public static readonly Break = 10; - public static readonly Continue = 11; - public static readonly Do = 12; - public static readonly While = 13; - public static readonly If = 14; - public static readonly Else = 15; - public static readonly For = 16; - public static readonly Enum = 17; - public static readonly DefFunc = 18; - public static readonly Return = 19; - public static readonly CallFunc = 20; - public static readonly RetIndicator = 21; - public static readonly True = 22; - public static readonly False = 23; - public static readonly Typeof = 24; - public static readonly Void = 25; - public static readonly Null = 26; - public static readonly Undefined = 27; - public static readonly Comma = 28; - public static readonly SemiColon = 29; - public static readonly QuestionMark = 30; - public static readonly Colon = 31; - public static readonly LeftParen = 32; - public static readonly RightParen = 33; - public static readonly LeftBracket = 34; - public static readonly RightBracket = 35; - public static readonly LeftBrace = 36; - public static readonly RightBrace = 37; - public static readonly Plus = 38; - public static readonly PlusPlus = 39; - public static readonly Minus = 40; - public static readonly MinusMinus = 41; - public static readonly Star = 42; - public static readonly Div = 43; - public static readonly Mod = 44; - public static readonly PowerTo = 45; - public static readonly AndAnd = 46; - public static readonly OrOr = 47; - public static readonly Not = 48; - public static readonly Assign = 49; - public static readonly PlusAssign = 50; - public static readonly MinusAssign = 51; - public static readonly StarAssign = 52; - public static readonly DivAssign = 53; - public static readonly ModAssign = 54; - public static readonly Equal = 55; - public static readonly NotEqual = 56; - public static readonly Less = 57; - public static readonly LessEqual = 58; - public static readonly Greater = 59; - public static readonly GreaterEqual = 60; - public static readonly Dot = 61; - public static readonly Identifier = 62; - public static readonly IntegerConstant = 63; - public static readonly SingleQuoteFStringLiteral = 64; - public static readonly DoubleQuoteFStringLiteral = 65; +export class KipperLexer extends KipperLexerBase { + public static readonly FStringExpStart = 1; + public static readonly BlockComment = 2; + public static readonly LineComment = 3; + public static readonly Const = 4; + public static readonly Var = 5; + public static readonly As = 6; + public static readonly Spread = 7; + public static readonly Switch = 8; + public static readonly Case = 9; + public static readonly Default = 10; + public static readonly Break = 11; + public static readonly Continue = 12; + public static readonly Do = 13; + public static readonly While = 14; + public static readonly If = 15; + public static readonly Else = 16; + public static readonly For = 17; + public static readonly Enum = 18; + public static readonly DefFunc = 19; + public static readonly Return = 20; + public static readonly CallFunc = 21; + public static readonly RetIndicator = 22; + public static readonly True = 23; + public static readonly False = 24; + public static readonly Typeof = 25; + public static readonly Void = 26; + public static readonly Null = 27; + public static readonly Undefined = 28; + public static readonly Comma = 29; + public static readonly SemiColon = 30; + public static readonly QuestionMark = 31; + public static readonly Colon = 32; + public static readonly LeftParen = 33; + public static readonly RightParen = 34; + public static readonly LeftBracket = 35; + public static readonly RightBracket = 36; + public static readonly FStringExpEnd = 37; + public static readonly LeftBrace = 38; + public static readonly RightBrace = 39; + public static readonly Plus = 40; + public static readonly PlusPlus = 41; + public static readonly Minus = 42; + public static readonly MinusMinus = 43; + public static readonly Star = 44; + public static readonly Div = 45; + public static readonly Mod = 46; + public static readonly PowerTo = 47; + public static readonly AndAnd = 48; + public static readonly OrOr = 49; + public static readonly Not = 50; + public static readonly Assign = 51; + public static readonly PlusAssign = 52; + public static readonly MinusAssign = 53; + public static readonly StarAssign = 54; + public static readonly DivAssign = 55; + public static readonly ModAssign = 56; + public static readonly Equal = 57; + public static readonly NotEqual = 58; + public static readonly Less = 59; + public static readonly LessEqual = 60; + public static readonly Greater = 61; + public static readonly GreaterEqual = 62; + public static readonly Dot = 63; + public static readonly Identifier = 64; + public static readonly IntegerConstant = 65; public static readonly SingleQuoteStringLiteral = 66; public static readonly DoubleQuoteStringLiteral = 67; public static readonly FloatingConstant = 68; public static readonly Whitespace = 69; public static readonly Newline = 70; + public static readonly FStringSingleQuoteStart = 71; + public static readonly FStringDoubleQuoteStart = 72; + public static readonly FStringSingleQuoteEnd = 73; + public static readonly FStringSingleQuoteAtom = 74; + public static readonly FStringDoubleQuoteEnd = 75; + public static readonly FStringDoubleQuoteAtom = 76; public static readonly COMMENT = 2; + public static readonly SINGLE_QUOTE_FSTRING = 1; + public static readonly DOUBLE_QUOTE_FSTRING = 2; // tslint:disable:no-trailing-whitespace public static readonly channelNames: string[] = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT"]; // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = ["DEFAULT_MODE"]; + public static readonly modeNames: string[] = ["DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING"]; public static readonly ruleNames: string[] = [ "BlockComment", @@ -128,6 +138,7 @@ export class KipperLexer extends Lexer { "RightParen", "LeftBracket", "RightBracket", + "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", @@ -156,13 +167,19 @@ export class KipperLexer extends Lexer { "Dot", "Identifier", "IntegerConstant", - "SingleQuoteFStringLiteral", - "DoubleQuoteFStringLiteral", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", "FloatingConstant", "Whitespace", "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteExpStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteExpStart", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", "IdentifierNondigit", "Nondigit", "Digit", @@ -185,6 +202,10 @@ export class KipperLexer extends Lexer { "SimpleEscapeSequence", "OctalEscapeSequence", "HexadecimalEscapeSequence", + "SingleQuoteFStringSCharSequence", + "SingleQuoteFStringSChar", + "DoubleQuoteFStringSCharSequence", + "DoubleQuoteFStringSChar", "SingleQuoteSCharSequence", "SingleQuoteSChar", "DoubleQuoteSCharSequence", @@ -195,6 +216,7 @@ export class KipperLexer extends Lexer { undefined, undefined, undefined, + undefined, "'const'", "'var'", "'as'", @@ -228,6 +250,7 @@ export class KipperLexer extends Lexer { "')'", "'['", "']'", + undefined, "'{'", "'}'", "'+'", @@ -257,6 +280,7 @@ export class KipperLexer extends Lexer { ]; private static readonly _SYMBOLIC_NAMES: Array = [ undefined, + "FStringExpStart", "BlockComment", "LineComment", "Const", @@ -292,6 +316,7 @@ export class KipperLexer extends Lexer { "RightParen", "LeftBracket", "RightBracket", + "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", @@ -320,13 +345,17 @@ export class KipperLexer extends Lexer { "Dot", "Identifier", "IntegerConstant", - "SingleQuoteFStringLiteral", - "DoubleQuoteFStringLiteral", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", "FloatingConstant", "Whitespace", "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( KipperLexer._LITERAL_NAMES, @@ -371,296 +400,415 @@ export class KipperLexer extends Lexer { return KipperLexer.modeNames; } + // @Override + public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { + switch (ruleIndex) { + case 69: + this.FStringSingleQuoteStart_action(_localctx, actionIndex); + break; + + case 70: + this.FStringDoubleQuoteStart_action(_localctx, actionIndex); + break; + + case 72: + this.FStringSingleQuoteEnd_action(_localctx, actionIndex); + break; + + case 75: + this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); + break; + } + } + private FStringSingleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 0: + this.incrementFStringDepth(); + break; + } + } + private FStringDoubleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 1: + this.incrementFStringDepth(); + break; + } + } + private FStringSingleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 2: + this.decrementFStringDepth(); + break; + } + } + private FStringDoubleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { + case 3: + this.decrementFStringDepth(); + break; + } + } + // @Override + public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 35: + return this.FStringExpEnd_sempred(_localctx, predIndex); + + case 71: + return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); + + case 74: + return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); + } + return true; + } + private FStringExpEnd_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.insideFString(); + } + return true; + } + private FStringSingleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 1: + return this.insideFString(); + } + return true; + } + private FStringDoubleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 2: + return this.insideFString(); + } + return true; + } + private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02H\u0267\b\x01" + - "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" + - "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" + - "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" + - "\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t" + - "\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t" + - '\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04"\t' + - "\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x04*\t*\x04" + - "+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + - "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + - "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + - "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" + - "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" + - "X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t^\x04_\t_\x04`\t" + - "`\x04a\ta\x03\x02\x03\x02\x03\x02\x03\x02\x07\x02\xC8\n\x02\f\x02\x0E" + - "\x02\xCB\v\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03" + - "\x03\x03\x03\x03\x07\x03\xD6\n\x03\f\x03\x0E\x03\xD9\v\x03\x03\x03\x03" + - "\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03" + - "\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\x07\x03" + - "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03" + - "\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03" + - "\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11" + - "\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13" + - "\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15" + - "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17" + - "\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C" + - "\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C" + - "\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03" + - "\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03&\x03&\x03'\x03'\x03(\x03" + - "(\x03(\x03)\x03)\x03*\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03" + - ".\x03.\x03/\x03/\x03/\x030\x030\x030\x031\x031\x032\x032\x033\x033\x03" + - "3\x034\x034\x034\x035\x035\x035\x036\x036\x036\x037\x037\x037\x038\x03" + - "8\x038\x039\x039\x039\x03:\x03:\x03;\x03;\x03;\x03<\x03<\x03=\x03=\x03" + - "=\x03>\x03>\x03?\x03?\x03?\x07?\u01B9\n?\f?\x0E?\u01BC\v?\x03@\x03@\x03" + - "@\x03@\x05@\u01C2\n@\x03A\x03A\x03A\x03A\x05A\u01C8\nA\x03A\x03A\x03B" + - "\x03B\x03B\x03B\x05B\u01D0\nB\x03B\x03B\x03C\x03C\x05C\u01D6\nC\x03C\x03" + - "C\x03D\x03D\x05D\u01DC\nD\x03D\x03D\x03E\x03E\x03F\x06F\u01E3\nF\rF\x0E" + - "F\u01E4\x03F\x03F\x03G\x03G\x03G\x03G\x03H\x03H\x03I\x03I\x03J\x03J\x03" + - "K\x06K\u01F4\nK\rK\x0EK\u01F5\x03L\x03L\x03L\x06L\u01FB\nL\rL\x0EL\u01FC" + - "\x03M\x03M\x03M\x06M\u0202\nM\rM\x0EM\u0203\x03N\x03N\x03N\x06N\u0209" + - "\nN\rN\x0EN\u020A\x03O\x03O\x03P\x03P\x03Q\x03Q\x03R\x03R\x03S\x03S\x05" + - "S\u0217\nS\x03S\x03S\x03S\x05S\u021C\nS\x03T\x05T\u021F\nT\x03T\x03T\x03" + - "T\x03T\x03T\x05T\u0226\nT\x03U\x03U\x05U\u022A\nU\x03U\x03U\x03V\x06V" + - "\u022F\nV\rV\x0EV\u0230\x03W\x03W\x03X\x06X\u0236\nX\rX\x0EX\u0237\x03" + - "Y\x03Y\x05Y\u023C\nY\x03Z\x03Z\x03Z\x05Z\u0241\nZ\x03[\x03[\x03[\x03\\" + - "\x03\\\x03\\\x05\\\u0249\n\\\x03\\\x05\\\u024C\n\\\x03]\x03]\x03]\x03" + - "]\x06]\u0252\n]\r]\x0E]\u0253\x03^\x06^\u0257\n^\r^\x0E^\u0258\x03_\x03" + - "_\x05_\u025D\n_\x03`\x06`\u0260\n`\r`\x0E`\u0261\x03a\x03a\x05a\u0266" + - "\na\x03\xC9\x02\x02b\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02" + - "\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02" + - "\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14'" + - "\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C" + - '7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02"C\x02#E\x02$G\x02%I\x02' + - "&K\x02'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a" + - "\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02" + - "F\x8B\x02G\x8D\x02H\x8F\x02\x02\x91\x02\x02\x93\x02\x02\x95\x02\x02\x97" + - "\x02\x02\x99\x02\x02\x9B\x02\x02\x9D\x02\x02\x9F\x02\x02\xA1\x02\x02\xA3" + - "\x02\x02\xA5\x02\x02\xA7\x02\x02\xA9\x02\x02\xAB\x02\x02\xAD\x02\x02\xAF" + - "\x02\x02\xB1\x02\x02\xB3\x02\x02\xB5\x02\x02\xB7\x02\x02\xB9\x02\x02\xBB" + - "\x02\x02\xBD\x02\x02\xBF\x02\x02\xC1\x02\x02\x03\x02\x12\x05\x02\f\f\x0F" + - '\x0F\u202A\u202B\x06\x02\v\v\r\x0E""\xA2\xA2\x05\x02C\\aac|\x03\x02' + - "2;\x04\x02DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05" + - "\x022;CHch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\f\x02$$))A" + - "A^^cdhhppttvvxx\x06\x02\f\f\x0F\x0F$$^^\x02\u026D\x02\x03\x03\x02\x02" + - "\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02" + - "\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02" + - "\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02" + - "\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02" + - "\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02" + - "\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02'\x03\x02\x02\x02\x02)" + - "\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02" + - "\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02" + - "\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03" + - "\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02" + - "\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02" + - "K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02" + - "\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02" + - "\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03" + - "\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02" + - "\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02" + - "m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02" + - "\x02\x02\x02u\x03\x02\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02" + - "\x02{\x03\x02\x02\x02\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02" + - "\x81\x03\x02\x02\x02\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02" + - "\x87\x03\x02\x02\x02\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02" + - "\x8D\x03\x02\x02\x02\x03\xC3\x03\x02\x02\x02\x05\xD1\x03\x02\x02\x02\x07" + - "\xDC\x03\x02\x02\x02\t\xE2\x03\x02\x02\x02\v\xE6\x03\x02\x02\x02\r\xE9" + - "\x03\x02\x02\x02\x0F\xED\x03\x02\x02\x02\x11\xF4\x03\x02\x02\x02\x13\xF9" + - "\x03\x02\x02\x02\x15\u0101\x03\x02\x02\x02\x17\u0107\x03\x02\x02\x02\x19" + - "\u0110\x03\x02\x02\x02\x1B\u0113\x03\x02\x02\x02\x1D\u0119\x03\x02\x02" + - "\x02\x1F\u011C\x03\x02\x02\x02!\u0121\x03\x02\x02\x02#\u0125\x03\x02\x02" + - "\x02%\u012A\x03\x02\x02\x02'\u012E\x03\x02\x02\x02)\u0135\x03\x02\x02" + - "\x02+\u013A\x03\x02\x02\x02-\u013D\x03\x02\x02\x02/\u0142\x03\x02\x02" + - "\x021\u0148\x03\x02\x02\x023\u014F\x03\x02\x02\x025\u0154\x03\x02\x02" + - "\x027\u0159\x03\x02\x02\x029\u0163\x03\x02\x02\x02;\u0165\x03\x02\x02" + - "\x02=\u0167\x03\x02\x02\x02?\u0169\x03\x02\x02\x02A\u016B\x03\x02\x02" + - "\x02C\u016D\x03\x02\x02\x02E\u016F\x03\x02\x02\x02G\u0171\x03\x02\x02" + - "\x02I\u0173\x03\x02\x02\x02K\u0175\x03\x02\x02\x02M\u0177\x03\x02\x02" + - "\x02O\u0179\x03\x02\x02\x02Q\u017C\x03\x02\x02\x02S\u017E\x03\x02\x02" + - "\x02U\u0181\x03\x02\x02\x02W\u0183\x03\x02\x02\x02Y\u0185\x03\x02\x02" + - "\x02[\u0187\x03\x02\x02\x02]\u018A\x03\x02\x02\x02_\u018D\x03\x02\x02" + - "\x02a\u0190\x03\x02\x02\x02c\u0192\x03\x02\x02\x02e\u0194\x03\x02\x02" + - "\x02g\u0197\x03\x02\x02\x02i\u019A\x03\x02\x02\x02k\u019D\x03\x02\x02" + - "\x02m\u01A0\x03\x02\x02\x02o\u01A3\x03\x02\x02\x02q\u01A6\x03\x02\x02" + - "\x02s\u01A9\x03\x02\x02\x02u\u01AB\x03\x02\x02\x02w\u01AE\x03\x02\x02" + - "\x02y\u01B0\x03\x02\x02\x02{\u01B3\x03\x02\x02\x02}\u01B5\x03\x02\x02" + - "\x02\x7F\u01C1\x03\x02\x02\x02\x81\u01C3\x03\x02\x02\x02\x83\u01CB\x03" + - "\x02\x02\x02\x85\u01D3\x03\x02\x02\x02\x87\u01D9\x03\x02\x02\x02\x89\u01DF" + - "\x03\x02\x02\x02\x8B\u01E2\x03\x02\x02\x02\x8D\u01E8\x03\x02\x02\x02\x8F" + - "\u01EC\x03\x02\x02\x02\x91\u01EE\x03\x02\x02\x02\x93\u01F0\x03\x02\x02" + - "\x02\x95\u01F3\x03\x02\x02\x02\x97\u01F7\x03\x02\x02\x02\x99\u01FE\x03" + - "\x02\x02\x02\x9B\u0205\x03\x02\x02\x02\x9D\u020C\x03\x02\x02\x02\x9F\u020E" + - "\x03\x02\x02\x02\xA1\u0210\x03\x02\x02\x02\xA3\u0212\x03\x02\x02\x02\xA5" + - "\u021B\x03\x02\x02\x02\xA7\u0225\x03\x02\x02\x02\xA9\u0227\x03\x02\x02" + - "\x02\xAB\u022E\x03\x02\x02\x02\xAD\u0232\x03\x02\x02\x02\xAF\u0235\x03" + - "\x02\x02\x02\xB1\u023B\x03\x02\x02\x02\xB3\u0240\x03\x02\x02\x02\xB5\u0242" + - "\x03\x02\x02\x02\xB7\u0245\x03\x02\x02\x02\xB9\u024D\x03\x02\x02\x02\xBB" + - "\u0256\x03\x02\x02\x02\xBD\u025C\x03\x02\x02\x02\xBF\u025F\x03\x02\x02" + - "\x02\xC1\u0265\x03\x02\x02\x02\xC3\xC4\x071\x02\x02\xC4\xC5\x07,\x02\x02" + - "\xC5\xC9\x03\x02\x02\x02\xC6\xC8\v\x02\x02\x02\xC7\xC6\x03\x02\x02\x02" + - "\xC8\xCB\x03\x02\x02\x02\xC9\xCA\x03\x02\x02\x02\xC9\xC7\x03\x02\x02\x02" + - "\xCA\xCC\x03\x02\x02\x02\xCB\xC9\x03\x02\x02\x02\xCC\xCD\x07,\x02\x02" + - "\xCD\xCE\x071\x02\x02\xCE\xCF\x03\x02\x02\x02\xCF\xD0\b\x02\x02\x02\xD0" + - "\x04\x03\x02\x02\x02\xD1\xD2\x071\x02\x02\xD2\xD3\x071\x02\x02\xD3\xD7" + - "\x03\x02\x02\x02\xD4\xD6\n\x02\x02\x02\xD5\xD4\x03\x02\x02\x02\xD6\xD9" + - "\x03\x02\x02\x02\xD7\xD5\x03\x02\x02\x02\xD7\xD8\x03\x02\x02\x02\xD8\xDA" + - "\x03\x02\x02\x02\xD9\xD7\x03\x02\x02\x02\xDA\xDB\b\x03\x02\x02\xDB\x06" + - "\x03\x02\x02\x02\xDC\xDD\x07e\x02\x02\xDD\xDE\x07q\x02\x02\xDE\xDF\x07" + - "p\x02\x02\xDF\xE0\x07u\x02\x02\xE0\xE1\x07v\x02\x02\xE1\b\x03\x02\x02" + - "\x02\xE2\xE3\x07x\x02\x02\xE3\xE4\x07c\x02\x02\xE4\xE5\x07t\x02\x02\xE5" + - "\n\x03\x02\x02\x02\xE6\xE7\x07c\x02\x02\xE7\xE8\x07u\x02\x02\xE8\f\x03" + - "\x02\x02\x02\xE9\xEA\x070\x02\x02\xEA\xEB\x070\x02\x02\xEB\xEC\x070\x02" + - "\x02\xEC\x0E\x03\x02\x02\x02\xED\xEE\x07u\x02\x02\xEE\xEF\x07y\x02\x02" + - "\xEF\xF0\x07k\x02\x02\xF0\xF1\x07v\x02\x02\xF1\xF2\x07e\x02\x02\xF2\xF3" + - "\x07j\x02\x02\xF3\x10\x03\x02\x02\x02\xF4\xF5\x07e\x02\x02\xF5\xF6\x07" + - "c\x02\x02\xF6\xF7\x07u\x02\x02\xF7\xF8\x07g\x02\x02\xF8\x12\x03\x02\x02" + - "\x02\xF9\xFA\x07f\x02\x02\xFA\xFB\x07g\x02\x02\xFB\xFC\x07h\x02\x02\xFC" + - "\xFD\x07c\x02\x02\xFD\xFE\x07w\x02\x02\xFE\xFF\x07n\x02\x02\xFF\u0100" + - "\x07v\x02\x02\u0100\x14\x03\x02\x02\x02\u0101\u0102\x07d\x02\x02\u0102" + - "\u0103\x07t\x02\x02\u0103\u0104\x07g\x02\x02\u0104\u0105\x07c\x02\x02" + - "\u0105\u0106\x07m\x02\x02\u0106\x16\x03\x02\x02\x02\u0107\u0108\x07e\x02" + - "\x02\u0108\u0109\x07q\x02\x02\u0109\u010A\x07p\x02\x02\u010A\u010B\x07" + - "v\x02\x02\u010B\u010C\x07k\x02\x02\u010C\u010D\x07p\x02\x02\u010D\u010E" + - "\x07w\x02\x02\u010E\u010F\x07g\x02\x02\u010F\x18\x03\x02\x02\x02\u0110" + - "\u0111\x07f\x02\x02\u0111\u0112\x07q\x02\x02\u0112\x1A\x03\x02\x02\x02" + - "\u0113\u0114\x07y\x02\x02\u0114\u0115\x07j\x02\x02\u0115\u0116\x07k\x02" + - "\x02\u0116\u0117\x07n\x02\x02\u0117\u0118\x07g\x02\x02\u0118\x1C\x03\x02" + - "\x02\x02\u0119\u011A\x07k\x02\x02\u011A\u011B\x07h\x02\x02\u011B\x1E\x03" + - "\x02\x02\x02\u011C\u011D\x07g\x02\x02\u011D\u011E\x07n\x02\x02\u011E\u011F" + - "\x07u\x02\x02\u011F\u0120\x07g\x02\x02\u0120 \x03\x02\x02\x02\u0121\u0122" + - "\x07h\x02\x02\u0122\u0123\x07q\x02\x02\u0123\u0124\x07t\x02\x02\u0124" + - '"\x03\x02\x02\x02\u0125\u0126\x07g\x02\x02\u0126\u0127\x07p\x02\x02\u0127' + - "\u0128\x07w\x02\x02\u0128\u0129\x07o\x02\x02\u0129$\x03\x02\x02\x02\u012A" + - "\u012B\x07f\x02\x02\u012B\u012C\x07g\x02\x02\u012C\u012D\x07h\x02\x02" + - "\u012D&\x03\x02\x02\x02\u012E\u012F\x07t\x02\x02\u012F\u0130\x07g\x02" + - "\x02\u0130\u0131\x07v\x02\x02\u0131\u0132\x07w\x02\x02\u0132\u0133\x07" + - "t\x02\x02\u0133\u0134\x07p\x02\x02\u0134(\x03\x02\x02\x02\u0135\u0136" + - "\x07e\x02\x02\u0136\u0137\x07c\x02\x02\u0137\u0138\x07n\x02\x02\u0138" + - "\u0139\x07n\x02\x02\u0139*\x03\x02\x02\x02\u013A\u013B\x07/\x02\x02\u013B" + - "\u013C\x07@\x02\x02\u013C,\x03\x02\x02\x02\u013D\u013E\x07v\x02\x02\u013E" + - "\u013F\x07t\x02\x02\u013F\u0140\x07w\x02\x02\u0140\u0141\x07g\x02\x02" + - "\u0141.\x03\x02\x02\x02\u0142\u0143\x07h\x02\x02\u0143\u0144\x07c\x02" + - "\x02\u0144\u0145\x07n\x02\x02\u0145\u0146\x07u\x02\x02\u0146\u0147\x07" + - "g\x02\x02\u01470\x03\x02\x02\x02\u0148\u0149\x07v\x02\x02\u0149\u014A" + - "\x07{\x02\x02\u014A\u014B\x07r\x02\x02\u014B\u014C\x07g\x02\x02\u014C" + - "\u014D\x07q\x02\x02\u014D\u014E\x07h\x02\x02\u014E2\x03\x02\x02\x02\u014F" + - "\u0150\x07x\x02\x02\u0150\u0151\x07q\x02\x02\u0151\u0152\x07k\x02\x02" + - "\u0152\u0153\x07f\x02\x02\u01534\x03\x02\x02\x02\u0154\u0155\x07p\x02" + - "\x02\u0155\u0156\x07w\x02\x02\u0156\u0157\x07n\x02\x02\u0157\u0158\x07" + - "n\x02\x02\u01586\x03\x02\x02\x02\u0159\u015A\x07w\x02\x02\u015A\u015B" + - "\x07p\x02\x02\u015B\u015C\x07f\x02\x02\u015C\u015D\x07g\x02\x02\u015D" + - "\u015E\x07h\x02\x02\u015E\u015F\x07k\x02\x02\u015F\u0160\x07p\x02\x02" + - "\u0160\u0161\x07g\x02\x02\u0161\u0162\x07f\x02\x02\u01628\x03\x02\x02" + - "\x02\u0163\u0164\x07.\x02\x02\u0164:\x03\x02\x02\x02\u0165\u0166\x07=" + - "\x02\x02\u0166<\x03\x02\x02\x02\u0167\u0168\x07A\x02\x02\u0168>\x03\x02" + - "\x02\x02\u0169\u016A\x07<\x02\x02\u016A@\x03\x02\x02\x02\u016B\u016C\x07" + - "*\x02\x02\u016CB\x03\x02\x02\x02\u016D\u016E\x07+\x02\x02\u016ED\x03\x02" + - "\x02\x02\u016F\u0170\x07]\x02\x02\u0170F\x03\x02\x02\x02\u0171\u0172\x07" + - "_\x02\x02\u0172H\x03\x02\x02\x02\u0173\u0174\x07}\x02\x02\u0174J\x03\x02" + - "\x02\x02\u0175\u0176\x07\x7F\x02\x02\u0176L\x03\x02\x02\x02\u0177\u0178" + - "\x07-\x02\x02\u0178N\x03\x02\x02\x02\u0179\u017A\x07-\x02\x02\u017A\u017B" + - "\x07-\x02\x02\u017BP\x03\x02\x02\x02\u017C\u017D\x07/\x02\x02\u017DR\x03" + - "\x02\x02\x02\u017E\u017F\x07/\x02\x02\u017F\u0180\x07/\x02\x02\u0180T" + - "\x03\x02\x02\x02\u0181\u0182\x07,\x02\x02\u0182V\x03\x02\x02\x02\u0183" + - "\u0184\x071\x02\x02\u0184X\x03\x02\x02\x02\u0185\u0186\x07'\x02\x02\u0186" + - "Z\x03\x02\x02\x02\u0187\u0188\x07,\x02\x02\u0188\u0189\x07,\x02\x02\u0189" + - "\\\x03\x02\x02\x02\u018A\u018B\x07(\x02\x02\u018B\u018C\x07(\x02\x02\u018C" + - "^\x03\x02\x02\x02\u018D\u018E\x07~\x02\x02\u018E\u018F\x07~\x02\x02\u018F" + - "`\x03\x02\x02\x02\u0190\u0191\x07#\x02\x02\u0191b\x03\x02\x02\x02\u0192" + - "\u0193\x07?\x02\x02\u0193d\x03\x02\x02\x02\u0194\u0195\x07-\x02\x02\u0195" + - "\u0196\x07?\x02\x02\u0196f\x03\x02\x02\x02\u0197\u0198\x07/\x02\x02\u0198" + - "\u0199\x07?\x02\x02\u0199h\x03\x02\x02\x02\u019A\u019B\x07,\x02\x02\u019B" + - "\u019C\x07?\x02\x02\u019Cj\x03\x02\x02\x02\u019D\u019E\x071\x02\x02\u019E" + - "\u019F\x07?\x02\x02\u019Fl\x03\x02\x02\x02\u01A0\u01A1\x07'\x02\x02\u01A1" + - "\u01A2\x07?\x02\x02\u01A2n\x03\x02\x02\x02\u01A3\u01A4\x07?\x02\x02\u01A4" + - "\u01A5\x07?\x02\x02\u01A5p\x03\x02\x02\x02\u01A6\u01A7\x07#\x02\x02\u01A7" + - "\u01A8\x07?\x02\x02\u01A8r\x03\x02\x02\x02\u01A9\u01AA\x07>\x02\x02\u01AA" + - "t\x03\x02\x02\x02\u01AB\u01AC\x07>\x02\x02\u01AC\u01AD\x07?\x02\x02\u01AD" + - "v\x03\x02\x02\x02\u01AE\u01AF\x07@\x02\x02\u01AFx\x03\x02\x02\x02\u01B0" + - "\u01B1\x07@\x02\x02\u01B1\u01B2\x07?\x02\x02\u01B2z\x03\x02\x02\x02\u01B3" + - "\u01B4\x070\x02\x02\u01B4|\x03\x02\x02\x02\u01B5\u01BA\x05\x8FH\x02\u01B6" + - "\u01B9\x05\x8FH\x02\u01B7\u01B9\x05\x93J\x02\u01B8\u01B6\x03\x02\x02\x02" + - "\u01B8\u01B7\x03\x02\x02\x02\u01B9\u01BC\x03\x02\x02\x02\u01BA\u01B8\x03" + - "\x02\x02\x02\u01BA\u01BB\x03\x02\x02\x02\u01BB~\x03\x02\x02\x02\u01BC" + - "\u01BA\x03\x02\x02\x02\u01BD\u01C2\x05\x95K\x02\u01BE\u01C2\x05\x99M\x02" + - "\u01BF\u01C2\x05\x9BN\x02\u01C0\u01C2\x05\x97L\x02\u01C1\u01BD\x03\x02" + - "\x02\x02\u01C1\u01BE\x03\x02\x02\x02\u01C1\u01BF\x03\x02\x02\x02\u01C1" + - "\u01C0\x03\x02\x02\x02\u01C2\x80\x03\x02\x02\x02\u01C3\u01C4\x07h\x02" + - "\x02\u01C4\u01C5\x07)\x02\x02\u01C5\u01C7\x03\x02\x02\x02\u01C6\u01C8" + - "\x05\xBB^\x02\u01C7\u01C6\x03\x02\x02\x02\u01C7\u01C8\x03\x02\x02\x02" + - "\u01C8\u01C9\x03\x02\x02\x02\u01C9\u01CA\x07)\x02\x02\u01CA\x82\x03\x02" + - "\x02\x02\u01CB\u01CC\x07h\x02\x02\u01CC\u01CD\x07$\x02\x02\u01CD\u01CF" + - "\x03\x02\x02\x02\u01CE\u01D0\x05\xBF`\x02\u01CF\u01CE\x03\x02\x02\x02" + - "\u01CF\u01D0\x03\x02\x02\x02\u01D0\u01D1\x03\x02\x02\x02\u01D1\u01D2\x07" + - "$\x02\x02\u01D2\x84\x03\x02\x02\x02\u01D3\u01D5\x07)\x02\x02\u01D4\u01D6" + - "\x05\xBB^\x02\u01D5\u01D4\x03\x02\x02\x02\u01D5\u01D6\x03\x02\x02\x02" + - "\u01D6\u01D7\x03\x02\x02\x02\u01D7\u01D8\x07)\x02\x02\u01D8\x86\x03\x02" + - "\x02\x02\u01D9\u01DB\x07$\x02\x02\u01DA\u01DC\x05\xBF`\x02\u01DB\u01DA" + - "\x03\x02\x02\x02\u01DB\u01DC\x03\x02\x02\x02\u01DC\u01DD\x03\x02\x02\x02" + - "\u01DD\u01DE\x07$\x02\x02\u01DE\x88\x03\x02\x02\x02\u01DF\u01E0\x05\xA5" + - "S\x02\u01E0\x8A\x03\x02\x02\x02\u01E1\u01E3\t\x03\x02\x02\u01E2\u01E1" + - "\x03\x02\x02\x02\u01E3\u01E4\x03\x02\x02\x02\u01E4\u01E2\x03\x02\x02\x02" + - "\u01E4\u01E5\x03\x02\x02\x02\u01E5\u01E6\x03\x02\x02\x02\u01E6\u01E7\b" + - "F\x03\x02\u01E7\x8C\x03\x02\x02\x02\u01E8\u01E9\t\x02\x02\x02\u01E9\u01EA" + - "\x03\x02\x02\x02\u01EA\u01EB\bG\x03\x02\u01EB\x8E\x03\x02\x02\x02\u01EC" + - "\u01ED\x05\x91I\x02\u01ED\x90\x03\x02\x02\x02\u01EE\u01EF\t\x04\x02\x02" + - "\u01EF\x92\x03\x02\x02\x02\u01F0\u01F1\t\x05\x02\x02\u01F1\x94\x03\x02" + - "\x02\x02\u01F2\u01F4\x05\x93J\x02\u01F3\u01F2\x03\x02\x02\x02\u01F4\u01F5" + - "\x03\x02\x02\x02\u01F5\u01F3\x03\x02\x02\x02\u01F5\u01F6\x03\x02\x02\x02" + - "\u01F6\x96\x03\x02\x02\x02\u01F7\u01F8\x072\x02\x02\u01F8\u01FA\t\x06" + - "\x02\x02\u01F9\u01FB\x05\x9FP\x02\u01FA\u01F9\x03\x02\x02\x02\u01FB\u01FC" + - "\x03\x02\x02\x02\u01FC\u01FA\x03\x02\x02\x02\u01FC\u01FD\x03\x02\x02\x02" + - "\u01FD\x98\x03\x02\x02\x02\u01FE\u01FF\x072\x02\x02\u01FF\u0201\t\x07" + - "\x02\x02\u0200\u0202\x05\xA1Q\x02\u0201\u0200\x03\x02\x02\x02\u0202\u0203" + - "\x03\x02\x02\x02\u0203\u0201\x03\x02\x02\x02\u0203\u0204\x03\x02\x02\x02" + - "\u0204\x9A\x03\x02\x02\x02\u0205\u0206\x072\x02\x02\u0206\u0208\t\b\x02" + - "\x02\u0207\u0209\x05\xA3R\x02\u0208\u0207\x03\x02\x02\x02\u0209\u020A" + - "\x03\x02\x02\x02\u020A\u0208\x03\x02\x02\x02\u020A\u020B\x03\x02\x02\x02" + - "\u020B\x9C\x03\x02\x02\x02\u020C\u020D\t\t\x02\x02\u020D\x9E\x03\x02\x02" + - "\x02\u020E\u020F\t\n\x02\x02\u020F\xA0\x03\x02\x02\x02\u0210\u0211\t\v" + - "\x02\x02\u0211\xA2\x03\x02\x02\x02\u0212\u0213\t\f\x02\x02\u0213\xA4\x03" + - "\x02\x02\x02\u0214\u0216\x05\xA7T\x02\u0215\u0217\x05\xA9U\x02\u0216\u0215" + - "\x03\x02\x02\x02\u0216\u0217\x03\x02\x02\x02\u0217\u021C\x03\x02\x02\x02" + - "\u0218\u0219\x05\xABV\x02\u0219\u021A\x05\xA9U\x02\u021A\u021C\x03\x02" + - "\x02\x02\u021B\u0214\x03\x02\x02\x02\u021B\u0218\x03\x02\x02\x02\u021C" + - "\xA6\x03\x02\x02\x02\u021D\u021F\x05\xABV\x02\u021E\u021D\x03\x02\x02" + - "\x02\u021E\u021F\x03\x02\x02\x02\u021F\u0220\x03\x02\x02\x02\u0220\u0221" + - "\x070\x02\x02\u0221\u0226\x05\xABV\x02\u0222\u0223\x05\xABV\x02\u0223" + - "\u0224\x070\x02\x02\u0224\u0226\x03\x02\x02\x02\u0225\u021E\x03\x02\x02" + - "\x02\u0225\u0222\x03\x02\x02\x02\u0226\xA8\x03\x02\x02\x02\u0227\u0229" + - "\t\r\x02\x02\u0228\u022A\x05\xADW\x02\u0229\u0228\x03\x02\x02\x02\u0229" + - "\u022A\x03\x02\x02\x02\u022A\u022B\x03\x02\x02\x02\u022B\u022C\x05\xAB" + - "V\x02\u022C\xAA\x03\x02\x02\x02\u022D\u022F\x05\x93J\x02"; + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02N\u02AE\b\x01" + + "\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04" + + "\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f" + + "\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11" + + "\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16" + + "\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B" + + "\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!" + + "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t" + + ")\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x04" + + "2\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04" + + ";\t;\x04<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04" + + "D\tD\x04E\tE\x04F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04" + + "M\tM\x04N\tN\x04O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04" + + "V\tV\x04W\tW\x04X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t" + + "^\x04_\t_\x04`\t`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04" + + "g\tg\x04h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x03\x02\x03\x02\x03\x02\x03" + + "\x02\x07\x02\xE0\n\x02\f\x02\x0E\x02\xE3\v\x02\x03\x02\x03\x02\x03\x02" + + "\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x07\x03\xEE\n\x03\f\x03" + + "\x0E\x03\xF1\v\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03" + + "\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03" + + "\x07\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b" + + "\x03\t\x03\t\x03\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + + "\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03" + + "\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03" + + "\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03" + + "\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x18\x03" + + "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03" + + "\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03" + + '\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x03%' + + "\x03%\x03%\x03%\x03%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03)\x03" + + "*\x03*\x03+\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x03" + + "0\x030\x030\x031\x031\x031\x032\x032\x033\x033\x034\x034\x034\x035\x03" + + "5\x035\x036\x036\x036\x037\x037\x037\x038\x038\x038\x039\x039\x039\x03" + + ":\x03:\x03:\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03>\x03>\x03>\x03?\x03" + + "?\x03@\x03@\x03@\x07@\u01D6\n@\f@\x0E@\u01D9\v@\x03A\x03A\x03A\x03A\x05" + + "A\u01DF\nA\x03B\x03B\x05B\u01E3\nB\x03B\x03B\x03C\x03C\x05C\u01E9\nC\x03" + + "C\x03C\x03D\x03D\x03E\x06E\u01F0\nE\rE\x0EE\u01F1\x03E\x03E\x03F\x03F" + + "\x03F\x03F\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03H\x03" + + "H\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x03J\x03J\x03" + + "K\x03K\x03L\x03L\x03L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03M\x03N\x03" + + "N\x03O\x03O\x03P\x03P\x03Q\x03Q\x03R\x06R\u0229\nR\rR\x0ER\u022A\x03S" + + "\x03S\x03S\x06S\u0230\nS\rS\x0ES\u0231\x03T\x03T\x03T\x06T\u0237\nT\r" + + "T\x0ET\u0238\x03U\x03U\x03U\x06U\u023E\nU\rU\x0EU\u023F\x03V\x03V\x03" + + "W\x03W\x03X\x03X\x03Y\x03Y\x03Z\x03Z\x05Z\u024C\nZ\x03Z\x03Z\x03Z\x05" + + "Z\u0251\nZ\x03[\x05[\u0254\n[\x03[\x03[\x03[\x03[\x03[\x05[\u025B\n[\x03" + + "\\\x03\\\x05\\\u025F\n\\\x03\\\x03\\\x03]\x06]\u0264\n]\r]\x0E]\u0265" + + "\x03^\x03^\x03_\x06_\u026B\n_\r_\x0E_\u026C\x03`\x03`\x05`\u0271\n`\x03" + + "a\x03a\x03a\x05a\u0276\na\x03b\x03b\x03b\x03c\x03c\x03c\x05c\u027E\nc" + + "\x03c\x05c\u0281\nc\x03d\x03d\x03d\x03d\x06d\u0287\nd\rd\x0Ed\u0288\x03" + + "e\x06e\u028C\ne\re\x0Ee\u028D\x03f\x03f\x05f\u0292\nf\x03g\x06g\u0295" + + "\ng\rg\x0Eg\u0296\x03h\x03h\x05h\u029B\nh\x03i\x06i\u029E\ni\ri\x0Ei\u029F" + + "\x03j\x03j\x05j\u02A4\nj\x03k\x06k\u02A7\nk\rk\x0Ek\u02A8\x03l\x03l\x05" + + "l\u02AD\nl\x03\xE1\x02\x02m\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07" + + "\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E" + + "\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14'\x02" + + "\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02" + + '\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02"C\x02#E\x02$G\x02%I\x02&K\x02' + + "'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c" + + "\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B" + + "\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02\x02\x95\x02K\x97\x02L\x99\x02" + + "\x02\x9B\x02M\x9D\x02N\x9F\x02\x02\xA1\x02\x02\xA3\x02\x02\xA5\x02\x02" + + "\xA7\x02\x02\xA9\x02\x02\xAB\x02\x02\xAD\x02\x02\xAF\x02\x02\xB1\x02\x02" + + "\xB3\x02\x02\xB5\x02\x02\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02" + + "\xBF\x02\x02\xC1\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02" + + "\xCB\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02" + + "\xD7\x02\x02\xD9\x02\x02\x05\x02\x03\x04\x14\x05\x02\f\f\x0F\x0F\u202A" + + '\u202B\x06\x02\v\v\r\x0E""\xA2\xA2\x05\x02C\\aac|\x03\x022;\x04\x02' + + "DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05\x022;C" + + "Hch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$))AA^^cd" + + "hhppttvvxx}}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f\x0F\x0F" + + "$$^^}}\x7F\x7F\x06\x02\f\f\x0F\x0F$$^^\x02\u02B0\x02\x05\x03\x02\x02\x02" + + "\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02" + + "\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02" + + "\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02" + + "\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02" + + "\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03" + + "\x02\x02\x02\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02" + + "\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x02" + + "3\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02" + + "\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02" + + "\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03" + + "\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02" + + "\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02" + + "U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02" + + "\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02" + + "\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03" + + "\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02" + + "\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x02" + + "w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02\x02}\x03\x02" + + "\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02\x02\x83\x03\x02" + + "\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02" + + "\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02" + + "\x02\x02\x02\x91\x03\x02\x02\x02\x03\x93\x03\x02\x02\x02\x03\x95\x03\x02" + + "\x02\x02\x03\x97\x03\x02\x02\x02\x04\x99\x03\x02\x02\x02\x04\x9B\x03\x02" + + "\x02\x02\x04\x9D\x03\x02\x02\x02\x05\xDB\x03\x02\x02\x02\x07\xE9\x03\x02" + + "\x02\x02\t\xF4\x03\x02\x02\x02\v\xFA\x03\x02\x02\x02\r\xFE\x03\x02\x02" + + "\x02\x0F\u0101\x03\x02\x02\x02\x11\u0105\x03\x02\x02\x02\x13\u010C\x03" + + "\x02\x02\x02\x15\u0111\x03\x02\x02\x02\x17\u0119\x03\x02\x02\x02\x19\u011F" + + "\x03\x02\x02\x02\x1B\u0128\x03\x02\x02\x02\x1D\u012B\x03\x02\x02\x02\x1F" + + "\u0131\x03\x02\x02\x02!\u0134\x03\x02\x02\x02#\u0139\x03\x02\x02\x02%" + + "\u013D\x03\x02\x02\x02'\u0142\x03\x02\x02\x02)\u0146\x03\x02\x02\x02" + + "+\u014D\x03\x02\x02\x02-\u0152\x03\x02\x02\x02/\u0155\x03\x02\x02\x02" + + "1\u015A\x03\x02\x02\x023\u0160\x03\x02\x02\x025\u0167\x03\x02\x02\x02" + + "7\u016C\x03\x02\x02\x029\u0171\x03\x02\x02\x02;\u017B\x03\x02\x02\x02" + + "=\u017D\x03\x02\x02\x02?\u017F\x03\x02\x02\x02A\u0181\x03\x02\x02\x02" + + "C\u0183\x03\x02\x02\x02E\u0185\x03\x02\x02\x02G\u0187\x03\x02\x02\x02" + + "I\u0189\x03\x02\x02\x02K\u018B\x03\x02\x02\x02M\u0190\x03\x02\x02\x02" + + "O\u0192\x03\x02\x02\x02Q\u0194\x03\x02\x02\x02S\u0196\x03\x02\x02\x02" + + "U\u0199\x03\x02\x02\x02W\u019B\x03\x02\x02\x02Y\u019E\x03\x02\x02\x02" + + "[\u01A0\x03\x02\x02\x02]\u01A2\x03\x02\x02\x02_\u01A4\x03\x02\x02\x02" + + "a\u01A7\x03\x02\x02\x02c\u01AA\x03\x02\x02\x02e\u01AD\x03\x02\x02\x02" + + "g\u01AF\x03\x02\x02\x02i\u01B1\x03\x02\x02\x02k\u01B4\x03\x02\x02\x02" + + "m\u01B7\x03\x02\x02\x02o\u01BA\x03\x02\x02\x02q\u01BD\x03\x02\x02\x02" + + "s\u01C0\x03\x02\x02\x02u\u01C3\x03\x02\x02\x02w\u01C6\x03\x02\x02\x02" + + "y\u01C8\x03\x02\x02\x02{\u01CB\x03\x02\x02\x02}\u01CD\x03\x02\x02\x02" + + "\x7F\u01D0\x03\x02\x02\x02\x81\u01D2\x03\x02\x02\x02\x83\u01DE\x03\x02" + + "\x02\x02\x85\u01E0\x03\x02\x02\x02\x87\u01E6\x03\x02\x02\x02\x89\u01EC" + + "\x03\x02\x02\x02\x8B\u01EF\x03\x02\x02\x02\x8D\u01F5\x03\x02\x02\x02\x8F" + + "\u01F9\x03\x02\x02\x02\x91\u0200\x03\x02\x02\x02\x93\u0207\x03\x02\x02" + + "\x02\x95\u020D\x03\x02\x02\x02\x97\u0212\x03\x02\x02\x02\x99\u0214\x03" + + "\x02\x02\x02\x9B\u021A\x03\x02\x02\x02\x9D\u021F\x03\x02\x02\x02\x9F\u0221" + + "\x03\x02\x02\x02\xA1\u0223\x03\x02\x02\x02\xA3\u0225\x03\x02\x02\x02\xA5" + + "\u0228\x03\x02\x02\x02\xA7\u022C\x03\x02\x02\x02\xA9\u0233\x03\x02\x02" + + "\x02\xAB\u023A\x03\x02\x02\x02\xAD\u0241\x03\x02\x02\x02\xAF\u0243\x03" + + "\x02\x02\x02\xB1\u0245\x03\x02\x02\x02\xB3\u0247\x03\x02\x02\x02\xB5\u0250" + + "\x03\x02\x02\x02\xB7\u025A\x03\x02\x02\x02\xB9\u025C\x03\x02\x02\x02\xBB" + + "\u0263\x03\x02\x02\x02\xBD\u0267\x03\x02\x02\x02\xBF\u026A\x03\x02\x02" + + "\x02\xC1\u0270\x03\x02\x02\x02\xC3\u0275\x03\x02\x02\x02\xC5\u0277\x03" + + "\x02\x02\x02\xC7\u027A\x03\x02\x02\x02\xC9\u0282\x03\x02\x02\x02\xCB\u028B" + + "\x03\x02\x02\x02\xCD\u0291\x03\x02\x02\x02\xCF\u0294\x03\x02\x02\x02\xD1" + + "\u029A\x03\x02\x02\x02\xD3\u029D\x03\x02\x02\x02\xD5\u02A3\x03\x02\x02" + + "\x02\xD7\u02A6\x03\x02\x02\x02\xD9\u02AC\x03\x02\x02\x02\xDB\xDC\x071" + + "\x02\x02\xDC\xDD\x07,\x02\x02\xDD\xE1\x03\x02\x02\x02\xDE\xE0\v\x02\x02" + + "\x02\xDF\xDE\x03\x02\x02\x02\xE0\xE3\x03\x02\x02\x02\xE1\xE2\x03\x02\x02" + + "\x02\xE1\xDF\x03\x02\x02\x02\xE2\xE4\x03\x02\x02\x02\xE3\xE1\x03\x02\x02" + + "\x02\xE4\xE5\x07,\x02\x02\xE5\xE6\x071\x02\x02\xE6\xE7\x03\x02\x02\x02" + + "\xE7\xE8\b\x02\x02\x02\xE8\x06\x03\x02\x02\x02\xE9\xEA\x071\x02\x02\xEA" + + "\xEB\x071\x02\x02\xEB\xEF\x03\x02\x02\x02\xEC\xEE\n\x02\x02\x02\xED\xEC" + + "\x03\x02\x02\x02\xEE\xF1\x03\x02\x02\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0" + + "\x03\x02\x02\x02\xF0\xF2\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02\xF2\xF3" + + "\b\x03\x02\x02\xF3\b\x03\x02\x02\x02\xF4\xF5\x07e\x02\x02\xF5\xF6\x07" + + "q\x02\x02\xF6\xF7\x07p\x02\x02\xF7\xF8\x07u\x02\x02\xF8\xF9\x07v\x02\x02" + + "\xF9\n\x03\x02\x02\x02\xFA\xFB\x07x\x02\x02\xFB\xFC\x07c\x02\x02\xFC\xFD" + + "\x07t\x02\x02\xFD\f\x03\x02\x02\x02\xFE\xFF\x07c\x02\x02\xFF\u0100\x07" + + "u\x02\x02\u0100\x0E\x03\x02\x02\x02\u0101\u0102\x070\x02\x02\u0102\u0103" + + "\x070\x02\x02\u0103\u0104\x070\x02\x02\u0104\x10\x03\x02\x02\x02\u0105" + + "\u0106\x07u\x02\x02\u0106\u0107\x07y\x02\x02\u0107\u0108\x07k\x02\x02" + + "\u0108\u0109\x07v\x02\x02\u0109\u010A\x07e\x02\x02\u010A\u010B\x07j\x02" + + "\x02\u010B\x12\x03\x02\x02\x02\u010C\u010D\x07e\x02\x02\u010D\u010E\x07" + + "c\x02\x02\u010E\u010F\x07u\x02\x02\u010F\u0110\x07g\x02\x02\u0110\x14" + + "\x03\x02\x02\x02\u0111\u0112\x07f\x02\x02\u0112\u0113\x07g\x02\x02\u0113" + + "\u0114\x07h\x02\x02\u0114\u0115\x07c\x02\x02\u0115\u0116\x07w\x02\x02" + + "\u0116\u0117\x07n\x02\x02\u0117\u0118\x07v\x02\x02\u0118\x16\x03\x02\x02" + + "\x02\u0119\u011A\x07d\x02\x02\u011A\u011B\x07t\x02\x02\u011B\u011C\x07" + + "g\x02\x02\u011C\u011D\x07c\x02\x02\u011D\u011E\x07m\x02\x02\u011E\x18" + + "\x03\x02\x02\x02\u011F\u0120\x07e\x02\x02\u0120\u0121\x07q\x02\x02\u0121" + + "\u0122\x07p\x02\x02\u0122\u0123\x07v\x02\x02\u0123\u0124\x07k\x02\x02" + + "\u0124\u0125\x07p\x02\x02\u0125\u0126\x07w\x02\x02\u0126\u0127\x07g\x02" + + "\x02\u0127\x1A\x03\x02\x02\x02\u0128\u0129\x07f\x02\x02\u0129\u012A\x07" + + "q\x02\x02\u012A\x1C\x03\x02\x02\x02\u012B\u012C\x07y\x02\x02\u012C\u012D" + + "\x07j\x02\x02\u012D\u012E\x07k\x02\x02\u012E\u012F\x07n\x02\x02\u012F" + + "\u0130\x07g\x02\x02\u0130\x1E\x03\x02\x02\x02\u0131\u0132\x07k\x02\x02" + + "\u0132\u0133\x07h\x02\x02\u0133 \x03\x02\x02\x02\u0134\u0135\x07g\x02" + + "\x02\u0135\u0136\x07n\x02\x02\u0136\u0137\x07u\x02\x02\u0137\u0138\x07" + + 'g\x02\x02\u0138"\x03\x02\x02\x02\u0139\u013A\x07h\x02\x02\u013A\u013B' + + "\x07q\x02\x02\u013B\u013C\x07t\x02\x02\u013C$\x03\x02\x02\x02\u013D\u013E" + + "\x07g\x02\x02\u013E\u013F\x07p\x02\x02\u013F\u0140\x07w\x02\x02\u0140" + + "\u0141\x07o\x02\x02\u0141&\x03\x02\x02\x02\u0142\u0143\x07f\x02\x02\u0143" + + "\u0144\x07g\x02\x02\u0144\u0145\x07h\x02\x02\u0145(\x03\x02\x02\x02\u0146" + + "\u0147\x07t\x02\x02\u0147\u0148\x07g\x02\x02\u0148\u0149\x07v\x02\x02" + + "\u0149\u014A\x07w\x02\x02\u014A\u014B\x07t\x02\x02\u014B\u014C\x07p\x02" + + "\x02\u014C*\x03\x02\x02\x02\u014D\u014E\x07e\x02\x02\u014E\u014F\x07c" + + "\x02\x02\u014F\u0150\x07n\x02\x02\u0150\u0151\x07n\x02\x02\u0151,\x03" + + "\x02\x02\x02\u0152\u0153\x07/\x02\x02\u0153\u0154\x07@\x02\x02\u0154." + + "\x03\x02\x02\x02\u0155\u0156\x07v\x02\x02\u0156\u0157\x07t\x02\x02\u0157" + + "\u0158\x07w\x02\x02\u0158\u0159\x07g\x02\x02\u01590\x03\x02\x02\x02\u015A" + + "\u015B\x07h\x02\x02\u015B\u015C\x07c\x02\x02\u015C\u015D\x07n\x02\x02" + + "\u015D\u015E\x07u\x02\x02\u015E\u015F\x07g\x02\x02\u015F2\x03\x02\x02" + + "\x02\u0160\u0161\x07v\x02\x02\u0161\u0162\x07{\x02\x02\u0162\u0163\x07" + + "r\x02\x02\u0163\u0164\x07g\x02\x02\u0164\u0165\x07q\x02\x02\u0165\u0166" + + "\x07h\x02\x02\u01664\x03\x02\x02\x02\u0167\u0168\x07x\x02\x02\u0168\u0169" + + "\x07q\x02\x02\u0169\u016A\x07k\x02\x02\u016A\u016B\x07f\x02\x02\u016B" + + "6\x03\x02\x02\x02\u016C\u016D\x07p\x02\x02\u016D\u016E\x07w\x02\x02\u016E" + + "\u016F\x07n\x02\x02\u016F\u0170\x07n\x02\x02\u01708\x03\x02\x02\x02\u0171" + + "\u0172\x07w\x02\x02\u0172\u0173\x07p\x02\x02\u0173\u0174\x07f\x02\x02" + + "\u0174\u0175\x07g\x02\x02\u0175\u0176\x07h\x02\x02\u0176\u0177\x07k\x02" + + "\x02\u0177\u0178\x07p\x02\x02\u0178\u0179\x07g\x02\x02\u0179\u017A\x07" + + "f\x02\x02\u017A:\x03\x02\x02\x02\u017B\u017C\x07.\x02\x02\u017C<\x03\x02" + + "\x02\x02\u017D\u017E\x07=\x02\x02\u017E>\x03\x02\x02\x02\u017F\u0180\x07" + + "A\x02\x02\u0180@\x03\x02\x02\x02\u0181\u0182\x07<\x02\x02\u0182B\x03\x02" + + "\x02\x02\u0183\u0184\x07*\x02\x02\u0184D\x03\x02\x02\x02\u0185\u0186\x07" + + "+\x02\x02\u0186F\x03\x02\x02\x02\u0187\u0188\x07]\x02\x02\u0188H\x03\x02" + + "\x02\x02\u0189\u018A\x07_\x02\x02\u018AJ\x03\x02\x02\x02\u018B\u018C\x06" + + "%\x02\x02\u018C\u018D\x07\x7F\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E" + + "\u018F\b%\x03\x02\u018FL\x03\x02\x02\x02\u0190\u0191\x07}\x02\x02\u0191" + + "N\x03\x02\x02\x02\u0192\u0193\x07\x7F\x02\x02\u0193P\x03\x02\x02\x02\u0194" + + "\u0195\x07-\x02\x02\u0195R\x03\x02\x02\x02\u0196\u0197\x07-\x02\x02\u0197" + + "\u0198\x07-\x02\x02\u0198T\x03\x02\x02\x02\u0199\u019A\x07/\x02\x02\u019A" + + "V\x03\x02\x02\x02\u019B\u019C\x07/\x02\x02\u019C\u019D\x07/\x02\x02\u019D" + + "X\x03\x02\x02\x02\u019E\u019F\x07,\x02\x02\u019FZ\x03\x02\x02\x02\u01A0" + + "\u01A1\x071\x02\x02\u01A1\\\x03\x02\x02\x02\u01A2\u01A3\x07'\x02\x02" + + "\u01A3^\x03\x02\x02\x02\u01A4\u01A5\x07,\x02\x02\u01A5\u01A6\x07,\x02" + + "\x02\u01A6`\x03\x02\x02\x02\u01A7\u01A8\x07(\x02\x02\u01A8\u01A9\x07(" + + "\x02\x02\u01A9b\x03\x02\x02\x02\u01AA\u01AB\x07~\x02\x02\u01AB\u01AC\x07" + + "~\x02\x02\u01ACd\x03\x02\x02\x02\u01AD\u01AE\x07#\x02\x02\u01AEf\x03\x02" + + "\x02\x02\u01AF\u01B0\x07?\x02\x02\u01B0h\x03\x02\x02\x02\u01B1\u01B2\x07" + + "-\x02\x02\u01B2\u01B3\x07?\x02\x02\u01B3j\x03\x02\x02\x02\u01B4\u01B5" + + "\x07/\x02\x02\u01B5\u01B6\x07?\x02\x02\u01B6l\x03\x02\x02\x02\u01B7\u01B8" + + "\x07,\x02\x02\u01B8\u01B9\x07?\x02\x02\u01B9n\x03\x02\x02\x02\u01BA\u01BB" + + "\x071\x02\x02\u01BB\u01BC\x07?\x02\x02\u01BCp\x03\x02\x02\x02\u01BD\u01BE" + + "\x07'\x02\x02\u01BE\u01BF\x07?\x02\x02\u01BFr\x03\x02\x02\x02\u01C0\u01C1" + + "\x07?\x02\x02\u01C1\u01C2\x07?\x02\x02\u01C2t\x03\x02\x02\x02\u01C3\u01C4" + + "\x07#\x02\x02\u01C4\u01C5\x07?\x02\x02\u01C5v\x03\x02\x02\x02\u01C6\u01C7" + + "\x07>\x02\x02\u01C7x\x03\x02\x02\x02\u01C8\u01C9\x07>\x02\x02\u01C9\u01CA" + + "\x07?\x02\x02\u01CAz\x03\x02\x02\x02\u01CB\u01CC\x07@\x02\x02\u01CC|\x03" + + "\x02\x02\x02\u01CD\u01CE\x07@\x02\x02\u01CE\u01CF\x07?\x02\x02\u01CF~" + + "\x03\x02\x02\x02\u01D0\u01D1\x070\x02\x02\u01D1\x80\x03\x02\x02\x02\u01D2" + + "\u01D7\x05\x9FO\x02\u01D3\u01D6\x05\x9FO\x02\u01D4\u01D6\x05\xA3Q\x02" + + "\u01D5\u01D3\x03\x02\x02\x02\u01D5\u01D4\x03\x02\x02\x02\u01D6\u01D9\x03" + + "\x02\x02\x02\u01D7\u01D5\x03\x02\x02\x02\u01D7\u01D8\x03\x02\x02\x02\u01D8" + + "\x82\x03\x02\x02\x02\u01D9\u01D7\x03\x02\x02\x02\u01DA\u01DF\x05\xA5R" + + "\x02\u01DB\u01DF\x05\xA9T\x02\u01DC\u01DF\x05\xABU\x02\u01DD\u01DF\x05" + + "\xA7S\x02\u01DE\u01DA\x03\x02\x02\x02\u01DE\u01DB\x03\x02\x02\x02\u01DE" + + "\u01DC\x03\x02\x02\x02\u01DE\u01DD\x03\x02\x02\x02\u01DF\x84\x03\x02\x02" + + "\x02\u01E0\u01E2\x07)\x02\x02\u01E1\u01E3\x05\xD3i\x02\u01E2\u01E1\x03" + + "\x02\x02\x02\u01E2\u01E3\x03\x02\x02\x02\u01E3\u01E4\x03\x02\x02\x02\u01E4" + + "\u01E5\x07)\x02\x02\u01E5\x86\x03\x02\x02\x02\u01E6\u01E8\x07$\x02\x02" + + "\u01E7\u01E9\x05\xD7k\x02\u01E8\u01E7\x03\x02\x02\x02\u01E8\u01E9\x03" + + "\x02\x02\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EB\x07$\x02\x02\u01EB" + + "\x88\x03\x02\x02\x02\u01EC\u01ED\x05\xB5Z\x02\u01ED\x8A\x03\x02\x02\x02" + + "\u01EE\u01F0\t\x03\x02\x02\u01EF\u01EE\x03\x02\x02\x02\u01F0\u01F1\x03" + + "\x02\x02\x02\u01F1\u01EF\x03\x02\x02\x02\u01F1\u01F2\x03\x02\x02\x02\u01F2" + + "\u01F3\x03\x02\x02\x02\u01F3\u01F4\bE\x04\x02\u01F4\x8C\x03\x02\x02\x02" + + "\u01F5\u01F6\t\x02\x02\x02\u01F6\u01F7\x03\x02\x02\x02\u01F7\u01F8\bF" + + "\x04\x02\u01F8\x8E\x03\x02\x02\x02\u01F9\u01FA\x07h\x02\x02\u01FA\u01FB" + + "\x07)\x02\x02\u01FB\u01FC\x03\x02\x02\x02\u01FC\u01FD\bG\x05\x02\u01FD" + + "\u01FE\x03\x02\x02\x02\u01FE\u01FF\bG\x06\x02\u01FF\x90\x03\x02\x02\x02" + + "\u0200\u0201\x07h\x02\x02\u0201\u0202\x07$\x02\x02\u0202\u0203\x03\x02" + + "\x02\x02\u0203\u0204\bH\x07\x02\u0204\u0205\x03\x02\x02\x02\u0205\u0206" + + "\bH\b\x02\u0206\x92\x03\x02\x02\x02\u0207\u0208\x06I\x03\x02\u0208\u0209" + + "\x07}\x02\x02\u0209\u020A\x03\x02\x02\x02\u020A\u020B\bI\t\x02\u020B\u020C" + + "\bI\n\x02\u020C\x94\x03\x02\x02\x02\u020D\u020E\x07)\x02\x02\u020E\u020F" + + "\bJ\v\x02\u020F\u0210\x03\x02\x02\x02\u0210\u0211\bJ\x03\x02\u0211\x96" + + "\x03\x02\x02\x02\u0212\u0213\x05\xCBe\x02\u0213\x98\x03\x02\x02\x02\u0214" + + "\u0215\x06L\x04\x02\u0215\u0216\x07}\x02\x02\u0216\u0217\x03\x02\x02\x02" + + "\u0217\u0218\bL\t\x02\u0218\u0219\bL\n\x02\u0219\x9A\x03\x02\x02\x02\u021A" + + "\u021B\x07$\x02\x02\u021B\u021C\b"; private static readonly _serializedATNSegment1: string = - "\u022E\u022D\x03\x02\x02\x02\u022F\u0230\x03\x02\x02\x02\u0230\u022E\x03" + - "\x02\x02\x02\u0230\u0231\x03\x02\x02\x02\u0231\xAC\x03\x02\x02\x02\u0232" + - "\u0233\t\x0E\x02\x02\u0233\xAE\x03\x02\x02\x02\u0234\u0236\x05\xB1Y\x02" + - "\u0235\u0234\x03\x02\x02\x02\u0236\u0237\x03\x02\x02\x02\u0237\u0235\x03" + - "\x02\x02\x02\u0237\u0238\x03\x02\x02\x02\u0238\xB0\x03\x02\x02\x02\u0239" + - "\u023C\n\x0F\x02\x02\u023A\u023C\x05\xB3Z\x02\u023B\u0239\x03\x02\x02" + - "\x02\u023B\u023A\x03\x02\x02\x02\u023C\xB2\x03\x02\x02\x02\u023D\u0241" + - "\x05\xB5[\x02\u023E\u0241\x05\xB7\\\x02\u023F\u0241\x05\xB9]\x02\u0240" + - "\u023D\x03\x02\x02\x02\u0240\u023E\x03\x02\x02\x02\u0240\u023F\x03\x02" + - "\x02\x02\u0241\xB4\x03\x02\x02\x02\u0242\u0243\x07^\x02\x02\u0243\u0244" + - "\t\x10\x02\x02\u0244\xB6\x03\x02\x02\x02\u0245\u0246\x07^\x02\x02\u0246" + - "\u0248\x05\xA1Q\x02\u0247\u0249\x05\xA1Q\x02\u0248\u0247\x03\x02\x02\x02" + - "\u0248\u0249\x03\x02\x02\x02\u0249\u024B\x03\x02\x02\x02\u024A\u024C\x05" + - "\xA1Q\x02\u024B\u024A\x03\x02\x02\x02\u024B\u024C\x03\x02\x02\x02\u024C" + - "\xB8\x03\x02\x02\x02\u024D\u024E\x07^\x02\x02\u024E\u024F\x07z\x02\x02" + - "\u024F\u0251\x03\x02\x02\x02\u0250\u0252\x05\xA3R\x02\u0251\u0250\x03" + - "\x02\x02\x02\u0252\u0253\x03\x02\x02\x02\u0253\u0251\x03\x02\x02\x02\u0253" + - "\u0254\x03\x02\x02\x02\u0254\xBA\x03\x02\x02\x02\u0255\u0257\x05\xBD_" + - "\x02\u0256\u0255\x03\x02\x02\x02\u0257\u0258\x03\x02\x02\x02\u0258\u0256" + - "\x03\x02\x02\x02\u0258\u0259\x03\x02\x02\x02\u0259\xBC\x03\x02\x02\x02" + - "\u025A\u025D\n\x0F\x02\x02\u025B\u025D\x05\xB3Z\x02\u025C\u025A\x03\x02" + - "\x02\x02\u025C\u025B\x03\x02\x02\x02\u025D\xBE\x03\x02\x02\x02\u025E\u0260" + - "\x05\xC1a\x02\u025F\u025E\x03\x02\x02\x02\u0260\u0261\x03\x02\x02\x02" + - "\u0261\u025F\x03\x02\x02\x02\u0261\u0262\x03\x02\x02\x02\u0262\xC0\x03" + - "\x02\x02\x02\u0263\u0266\n\x11\x02\x02\u0264\u0266\x05\xB3Z\x02\u0265" + - "\u0263\x03\x02\x02\x02\u0265\u0264\x03\x02\x02\x02\u0266\xC2\x03\x02\x02" + - "\x02!\x02\xC9\xD7\u01B8\u01BA\u01C1\u01C7\u01CF\u01D5\u01DB\u01E4\u01F5" + - "\u01FC\u0203\u020A\u0216\u021B\u021E\u0225\u0229\u0230\u0237\u023B\u0240" + - "\u0248\u024B\u0253\u0258\u025C\u0261\u0265\x04\x02\x04\x02\x02\x03\x02"; + "M\f\x02\u021C\u021D\x03\x02\x02\x02\u021D\u021E\bM\x03\x02\u021E\x9C\x03" + + "\x02\x02\x02\u021F\u0220\x05\xCFg\x02\u0220\x9E\x03\x02\x02\x02\u0221" + + "\u0222\x05\xA1P\x02\u0222\xA0\x03\x02\x02\x02\u0223\u0224\t\x04\x02\x02" + + "\u0224\xA2\x03\x02\x02\x02\u0225\u0226\t\x05\x02\x02\u0226\xA4\x03\x02" + + "\x02\x02\u0227\u0229\x05\xA3Q\x02\u0228\u0227\x03\x02\x02\x02\u0229\u022A" + + "\x03\x02\x02\x02\u022A\u0228\x03\x02\x02\x02\u022A\u022B\x03\x02\x02\x02" + + "\u022B\xA6\x03\x02\x02\x02\u022C\u022D\x072\x02\x02\u022D\u022F\t\x06" + + "\x02\x02\u022E\u0230\x05\xAFW\x02\u022F\u022E\x03\x02\x02\x02\u0230\u0231" + + "\x03\x02\x02\x02\u0231\u022F\x03\x02\x02\x02\u0231\u0232\x03\x02\x02\x02" + + "\u0232\xA8\x03\x02\x02\x02\u0233\u0234\x072\x02\x02\u0234\u0236\t\x07" + + "\x02\x02\u0235\u0237\x05\xB1X\x02\u0236\u0235\x03\x02\x02\x02\u0237\u0238" + + "\x03\x02\x02\x02\u0238\u0236\x03\x02\x02\x02\u0238\u0239\x03\x02\x02\x02" + + "\u0239\xAA\x03\x02\x02\x02\u023A\u023B\x072\x02\x02\u023B\u023D\t\b\x02" + + "\x02\u023C\u023E\x05\xB3Y\x02\u023D\u023C\x03\x02\x02\x02\u023E\u023F" + + "\x03\x02\x02\x02\u023F\u023D\x03\x02\x02\x02\u023F\u0240\x03\x02\x02\x02" + + "\u0240\xAC\x03\x02\x02\x02\u0241\u0242\t\t\x02\x02\u0242\xAE\x03\x02\x02" + + "\x02\u0243\u0244\t\n\x02\x02\u0244\xB0\x03\x02\x02\x02\u0245\u0246\t\v" + + "\x02\x02\u0246\xB2\x03\x02\x02\x02\u0247\u0248\t\f\x02\x02\u0248\xB4\x03" + + "\x02\x02\x02\u0249\u024B\x05\xB7[\x02\u024A\u024C\x05\xB9\\\x02\u024B" + + "\u024A\x03\x02\x02\x02\u024B\u024C\x03\x02\x02\x02\u024C\u0251\x03\x02" + + "\x02\x02\u024D\u024E\x05\xBB]\x02\u024E\u024F\x05\xB9\\\x02\u024F\u0251" + + "\x03\x02\x02\x02\u0250\u0249\x03\x02\x02\x02\u0250\u024D\x03\x02\x02\x02" + + "\u0251\xB6\x03\x02\x02\x02\u0252\u0254\x05\xBB]\x02\u0253\u0252\x03\x02" + + "\x02\x02\u0253\u0254\x03\x02\x02\x02\u0254\u0255\x03\x02\x02\x02\u0255" + + "\u0256\x070\x02\x02\u0256\u025B\x05\xBB]\x02\u0257\u0258\x05\xBB]\x02" + + "\u0258\u0259\x070\x02\x02\u0259\u025B\x03\x02\x02\x02\u025A\u0253\x03" + + "\x02\x02\x02\u025A\u0257\x03\x02\x02\x02\u025B\xB8\x03\x02\x02\x02\u025C" + + "\u025E\t\r\x02\x02\u025D\u025F\x05\xBD^\x02\u025E\u025D\x03\x02\x02\x02" + + "\u025E\u025F\x03\x02\x02\x02\u025F\u0260\x03\x02\x02\x02\u0260\u0261\x05" + + "\xBB]\x02\u0261\xBA\x03\x02\x02\x02\u0262\u0264\x05\xA3Q\x02\u0263\u0262" + + "\x03\x02\x02\x02\u0264\u0265\x03\x02\x02\x02\u0265\u0263\x03\x02\x02\x02" + + "\u0265\u0266\x03\x02\x02\x02\u0266\xBC\x03\x02\x02\x02\u0267\u0268\t\x0E" + + "\x02\x02\u0268\xBE\x03\x02\x02\x02\u0269\u026B\x05\xC1`\x02\u026A\u0269" + + "\x03\x02\x02\x02\u026B\u026C\x03\x02\x02\x02\u026C\u026A\x03\x02\x02\x02" + + "\u026C\u026D\x03\x02\x02\x02\u026D\xC0\x03\x02\x02\x02\u026E\u0271\n\x0F" + + "\x02\x02\u026F\u0271\x05\xC3a\x02\u0270\u026E\x03\x02\x02\x02\u0270\u026F" + + "\x03\x02\x02\x02\u0271\xC2\x03\x02\x02\x02\u0272\u0276\x05\xC5b\x02\u0273" + + "\u0276\x05\xC7c\x02\u0274\u0276\x05\xC9d\x02\u0275\u0272\x03\x02\x02\x02" + + "\u0275\u0273\x03\x02\x02\x02\u0275\u0274\x03\x02\x02\x02\u0276\xC4\x03" + + "\x02\x02\x02\u0277\u0278\x07^\x02\x02\u0278\u0279\t\x10\x02\x02\u0279" + + "\xC6\x03\x02\x02\x02\u027A\u027B\x07^\x02\x02\u027B\u027D\x05\xB1X\x02" + + "\u027C\u027E\x05\xB1X\x02\u027D\u027C\x03\x02\x02\x02\u027D\u027E\x03" + + "\x02\x02\x02\u027E\u0280\x03\x02\x02\x02\u027F\u0281\x05\xB1X\x02\u0280" + + "\u027F\x03\x02\x02\x02\u0280\u0281\x03\x02\x02\x02\u0281\xC8\x03\x02\x02" + + "\x02\u0282\u0283\x07^\x02\x02\u0283\u0284\x07z\x02\x02\u0284\u0286\x03" + + "\x02\x02\x02\u0285\u0287\x05\xB3Y\x02\u0286\u0285\x03\x02\x02\x02\u0287" + + "\u0288\x03\x02\x02\x02\u0288\u0286\x03\x02\x02\x02\u0288\u0289\x03\x02" + + "\x02\x02\u0289\xCA\x03\x02\x02\x02\u028A\u028C\x05\xCDf\x02\u028B\u028A" + + "\x03\x02\x02\x02\u028C\u028D\x03\x02\x02\x02\u028D\u028B\x03\x02\x02\x02" + + "\u028D\u028E\x03\x02\x02\x02\u028E\xCC\x03\x02\x02\x02\u028F\u0292\n\x11" + + "\x02\x02\u0290\u0292\x05\xC3a\x02\u0291\u028F\x03\x02\x02\x02\u0291\u0290" + + "\x03\x02\x02\x02\u0292\xCE\x03\x02\x02\x02\u0293\u0295\x05\xD1h\x02\u0294" + + "\u0293\x03\x02\x02\x02\u0295\u0296\x03\x02\x02\x02\u0296\u0294\x03\x02" + + "\x02\x02\u0296\u0297\x03\x02\x02\x02\u0297\xD0\x03\x02\x02\x02\u0298\u029B" + + "\n\x12\x02\x02\u0299\u029B\x05\xC3a\x02\u029A\u0298\x03\x02\x02\x02\u029A" + + "\u0299\x03\x02\x02\x02\u029B\xD2\x03\x02\x02\x02\u029C\u029E\x05\xD5j" + + "\x02\u029D\u029C\x03\x02\x02\x02\u029E\u029F\x03\x02\x02\x02\u029F\u029D" + + "\x03\x02\x02\x02\u029F\u02A0\x03\x02\x02\x02\u02A0\xD4\x03\x02\x02\x02" + + "\u02A1\u02A4\n\x0F\x02\x02\u02A2\u02A4\x05\xC3a\x02\u02A3\u02A1\x03\x02" + + "\x02\x02\u02A3\u02A2\x03\x02\x02\x02\u02A4\xD6\x03\x02\x02\x02\u02A5\u02A7" + + "\x05\xD9l\x02\u02A6\u02A5\x03\x02\x02\x02\u02A7\u02A8\x03\x02\x02\x02" + + "\u02A8\u02A6\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02\u02A9\xD8\x03" + + "\x02\x02\x02\u02AA\u02AD\n\x13\x02\x02\u02AB\u02AD\x05\xC3a\x02\u02AC" + + "\u02AA\x03\x02\x02\x02\u02AC\u02AB\x03\x02\x02\x02\u02AD\xDA\x03\x02\x02" + + "\x02%\x02\x03\x04\xE1\xEF\u01D5\u01D7\u01DE\u01E2\u01E8\u01F1\u022A\u0231" + + "\u0238\u023F\u024B\u0250\u0253\u025A\u025E\u0265\u026C\u0270\u0275\u027D" + + "\u0280\u0288\u028D\u0291\u0296\u029A\u029F\u02A3\u02A8\u02AC\r\x02\x04" + + "\x02\x06\x02\x02\x02\x03\x02\x03G\x02\x07\x03\x02\x03H\x03\x07\x04\x02" + + "\t\x03\x02\x07\x02\x02\x03J\x04\x03M\x05"; public static readonly _serializedATN: string = Utils.join( [KipperLexer._serializedATNSegment0, KipperLexer._serializedATNSegment1], "", diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.interp b/kipper/core/src/compiler/parser/antlr/KipperParser.interp index 70d9bfb28..8e6017a99 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.interp @@ -2,6 +2,7 @@ token literal names: null null null +null 'const' 'var' 'as' @@ -35,6 +36,7 @@ null ')' '[' ']' +null '{' '}' '+' @@ -70,9 +72,14 @@ null null null null +null +null +null +null token symbolic names: null +FStringExpStart BlockComment LineComment Const @@ -108,6 +115,7 @@ LeftParen RightParen LeftBracket RightBracket +FStringExpEnd LeftBrace RightBrace Plus @@ -136,13 +144,17 @@ GreaterEqual Dot Identifier IntegerConstant -SingleQuoteFStringLiteral -DoubleQuoteFStringLiteral SingleQuoteStringLiteral DoubleQuoteStringLiteral FloatingConstant Whitespace Newline +FStringSingleQuoteStart +FStringDoubleQuoteStart +FStringSingleQuoteEnd +FStringSingleQuoteAtom +FStringDoubleQuoteEnd +FStringDoubleQuoteAtom rule names: compilationUnit @@ -180,6 +192,8 @@ identifierPrimaryExpression identifier stringPrimaryExpression fStringPrimaryExpression +fStringSingleQuoteAtom +fStringDoubleQuoteAtom numberPrimaryExpression arrayLiteralPrimaryExpression voidOrNullOrUndefinedPrimaryExpression @@ -214,4 +228,4 @@ typeSpecifierIdentifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 72, 561, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 3, 2, 5, 2, 136, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 141, 10, 3, 13, 3, 14, 3, 142, 3, 4, 3, 4, 3, 5, 6, 5, 148, 10, 5, 13, 5, 14, 5, 149, 3, 6, 3, 6, 3, 6, 5, 6, 155, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 162, 10, 7, 5, 7, 164, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 170, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 176, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 192, 10, 13, 3, 14, 3, 14, 3, 14, 7, 14, 197, 10, 14, 12, 14, 14, 14, 200, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 214, 10, 17, 3, 18, 3, 18, 5, 18, 218, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 227, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 236, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 244, 10, 22, 12, 22, 14, 22, 247, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 259, 10, 23, 3, 24, 3, 24, 3, 24, 5, 24, 264, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 270, 10, 25, 3, 25, 3, 25, 5, 25, 274, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 280, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 286, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 310, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 322, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 344, 10, 38, 12, 38, 14, 38, 347, 11, 38, 5, 38, 349, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 361, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 366, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 371, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 387, 10, 40, 12, 40, 14, 40, 390, 11, 40, 3, 41, 3, 41, 3, 41, 7, 41, 395, 10, 41, 12, 41, 14, 41, 398, 11, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 411, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 417, 10, 44, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 423, 10, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 5, 47, 431, 10, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 448, 10, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 456, 10, 53, 12, 53, 14, 53, 459, 11, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 467, 10, 54, 12, 54, 14, 54, 470, 11, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 478, 10, 55, 12, 55, 14, 55, 481, 11, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 7, 56, 489, 10, 56, 12, 56, 14, 56, 492, 11, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 500, 10, 57, 12, 57, 14, 57, 503, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 511, 10, 58, 12, 58, 14, 58, 514, 11, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 523, 10, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 530, 10, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 7, 62, 537, 10, 62, 12, 62, 14, 62, 540, 11, 62, 3, 63, 3, 63, 3, 63, 5, 63, 545, 10, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 2, 2, 9, 78, 104, 106, 108, 110, 112, 114, 68, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 2, 17, 3, 2, 5, 6, 3, 2, 12, 13, 3, 2, 24, 25, 3, 2, 68, 69, 3, 2, 66, 67, 4, 2, 65, 65, 70, 70, 3, 2, 27, 29, 4, 2, 41, 41, 43, 43, 5, 2, 40, 40, 42, 42, 50, 50, 3, 2, 44, 47, 4, 2, 40, 40, 42, 42, 3, 2, 59, 62, 3, 2, 57, 58, 3, 2, 51, 56, 4, 2, 27, 29, 64, 64, 2, 556, 2, 135, 3, 2, 2, 2, 4, 140, 3, 2, 2, 2, 6, 144, 3, 2, 2, 2, 8, 147, 3, 2, 2, 2, 10, 154, 3, 2, 2, 2, 12, 163, 3, 2, 2, 2, 14, 165, 3, 2, 2, 2, 16, 177, 3, 2, 2, 2, 18, 180, 3, 2, 2, 2, 20, 182, 3, 2, 2, 2, 22, 184, 3, 2, 2, 2, 24, 186, 3, 2, 2, 2, 26, 193, 3, 2, 2, 2, 28, 201, 3, 2, 2, 2, 30, 205, 3, 2, 2, 2, 32, 213, 3, 2, 2, 2, 34, 215, 3, 2, 2, 2, 36, 221, 3, 2, 2, 2, 38, 226, 3, 2, 2, 2, 40, 228, 3, 2, 2, 2, 42, 237, 3, 2, 2, 2, 44, 258, 3, 2, 2, 2, 46, 263, 3, 2, 2, 2, 48, 265, 3, 2, 2, 2, 50, 290, 3, 2, 2, 2, 52, 296, 3, 2, 2, 2, 54, 304, 3, 2, 2, 2, 56, 307, 3, 2, 2, 2, 58, 321, 3, 2, 2, 2, 60, 323, 3, 2, 2, 2, 62, 327, 3, 2, 2, 2, 64, 329, 3, 2, 2, 2, 66, 331, 3, 2, 2, 2, 68, 333, 3, 2, 2, 2, 70, 335, 3, 2, 2, 2, 72, 337, 3, 2, 2, 2, 74, 339, 3, 2, 2, 2, 76, 352, 3, 2, 2, 2, 78, 365, 3, 2, 2, 2, 80, 391, 3, 2, 2, 2, 82, 399, 3, 2, 2, 2, 84, 402, 3, 2, 2, 2, 86, 406, 3, 2, 2, 2, 88, 422, 3, 2, 2, 2, 90, 424, 3, 2, 2, 2, 92, 430, 3, 2, 2, 2, 94, 432, 3, 2, 2, 2, 96, 435, 3, 2, 2, 2, 98, 438, 3, 2, 2, 2, 100, 440, 3, 2, 2, 2, 102, 447, 3, 2, 2, 2, 104, 449, 3, 2, 2, 2, 106, 460, 3, 2, 2, 2, 108, 471, 3, 2, 2, 2, 110, 482, 3, 2, 2, 2, 112, 493, 3, 2, 2, 2, 114, 504, 3, 2, 2, 2, 116, 522, 3, 2, 2, 2, 118, 529, 3, 2, 2, 2, 120, 531, 3, 2, 2, 2, 122, 533, 3, 2, 2, 2, 124, 544, 3, 2, 2, 2, 126, 546, 3, 2, 2, 2, 128, 548, 3, 2, 2, 2, 130, 553, 3, 2, 2, 2, 132, 558, 3, 2, 2, 2, 134, 136, 5, 4, 3, 2, 135, 134, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 2, 2, 3, 138, 3, 3, 2, 2, 2, 139, 141, 5, 6, 4, 2, 140, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 5, 3, 2, 2, 2, 144, 145, 5, 8, 5, 2, 145, 7, 3, 2, 2, 2, 146, 148, 5, 10, 6, 2, 147, 146, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 9, 3, 2, 2, 2, 151, 155, 5, 32, 17, 2, 152, 155, 5, 12, 7, 2, 153, 155, 7, 31, 2, 2, 154, 151, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 153, 3, 2, 2, 2, 155, 11, 3, 2, 2, 2, 156, 157, 5, 16, 9, 2, 157, 158, 7, 31, 2, 2, 158, 164, 3, 2, 2, 2, 159, 161, 5, 14, 8, 2, 160, 162, 7, 31, 2, 2, 161, 160, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 164, 3, 2, 2, 2, 163, 156, 3, 2, 2, 2, 163, 159, 3, 2, 2, 2, 164, 13, 3, 2, 2, 2, 165, 166, 7, 20, 2, 2, 166, 167, 5, 20, 11, 2, 167, 169, 7, 34, 2, 2, 168, 170, 5, 26, 14, 2, 169, 168, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 7, 35, 2, 2, 172, 173, 7, 23, 2, 2, 173, 175, 5, 124, 63, 2, 174, 176, 5, 34, 18, 2, 175, 174, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 15, 3, 2, 2, 2, 177, 178, 5, 18, 10, 2, 178, 179, 5, 24, 13, 2, 179, 17, 3, 2, 2, 2, 180, 181, 9, 2, 2, 2, 181, 19, 3, 2, 2, 2, 182, 183, 5, 22, 12, 2, 183, 21, 3, 2, 2, 2, 184, 185, 7, 64, 2, 2, 185, 23, 3, 2, 2, 2, 186, 187, 5, 20, 11, 2, 187, 188, 7, 33, 2, 2, 188, 191, 5, 124, 63, 2, 189, 190, 7, 51, 2, 2, 190, 192, 5, 30, 16, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 25, 3, 2, 2, 2, 193, 198, 5, 28, 15, 2, 194, 195, 7, 30, 2, 2, 195, 197, 5, 28, 15, 2, 196, 194, 3, 2, 2, 2, 197, 200, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 27, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 201, 202, 5, 20, 11, 2, 202, 203, 7, 33, 2, 2, 203, 204, 5, 124, 63, 2, 204, 29, 3, 2, 2, 2, 205, 206, 5, 118, 60, 2, 206, 31, 3, 2, 2, 2, 207, 214, 5, 34, 18, 2, 208, 214, 5, 36, 19, 2, 209, 214, 5, 38, 20, 2, 210, 214, 5, 46, 24, 2, 211, 214, 5, 54, 28, 2, 212, 214, 5, 56, 29, 2, 213, 207, 3, 2, 2, 2, 213, 208, 3, 2, 2, 2, 213, 209, 3, 2, 2, 2, 213, 210, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 212, 3, 2, 2, 2, 214, 33, 3, 2, 2, 2, 215, 217, 7, 38, 2, 2, 216, 218, 5, 8, 5, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 39, 2, 2, 220, 35, 3, 2, 2, 2, 221, 222, 5, 122, 62, 2, 222, 223, 7, 31, 2, 2, 223, 37, 3, 2, 2, 2, 224, 227, 5, 40, 21, 2, 225, 227, 5, 42, 22, 2, 226, 224, 3, 2, 2, 2, 226, 225, 3, 2, 2, 2, 227, 39, 3, 2, 2, 2, 228, 229, 7, 16, 2, 2, 229, 230, 7, 34, 2, 2, 230, 231, 5, 122, 62, 2, 231, 232, 7, 35, 2, 2, 232, 235, 5, 32, 17, 2, 233, 234, 7, 17, 2, 2, 234, 236, 5, 32, 17, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 41, 3, 2, 2, 2, 237, 238, 7, 9, 2, 2, 238, 239, 7, 34, 2, 2, 239, 240, 5, 122, 62, 2, 240, 241, 7, 35, 2, 2, 241, 245, 7, 38, 2, 2, 242, 244, 5, 44, 23, 2, 243, 242, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 248, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 249, 7, 39, 2, 2, 249, 43, 3, 2, 2, 2, 250, 251, 7, 10, 2, 2, 251, 252, 5, 122, 62, 2, 252, 253, 7, 33, 2, 2, 253, 254, 5, 32, 17, 2, 254, 259, 3, 2, 2, 2, 255, 256, 7, 11, 2, 2, 256, 257, 7, 33, 2, 2, 257, 259, 5, 32, 17, 2, 258, 250, 3, 2, 2, 2, 258, 255, 3, 2, 2, 2, 259, 45, 3, 2, 2, 2, 260, 264, 5, 48, 25, 2, 261, 264, 5, 50, 26, 2, 262, 264, 5, 52, 27, 2, 263, 260, 3, 2, 2, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 47, 3, 2, 2, 2, 265, 266, 7, 18, 2, 2, 266, 273, 7, 34, 2, 2, 267, 270, 5, 16, 9, 2, 268, 270, 5, 122, 62, 2, 269, 267, 3, 2, 2, 2, 269, 268, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 8, 25, 1, 2, 272, 274, 3, 2, 2, 2, 273, 269, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 279, 7, 31, 2, 2, 276, 277, 5, 122, 62, 2, 277, 278, 8, 25, 1, 2, 278, 280, 3, 2, 2, 2, 279, 276, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 285, 7, 31, 2, 2, 282, 283, 5, 122, 62, 2, 283, 284, 8, 25, 1, 2, 284, 286, 3, 2, 2, 2, 285, 282, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 7, 35, 2, 2, 288, 289, 5, 32, 17, 2, 289, 49, 3, 2, 2, 2, 290, 291, 7, 15, 2, 2, 291, 292, 7, 34, 2, 2, 292, 293, 5, 122, 62, 2, 293, 294, 7, 35, 2, 2, 294, 295, 5, 32, 17, 2, 295, 51, 3, 2, 2, 2, 296, 297, 7, 14, 2, 2, 297, 298, 5, 32, 17, 2, 298, 299, 7, 15, 2, 2, 299, 300, 7, 34, 2, 2, 300, 301, 5, 122, 62, 2, 301, 302, 7, 35, 2, 2, 302, 303, 7, 31, 2, 2, 303, 53, 3, 2, 2, 2, 304, 305, 9, 3, 2, 2, 305, 306, 7, 31, 2, 2, 306, 55, 3, 2, 2, 2, 307, 309, 7, 21, 2, 2, 308, 310, 5, 122, 62, 2, 309, 308, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 312, 7, 31, 2, 2, 312, 57, 3, 2, 2, 2, 313, 322, 5, 60, 31, 2, 314, 322, 5, 62, 32, 2, 315, 322, 5, 64, 33, 2, 316, 322, 5, 68, 35, 2, 317, 322, 5, 70, 36, 2, 318, 322, 5, 72, 37, 2, 319, 322, 5, 74, 38, 2, 320, 322, 5, 76, 39, 2, 321, 313, 3, 2, 2, 2, 321, 314, 3, 2, 2, 2, 321, 315, 3, 2, 2, 2, 321, 316, 3, 2, 2, 2, 321, 317, 3, 2, 2, 2, 321, 318, 3, 2, 2, 2, 321, 319, 3, 2, 2, 2, 321, 320, 3, 2, 2, 2, 322, 59, 3, 2, 2, 2, 323, 324, 7, 34, 2, 2, 324, 325, 5, 122, 62, 2, 325, 326, 7, 35, 2, 2, 326, 61, 3, 2, 2, 2, 327, 328, 9, 4, 2, 2, 328, 63, 3, 2, 2, 2, 329, 330, 5, 66, 34, 2, 330, 65, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 67, 3, 2, 2, 2, 333, 334, 9, 5, 2, 2, 334, 69, 3, 2, 2, 2, 335, 336, 9, 6, 2, 2, 336, 71, 3, 2, 2, 2, 337, 338, 9, 7, 2, 2, 338, 73, 3, 2, 2, 2, 339, 348, 7, 36, 2, 2, 340, 345, 5, 122, 62, 2, 341, 342, 7, 30, 2, 2, 342, 344, 5, 122, 62, 2, 343, 341, 3, 2, 2, 2, 344, 347, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 349, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 348, 340, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 7, 37, 2, 2, 351, 75, 3, 2, 2, 2, 352, 353, 9, 8, 2, 2, 353, 77, 3, 2, 2, 2, 354, 355, 8, 40, 1, 2, 355, 366, 5, 58, 30, 2, 356, 357, 7, 22, 2, 2, 357, 358, 5, 78, 40, 2, 358, 360, 7, 34, 2, 2, 359, 361, 5, 80, 41, 2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 363, 7, 35, 2, 2, 363, 364, 8, 40, 1, 2, 364, 366, 3, 2, 2, 2, 365, 354, 3, 2, 2, 2, 365, 356, 3, 2, 2, 2, 366, 388, 3, 2, 2, 2, 367, 368, 12, 7, 2, 2, 368, 370, 7, 34, 2, 2, 369, 371, 5, 80, 41, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 7, 35, 2, 2, 373, 387, 8, 40, 1, 2, 374, 375, 12, 5, 2, 2, 375, 376, 5, 82, 42, 2, 376, 377, 8, 40, 1, 2, 377, 387, 3, 2, 2, 2, 378, 379, 12, 4, 2, 2, 379, 380, 5, 84, 43, 2, 380, 381, 8, 40, 1, 2, 381, 387, 3, 2, 2, 2, 382, 383, 12, 3, 2, 2, 383, 384, 5, 86, 44, 2, 384, 385, 8, 40, 1, 2, 385, 387, 3, 2, 2, 2, 386, 367, 3, 2, 2, 2, 386, 374, 3, 2, 2, 2, 386, 378, 3, 2, 2, 2, 386, 382, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 79, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 391, 396, 5, 118, 60, 2, 392, 393, 7, 30, 2, 2, 393, 395, 5, 118, 60, 2, 394, 392, 3, 2, 2, 2, 395, 398, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 81, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 399, 400, 7, 63, 2, 2, 400, 401, 5, 66, 34, 2, 401, 83, 3, 2, 2, 2, 402, 403, 7, 36, 2, 2, 403, 404, 5, 122, 62, 2, 404, 405, 7, 37, 2, 2, 405, 85, 3, 2, 2, 2, 406, 410, 7, 36, 2, 2, 407, 408, 5, 122, 62, 2, 408, 409, 8, 44, 1, 2, 409, 411, 3, 2, 2, 2, 410, 407, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 416, 7, 33, 2, 2, 413, 414, 5, 122, 62, 2, 414, 415, 8, 44, 1, 2, 415, 417, 3, 2, 2, 2, 416, 413, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 7, 37, 2, 2, 419, 87, 3, 2, 2, 2, 420, 423, 5, 78, 40, 2, 421, 423, 5, 90, 46, 2, 422, 420, 3, 2, 2, 2, 422, 421, 3, 2, 2, 2, 423, 89, 3, 2, 2, 2, 424, 425, 5, 78, 40, 2, 425, 426, 5, 98, 50, 2, 426, 91, 3, 2, 2, 2, 427, 431, 5, 88, 45, 2, 428, 431, 5, 94, 48, 2, 429, 431, 5, 96, 49, 2, 430, 427, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 430, 429, 3, 2, 2, 2, 431, 93, 3, 2, 2, 2, 432, 433, 5, 98, 50, 2, 433, 434, 5, 88, 45, 2, 434, 95, 3, 2, 2, 2, 435, 436, 5, 100, 51, 2, 436, 437, 5, 88, 45, 2, 437, 97, 3, 2, 2, 2, 438, 439, 9, 9, 2, 2, 439, 99, 3, 2, 2, 2, 440, 441, 9, 10, 2, 2, 441, 101, 3, 2, 2, 2, 442, 448, 5, 92, 47, 2, 443, 444, 5, 92, 47, 2, 444, 445, 7, 7, 2, 2, 445, 446, 5, 124, 63, 2, 446, 448, 3, 2, 2, 2, 447, 442, 3, 2, 2, 2, 447, 443, 3, 2, 2, 2, 448, 103, 3, 2, 2, 2, 449, 450, 8, 53, 1, 2, 450, 451, 5, 102, 52, 2, 451, 457, 3, 2, 2, 2, 452, 453, 12, 3, 2, 2, 453, 454, 9, 11, 2, 2, 454, 456, 5, 102, 52, 2, 455, 452, 3, 2, 2, 2, 456, 459, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 105, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 461, 8, 54, 1, 2, 461, 462, 5, 104, 53, 2, 462, 468, 3, 2, 2, 2, 463, 464, 12, 3, 2, 2, 464, 465, 9, 12, 2, 2, 465, 467, 5, 104, 53, 2, 466, 463, 3, 2, 2, 2, 467, 470, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 468, 469, 3, 2, 2, 2, 469, 107, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 471, 472, 8, 55, 1, 2, 472, 473, 5, 106, 54, 2, 473, 479, 3, 2, 2, 2, 474, 475, 12, 3, 2, 2, 475, 476, 9, 13, 2, 2, 476, 478, 5, 106, 54, 2, 477, 474, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 109, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 483, 8, 56, 1, 2, 483, 484, 5, 108, 55, 2, 484, 490, 3, 2, 2, 2, 485, 486, 12, 3, 2, 2, 486, 487, 9, 14, 2, 2, 487, 489, 5, 108, 55, 2, 488, 485, 3, 2, 2, 2, 489, 492, 3, 2, 2, 2, 490, 488, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 111, 3, 2, 2, 2, 492, 490, 3, 2, 2, 2, 493, 494, 8, 57, 1, 2, 494, 495, 5, 110, 56, 2, 495, 501, 3, 2, 2, 2, 496, 497, 12, 3, 2, 2, 497, 498, 7, 48, 2, 2, 498, 500, 5, 110, 56, 2, 499, 496, 3, 2, 2, 2, 500, 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 113, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 504, 505, 8, 58, 1, 2, 505, 506, 5, 112, 57, 2, 506, 512, 3, 2, 2, 2, 507, 508, 12, 3, 2, 2, 508, 509, 7, 49, 2, 2, 509, 511, 5, 112, 57, 2, 510, 507, 3, 2, 2, 2, 511, 514, 3, 2, 2, 2, 512, 510, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 115, 3, 2, 2, 2, 514, 512, 3, 2, 2, 2, 515, 523, 5, 114, 58, 2, 516, 517, 5, 114, 58, 2, 517, 518, 7, 32, 2, 2, 518, 519, 5, 116, 59, 2, 519, 520, 7, 33, 2, 2, 520, 521, 5, 116, 59, 2, 521, 523, 3, 2, 2, 2, 522, 515, 3, 2, 2, 2, 522, 516, 3, 2, 2, 2, 523, 117, 3, 2, 2, 2, 524, 530, 5, 116, 59, 2, 525, 526, 5, 78, 40, 2, 526, 527, 5, 120, 61, 2, 527, 528, 5, 118, 60, 2, 528, 530, 3, 2, 2, 2, 529, 524, 3, 2, 2, 2, 529, 525, 3, 2, 2, 2, 530, 119, 3, 2, 2, 2, 531, 532, 9, 15, 2, 2, 532, 121, 3, 2, 2, 2, 533, 538, 5, 118, 60, 2, 534, 535, 7, 30, 2, 2, 535, 537, 5, 118, 60, 2, 536, 534, 3, 2, 2, 2, 537, 540, 3, 2, 2, 2, 538, 536, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 123, 3, 2, 2, 2, 540, 538, 3, 2, 2, 2, 541, 545, 5, 126, 64, 2, 542, 545, 5, 128, 65, 2, 543, 545, 5, 130, 66, 2, 544, 541, 3, 2, 2, 2, 544, 542, 3, 2, 2, 2, 544, 543, 3, 2, 2, 2, 545, 125, 3, 2, 2, 2, 546, 547, 5, 132, 67, 2, 547, 127, 3, 2, 2, 2, 548, 549, 5, 132, 67, 2, 549, 550, 7, 59, 2, 2, 550, 551, 5, 132, 67, 2, 551, 552, 7, 61, 2, 2, 552, 129, 3, 2, 2, 2, 553, 554, 7, 26, 2, 2, 554, 555, 7, 34, 2, 2, 555, 556, 5, 132, 67, 2, 556, 557, 7, 35, 2, 2, 557, 131, 3, 2, 2, 2, 558, 559, 9, 16, 2, 2, 559, 133, 3, 2, 2, 2, 48, 135, 142, 149, 154, 161, 163, 169, 175, 191, 198, 213, 217, 226, 235, 245, 258, 263, 269, 273, 279, 285, 309, 321, 345, 348, 360, 365, 370, 386, 388, 396, 410, 416, 422, 430, 447, 457, 468, 479, 490, 501, 512, 522, 529, 538, 544] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 78, 597, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 3, 2, 5, 2, 140, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 145, 10, 3, 13, 3, 14, 3, 146, 3, 4, 3, 4, 3, 5, 6, 5, 152, 10, 5, 13, 5, 14, 5, 153, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 166, 10, 7, 5, 7, 168, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 174, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 180, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 196, 10, 13, 3, 14, 3, 14, 3, 14, 7, 14, 201, 10, 14, 12, 14, 14, 14, 204, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 218, 10, 17, 3, 18, 3, 18, 5, 18, 222, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 231, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 240, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 248, 10, 22, 12, 22, 14, 22, 251, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 263, 10, 23, 3, 24, 3, 24, 3, 24, 5, 24, 268, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 274, 10, 25, 3, 25, 3, 25, 5, 25, 278, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 284, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 290, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 314, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 326, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 7, 36, 342, 10, 36, 12, 36, 14, 36, 345, 11, 36, 3, 36, 3, 36, 3, 36, 7, 36, 350, 10, 36, 12, 36, 14, 36, 353, 11, 36, 3, 36, 5, 36, 356, 10, 36, 3, 37, 3, 37, 3, 37, 5, 37, 361, 10, 37, 3, 37, 5, 37, 364, 10, 37, 3, 38, 3, 38, 3, 38, 5, 38, 369, 10, 38, 3, 38, 5, 38, 372, 10, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 380, 10, 40, 12, 40, 14, 40, 383, 11, 40, 5, 40, 385, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 397, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 402, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 407, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 423, 10, 42, 12, 42, 14, 42, 426, 11, 42, 3, 43, 3, 43, 3, 43, 7, 43, 431, 10, 43, 12, 43, 14, 43, 434, 11, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 447, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 453, 10, 46, 3, 46, 3, 46, 3, 47, 3, 47, 5, 47, 459, 10, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 5, 49, 467, 10, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 484, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 492, 10, 55, 12, 55, 14, 55, 495, 11, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 7, 56, 503, 10, 56, 12, 56, 14, 56, 506, 11, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 514, 10, 57, 12, 57, 14, 57, 517, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 525, 10, 58, 12, 58, 14, 58, 528, 11, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 536, 10, 59, 12, 59, 14, 59, 539, 11, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 547, 10, 60, 12, 60, 14, 60, 550, 11, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 559, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 566, 10, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 7, 64, 573, 10, 64, 12, 64, 14, 64, 576, 11, 64, 3, 65, 3, 65, 3, 65, 5, 65, 581, 10, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 2, 2, 9, 82, 108, 110, 112, 114, 116, 118, 70, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 2, 16, 3, 2, 6, 7, 3, 2, 13, 14, 3, 2, 25, 26, 3, 2, 68, 69, 4, 2, 67, 67, 70, 70, 3, 2, 28, 30, 4, 2, 43, 43, 45, 45, 5, 2, 42, 42, 44, 44, 52, 52, 3, 2, 46, 49, 4, 2, 42, 42, 44, 44, 3, 2, 61, 64, 3, 2, 59, 60, 3, 2, 53, 58, 4, 2, 28, 30, 66, 66, 2, 597, 2, 139, 3, 2, 2, 2, 4, 144, 3, 2, 2, 2, 6, 148, 3, 2, 2, 2, 8, 151, 3, 2, 2, 2, 10, 158, 3, 2, 2, 2, 12, 167, 3, 2, 2, 2, 14, 169, 3, 2, 2, 2, 16, 181, 3, 2, 2, 2, 18, 184, 3, 2, 2, 2, 20, 186, 3, 2, 2, 2, 22, 188, 3, 2, 2, 2, 24, 190, 3, 2, 2, 2, 26, 197, 3, 2, 2, 2, 28, 205, 3, 2, 2, 2, 30, 209, 3, 2, 2, 2, 32, 217, 3, 2, 2, 2, 34, 219, 3, 2, 2, 2, 36, 225, 3, 2, 2, 2, 38, 230, 3, 2, 2, 2, 40, 232, 3, 2, 2, 2, 42, 241, 3, 2, 2, 2, 44, 262, 3, 2, 2, 2, 46, 267, 3, 2, 2, 2, 48, 269, 3, 2, 2, 2, 50, 294, 3, 2, 2, 2, 52, 300, 3, 2, 2, 2, 54, 308, 3, 2, 2, 2, 56, 311, 3, 2, 2, 2, 58, 325, 3, 2, 2, 2, 60, 327, 3, 2, 2, 2, 62, 331, 3, 2, 2, 2, 64, 333, 3, 2, 2, 2, 66, 335, 3, 2, 2, 2, 68, 337, 3, 2, 2, 2, 70, 355, 3, 2, 2, 2, 72, 363, 3, 2, 2, 2, 74, 371, 3, 2, 2, 2, 76, 373, 3, 2, 2, 2, 78, 375, 3, 2, 2, 2, 80, 388, 3, 2, 2, 2, 82, 401, 3, 2, 2, 2, 84, 427, 3, 2, 2, 2, 86, 435, 3, 2, 2, 2, 88, 438, 3, 2, 2, 2, 90, 442, 3, 2, 2, 2, 92, 458, 3, 2, 2, 2, 94, 460, 3, 2, 2, 2, 96, 466, 3, 2, 2, 2, 98, 468, 3, 2, 2, 2, 100, 471, 3, 2, 2, 2, 102, 474, 3, 2, 2, 2, 104, 476, 3, 2, 2, 2, 106, 483, 3, 2, 2, 2, 108, 485, 3, 2, 2, 2, 110, 496, 3, 2, 2, 2, 112, 507, 3, 2, 2, 2, 114, 518, 3, 2, 2, 2, 116, 529, 3, 2, 2, 2, 118, 540, 3, 2, 2, 2, 120, 558, 3, 2, 2, 2, 122, 565, 3, 2, 2, 2, 124, 567, 3, 2, 2, 2, 126, 569, 3, 2, 2, 2, 128, 580, 3, 2, 2, 2, 130, 582, 3, 2, 2, 2, 132, 584, 3, 2, 2, 2, 134, 589, 3, 2, 2, 2, 136, 594, 3, 2, 2, 2, 138, 140, 5, 4, 3, 2, 139, 138, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 141, 3, 2, 2, 2, 141, 142, 7, 2, 2, 3, 142, 3, 3, 2, 2, 2, 143, 145, 5, 6, 4, 2, 144, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 5, 3, 2, 2, 2, 148, 149, 5, 8, 5, 2, 149, 7, 3, 2, 2, 2, 150, 152, 5, 10, 6, 2, 151, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 151, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 9, 3, 2, 2, 2, 155, 159, 5, 32, 17, 2, 156, 159, 5, 12, 7, 2, 157, 159, 7, 32, 2, 2, 158, 155, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 157, 3, 2, 2, 2, 159, 11, 3, 2, 2, 2, 160, 161, 5, 16, 9, 2, 161, 162, 7, 32, 2, 2, 162, 168, 3, 2, 2, 2, 163, 165, 5, 14, 8, 2, 164, 166, 7, 32, 2, 2, 165, 164, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 168, 3, 2, 2, 2, 167, 160, 3, 2, 2, 2, 167, 163, 3, 2, 2, 2, 168, 13, 3, 2, 2, 2, 169, 170, 7, 21, 2, 2, 170, 171, 5, 20, 11, 2, 171, 173, 7, 35, 2, 2, 172, 174, 5, 26, 14, 2, 173, 172, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 176, 7, 36, 2, 2, 176, 177, 7, 24, 2, 2, 177, 179, 5, 128, 65, 2, 178, 180, 5, 34, 18, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 15, 3, 2, 2, 2, 181, 182, 5, 18, 10, 2, 182, 183, 5, 24, 13, 2, 183, 17, 3, 2, 2, 2, 184, 185, 9, 2, 2, 2, 185, 19, 3, 2, 2, 2, 186, 187, 5, 22, 12, 2, 187, 21, 3, 2, 2, 2, 188, 189, 7, 66, 2, 2, 189, 23, 3, 2, 2, 2, 190, 191, 5, 20, 11, 2, 191, 192, 7, 34, 2, 2, 192, 195, 5, 128, 65, 2, 193, 194, 7, 53, 2, 2, 194, 196, 5, 30, 16, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 25, 3, 2, 2, 2, 197, 202, 5, 28, 15, 2, 198, 199, 7, 31, 2, 2, 199, 201, 5, 28, 15, 2, 200, 198, 3, 2, 2, 2, 201, 204, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 27, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 205, 206, 5, 20, 11, 2, 206, 207, 7, 34, 2, 2, 207, 208, 5, 128, 65, 2, 208, 29, 3, 2, 2, 2, 209, 210, 5, 122, 62, 2, 210, 31, 3, 2, 2, 2, 211, 218, 5, 34, 18, 2, 212, 218, 5, 36, 19, 2, 213, 218, 5, 38, 20, 2, 214, 218, 5, 46, 24, 2, 215, 218, 5, 54, 28, 2, 216, 218, 5, 56, 29, 2, 217, 211, 3, 2, 2, 2, 217, 212, 3, 2, 2, 2, 217, 213, 3, 2, 2, 2, 217, 214, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 217, 216, 3, 2, 2, 2, 218, 33, 3, 2, 2, 2, 219, 221, 7, 40, 2, 2, 220, 222, 5, 8, 5, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 7, 41, 2, 2, 224, 35, 3, 2, 2, 2, 225, 226, 5, 126, 64, 2, 226, 227, 7, 32, 2, 2, 227, 37, 3, 2, 2, 2, 228, 231, 5, 40, 21, 2, 229, 231, 5, 42, 22, 2, 230, 228, 3, 2, 2, 2, 230, 229, 3, 2, 2, 2, 231, 39, 3, 2, 2, 2, 232, 233, 7, 17, 2, 2, 233, 234, 7, 35, 2, 2, 234, 235, 5, 126, 64, 2, 235, 236, 7, 36, 2, 2, 236, 239, 5, 32, 17, 2, 237, 238, 7, 18, 2, 2, 238, 240, 5, 32, 17, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 41, 3, 2, 2, 2, 241, 242, 7, 10, 2, 2, 242, 243, 7, 35, 2, 2, 243, 244, 5, 126, 64, 2, 244, 245, 7, 36, 2, 2, 245, 249, 7, 40, 2, 2, 246, 248, 5, 44, 23, 2, 247, 246, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 252, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 253, 7, 41, 2, 2, 253, 43, 3, 2, 2, 2, 254, 255, 7, 11, 2, 2, 255, 256, 5, 126, 64, 2, 256, 257, 7, 34, 2, 2, 257, 258, 5, 32, 17, 2, 258, 263, 3, 2, 2, 2, 259, 260, 7, 12, 2, 2, 260, 261, 7, 34, 2, 2, 261, 263, 5, 32, 17, 2, 262, 254, 3, 2, 2, 2, 262, 259, 3, 2, 2, 2, 263, 45, 3, 2, 2, 2, 264, 268, 5, 48, 25, 2, 265, 268, 5, 50, 26, 2, 266, 268, 5, 52, 27, 2, 267, 264, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 47, 3, 2, 2, 2, 269, 270, 7, 19, 2, 2, 270, 277, 7, 35, 2, 2, 271, 274, 5, 16, 9, 2, 272, 274, 5, 126, 64, 2, 273, 271, 3, 2, 2, 2, 273, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 8, 25, 1, 2, 276, 278, 3, 2, 2, 2, 277, 273, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 283, 7, 32, 2, 2, 280, 281, 5, 126, 64, 2, 281, 282, 8, 25, 1, 2, 282, 284, 3, 2, 2, 2, 283, 280, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 289, 7, 32, 2, 2, 286, 287, 5, 126, 64, 2, 287, 288, 8, 25, 1, 2, 288, 290, 3, 2, 2, 2, 289, 286, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 292, 7, 36, 2, 2, 292, 293, 5, 32, 17, 2, 293, 49, 3, 2, 2, 2, 294, 295, 7, 16, 2, 2, 295, 296, 7, 35, 2, 2, 296, 297, 5, 126, 64, 2, 297, 298, 7, 36, 2, 2, 298, 299, 5, 32, 17, 2, 299, 51, 3, 2, 2, 2, 300, 301, 7, 15, 2, 2, 301, 302, 5, 32, 17, 2, 302, 303, 7, 16, 2, 2, 303, 304, 7, 35, 2, 2, 304, 305, 5, 126, 64, 2, 305, 306, 7, 36, 2, 2, 306, 307, 7, 32, 2, 2, 307, 53, 3, 2, 2, 2, 308, 309, 9, 3, 2, 2, 309, 310, 7, 32, 2, 2, 310, 55, 3, 2, 2, 2, 311, 313, 7, 22, 2, 2, 312, 314, 5, 126, 64, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 7, 32, 2, 2, 316, 57, 3, 2, 2, 2, 317, 326, 5, 60, 31, 2, 318, 326, 5, 62, 32, 2, 319, 326, 5, 64, 33, 2, 320, 326, 5, 68, 35, 2, 321, 326, 5, 70, 36, 2, 322, 326, 5, 76, 39, 2, 323, 326, 5, 78, 40, 2, 324, 326, 5, 80, 41, 2, 325, 317, 3, 2, 2, 2, 325, 318, 3, 2, 2, 2, 325, 319, 3, 2, 2, 2, 325, 320, 3, 2, 2, 2, 325, 321, 3, 2, 2, 2, 325, 322, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 324, 3, 2, 2, 2, 326, 59, 3, 2, 2, 2, 327, 328, 7, 35, 2, 2, 328, 329, 5, 126, 64, 2, 329, 330, 7, 36, 2, 2, 330, 61, 3, 2, 2, 2, 331, 332, 9, 4, 2, 2, 332, 63, 3, 2, 2, 2, 333, 334, 5, 66, 34, 2, 334, 65, 3, 2, 2, 2, 335, 336, 7, 66, 2, 2, 336, 67, 3, 2, 2, 2, 337, 338, 9, 5, 2, 2, 338, 69, 3, 2, 2, 2, 339, 343, 7, 73, 2, 2, 340, 342, 5, 72, 37, 2, 341, 340, 3, 2, 2, 2, 342, 345, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 346, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 346, 356, 7, 75, 2, 2, 347, 351, 7, 74, 2, 2, 348, 350, 5, 74, 38, 2, 349, 348, 3, 2, 2, 2, 350, 353, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 354, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 354, 356, 7, 77, 2, 2, 355, 339, 3, 2, 2, 2, 355, 347, 3, 2, 2, 2, 356, 71, 3, 2, 2, 2, 357, 364, 7, 76, 2, 2, 358, 360, 7, 3, 2, 2, 359, 361, 5, 126, 64, 2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 7, 39, 2, 2, 363, 357, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 364, 73, 3, 2, 2, 2, 365, 372, 7, 78, 2, 2, 366, 368, 7, 3, 2, 2, 367, 369, 5, 126, 64, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 372, 7, 39, 2, 2, 371, 365, 3, 2, 2, 2, 371, 366, 3, 2, 2, 2, 372, 75, 3, 2, 2, 2, 373, 374, 9, 6, 2, 2, 374, 77, 3, 2, 2, 2, 375, 384, 7, 37, 2, 2, 376, 381, 5, 126, 64, 2, 377, 378, 7, 31, 2, 2, 378, 380, 5, 126, 64, 2, 379, 377, 3, 2, 2, 2, 380, 383, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 385, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 376, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 7, 38, 2, 2, 387, 79, 3, 2, 2, 2, 388, 389, 9, 7, 2, 2, 389, 81, 3, 2, 2, 2, 390, 391, 8, 42, 1, 2, 391, 402, 5, 58, 30, 2, 392, 393, 7, 23, 2, 2, 393, 394, 5, 82, 42, 2, 394, 396, 7, 35, 2, 2, 395, 397, 5, 84, 43, 2, 396, 395, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 7, 36, 2, 2, 399, 400, 8, 42, 1, 2, 400, 402, 3, 2, 2, 2, 401, 390, 3, 2, 2, 2, 401, 392, 3, 2, 2, 2, 402, 424, 3, 2, 2, 2, 403, 404, 12, 7, 2, 2, 404, 406, 7, 35, 2, 2, 405, 407, 5, 84, 43, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 36, 2, 2, 409, 423, 8, 42, 1, 2, 410, 411, 12, 5, 2, 2, 411, 412, 5, 86, 44, 2, 412, 413, 8, 42, 1, 2, 413, 423, 3, 2, 2, 2, 414, 415, 12, 4, 2, 2, 415, 416, 5, 88, 45, 2, 416, 417, 8, 42, 1, 2, 417, 423, 3, 2, 2, 2, 418, 419, 12, 3, 2, 2, 419, 420, 5, 90, 46, 2, 420, 421, 8, 42, 1, 2, 421, 423, 3, 2, 2, 2, 422, 403, 3, 2, 2, 2, 422, 410, 3, 2, 2, 2, 422, 414, 3, 2, 2, 2, 422, 418, 3, 2, 2, 2, 423, 426, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 83, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 427, 432, 5, 122, 62, 2, 428, 429, 7, 31, 2, 2, 429, 431, 5, 122, 62, 2, 430, 428, 3, 2, 2, 2, 431, 434, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 85, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 435, 436, 7, 65, 2, 2, 436, 437, 5, 66, 34, 2, 437, 87, 3, 2, 2, 2, 438, 439, 7, 37, 2, 2, 439, 440, 5, 126, 64, 2, 440, 441, 7, 38, 2, 2, 441, 89, 3, 2, 2, 2, 442, 446, 7, 37, 2, 2, 443, 444, 5, 126, 64, 2, 444, 445, 8, 46, 1, 2, 445, 447, 3, 2, 2, 2, 446, 443, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 452, 7, 34, 2, 2, 449, 450, 5, 126, 64, 2, 450, 451, 8, 46, 1, 2, 451, 453, 3, 2, 2, 2, 452, 449, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 455, 7, 38, 2, 2, 455, 91, 3, 2, 2, 2, 456, 459, 5, 82, 42, 2, 457, 459, 5, 94, 48, 2, 458, 456, 3, 2, 2, 2, 458, 457, 3, 2, 2, 2, 459, 93, 3, 2, 2, 2, 460, 461, 5, 82, 42, 2, 461, 462, 5, 102, 52, 2, 462, 95, 3, 2, 2, 2, 463, 467, 5, 92, 47, 2, 464, 467, 5, 98, 50, 2, 465, 467, 5, 100, 51, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 465, 3, 2, 2, 2, 467, 97, 3, 2, 2, 2, 468, 469, 5, 102, 52, 2, 469, 470, 5, 92, 47, 2, 470, 99, 3, 2, 2, 2, 471, 472, 5, 104, 53, 2, 472, 473, 5, 92, 47, 2, 473, 101, 3, 2, 2, 2, 474, 475, 9, 8, 2, 2, 475, 103, 3, 2, 2, 2, 476, 477, 9, 9, 2, 2, 477, 105, 3, 2, 2, 2, 478, 484, 5, 96, 49, 2, 479, 480, 5, 96, 49, 2, 480, 481, 7, 8, 2, 2, 481, 482, 5, 128, 65, 2, 482, 484, 3, 2, 2, 2, 483, 478, 3, 2, 2, 2, 483, 479, 3, 2, 2, 2, 484, 107, 3, 2, 2, 2, 485, 486, 8, 55, 1, 2, 486, 487, 5, 106, 54, 2, 487, 493, 3, 2, 2, 2, 488, 489, 12, 3, 2, 2, 489, 490, 9, 10, 2, 2, 490, 492, 5, 106, 54, 2, 491, 488, 3, 2, 2, 2, 492, 495, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 109, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 496, 497, 8, 56, 1, 2, 497, 498, 5, 108, 55, 2, 498, 504, 3, 2, 2, 2, 499, 500, 12, 3, 2, 2, 500, 501, 9, 11, 2, 2, 501, 503, 5, 108, 55, 2, 502, 499, 3, 2, 2, 2, 503, 506, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 111, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 507, 508, 8, 57, 1, 2, 508, 509, 5, 110, 56, 2, 509, 515, 3, 2, 2, 2, 510, 511, 12, 3, 2, 2, 511, 512, 9, 12, 2, 2, 512, 514, 5, 110, 56, 2, 513, 510, 3, 2, 2, 2, 514, 517, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 113, 3, 2, 2, 2, 517, 515, 3, 2, 2, 2, 518, 519, 8, 58, 1, 2, 519, 520, 5, 112, 57, 2, 520, 526, 3, 2, 2, 2, 521, 522, 12, 3, 2, 2, 522, 523, 9, 13, 2, 2, 523, 525, 5, 112, 57, 2, 524, 521, 3, 2, 2, 2, 525, 528, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 115, 3, 2, 2, 2, 528, 526, 3, 2, 2, 2, 529, 530, 8, 59, 1, 2, 530, 531, 5, 114, 58, 2, 531, 537, 3, 2, 2, 2, 532, 533, 12, 3, 2, 2, 533, 534, 7, 50, 2, 2, 534, 536, 5, 114, 58, 2, 535, 532, 3, 2, 2, 2, 536, 539, 3, 2, 2, 2, 537, 535, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 117, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 540, 541, 8, 60, 1, 2, 541, 542, 5, 116, 59, 2, 542, 548, 3, 2, 2, 2, 543, 544, 12, 3, 2, 2, 544, 545, 7, 51, 2, 2, 545, 547, 5, 116, 59, 2, 546, 543, 3, 2, 2, 2, 547, 550, 3, 2, 2, 2, 548, 546, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 119, 3, 2, 2, 2, 550, 548, 3, 2, 2, 2, 551, 559, 5, 118, 60, 2, 552, 553, 5, 118, 60, 2, 553, 554, 7, 33, 2, 2, 554, 555, 5, 120, 61, 2, 555, 556, 7, 34, 2, 2, 556, 557, 5, 120, 61, 2, 557, 559, 3, 2, 2, 2, 558, 551, 3, 2, 2, 2, 558, 552, 3, 2, 2, 2, 559, 121, 3, 2, 2, 2, 560, 566, 5, 120, 61, 2, 561, 562, 5, 82, 42, 2, 562, 563, 5, 124, 63, 2, 563, 564, 5, 122, 62, 2, 564, 566, 3, 2, 2, 2, 565, 560, 3, 2, 2, 2, 565, 561, 3, 2, 2, 2, 566, 123, 3, 2, 2, 2, 567, 568, 9, 14, 2, 2, 568, 125, 3, 2, 2, 2, 569, 574, 5, 122, 62, 2, 570, 571, 7, 31, 2, 2, 571, 573, 5, 122, 62, 2, 572, 570, 3, 2, 2, 2, 573, 576, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 127, 3, 2, 2, 2, 576, 574, 3, 2, 2, 2, 577, 581, 5, 130, 66, 2, 578, 581, 5, 132, 67, 2, 579, 581, 5, 134, 68, 2, 580, 577, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581, 129, 3, 2, 2, 2, 582, 583, 5, 136, 69, 2, 583, 131, 3, 2, 2, 2, 584, 585, 5, 136, 69, 2, 585, 586, 7, 61, 2, 2, 586, 587, 5, 136, 69, 2, 587, 588, 7, 63, 2, 2, 588, 133, 3, 2, 2, 2, 589, 590, 7, 27, 2, 2, 590, 591, 7, 35, 2, 2, 591, 592, 5, 136, 69, 2, 592, 593, 7, 36, 2, 2, 593, 135, 3, 2, 2, 2, 594, 595, 9, 15, 2, 2, 595, 137, 3, 2, 2, 2, 55, 139, 146, 153, 158, 165, 167, 173, 179, 195, 202, 217, 221, 230, 239, 249, 262, 267, 273, 277, 283, 289, 313, 325, 343, 351, 355, 360, 363, 368, 371, 381, 384, 396, 401, 406, 422, 424, 432, 446, 452, 458, 466, 483, 493, 504, 515, 526, 537, 548, 558, 565, 574, 580] \ No newline at end of file diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.tokens b/kipper/core/src/compiler/parser/antlr/KipperParser.tokens index 4ce00d897..a8e8b39b6 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.tokens +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.tokens @@ -1,129 +1,135 @@ -BlockComment=1 -LineComment=2 -Const=3 -Var=4 -As=5 -Spread=6 -Switch=7 -Case=8 -Default=9 -Break=10 -Continue=11 -Do=12 -While=13 -If=14 -Else=15 -For=16 -Enum=17 -DefFunc=18 -Return=19 -CallFunc=20 -RetIndicator=21 -True=22 -False=23 -Typeof=24 -Void=25 -Null=26 -Undefined=27 -Comma=28 -SemiColon=29 -QuestionMark=30 -Colon=31 -LeftParen=32 -RightParen=33 -LeftBracket=34 -RightBracket=35 -LeftBrace=36 -RightBrace=37 -Plus=38 -PlusPlus=39 -Minus=40 -MinusMinus=41 -Star=42 -Div=43 -Mod=44 -PowerTo=45 -AndAnd=46 -OrOr=47 -Not=48 -Assign=49 -PlusAssign=50 -MinusAssign=51 -StarAssign=52 -DivAssign=53 -ModAssign=54 -Equal=55 -NotEqual=56 -Less=57 -LessEqual=58 -Greater=59 -GreaterEqual=60 -Dot=61 -Identifier=62 -IntegerConstant=63 -SingleQuoteFStringLiteral=64 -DoubleQuoteFStringLiteral=65 +FStringExpStart=1 +BlockComment=2 +LineComment=3 +Const=4 +Var=5 +As=6 +Spread=7 +Switch=8 +Case=9 +Default=10 +Break=11 +Continue=12 +Do=13 +While=14 +If=15 +Else=16 +For=17 +Enum=18 +DefFunc=19 +Return=20 +CallFunc=21 +RetIndicator=22 +True=23 +False=24 +Typeof=25 +Void=26 +Null=27 +Undefined=28 +Comma=29 +SemiColon=30 +QuestionMark=31 +Colon=32 +LeftParen=33 +RightParen=34 +LeftBracket=35 +RightBracket=36 +FStringExpEnd=37 +LeftBrace=38 +RightBrace=39 +Plus=40 +PlusPlus=41 +Minus=42 +MinusMinus=43 +Star=44 +Div=45 +Mod=46 +PowerTo=47 +AndAnd=48 +OrOr=49 +Not=50 +Assign=51 +PlusAssign=52 +MinusAssign=53 +StarAssign=54 +DivAssign=55 +ModAssign=56 +Equal=57 +NotEqual=58 +Less=59 +LessEqual=60 +Greater=61 +GreaterEqual=62 +Dot=63 +Identifier=64 +IntegerConstant=65 SingleQuoteStringLiteral=66 DoubleQuoteStringLiteral=67 FloatingConstant=68 Whitespace=69 Newline=70 -'const'=3 -'var'=4 -'as'=5 -'...'=6 -'switch'=7 -'case'=8 -'default'=9 -'break'=10 -'continue'=11 -'do'=12 -'while'=13 -'if'=14 -'else'=15 -'for'=16 -'enum'=17 -'def'=18 -'return'=19 -'call'=20 -'->'=21 -'true'=22 -'false'=23 -'typeof'=24 -'void'=25 -'null'=26 -'undefined'=27 -','=28 -';'=29 -'?'=30 -':'=31 -'('=32 -')'=33 -'['=34 -']'=35 -'{'=36 -'}'=37 -'+'=38 -'++'=39 -'-'=40 -'--'=41 -'*'=42 -'/'=43 -'%'=44 -'**'=45 -'&&'=46 -'||'=47 -'!'=48 -'='=49 -'+='=50 -'-='=51 -'*='=52 -'/='=53 -'%='=54 -'=='=55 -'!='=56 -'<'=57 -'<='=58 -'>'=59 -'>='=60 -'.'=61 +FStringSingleQuoteStart=71 +FStringDoubleQuoteStart=72 +FStringSingleQuoteEnd=73 +FStringSingleQuoteAtom=74 +FStringDoubleQuoteEnd=75 +FStringDoubleQuoteAtom=76 +'const'=4 +'var'=5 +'as'=6 +'...'=7 +'switch'=8 +'case'=9 +'default'=10 +'break'=11 +'continue'=12 +'do'=13 +'while'=14 +'if'=15 +'else'=16 +'for'=17 +'enum'=18 +'def'=19 +'return'=20 +'call'=21 +'->'=22 +'true'=23 +'false'=24 +'typeof'=25 +'void'=26 +'null'=27 +'undefined'=28 +','=29 +';'=30 +'?'=31 +':'=32 +'('=33 +')'=34 +'['=35 +']'=36 +'{'=38 +'}'=39 +'+'=40 +'++'=41 +'-'=42 +'--'=43 +'*'=44 +'/'=45 +'%'=46 +'**'=47 +'&&'=48 +'||'=49 +'!'=50 +'='=51 +'+='=52 +'-='=53 +'*='=54 +'/='=55 +'%='=56 +'=='=57 +'!='=58 +'<'=59 +'<='=60 +'>'=61 +'>='=62 +'.'=63 diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.ts b/kipper/core/src/compiler/parser/antlr/KipperParser.ts index 1c10a4251..e3cb2b7b6 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.ts @@ -30,76 +30,82 @@ import { KipperParserListener } from "./KipperParserListener"; import { KipperParserVisitor } from "./KipperParserVisitor"; export class KipperParser extends Parser { - public static readonly BlockComment = 1; - public static readonly LineComment = 2; - public static readonly Const = 3; - public static readonly Var = 4; - public static readonly As = 5; - public static readonly Spread = 6; - public static readonly Switch = 7; - public static readonly Case = 8; - public static readonly Default = 9; - public static readonly Break = 10; - public static readonly Continue = 11; - public static readonly Do = 12; - public static readonly While = 13; - public static readonly If = 14; - public static readonly Else = 15; - public static readonly For = 16; - public static readonly Enum = 17; - public static readonly DefFunc = 18; - public static readonly Return = 19; - public static readonly CallFunc = 20; - public static readonly RetIndicator = 21; - public static readonly True = 22; - public static readonly False = 23; - public static readonly Typeof = 24; - public static readonly Void = 25; - public static readonly Null = 26; - public static readonly Undefined = 27; - public static readonly Comma = 28; - public static readonly SemiColon = 29; - public static readonly QuestionMark = 30; - public static readonly Colon = 31; - public static readonly LeftParen = 32; - public static readonly RightParen = 33; - public static readonly LeftBracket = 34; - public static readonly RightBracket = 35; - public static readonly LeftBrace = 36; - public static readonly RightBrace = 37; - public static readonly Plus = 38; - public static readonly PlusPlus = 39; - public static readonly Minus = 40; - public static readonly MinusMinus = 41; - public static readonly Star = 42; - public static readonly Div = 43; - public static readonly Mod = 44; - public static readonly PowerTo = 45; - public static readonly AndAnd = 46; - public static readonly OrOr = 47; - public static readonly Not = 48; - public static readonly Assign = 49; - public static readonly PlusAssign = 50; - public static readonly MinusAssign = 51; - public static readonly StarAssign = 52; - public static readonly DivAssign = 53; - public static readonly ModAssign = 54; - public static readonly Equal = 55; - public static readonly NotEqual = 56; - public static readonly Less = 57; - public static readonly LessEqual = 58; - public static readonly Greater = 59; - public static readonly GreaterEqual = 60; - public static readonly Dot = 61; - public static readonly Identifier = 62; - public static readonly IntegerConstant = 63; - public static readonly SingleQuoteFStringLiteral = 64; - public static readonly DoubleQuoteFStringLiteral = 65; + public static readonly FStringExpStart = 1; + public static readonly BlockComment = 2; + public static readonly LineComment = 3; + public static readonly Const = 4; + public static readonly Var = 5; + public static readonly As = 6; + public static readonly Spread = 7; + public static readonly Switch = 8; + public static readonly Case = 9; + public static readonly Default = 10; + public static readonly Break = 11; + public static readonly Continue = 12; + public static readonly Do = 13; + public static readonly While = 14; + public static readonly If = 15; + public static readonly Else = 16; + public static readonly For = 17; + public static readonly Enum = 18; + public static readonly DefFunc = 19; + public static readonly Return = 20; + public static readonly CallFunc = 21; + public static readonly RetIndicator = 22; + public static readonly True = 23; + public static readonly False = 24; + public static readonly Typeof = 25; + public static readonly Void = 26; + public static readonly Null = 27; + public static readonly Undefined = 28; + public static readonly Comma = 29; + public static readonly SemiColon = 30; + public static readonly QuestionMark = 31; + public static readonly Colon = 32; + public static readonly LeftParen = 33; + public static readonly RightParen = 34; + public static readonly LeftBracket = 35; + public static readonly RightBracket = 36; + public static readonly FStringExpEnd = 37; + public static readonly LeftBrace = 38; + public static readonly RightBrace = 39; + public static readonly Plus = 40; + public static readonly PlusPlus = 41; + public static readonly Minus = 42; + public static readonly MinusMinus = 43; + public static readonly Star = 44; + public static readonly Div = 45; + public static readonly Mod = 46; + public static readonly PowerTo = 47; + public static readonly AndAnd = 48; + public static readonly OrOr = 49; + public static readonly Not = 50; + public static readonly Assign = 51; + public static readonly PlusAssign = 52; + public static readonly MinusAssign = 53; + public static readonly StarAssign = 54; + public static readonly DivAssign = 55; + public static readonly ModAssign = 56; + public static readonly Equal = 57; + public static readonly NotEqual = 58; + public static readonly Less = 59; + public static readonly LessEqual = 60; + public static readonly Greater = 61; + public static readonly GreaterEqual = 62; + public static readonly Dot = 63; + public static readonly Identifier = 64; + public static readonly IntegerConstant = 65; public static readonly SingleQuoteStringLiteral = 66; public static readonly DoubleQuoteStringLiteral = 67; public static readonly FloatingConstant = 68; public static readonly Whitespace = 69; public static readonly Newline = 70; + public static readonly FStringSingleQuoteStart = 71; + public static readonly FStringDoubleQuoteStart = 72; + public static readonly FStringSingleQuoteEnd = 73; + public static readonly FStringSingleQuoteAtom = 74; + public static readonly FStringDoubleQuoteEnd = 75; + public static readonly FStringDoubleQuoteAtom = 76; public static readonly RULE_compilationUnit = 0; public static readonly RULE_translationUnit = 1; public static readonly RULE_externalItem = 2; @@ -135,37 +141,39 @@ export class KipperParser extends Parser { public static readonly RULE_identifier = 32; public static readonly RULE_stringPrimaryExpression = 33; public static readonly RULE_fStringPrimaryExpression = 34; - public static readonly RULE_numberPrimaryExpression = 35; - public static readonly RULE_arrayLiteralPrimaryExpression = 36; - public static readonly RULE_voidOrNullOrUndefinedPrimaryExpression = 37; - public static readonly RULE_computedPrimaryExpression = 38; - public static readonly RULE_argumentExpressionList = 39; - public static readonly RULE_dotNotation = 40; - public static readonly RULE_bracketNotation = 41; - public static readonly RULE_sliceNotation = 42; - public static readonly RULE_postfixExpression = 43; - public static readonly RULE_incrementOrDecrementPostfixExpression = 44; - public static readonly RULE_unaryExpression = 45; - public static readonly RULE_incrementOrDecrementUnaryExpression = 46; - public static readonly RULE_operatorModifiedUnaryExpression = 47; - public static readonly RULE_incrementOrDecrementOperator = 48; - public static readonly RULE_unaryOperator = 49; - public static readonly RULE_castOrConvertExpression = 50; - public static readonly RULE_multiplicativeExpression = 51; - public static readonly RULE_additiveExpression = 52; - public static readonly RULE_relationalExpression = 53; - public static readonly RULE_equalityExpression = 54; - public static readonly RULE_logicalAndExpression = 55; - public static readonly RULE_logicalOrExpression = 56; - public static readonly RULE_conditionalExpression = 57; - public static readonly RULE_assignmentExpression = 58; - public static readonly RULE_assignmentOperator = 59; - public static readonly RULE_expression = 60; - public static readonly RULE_typeSpecifier = 61; - public static readonly RULE_identifierTypeSpecifier = 62; - public static readonly RULE_genericTypeSpecifier = 63; - public static readonly RULE_typeofTypeSpecifier = 64; - public static readonly RULE_typeSpecifierIdentifier = 65; + public static readonly RULE_fStringSingleQuoteAtom = 35; + public static readonly RULE_fStringDoubleQuoteAtom = 36; + public static readonly RULE_numberPrimaryExpression = 37; + public static readonly RULE_arrayLiteralPrimaryExpression = 38; + public static readonly RULE_voidOrNullOrUndefinedPrimaryExpression = 39; + public static readonly RULE_computedPrimaryExpression = 40; + public static readonly RULE_argumentExpressionList = 41; + public static readonly RULE_dotNotation = 42; + public static readonly RULE_bracketNotation = 43; + public static readonly RULE_sliceNotation = 44; + public static readonly RULE_postfixExpression = 45; + public static readonly RULE_incrementOrDecrementPostfixExpression = 46; + public static readonly RULE_unaryExpression = 47; + public static readonly RULE_incrementOrDecrementUnaryExpression = 48; + public static readonly RULE_operatorModifiedUnaryExpression = 49; + public static readonly RULE_incrementOrDecrementOperator = 50; + public static readonly RULE_unaryOperator = 51; + public static readonly RULE_castOrConvertExpression = 52; + public static readonly RULE_multiplicativeExpression = 53; + public static readonly RULE_additiveExpression = 54; + public static readonly RULE_relationalExpression = 55; + public static readonly RULE_equalityExpression = 56; + public static readonly RULE_logicalAndExpression = 57; + public static readonly RULE_logicalOrExpression = 58; + public static readonly RULE_conditionalExpression = 59; + public static readonly RULE_assignmentExpression = 60; + public static readonly RULE_assignmentOperator = 61; + public static readonly RULE_expression = 62; + public static readonly RULE_typeSpecifier = 63; + public static readonly RULE_identifierTypeSpecifier = 64; + public static readonly RULE_genericTypeSpecifier = 65; + public static readonly RULE_typeofTypeSpecifier = 66; + public static readonly RULE_typeSpecifierIdentifier = 67; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "compilationUnit", @@ -203,6 +211,8 @@ export class KipperParser extends Parser { "identifier", "stringPrimaryExpression", "fStringPrimaryExpression", + "fStringSingleQuoteAtom", + "fStringDoubleQuoteAtom", "numberPrimaryExpression", "arrayLiteralPrimaryExpression", "voidOrNullOrUndefinedPrimaryExpression", @@ -240,6 +250,7 @@ export class KipperParser extends Parser { undefined, undefined, undefined, + undefined, "'const'", "'var'", "'as'", @@ -273,6 +284,7 @@ export class KipperParser extends Parser { "')'", "'['", "']'", + undefined, "'{'", "'}'", "'+'", @@ -302,6 +314,7 @@ export class KipperParser extends Parser { ]; private static readonly _SYMBOLIC_NAMES: Array = [ undefined, + "FStringExpStart", "BlockComment", "LineComment", "Const", @@ -337,6 +350,7 @@ export class KipperParser extends Parser { "RightParen", "LeftBracket", "RightBracket", + "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", @@ -365,13 +379,17 @@ export class KipperParser extends Parser { "Dot", "Identifier", "IntegerConstant", - "SingleQuoteFStringLiteral", - "DoubleQuoteFStringLiteral", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", "FloatingConstant", "Whitespace", "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( KipperParser._LITERAL_NAMES, @@ -417,7 +435,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 133; + this.state = 137; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -442,35 +460,35 @@ export class KipperParser extends Parser { (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || - (((_la - 32) & ~0x1f) === 0 && - ((1 << (_la - 32)) & - ((1 << (KipperParser.LeftParen - 32)) | - (1 << (KipperParser.LeftBracket - 32)) | - (1 << (KipperParser.LeftBrace - 32)) | - (1 << (KipperParser.Plus - 32)) | - (1 << (KipperParser.PlusPlus - 32)) | - (1 << (KipperParser.Minus - 32)) | - (1 << (KipperParser.MinusMinus - 32)) | - (1 << (KipperParser.Not - 32)) | - (1 << (KipperParser.Identifier - 32)) | - (1 << (KipperParser.IntegerConstant - 32)))) !== + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.LeftBrace - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)) | + (1 << (KipperParser.Identifier - 33)))) !== 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.SingleQuoteFStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)))) !== + (((_la - 65) & ~0x1f) === 0 && + ((1 << (_la - 65)) & + ((1 << (KipperParser.IntegerConstant - 65)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | + (1 << (KipperParser.FloatingConstant - 65)) | + (1 << (KipperParser.FStringSingleQuoteStart - 65)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== 0) ) { { - this.state = 132; + this.state = 136; this.translationUnit(); } } - this.state = 135; + this.state = 139; this.match(KipperParser.EOF); } } catch (re) { @@ -494,17 +512,17 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 138; + this.state = 142; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 137; + this.state = 141; this.externalItem(); } } - this.state = 140; + this.state = 144; this._errHandler.sync(this); _la = this._input.LA(1); } while ( @@ -529,26 +547,26 @@ export class KipperParser extends Parser { (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || - (((_la - 32) & ~0x1f) === 0 && - ((1 << (_la - 32)) & - ((1 << (KipperParser.LeftParen - 32)) | - (1 << (KipperParser.LeftBracket - 32)) | - (1 << (KipperParser.LeftBrace - 32)) | - (1 << (KipperParser.Plus - 32)) | - (1 << (KipperParser.PlusPlus - 32)) | - (1 << (KipperParser.Minus - 32)) | - (1 << (KipperParser.MinusMinus - 32)) | - (1 << (KipperParser.Not - 32)) | - (1 << (KipperParser.Identifier - 32)) | - (1 << (KipperParser.IntegerConstant - 32)))) !== + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.LeftBrace - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)) | + (1 << (KipperParser.Identifier - 33)))) !== 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.SingleQuoteFStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)))) !== + (((_la - 65) & ~0x1f) === 0 && + ((1 << (_la - 65)) & + ((1 << (KipperParser.IntegerConstant - 65)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | + (1 << (KipperParser.FloatingConstant - 65)) | + (1 << (KipperParser.FStringSingleQuoteStart - 65)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== 0) ); } @@ -573,7 +591,7 @@ export class KipperParser extends Parser { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 142; + this.state = 146; this.blockItemList(); } } catch (re) { @@ -597,7 +615,7 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 145; + this.state = 149; this._errHandler.sync(this); _alt = 1; do { @@ -605,7 +623,7 @@ export class KipperParser extends Parser { case 1: { { - this.state = 144; + this.state = 148; this.blockItem(); } } @@ -613,7 +631,7 @@ export class KipperParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 147; + this.state = 151; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -638,7 +656,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 152; + this.state = 156; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Switch: @@ -665,13 +683,13 @@ export class KipperParser extends Parser { case KipperParser.Not: case KipperParser.Identifier: case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteFStringLiteral: - case KipperParser.DoubleQuoteFStringLiteral: case KipperParser.SingleQuoteStringLiteral: case KipperParser.DoubleQuoteStringLiteral: case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: { - this.state = 149; + this.state = 153; this.statement(); } break; @@ -679,13 +697,13 @@ export class KipperParser extends Parser { case KipperParser.Var: case KipperParser.DefFunc: { - this.state = 150; + this.state = 154; this.declaration(); } break; case KipperParser.SemiColon: { - this.state = 151; + this.state = 155; this.match(KipperParser.SemiColon); } break; @@ -711,30 +729,30 @@ export class KipperParser extends Parser { let _localctx: DeclarationContext = new DeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 10, KipperParser.RULE_declaration); try { - this.state = 161; + this.state = 165; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: this.enterOuterAlt(_localctx, 1); { - this.state = 154; + this.state = 158; this.variableDeclaration(); - this.state = 155; + this.state = 159; this.match(KipperParser.SemiColon); } break; case KipperParser.DefFunc: this.enterOuterAlt(_localctx, 2); { - this.state = 157; + this.state = 161; this.functionDeclaration(); - this.state = 159; + this.state = 163; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 4, this._ctx)) { case 1: { - this.state = 158; + this.state = 162; this.match(KipperParser.SemiColon); } break; @@ -765,34 +783,34 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 163; + this.state = 167; this.match(KipperParser.DefFunc); - this.state = 164; + this.state = 168; this.declarator(); - this.state = 165; + this.state = 169; this.match(KipperParser.LeftParen); - this.state = 167; + this.state = 171; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 166; + this.state = 170; this.parameterList(); } } - this.state = 169; + this.state = 173; this.match(KipperParser.RightParen); - this.state = 170; + this.state = 174; this.match(KipperParser.RetIndicator); - this.state = 171; + this.state = 175; this.typeSpecifier(); - this.state = 173; + this.state = 177; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { case 1: { - this.state = 172; + this.state = 176; this.compoundStatement(); } break; @@ -818,9 +836,9 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 175; + this.state = 179; this.storageTypeSpecifier(); - this.state = 176; + this.state = 180; this.initDeclarator(); } } catch (re) { @@ -844,7 +862,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 178; + this.state = 182; _la = this._input.LA(1); if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { this._errHandler.recoverInline(this); @@ -877,7 +895,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 180; + this.state = 184; this.directDeclarator(); } } catch (re) { @@ -900,7 +918,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 182; + this.state = 186; this.match(KipperParser.Identifier); } } catch (re) { @@ -924,20 +942,20 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 184; + this.state = 188; this.declarator(); - this.state = 185; + this.state = 189; this.match(KipperParser.Colon); - this.state = 186; + this.state = 190; this.typeSpecifier(); - this.state = 189; + this.state = 193; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Assign) { { - this.state = 187; + this.state = 191; this.match(KipperParser.Assign); - this.state = 188; + this.state = 192; this.initializer(); } } @@ -963,21 +981,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 191; + this.state = 195; this.parameterDeclaration(); - this.state = 196; + this.state = 200; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 192; + this.state = 196; this.match(KipperParser.Comma); - this.state = 193; + this.state = 197; this.parameterDeclaration(); } } - this.state = 198; + this.state = 202; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1002,11 +1020,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 199; + this.state = 203; this.declarator(); - this.state = 200; + this.state = 204; this.match(KipperParser.Colon); - this.state = 201; + this.state = 205; this.typeSpecifier(); } } catch (re) { @@ -1029,7 +1047,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 203; + this.state = 207; this.assignmentExpression(); } } catch (re) { @@ -1050,13 +1068,13 @@ export class KipperParser extends Parser { let _localctx: StatementContext = new StatementContext(this._ctx, this.state); this.enterRule(_localctx, 30, KipperParser.RULE_statement); try { - this.state = 211; + this.state = 215; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.LeftBrace: this.enterOuterAlt(_localctx, 1); { - this.state = 205; + this.state = 209; this.compoundStatement(); } break; @@ -1075,14 +1093,14 @@ export class KipperParser extends Parser { case KipperParser.Not: case KipperParser.Identifier: case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteFStringLiteral: - case KipperParser.DoubleQuoteFStringLiteral: case KipperParser.SingleQuoteStringLiteral: case KipperParser.DoubleQuoteStringLiteral: case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 2); { - this.state = 206; + this.state = 210; this.expressionStatement(); } break; @@ -1090,7 +1108,7 @@ export class KipperParser extends Parser { case KipperParser.If: this.enterOuterAlt(_localctx, 3); { - this.state = 207; + this.state = 211; this.selectionStatement(); } break; @@ -1099,7 +1117,7 @@ export class KipperParser extends Parser { case KipperParser.For: this.enterOuterAlt(_localctx, 4); { - this.state = 208; + this.state = 212; this.iterationStatement(); } break; @@ -1107,14 +1125,14 @@ export class KipperParser extends Parser { case KipperParser.Continue: this.enterOuterAlt(_localctx, 5); { - this.state = 209; + this.state = 213; this.jumpStatement(); } break; case KipperParser.Return: this.enterOuterAlt(_localctx, 6); { - this.state = 210; + this.state = 214; this.returnStatement(); } break; @@ -1142,9 +1160,9 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 213; + this.state = 217; this.match(KipperParser.LeftBrace); - this.state = 215; + this.state = 219; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1169,35 +1187,35 @@ export class KipperParser extends Parser { (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || - (((_la - 32) & ~0x1f) === 0 && - ((1 << (_la - 32)) & - ((1 << (KipperParser.LeftParen - 32)) | - (1 << (KipperParser.LeftBracket - 32)) | - (1 << (KipperParser.LeftBrace - 32)) | - (1 << (KipperParser.Plus - 32)) | - (1 << (KipperParser.PlusPlus - 32)) | - (1 << (KipperParser.Minus - 32)) | - (1 << (KipperParser.MinusMinus - 32)) | - (1 << (KipperParser.Not - 32)) | - (1 << (KipperParser.Identifier - 32)) | - (1 << (KipperParser.IntegerConstant - 32)))) !== + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.LeftBrace - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)) | + (1 << (KipperParser.Identifier - 33)))) !== 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.SingleQuoteFStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)))) !== + (((_la - 65) & ~0x1f) === 0 && + ((1 << (_la - 65)) & + ((1 << (KipperParser.IntegerConstant - 65)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | + (1 << (KipperParser.FloatingConstant - 65)) | + (1 << (KipperParser.FStringSingleQuoteStart - 65)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== 0) ) { { - this.state = 214; + this.state = 218; this.blockItemList(); } } - this.state = 217; + this.state = 221; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1220,9 +1238,9 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 219; + this.state = 223; this.expression(); - this.state = 220; + this.state = 224; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1243,20 +1261,20 @@ export class KipperParser extends Parser { let _localctx: SelectionStatementContext = new SelectionStatementContext(this._ctx, this.state); this.enterRule(_localctx, 36, KipperParser.RULE_selectionStatement); try { - this.state = 224; + this.state = 228; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.If: this.enterOuterAlt(_localctx, 1); { - this.state = 222; + this.state = 226; this.ifStatement(); } break; case KipperParser.Switch: this.enterOuterAlt(_localctx, 2); { - this.state = 223; + this.state = 227; this.switchStatement(); } break; @@ -1283,24 +1301,24 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 226; + this.state = 230; this.match(KipperParser.If); - this.state = 227; + this.state = 231; this.match(KipperParser.LeftParen); - this.state = 228; + this.state = 232; this.expression(); - this.state = 229; + this.state = 233; this.match(KipperParser.RightParen); - this.state = 230; + this.state = 234; this.statement(); - this.state = 233; + this.state = 237; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 13, this._ctx)) { case 1: { - this.state = 231; + this.state = 235; this.match(KipperParser.Else); - this.state = 232; + this.state = 236; this.statement(); } break; @@ -1327,31 +1345,31 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 235; + this.state = 239; this.match(KipperParser.Switch); - this.state = 236; + this.state = 240; this.match(KipperParser.LeftParen); - this.state = 237; + this.state = 241; this.expression(); - this.state = 238; + this.state = 242; this.match(KipperParser.RightParen); - this.state = 239; - this.match(KipperParser.LeftBrace); this.state = 243; + this.match(KipperParser.LeftBrace); + this.state = 247; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Case || _la === KipperParser.Default) { { { - this.state = 240; + this.state = 244; this.switchLabeledStatement(); } } - this.state = 245; + this.state = 249; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 246; + this.state = 250; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1372,30 +1390,30 @@ export class KipperParser extends Parser { let _localctx: SwitchLabeledStatementContext = new SwitchLabeledStatementContext(this._ctx, this.state); this.enterRule(_localctx, 42, KipperParser.RULE_switchLabeledStatement); try { - this.state = 256; + this.state = 260; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Case: this.enterOuterAlt(_localctx, 1); { - this.state = 248; + this.state = 252; this.match(KipperParser.Case); - this.state = 249; + this.state = 253; this.expression(); - this.state = 250; + this.state = 254; this.match(KipperParser.Colon); - this.state = 251; + this.state = 255; this.statement(); } break; case KipperParser.Default: this.enterOuterAlt(_localctx, 2); { - this.state = 253; + this.state = 257; this.match(KipperParser.Default); - this.state = 254; + this.state = 258; this.match(KipperParser.Colon); - this.state = 255; + this.state = 259; this.statement(); } break; @@ -1420,27 +1438,27 @@ export class KipperParser extends Parser { let _localctx: IterationStatementContext = new IterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 44, KipperParser.RULE_iterationStatement); try { - this.state = 261; + this.state = 265; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.For: this.enterOuterAlt(_localctx, 1); { - this.state = 258; + this.state = 262; this.forLoopIterationStatement(); } break; case KipperParser.While: this.enterOuterAlt(_localctx, 2); { - this.state = 259; + this.state = 263; this.whileLoopIterationStatement(); } break; case KipperParser.Do: this.enterOuterAlt(_localctx, 3); { - this.state = 260; + this.state = 264; this.doWhileLoopIterationStatement(); } break; @@ -1468,51 +1486,54 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 263; + this.state = 267; this.match(KipperParser.For); - this.state = 264; + this.state = 268; this.match(KipperParser.LeftParen); - this.state = 271; + this.state = 275; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 3) & ~0x1f) === 0 && - ((1 << (_la - 3)) & - ((1 << (KipperParser.Const - 3)) | - (1 << (KipperParser.Var - 3)) | - (1 << (KipperParser.CallFunc - 3)) | - (1 << (KipperParser.True - 3)) | - (1 << (KipperParser.False - 3)) | - (1 << (KipperParser.Void - 3)) | - (1 << (KipperParser.Null - 3)) | - (1 << (KipperParser.Undefined - 3)) | - (1 << (KipperParser.LeftParen - 3)) | - (1 << (KipperParser.LeftBracket - 3)))) !== + ((_la & ~0x1f) === 0 && + ((1 << _la) & + ((1 << KipperParser.Const) | + (1 << KipperParser.Var) | + (1 << KipperParser.CallFunc) | + (1 << KipperParser.True) | + (1 << KipperParser.False) | + (1 << KipperParser.Void) | + (1 << KipperParser.Null) | + (1 << KipperParser.Undefined))) !== 0) || - (((_la - 38) & ~0x1f) === 0 && - ((1 << (_la - 38)) & - ((1 << (KipperParser.Plus - 38)) | - (1 << (KipperParser.PlusPlus - 38)) | - (1 << (KipperParser.Minus - 38)) | - (1 << (KipperParser.MinusMinus - 38)) | - (1 << (KipperParser.Not - 38)) | - (1 << (KipperParser.Identifier - 38)) | - (1 << (KipperParser.IntegerConstant - 38)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 38)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 38)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 38)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 38)) | - (1 << (KipperParser.FloatingConstant - 38)))) !== + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)) | + (1 << (KipperParser.Identifier - 33)))) !== + 0) || + (((_la - 65) & ~0x1f) === 0 && + ((1 << (_la - 65)) & + ((1 << (KipperParser.IntegerConstant - 65)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | + (1 << (KipperParser.FloatingConstant - 65)) | + (1 << (KipperParser.FStringSingleQuoteStart - 65)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== 0) ) { { - this.state = 267; + this.state = 271; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: { - this.state = 265; + this.state = 269; this.variableDeclaration(); } break; @@ -1531,13 +1552,13 @@ export class KipperParser extends Parser { case KipperParser.Not: case KipperParser.Identifier: case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteFStringLiteral: - case KipperParser.DoubleQuoteFStringLiteral: case KipperParser.SingleQuoteStringLiteral: case KipperParser.DoubleQuoteStringLiteral: case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: { - this.state = 266; + this.state = 270; this.expression(); } break; @@ -1548,89 +1569,89 @@ export class KipperParser extends Parser { } } - this.state = 273; - this.match(KipperParser.SemiColon); this.state = 277; + this.match(KipperParser.SemiColon); + this.state = 281; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 274; + this.state = 278; this.expression(); _localctx._forCondition = true; } } - this.state = 279; - this.match(KipperParser.SemiColon); this.state = 283; + this.match(KipperParser.SemiColon); + this.state = 287; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 280; + this.state = 284; this.expression(); _localctx._forIterationExp = true; } } - this.state = 285; + this.state = 289; this.match(KipperParser.RightParen); - this.state = 286; + this.state = 290; this.statement(); } } catch (re) { @@ -1653,15 +1674,15 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 288; + this.state = 292; this.match(KipperParser.While); - this.state = 289; + this.state = 293; this.match(KipperParser.LeftParen); - this.state = 290; + this.state = 294; this.expression(); - this.state = 291; + this.state = 295; this.match(KipperParser.RightParen); - this.state = 292; + this.state = 296; this.statement(); } } catch (re) { @@ -1687,19 +1708,19 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 294; + this.state = 298; this.match(KipperParser.Do); - this.state = 295; + this.state = 299; this.statement(); - this.state = 296; + this.state = 300; this.match(KipperParser.While); - this.state = 297; + this.state = 301; this.match(KipperParser.LeftParen); - this.state = 298; + this.state = 302; this.expression(); - this.state = 299; + this.state = 303; this.match(KipperParser.RightParen); - this.state = 300; + this.state = 304; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1723,7 +1744,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 302; + this.state = 306; _la = this._input.LA(1); if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { this._errHandler.recoverInline(this); @@ -1735,7 +1756,7 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 303; + this.state = 307; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1759,46 +1780,46 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 305; + this.state = 309; this.match(KipperParser.Return); - this.state = 307; + this.state = 311; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 306; + this.state = 310; this.expression(); } } - this.state = 309; + this.state = 313; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1819,13 +1840,13 @@ export class KipperParser extends Parser { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 56, KipperParser.RULE_primaryExpression); try { - this.state = 319; + this.state = 323; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.LeftParen: this.enterOuterAlt(_localctx, 1); { - this.state = 311; + this.state = 315; this.tangledPrimaryExpression(); } break; @@ -1833,14 +1854,14 @@ export class KipperParser extends Parser { case KipperParser.False: this.enterOuterAlt(_localctx, 2); { - this.state = 312; + this.state = 316; this.boolPrimaryExpression(); } break; case KipperParser.Identifier: this.enterOuterAlt(_localctx, 3); { - this.state = 313; + this.state = 317; this.identifierPrimaryExpression(); } break; @@ -1848,15 +1869,15 @@ export class KipperParser extends Parser { case KipperParser.DoubleQuoteStringLiteral: this.enterOuterAlt(_localctx, 4); { - this.state = 314; + this.state = 318; this.stringPrimaryExpression(); } break; - case KipperParser.SingleQuoteFStringLiteral: - case KipperParser.DoubleQuoteFStringLiteral: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 5); { - this.state = 315; + this.state = 319; this.fStringPrimaryExpression(); } break; @@ -1864,14 +1885,14 @@ export class KipperParser extends Parser { case KipperParser.FloatingConstant: this.enterOuterAlt(_localctx, 6); { - this.state = 316; + this.state = 320; this.numberPrimaryExpression(); } break; case KipperParser.LeftBracket: this.enterOuterAlt(_localctx, 7); { - this.state = 317; + this.state = 321; this.arrayLiteralPrimaryExpression(); } break; @@ -1880,7 +1901,7 @@ export class KipperParser extends Parser { case KipperParser.Undefined: this.enterOuterAlt(_localctx, 8); { - this.state = 318; + this.state = 322; this.voidOrNullOrUndefinedPrimaryExpression(); } break; @@ -1907,11 +1928,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 321; + this.state = 325; this.match(KipperParser.LeftParen); - this.state = 322; + this.state = 326; this.expression(); - this.state = 323; + this.state = 327; this.match(KipperParser.RightParen); } } catch (re) { @@ -1935,7 +1956,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 325; + this.state = 329; _la = this._input.LA(1); if (!(_la === KipperParser.True || _la === KipperParser.False)) { this._errHandler.recoverInline(this); @@ -1968,7 +1989,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 327; + this.state = 331; this.identifier(); } } catch (re) { @@ -1991,7 +2012,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 329; + this.state = 333; this.match(KipperParser.Identifier); } } catch (re) { @@ -2015,7 +2036,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 331; + this.state = 335; _la = this._input.LA(1); if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { this._errHandler.recoverInline(this); @@ -2047,20 +2068,213 @@ export class KipperParser extends Parser { this.enterRule(_localctx, 68, KipperParser.RULE_fStringPrimaryExpression); let _la: number; try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 333; - _la = this._input.LA(1); - if (!(_la === KipperParser.SingleQuoteFStringLiteral || _la === KipperParser.DoubleQuoteFStringLiteral)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + this.state = 353; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.FStringSingleQuoteStart: + this.enterOuterAlt(_localctx, 1); + { + this.state = 337; + this.match(KipperParser.FStringSingleQuoteStart); + this.state = 341; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { + { + { + this.state = 338; + this.fStringSingleQuoteAtom(); + } + } + this.state = 343; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 344; + this.match(KipperParser.FStringSingleQuoteEnd); + } + break; + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 345; + this.match(KipperParser.FStringDoubleQuoteStart); + this.state = 349; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { + { + { + this.state = 346; + this.fStringDoubleQuoteAtom(); + } + } + this.state = 351; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 352; + this.match(KipperParser.FStringDoubleQuoteEnd); } + break; + default: + throw new NoViableAltException(this); + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext { + let _localctx: FStringSingleQuoteAtomContext = new FStringSingleQuoteAtomContext(this._ctx, this.state); + this.enterRule(_localctx, 70, KipperParser.RULE_fStringSingleQuoteAtom); + let _la: number; + try { + this.state = 361; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.FStringSingleQuoteAtom: + this.enterOuterAlt(_localctx, 1); + { + this.state = 355; + this.match(KipperParser.FStringSingleQuoteAtom); + } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 356; + this.match(KipperParser.FStringExpStart); + this.state = 358; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== + 0) + ) { + { + this.state = 357; + this.expression(); + } + } - this._errHandler.reportMatch(this); - this.consume(); - } + this.state = 360; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext { + let _localctx: FStringDoubleQuoteAtomContext = new FStringDoubleQuoteAtomContext(this._ctx, this.state); + this.enterRule(_localctx, 72, KipperParser.RULE_fStringDoubleQuoteAtom); + let _la: number; + try { + this.state = 369; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.FStringDoubleQuoteAtom: + this.enterOuterAlt(_localctx, 1); + { + this.state = 363; + this.match(KipperParser.FStringDoubleQuoteAtom); + } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 364; + this.match(KipperParser.FStringExpStart); + this.state = 366; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== + 0) + ) { + { + this.state = 365; + this.expression(); + } + } + + this.state = 368; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } } catch (re) { if (re instanceof RecognitionException) { @@ -2078,12 +2292,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public numberPrimaryExpression(): NumberPrimaryExpressionContext { let _localctx: NumberPrimaryExpressionContext = new NumberPrimaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 70, KipperParser.RULE_numberPrimaryExpression); + this.enterRule(_localctx, 74, KipperParser.RULE_numberPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 335; + this.state = 371; _la = this._input.LA(1); if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { this._errHandler.recoverInline(this); @@ -2115,67 +2329,67 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 72, KipperParser.RULE_arrayLiteralPrimaryExpression); + this.enterRule(_localctx, 76, KipperParser.RULE_arrayLiteralPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 337; + this.state = 373; this.match(KipperParser.LeftBracket); - this.state = 346; + this.state = 382; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 338; + this.state = 374; this.expression(); - this.state = 343; + this.state = 379; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 339; + this.state = 375; this.match(KipperParser.Comma); - this.state = 340; + this.state = 376; this.expression(); } } - this.state = 345; + this.state = 381; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 348; + this.state = 384; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2197,12 +2411,12 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 74, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); + this.enterRule(_localctx, 78, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 350; + this.state = 386; _la = this._input.LA(1); if ( !( @@ -2246,14 +2460,14 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: ComputedPrimaryExpressionContext = new ComputedPrimaryExpressionContext(this._ctx, _parentState); let _prevctx: ComputedPrimaryExpressionContext = _localctx; - let _startState: number = 76; - this.enterRecursionRule(_localctx, 76, KipperParser.RULE_computedPrimaryExpression, _p); + let _startState: number = 80; + this.enterRecursionRule(_localctx, 80, KipperParser.RULE_computedPrimaryExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 363; + this.state = 399; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.True: @@ -2265,17 +2479,17 @@ export class KipperParser extends Parser { case KipperParser.LeftBracket: case KipperParser.Identifier: case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteFStringLiteral: - case KipperParser.DoubleQuoteFStringLiteral: case KipperParser.SingleQuoteStringLiteral: case KipperParser.DoubleQuoteStringLiteral: case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: { _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 353; + this.state = 389; this.primaryExpression(); } break; @@ -2284,50 +2498,50 @@ export class KipperParser extends Parser { _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 354; + this.state = 390; this.match(KipperParser.CallFunc); - this.state = 355; + this.state = 391; this.computedPrimaryExpression(0); - this.state = 356; + this.state = 392; this.match(KipperParser.LeftParen); - this.state = 358; + this.state = 394; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 357; + this.state = 393; this.argumentExpressionList(); } } - this.state = 360; + this.state = 396; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParserASTMapping.RULE_functionCallExpression; } @@ -2336,9 +2550,9 @@ export class KipperParser extends Parser { throw new NoViableAltException(this); } this._ctx._stop = this._input.tryLT(-1); - this.state = 386; + this.state = 422; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 29, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -2346,59 +2560,59 @@ export class KipperParser extends Parser { } _prevctx = _localctx; { - this.state = 384; + this.state = 420; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 28, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 35, this._ctx)) { case 1: { _localctx = new FunctionCallExpressionContext( new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 365; + this.state = 401; if (!this.precpred(this._ctx, 5)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 366; + this.state = 402; this.match(KipperParser.LeftParen); - this.state = 368; + this.state = 404; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 367; + this.state = 403; this.argumentExpressionList(); } } - this.state = 370; + this.state = 406; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParserASTMapping.RULE_functionCallExpression; } @@ -2410,11 +2624,11 @@ export class KipperParser extends Parser { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 372; + this.state = 408; if (!this.precpred(this._ctx, 3)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 373; + this.state = 409; this.dotNotation(); _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression; } @@ -2426,11 +2640,11 @@ export class KipperParser extends Parser { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 376; + this.state = 412; if (!this.precpred(this._ctx, 2)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 377; + this.state = 413; this.bracketNotation(); _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression; } @@ -2442,11 +2656,11 @@ export class KipperParser extends Parser { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 380; + this.state = 416; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 381; + this.state = 417; this.sliceNotation(); _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression; } @@ -2454,9 +2668,9 @@ export class KipperParser extends Parser { } } } - this.state = 388; + this.state = 424; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 29, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); } } } catch (re) { @@ -2475,26 +2689,26 @@ export class KipperParser extends Parser { // @RuleVersion(0) public argumentExpressionList(): ArgumentExpressionListContext { let _localctx: ArgumentExpressionListContext = new ArgumentExpressionListContext(this._ctx, this.state); - this.enterRule(_localctx, 78, KipperParser.RULE_argumentExpressionList); + this.enterRule(_localctx, 82, KipperParser.RULE_argumentExpressionList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 389; + this.state = 425; this.assignmentExpression(); - this.state = 394; + this.state = 430; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 390; + this.state = 426; this.match(KipperParser.Comma); - this.state = 391; + this.state = 427; this.assignmentExpression(); } } - this.state = 396; + this.state = 432; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -2515,13 +2729,13 @@ export class KipperParser extends Parser { // @RuleVersion(0) public dotNotation(): DotNotationContext { let _localctx: DotNotationContext = new DotNotationContext(this._ctx, this.state); - this.enterRule(_localctx, 80, KipperParser.RULE_dotNotation); + this.enterRule(_localctx, 84, KipperParser.RULE_dotNotation); try { this.enterOuterAlt(_localctx, 1); { - this.state = 397; + this.state = 433; this.match(KipperParser.Dot); - this.state = 398; + this.state = 434; this.identifier(); } } catch (re) { @@ -2540,15 +2754,15 @@ export class KipperParser extends Parser { // @RuleVersion(0) public bracketNotation(): BracketNotationContext { let _localctx: BracketNotationContext = new BracketNotationContext(this._ctx, this.state); - this.enterRule(_localctx, 82, KipperParser.RULE_bracketNotation); + this.enterRule(_localctx, 86, KipperParser.RULE_bracketNotation); try { this.enterOuterAlt(_localctx, 1); { - this.state = 400; + this.state = 436; this.match(KipperParser.LeftBracket); - this.state = 401; + this.state = 437; this.expression(); - this.state = 402; + this.state = 438; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2567,92 +2781,92 @@ export class KipperParser extends Parser { // @RuleVersion(0) public sliceNotation(): SliceNotationContext { let _localctx: SliceNotationContext = new SliceNotationContext(this._ctx, this.state); - this.enterRule(_localctx, 84, KipperParser.RULE_sliceNotation); + this.enterRule(_localctx, 88, KipperParser.RULE_sliceNotation); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 404; + this.state = 440; this.match(KipperParser.LeftBracket); - this.state = 408; + this.state = 444; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 405; + this.state = 441; this.expression(); _localctx.sliceStart = true; } } - this.state = 410; + this.state = 446; this.match(KipperParser.Colon); - this.state = 414; + this.state = 450; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 20) & ~0x1f) === 0 && - ((1 << (_la - 20)) & - ((1 << (KipperParser.CallFunc - 20)) | - (1 << (KipperParser.True - 20)) | - (1 << (KipperParser.False - 20)) | - (1 << (KipperParser.Void - 20)) | - (1 << (KipperParser.Null - 20)) | - (1 << (KipperParser.Undefined - 20)) | - (1 << (KipperParser.LeftParen - 20)) | - (1 << (KipperParser.LeftBracket - 20)) | - (1 << (KipperParser.Plus - 20)) | - (1 << (KipperParser.PlusPlus - 20)) | - (1 << (KipperParser.Minus - 20)) | - (1 << (KipperParser.MinusMinus - 20)) | - (1 << (KipperParser.Not - 20)))) !== + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== 0) || - (((_la - 62) & ~0x1f) === 0 && - ((1 << (_la - 62)) & - ((1 << (KipperParser.Identifier - 62)) | - (1 << (KipperParser.IntegerConstant - 62)) | - (1 << (KipperParser.SingleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteFStringLiteral - 62)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 62)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 62)) | - (1 << (KipperParser.FloatingConstant - 62)))) !== + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== 0) ) { { - this.state = 411; + this.state = 447; this.expression(); _localctx.sliceEnd = true; } } - this.state = 416; + this.state = 452; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2671,15 +2885,15 @@ export class KipperParser extends Parser { // @RuleVersion(0) public postfixExpression(): PostfixExpressionContext { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 86, KipperParser.RULE_postfixExpression); + this.enterRule(_localctx, 90, KipperParser.RULE_postfixExpression); try { - this.state = 420; + this.state = 456; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 33, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 40, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 418; + this.state = 454; this.computedPrimaryExpression(0); } break; @@ -2687,7 +2901,7 @@ export class KipperParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 419; + this.state = 455; this.incrementOrDecrementPostfixExpression(); } break; @@ -2711,13 +2925,13 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 88, KipperParser.RULE_incrementOrDecrementPostfixExpression); + this.enterRule(_localctx, 92, KipperParser.RULE_incrementOrDecrementPostfixExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 422; + this.state = 458; this.computedPrimaryExpression(0); - this.state = 423; + this.state = 459; this.incrementOrDecrementOperator(); } } catch (re) { @@ -2736,9 +2950,9 @@ export class KipperParser extends Parser { // @RuleVersion(0) public unaryExpression(): UnaryExpressionContext { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 90, KipperParser.RULE_unaryExpression); + this.enterRule(_localctx, 94, KipperParser.RULE_unaryExpression); try { - this.state = 428; + this.state = 464; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.CallFunc: @@ -2751,14 +2965,14 @@ export class KipperParser extends Parser { case KipperParser.LeftBracket: case KipperParser.Identifier: case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteFStringLiteral: - case KipperParser.DoubleQuoteFStringLiteral: case KipperParser.SingleQuoteStringLiteral: case KipperParser.DoubleQuoteStringLiteral: case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 425; + this.state = 461; this.postfixExpression(); } break; @@ -2766,7 +2980,7 @@ export class KipperParser extends Parser { case KipperParser.MinusMinus: this.enterOuterAlt(_localctx, 2); { - this.state = 426; + this.state = 462; this.incrementOrDecrementUnaryExpression(); } break; @@ -2775,7 +2989,7 @@ export class KipperParser extends Parser { case KipperParser.Not: this.enterOuterAlt(_localctx, 3); { - this.state = 427; + this.state = 463; this.operatorModifiedUnaryExpression(); } break; @@ -2801,13 +3015,13 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 92, KipperParser.RULE_incrementOrDecrementUnaryExpression); + this.enterRule(_localctx, 96, KipperParser.RULE_incrementOrDecrementUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 430; + this.state = 466; this.incrementOrDecrementOperator(); - this.state = 431; + this.state = 467; this.postfixExpression(); } } catch (re) { @@ -2829,13 +3043,13 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 94, KipperParser.RULE_operatorModifiedUnaryExpression); + this.enterRule(_localctx, 98, KipperParser.RULE_operatorModifiedUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 433; + this.state = 469; this.unaryOperator(); - this.state = 434; + this.state = 470; this.postfixExpression(); } } catch (re) { @@ -2854,12 +3068,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { let _localctx: IncrementOrDecrementOperatorContext = new IncrementOrDecrementOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 96, KipperParser.RULE_incrementOrDecrementOperator); + this.enterRule(_localctx, 100, KipperParser.RULE_incrementOrDecrementOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 436; + this.state = 472; _la = this._input.LA(1); if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { this._errHandler.recoverInline(this); @@ -2888,18 +3102,18 @@ export class KipperParser extends Parser { // @RuleVersion(0) public unaryOperator(): UnaryOperatorContext { let _localctx: UnaryOperatorContext = new UnaryOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 98, KipperParser.RULE_unaryOperator); + this.enterRule(_localctx, 102, KipperParser.RULE_unaryOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 438; + this.state = 474; _la = this._input.LA(1); if ( !( - ((_la - 38) & ~0x1f) === 0 && - ((1 << (_la - 38)) & - ((1 << (KipperParser.Plus - 38)) | (1 << (KipperParser.Minus - 38)) | (1 << (KipperParser.Not - 38)))) !== + ((_la - 40) & ~0x1f) === 0 && + ((1 << (_la - 40)) & + ((1 << (KipperParser.Plus - 40)) | (1 << (KipperParser.Minus - 40)) | (1 << (KipperParser.Not - 40)))) !== 0 ) ) { @@ -2929,16 +3143,16 @@ export class KipperParser extends Parser { // @RuleVersion(0) public castOrConvertExpression(): CastOrConvertExpressionContext { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 100, KipperParser.RULE_castOrConvertExpression); + this.enterRule(_localctx, 104, KipperParser.RULE_castOrConvertExpression); try { - this.state = 445; + this.state = 481; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 35, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 42, this._ctx)) { case 1: _localctx = new PassOnCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 440; + this.state = 476; this.unaryExpression(); } break; @@ -2947,11 +3161,11 @@ export class KipperParser extends Parser { _localctx = new ActualCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 441; + this.state = 477; this.unaryExpression(); - this.state = 442; + this.state = 478; this.match(KipperParser.As); - this.state = 443; + this.state = 479; this.typeSpecifier(); } break; @@ -2982,8 +3196,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: MultiplicativeExpressionContext = new MultiplicativeExpressionContext(this._ctx, _parentState); let _prevctx: MultiplicativeExpressionContext = _localctx; - let _startState: number = 102; - this.enterRecursionRule(_localctx, 102, KipperParser.RULE_multiplicativeExpression, _p); + let _startState: number = 106; + this.enterRecursionRule(_localctx, 106, KipperParser.RULE_multiplicativeExpression, _p); let _la: number; try { let _alt: number; @@ -2994,13 +3208,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 448; + this.state = 484; this.castOrConvertExpression(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 455; + this.state = 491; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3013,20 +3227,20 @@ export class KipperParser extends Parser { new MultiplicativeExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 450; + this.state = 486; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 451; + this.state = 487; _la = this._input.LA(1); if ( !( - ((_la - 42) & ~0x1f) === 0 && - ((1 << (_la - 42)) & - ((1 << (KipperParser.Star - 42)) | - (1 << (KipperParser.Div - 42)) | - (1 << (KipperParser.Mod - 42)) | - (1 << (KipperParser.PowerTo - 42)))) !== + ((_la - 44) & ~0x1f) === 0 && + ((1 << (_la - 44)) & + ((1 << (KipperParser.Star - 44)) | + (1 << (KipperParser.Div - 44)) | + (1 << (KipperParser.Mod - 44)) | + (1 << (KipperParser.PowerTo - 44)))) !== 0 ) ) { @@ -3039,14 +3253,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 452; + this.state = 488; this.castOrConvertExpression(); } } } - this.state = 457; + this.state = 493; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); } } } catch (re) { @@ -3075,8 +3289,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: AdditiveExpressionContext = new AdditiveExpressionContext(this._ctx, _parentState); let _prevctx: AdditiveExpressionContext = _localctx; - let _startState: number = 104; - this.enterRecursionRule(_localctx, 104, KipperParser.RULE_additiveExpression, _p); + let _startState: number = 108; + this.enterRecursionRule(_localctx, 108, KipperParser.RULE_additiveExpression, _p); let _la: number; try { let _alt: number; @@ -3087,13 +3301,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 459; + this.state = 495; this.multiplicativeExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 466; + this.state = 502; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 37, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3106,11 +3320,11 @@ export class KipperParser extends Parser { new AdditiveExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 461; + this.state = 497; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 462; + this.state = 498; _la = this._input.LA(1); if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { this._errHandler.recoverInline(this); @@ -3122,14 +3336,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 463; + this.state = 499; this.multiplicativeExpression(0); } } } - this.state = 468; + this.state = 504; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 37, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); } } } catch (re) { @@ -3158,8 +3372,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: RelationalExpressionContext = new RelationalExpressionContext(this._ctx, _parentState); let _prevctx: RelationalExpressionContext = _localctx; - let _startState: number = 106; - this.enterRecursionRule(_localctx, 106, KipperParser.RULE_relationalExpression, _p); + let _startState: number = 110; + this.enterRecursionRule(_localctx, 110, KipperParser.RULE_relationalExpression, _p); let _la: number; try { let _alt: number; @@ -3170,13 +3384,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 470; + this.state = 506; this.additiveExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 477; + this.state = 513; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3189,20 +3403,20 @@ export class KipperParser extends Parser { new RelationalExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 472; + this.state = 508; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 473; + this.state = 509; _la = this._input.LA(1); if ( !( - ((_la - 57) & ~0x1f) === 0 && - ((1 << (_la - 57)) & - ((1 << (KipperParser.Less - 57)) | - (1 << (KipperParser.LessEqual - 57)) | - (1 << (KipperParser.Greater - 57)) | - (1 << (KipperParser.GreaterEqual - 57)))) !== + ((_la - 59) & ~0x1f) === 0 && + ((1 << (_la - 59)) & + ((1 << (KipperParser.Less - 59)) | + (1 << (KipperParser.LessEqual - 59)) | + (1 << (KipperParser.Greater - 59)) | + (1 << (KipperParser.GreaterEqual - 59)))) !== 0 ) ) { @@ -3215,14 +3429,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 474; + this.state = 510; this.additiveExpression(0); } } } - this.state = 479; + this.state = 515; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); } } } catch (re) { @@ -3251,8 +3465,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: EqualityExpressionContext = new EqualityExpressionContext(this._ctx, _parentState); let _prevctx: EqualityExpressionContext = _localctx; - let _startState: number = 108; - this.enterRecursionRule(_localctx, 108, KipperParser.RULE_equalityExpression, _p); + let _startState: number = 112; + this.enterRecursionRule(_localctx, 112, KipperParser.RULE_equalityExpression, _p); let _la: number; try { let _alt: number; @@ -3263,13 +3477,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 481; + this.state = 517; this.relationalExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 488; + this.state = 524; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 39, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3282,11 +3496,11 @@ export class KipperParser extends Parser { new EqualityExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 483; + this.state = 519; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 484; + this.state = 520; _la = this._input.LA(1); if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { this._errHandler.recoverInline(this); @@ -3298,14 +3512,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 485; + this.state = 521; this.relationalExpression(0); } } } - this.state = 490; + this.state = 526; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 39, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); } } } catch (re) { @@ -3334,8 +3548,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: LogicalAndExpressionContext = new LogicalAndExpressionContext(this._ctx, _parentState); let _prevctx: LogicalAndExpressionContext = _localctx; - let _startState: number = 110; - this.enterRecursionRule(_localctx, 110, KipperParser.RULE_logicalAndExpression, _p); + let _startState: number = 114; + this.enterRecursionRule(_localctx, 114, KipperParser.RULE_logicalAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -3345,13 +3559,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 492; + this.state = 528; this.equalityExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 499; + this.state = 535; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 40, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3364,20 +3578,20 @@ export class KipperParser extends Parser { new LogicalAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 494; + this.state = 530; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 495; + this.state = 531; this.match(KipperParser.AndAnd); - this.state = 496; + this.state = 532; this.equalityExpression(0); } } } - this.state = 501; + this.state = 537; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 40, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); } } } catch (re) { @@ -3406,8 +3620,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: LogicalOrExpressionContext = new LogicalOrExpressionContext(this._ctx, _parentState); let _prevctx: LogicalOrExpressionContext = _localctx; - let _startState: number = 112; - this.enterRecursionRule(_localctx, 112, KipperParser.RULE_logicalOrExpression, _p); + let _startState: number = 116; + this.enterRecursionRule(_localctx, 116, KipperParser.RULE_logicalOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -3417,13 +3631,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 503; + this.state = 539; this.logicalAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 510; + this.state = 546; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3436,20 +3650,20 @@ export class KipperParser extends Parser { new LogicalOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 505; + this.state = 541; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 506; + this.state = 542; this.match(KipperParser.OrOr); - this.state = 507; + this.state = 543; this.logicalAndExpression(0); } } } - this.state = 512; + this.state = 548; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); } } } catch (re) { @@ -3468,16 +3682,16 @@ export class KipperParser extends Parser { // @RuleVersion(0) public conditionalExpression(): ConditionalExpressionContext { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 114, KipperParser.RULE_conditionalExpression); + this.enterRule(_localctx, 118, KipperParser.RULE_conditionalExpression); try { - this.state = 520; + this.state = 556; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 42, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 49, this._ctx)) { case 1: _localctx = new PassOnConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 513; + this.state = 549; this.logicalOrExpression(0); } break; @@ -3486,15 +3700,15 @@ export class KipperParser extends Parser { _localctx = new ActualConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 514; + this.state = 550; this.logicalOrExpression(0); - this.state = 515; + this.state = 551; this.match(KipperParser.QuestionMark); - this.state = 516; + this.state = 552; this.conditionalExpression(); - this.state = 517; + this.state = 553; this.match(KipperParser.Colon); - this.state = 518; + this.state = 554; this.conditionalExpression(); } break; @@ -3515,16 +3729,16 @@ export class KipperParser extends Parser { // @RuleVersion(0) public assignmentExpression(): AssignmentExpressionContext { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 116, KipperParser.RULE_assignmentExpression); + this.enterRule(_localctx, 120, KipperParser.RULE_assignmentExpression); try { - this.state = 527; + this.state = 563; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 43, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 50, this._ctx)) { case 1: _localctx = new PassOnAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 522; + this.state = 558; this.conditionalExpression(); } break; @@ -3533,11 +3747,11 @@ export class KipperParser extends Parser { _localctx = new ActualAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 523; + this.state = 559; this.computedPrimaryExpression(0); - this.state = 524; + this.state = 560; this.assignmentOperator(); - this.state = 525; + this.state = 561; this.assignmentExpression(); } break; @@ -3558,23 +3772,23 @@ export class KipperParser extends Parser { // @RuleVersion(0) public assignmentOperator(): AssignmentOperatorContext { let _localctx: AssignmentOperatorContext = new AssignmentOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 118, KipperParser.RULE_assignmentOperator); + this.enterRule(_localctx, 122, KipperParser.RULE_assignmentOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 529; + this.state = 565; _la = this._input.LA(1); if ( !( - ((_la - 49) & ~0x1f) === 0 && - ((1 << (_la - 49)) & - ((1 << (KipperParser.Assign - 49)) | - (1 << (KipperParser.PlusAssign - 49)) | - (1 << (KipperParser.MinusAssign - 49)) | - (1 << (KipperParser.StarAssign - 49)) | - (1 << (KipperParser.DivAssign - 49)) | - (1 << (KipperParser.ModAssign - 49)))) !== + ((_la - 51) & ~0x1f) === 0 && + ((1 << (_la - 51)) & + ((1 << (KipperParser.Assign - 51)) | + (1 << (KipperParser.PlusAssign - 51)) | + (1 << (KipperParser.MinusAssign - 51)) | + (1 << (KipperParser.StarAssign - 51)) | + (1 << (KipperParser.DivAssign - 51)) | + (1 << (KipperParser.ModAssign - 51)))) !== 0 ) ) { @@ -3604,30 +3818,30 @@ export class KipperParser extends Parser { // @RuleVersion(0) public expression(): ExpressionContext { let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 120, KipperParser.RULE_expression); + this.enterRule(_localctx, 124, KipperParser.RULE_expression); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 531; + this.state = 567; this.assignmentExpression(); - this.state = 536; + this.state = 572; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 532; + this.state = 568; this.match(KipperParser.Comma); - this.state = 533; + this.state = 569; this.assignmentExpression(); } } } - this.state = 538; + this.state = 574; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); } } } catch (re) { @@ -3646,15 +3860,15 @@ export class KipperParser extends Parser { // @RuleVersion(0) public typeSpecifier(): TypeSpecifierContext { let _localctx: TypeSpecifierContext = new TypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 122, KipperParser.RULE_typeSpecifier); + this.enterRule(_localctx, 126, KipperParser.RULE_typeSpecifier); try { - this.state = 542; + this.state = 578; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 45, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 52, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 539; + this.state = 575; this.identifierTypeSpecifier(); } break; @@ -3662,7 +3876,7 @@ export class KipperParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 540; + this.state = 576; this.genericTypeSpecifier(); } break; @@ -3670,7 +3884,7 @@ export class KipperParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 541; + this.state = 577; this.typeofTypeSpecifier(); } break; @@ -3691,11 +3905,11 @@ export class KipperParser extends Parser { // @RuleVersion(0) public identifierTypeSpecifier(): IdentifierTypeSpecifierContext { let _localctx: IdentifierTypeSpecifierContext = new IdentifierTypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 124, KipperParser.RULE_identifierTypeSpecifier); + this.enterRule(_localctx, 128, KipperParser.RULE_identifierTypeSpecifier); try { this.enterOuterAlt(_localctx, 1); { - this.state = 544; + this.state = 580; this.typeSpecifierIdentifier(); } } catch (re) { @@ -3714,17 +3928,17 @@ export class KipperParser extends Parser { // @RuleVersion(0) public genericTypeSpecifier(): GenericTypeSpecifierContext { let _localctx: GenericTypeSpecifierContext = new GenericTypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 126, KipperParser.RULE_genericTypeSpecifier); + this.enterRule(_localctx, 130, KipperParser.RULE_genericTypeSpecifier); try { this.enterOuterAlt(_localctx, 1); { - this.state = 546; + this.state = 582; this.typeSpecifierIdentifier(); - this.state = 547; + this.state = 583; this.match(KipperParser.Less); - this.state = 548; + this.state = 584; this.typeSpecifierIdentifier(); - this.state = 549; + this.state = 585; this.match(KipperParser.Greater); } } catch (re) { @@ -3743,17 +3957,17 @@ export class KipperParser extends Parser { // @RuleVersion(0) public typeofTypeSpecifier(): TypeofTypeSpecifierContext { let _localctx: TypeofTypeSpecifierContext = new TypeofTypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 128, KipperParser.RULE_typeofTypeSpecifier); + this.enterRule(_localctx, 132, KipperParser.RULE_typeofTypeSpecifier); try { this.enterOuterAlt(_localctx, 1); { - this.state = 551; + this.state = 587; this.match(KipperParser.Typeof); - this.state = 552; + this.state = 588; this.match(KipperParser.LeftParen); - this.state = 553; + this.state = 589; this.typeSpecifierIdentifier(); - this.state = 554; + this.state = 590; this.match(KipperParser.RightParen); } } catch (re) { @@ -3772,12 +3986,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { let _localctx: TypeSpecifierIdentifierContext = new TypeSpecifierIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 130, KipperParser.RULE_typeSpecifierIdentifier); + this.enterRule(_localctx, 134, KipperParser.RULE_typeSpecifierIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 556; + this.state = 592; _la = this._input.LA(1); if ( !( @@ -3813,25 +4027,25 @@ export class KipperParser extends Parser { public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 38: + case 40: return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); - case 51: + case 53: return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); - case 52: + case 54: return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); - case 53: + case 55: return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); - case 54: + case 56: return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); - case 55: + case 57: return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); - case 56: + case 58: return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; @@ -3895,8 +4109,9 @@ export class KipperParser extends Parser { return true; } - public static readonly _serializedATN: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03H\u0231\x04\x02" + + private static readonly _serializedATNSegments: number = 2; + private static readonly _serializedATNSegment0: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03N\u0255\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -3906,251 +4121,275 @@ export class KipperParser extends Parser { "\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + "\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x044" + "\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + - "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x03\x02\x05\x02\x88" + - "\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\x8D\n\x03\r\x03\x0E\x03\x8E\x03" + - "\x04\x03\x04\x03\x05\x06\x05\x94\n\x05\r\x05\x0E\x05\x95\x03\x06\x03\x06" + - "\x03\x06\x05\x06\x9B\n\x06\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05" + - "\x07\xA2\n\x07\x05\x07\xA4\n\x07\x03\b\x03\b\x03\b\x03\b\x05\b\xAA\n\b" + - "\x03\b\x03\b\x03\b\x03\b\x05\b\xB0\n\b\x03\t\x03\t\x03\t\x03\n\x03\n\x03" + - "\v\x03\v\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r\xC0\n\r\x03\x0E" + - "\x03\x0E\x03\x0E\x07\x0E\xC5\n\x0E\f\x0E\x0E\x0E\xC8\v\x0E\x03\x0F\x03" + - "\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03" + - "\x11\x03\x11\x05\x11\xD6\n\x11\x03\x12\x03\x12\x05\x12\xDA\n\x12\x03\x12" + - "\x03\x12\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x05\x14\xE3\n\x14\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15\xEC\n\x15" + - "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\xF4\n\x16\f\x16" + - "\x0E\x16\xF7\v\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03" + - "\x17\x03\x17\x03\x17\x03\x17\x05\x17\u0103\n\x17\x03\x18\x03\x18\x03\x18" + - "\x05\x18\u0108\n\x18\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u010E\n\x19" + - "\x03\x19\x03\x19\x05\x19\u0112\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05" + - "\x19\u0118\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u011E\n\x19\x03" + - "\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03" + - "\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03" + - "\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D\u0136\n\x1D\x03\x1D\x03\x1D\x03\x1E" + - "\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u0142" + - '\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03"\x03"' + - "\x03#\x03#\x03$\x03$\x03%\x03%\x03&\x03&\x03&\x03&\x07&\u0158\n&\f&\x0E" + - "&\u015B\v&\x05&\u015D\n&\x03&\x03&\x03'\x03'\x03(\x03(\x03(\x03(\x03" + - "(\x03(\x05(\u0169\n(\x03(\x03(\x03(\x05(\u016E\n(\x03(\x03(\x03(\x05(" + - "\u0173\n(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(" + - "\x03(\x03(\x07(\u0183\n(\f(\x0E(\u0186\v(\x03)\x03)\x03)\x07)\u018B\n" + - ")\f)\x0E)\u018E\v)\x03*\x03*\x03*\x03+\x03+\x03+\x03+\x03,\x03,\x03,\x03" + - ",\x05,\u019B\n,\x03,\x03,\x03,\x03,\x05,\u01A1\n,\x03,\x03,\x03-\x03-" + - "\x05-\u01A7\n-\x03.\x03.\x03.\x03/\x03/\x03/\x05/\u01AF\n/\x030\x030\x03" + - "0\x031\x031\x031\x032\x032\x033\x033\x034\x034\x034\x034\x034\x054\u01C0" + - "\n4\x035\x035\x035\x035\x035\x035\x075\u01C8\n5\f5\x0E5\u01CB\v5\x036" + - "\x036\x036\x036\x036\x036\x076\u01D3\n6\f6\x0E6\u01D6\v6\x037\x037\x03" + - "7\x037\x037\x037\x077\u01DE\n7\f7\x0E7\u01E1\v7\x038\x038\x038\x038\x03" + - "8\x038\x078\u01E9\n8\f8\x0E8\u01EC\v8\x039\x039\x039\x039\x039\x039\x07" + - "9\u01F4\n9\f9\x0E9\u01F7\v9\x03:\x03:\x03:\x03:\x03:\x03:\x07:\u01FF\n" + - ":\f:\x0E:\u0202\v:\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x05;\u020B\n;\x03" + - "<\x03<\x03<\x03<\x03<\x05<\u0212\n<\x03=\x03=\x03>\x03>\x03>\x07>\u0219" + - "\n>\f>\x0E>\u021C\v>\x03?\x03?\x03?\x05?\u0221\n?\x03@\x03@\x03A\x03A" + - "\x03A\x03A\x03A\x03B\x03B\x03B\x03B\x03B\x03C\x03C\x03C\x02\x02\tNhjl" + - "nprD\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x03" + + "\x02\x05\x02\x8C\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\x91\n\x03\r\x03" + + "\x0E\x03\x92\x03\x04\x03\x04\x03\x05\x06\x05\x98\n\x05\r\x05\x0E\x05\x99" + + "\x03\x06\x03\x06\x03\x06\x05\x06\x9F\n\x06\x03\x07\x03\x07\x03\x07\x03" + + "\x07\x03\x07\x05\x07\xA6\n\x07\x05\x07\xA8\n\x07\x03\b\x03\b\x03\b\x03" + + "\b\x05\b\xAE\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\xB4\n\b\x03\t\x03\t\x03" + + "\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05" + + "\r\xC4\n\r\x03\x0E\x03\x0E\x03\x0E\x07\x0E\xC9\n\x0E\f\x0E\x0E\x0E\xCC" + + "\v\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11" + + "\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\xDA\n\x11\x03\x12\x03\x12\x05" + + "\x12\xDE\n\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14" + + "\x05\x14\xE7\n\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x15\x05\x15\xF0\n\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + + "\x07\x16\xF8\n\x16\f\x16\x0E\x16\xFB\v\x16\x03\x16\x03\x16\x03\x17\x03" + + "\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x05\x17\u0107\n\x17" + + "\x03\x18\x03\x18\x03\x18\x05\x18\u010C\n\x18\x03\x19\x03\x19\x03\x19\x03" + + "\x19\x05\x19\u0112\n\x19\x03\x19\x03\x19\x05\x19\u0116\n\x19\x03\x19\x03" + + "\x19\x03\x19\x03\x19\x05\x19\u011C\n\x19\x03\x19\x03\x19\x03\x19\x03\x19" + + "\x05\x19\u0122\n\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03" + + "\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D\u013A\n\x1D" + + "\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + + "\x03\x1E\x05\x1E\u0146\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03" + + ' \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x07$\u0156\n$\f$\x0E$\u0159' + + "\v$\x03$\x03$\x03$\x07$\u015E\n$\f$\x0E$\u0161\v$\x03$\x05$\u0164\n$\x03" + + "%\x03%\x03%\x05%\u0169\n%\x03%\x05%\u016C\n%\x03&\x03&\x03&\x05&\u0171" + + "\n&\x03&\x05&\u0174\n&\x03'\x03'\x03(\x03(\x03(\x03(\x07(\u017C\n(\f" + + "(\x0E(\u017F\v(\x05(\u0181\n(\x03(\x03(\x03)\x03)\x03*\x03*\x03*\x03*" + + "\x03*\x03*\x05*\u018D\n*\x03*\x03*\x03*\x05*\u0192\n*\x03*\x03*\x03*\x05" + + "*\u0197\n*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + + "*\x03*\x03*\x07*\u01A7\n*\f*\x0E*\u01AA\v*\x03+\x03+\x03+\x07+\u01AF\n" + + "+\f+\x0E+\u01B2\v+\x03,\x03,\x03,\x03-\x03-\x03-\x03-\x03.\x03.\x03.\x03" + + ".\x05.\u01BF\n.\x03.\x03.\x03.\x03.\x05.\u01C5\n.\x03.\x03.\x03/\x03/" + + "\x05/\u01CB\n/\x030\x030\x030\x031\x031\x031\x051\u01D3\n1\x032\x032\x03" + + "2\x033\x033\x033\x034\x034\x035\x035\x036\x036\x036\x036\x036\x056\u01E4" + + "\n6\x037\x037\x037\x037\x037\x037\x077\u01EC\n7\f7\x0E7\u01EF\v7\x038" + + "\x038\x038\x038\x038\x038\x078\u01F7\n8\f8\x0E8\u01FA\v8\x039\x039\x03" + + "9\x039\x039\x039\x079\u0202\n9\f9\x0E9\u0205\v9\x03:\x03:\x03:\x03:\x03" + + ":\x03:\x07:\u020D\n:\f:\x0E:\u0210\v:\x03;\x03;\x03;\x03;\x03;\x03;\x07" + + ";\u0218\n;\f;\x0E;\u021B\v;\x03<\x03<\x03<\x03<\x03<\x03<\x07<\u0223\n" + + "<\f<\x0E<\u0226\v<\x03=\x03=\x03=\x03=\x03=\x03=\x03=\x05=\u022F\n=\x03" + + ">\x03>\x03>\x03>\x03>\x05>\u0236\n>\x03?\x03?\x03@\x03@\x03@\x07@\u023D" + + "\n@\f@\x0E@\u0240\v@\x03A\x03A\x03A\x05A\u0245\nA\x03B\x03B\x03C\x03C" + + "\x03C\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x03E\x03E\x03E\x02\x02\tRlnp" + + "rtvF\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + '\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02' + "(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02" + "D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02" + "`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02z\x02" + - "|\x02~\x02\x80\x02\x82\x02\x84\x02\x02\x11\x03\x02\x05\x06\x03\x02\f\r" + - "\x03\x02\x18\x19\x03\x02DE\x03\x02BC\x04\x02AAFF\x03\x02\x1B\x1D\x04\x02" + - "))++\x05\x02((**22\x03\x02,/\x04\x02((**\x03\x02;>\x03\x029:\x03\x023" + - "8\x04\x02\x1B\x1D@@\x02\u022C\x02\x87\x03\x02\x02\x02\x04\x8C\x03\x02" + - "\x02\x02\x06\x90\x03\x02\x02\x02\b\x93\x03\x02\x02\x02\n\x9A\x03\x02\x02" + - "\x02\f\xA3\x03\x02\x02\x02\x0E\xA5\x03\x02\x02\x02\x10\xB1\x03\x02\x02" + - "\x02\x12\xB4\x03\x02\x02\x02\x14\xB6\x03\x02\x02\x02\x16\xB8\x03\x02\x02" + - "\x02\x18\xBA\x03\x02\x02\x02\x1A\xC1\x03\x02\x02\x02\x1C\xC9\x03\x02\x02" + - '\x02\x1E\xCD\x03\x02\x02\x02 \xD5\x03\x02\x02\x02"\xD7\x03\x02\x02\x02' + - "$\xDD\x03\x02\x02\x02&\xE2\x03\x02\x02\x02(\xE4\x03\x02\x02\x02*\xED\x03" + - "\x02\x02\x02,\u0102\x03\x02\x02\x02.\u0107\x03\x02\x02\x020\u0109\x03" + - "\x02\x02\x022\u0122\x03\x02\x02\x024\u0128\x03\x02\x02\x026\u0130\x03" + - "\x02\x02\x028\u0133\x03\x02\x02\x02:\u0141\x03\x02\x02\x02<\u0143\x03" + - "\x02\x02\x02>\u0147\x03\x02\x02\x02@\u0149\x03\x02\x02\x02B\u014B\x03" + - "\x02\x02\x02D\u014D\x03\x02\x02\x02F\u014F\x03\x02\x02\x02H\u0151\x03" + - "\x02\x02\x02J\u0153\x03\x02\x02\x02L\u0160\x03\x02\x02\x02N\u016D\x03" + - "\x02\x02\x02P\u0187\x03\x02\x02\x02R\u018F\x03\x02\x02\x02T\u0192\x03" + - "\x02\x02\x02V\u0196\x03\x02\x02\x02X\u01A6\x03\x02\x02\x02Z\u01A8\x03" + - "\x02\x02\x02\\\u01AE\x03\x02\x02\x02^\u01B0\x03\x02\x02\x02`\u01B3\x03" + - "\x02\x02\x02b\u01B6\x03\x02\x02\x02d\u01B8\x03\x02\x02\x02f\u01BF\x03" + - "\x02\x02\x02h\u01C1\x03\x02\x02\x02j\u01CC\x03\x02\x02\x02l\u01D7\x03" + - "\x02\x02\x02n\u01E2\x03\x02\x02\x02p\u01ED\x03\x02\x02\x02r\u01F8\x03" + - "\x02\x02\x02t\u020A\x03\x02\x02\x02v\u0211\x03\x02\x02\x02x\u0213\x03" + - "\x02\x02\x02z\u0215\x03\x02\x02\x02|\u0220\x03\x02\x02\x02~\u0222\x03" + - "\x02\x02\x02\x80\u0224\x03\x02\x02\x02\x82\u0229\x03\x02\x02\x02\x84\u022E" + - "\x03\x02\x02\x02\x86\x88\x05\x04\x03\x02\x87\x86\x03\x02\x02\x02\x87\x88" + - "\x03\x02\x02\x02\x88\x89\x03\x02\x02\x02\x89\x8A\x07\x02\x02\x03\x8A\x03" + - "\x03\x02\x02\x02\x8B\x8D\x05\x06\x04\x02\x8C\x8B\x03\x02\x02\x02\x8D\x8E" + - "\x03\x02\x02\x02\x8E\x8C\x03\x02\x02\x02\x8E\x8F\x03\x02\x02\x02\x8F\x05" + - "\x03\x02\x02\x02\x90\x91\x05\b\x05\x02\x91\x07\x03\x02\x02\x02\x92\x94" + - "\x05\n\x06\x02\x93\x92\x03\x02\x02\x02\x94\x95\x03\x02\x02\x02\x95\x93" + - "\x03\x02\x02\x02\x95\x96\x03\x02\x02\x02\x96\t\x03\x02\x02\x02\x97\x9B" + - "\x05 \x11\x02\x98\x9B\x05\f\x07\x02\x99\x9B\x07\x1F\x02\x02\x9A\x97\x03" + - "\x02\x02\x02\x9A\x98\x03\x02\x02\x02\x9A\x99\x03\x02\x02\x02\x9B\v\x03" + - "\x02\x02\x02\x9C\x9D\x05\x10\t\x02\x9D\x9E\x07\x1F\x02\x02\x9E\xA4\x03" + - "\x02\x02\x02\x9F\xA1\x05\x0E\b\x02\xA0\xA2\x07\x1F\x02\x02\xA1\xA0\x03" + - "\x02\x02\x02\xA1\xA2\x03\x02\x02\x02\xA2\xA4\x03\x02\x02\x02\xA3\x9C\x03" + - "\x02\x02\x02\xA3\x9F\x03\x02\x02\x02\xA4\r\x03\x02\x02\x02\xA5\xA6\x07" + - '\x14\x02\x02\xA6\xA7\x05\x14\v\x02\xA7\xA9\x07"\x02\x02\xA8\xAA\x05\x1A' + - "\x0E\x02\xA9\xA8\x03\x02\x02\x02\xA9\xAA\x03\x02\x02\x02\xAA\xAB\x03\x02" + - "\x02\x02\xAB\xAC\x07#\x02\x02\xAC\xAD\x07\x17\x02\x02\xAD\xAF\x05|?\x02" + - '\xAE\xB0\x05"\x12\x02\xAF\xAE\x03\x02\x02\x02\xAF\xB0\x03\x02\x02\x02' + - "\xB0\x0F\x03\x02\x02\x02\xB1\xB2\x05\x12\n\x02\xB2\xB3\x05\x18\r\x02\xB3" + - "\x11\x03\x02\x02\x02\xB4\xB5\t\x02\x02\x02\xB5\x13\x03\x02\x02\x02\xB6" + - "\xB7\x05\x16\f\x02\xB7\x15\x03\x02\x02\x02\xB8\xB9\x07@\x02\x02\xB9\x17" + - "\x03\x02\x02\x02\xBA\xBB\x05\x14\v\x02\xBB\xBC\x07!\x02\x02\xBC\xBF\x05" + - "|?\x02\xBD\xBE\x073\x02\x02\xBE\xC0\x05\x1E\x10\x02\xBF\xBD\x03\x02\x02" + - "\x02\xBF\xC0\x03\x02\x02\x02\xC0\x19\x03\x02\x02\x02\xC1\xC6\x05\x1C\x0F" + - "\x02\xC2\xC3\x07\x1E\x02\x02\xC3\xC5\x05\x1C\x0F\x02\xC4\xC2\x03\x02\x02" + - "\x02\xC5\xC8\x03\x02\x02\x02\xC6\xC4\x03\x02\x02\x02\xC6\xC7\x03\x02\x02" + - "\x02\xC7\x1B\x03\x02\x02\x02\xC8\xC6\x03\x02\x02\x02\xC9\xCA\x05\x14\v" + - "\x02\xCA\xCB\x07!\x02\x02\xCB\xCC\x05|?\x02\xCC\x1D\x03\x02\x02\x02\xCD" + - '\xCE\x05v<\x02\xCE\x1F\x03\x02\x02\x02\xCF\xD6\x05"\x12\x02\xD0\xD6\x05' + - "$\x13\x02\xD1\xD6\x05&\x14\x02\xD2\xD6\x05.\x18\x02\xD3\xD6\x056\x1C\x02" + - "\xD4\xD6\x058\x1D\x02\xD5\xCF\x03\x02\x02\x02\xD5\xD0\x03\x02\x02\x02" + - "\xD5\xD1\x03\x02\x02\x02\xD5\xD2\x03\x02\x02\x02\xD5\xD3\x03\x02\x02\x02" + - "\xD5\xD4\x03\x02\x02\x02\xD6!\x03\x02\x02\x02\xD7\xD9\x07&\x02\x02\xD8" + - "\xDA\x05\b\x05\x02\xD9\xD8\x03\x02\x02\x02\xD9\xDA\x03\x02\x02\x02\xDA" + - "\xDB\x03\x02\x02\x02\xDB\xDC\x07'\x02\x02\xDC#\x03\x02\x02\x02\xDD\xDE" + - "\x05z>\x02\xDE\xDF\x07\x1F\x02\x02\xDF%\x03\x02\x02\x02\xE0\xE3\x05(\x15" + - "\x02\xE1\xE3\x05*\x16\x02\xE2\xE0\x03\x02\x02\x02\xE2\xE1\x03\x02\x02" + - "\x02\xE3'\x03\x02\x02\x02\xE4\xE5\x07\x10\x02\x02\xE5\xE6\x07\"\x02\x02" + - "\xE6\xE7\x05z>\x02\xE7\xE8\x07#\x02\x02\xE8\xEB\x05 \x11\x02\xE9\xEA\x07" + - "\x11\x02\x02\xEA\xEC\x05 \x11\x02\xEB\xE9\x03\x02\x02\x02\xEB\xEC\x03" + - '\x02\x02\x02\xEC)\x03\x02\x02\x02\xED\xEE\x07\t\x02\x02\xEE\xEF\x07"' + - "\x02\x02\xEF\xF0\x05z>\x02\xF0\xF1\x07#\x02\x02\xF1\xF5\x07&\x02\x02\xF2" + - "\xF4\x05,\x17\x02\xF3\xF2\x03\x02\x02\x02\xF4\xF7\x03\x02\x02\x02\xF5" + - "\xF3\x03\x02\x02\x02\xF5\xF6\x03\x02\x02\x02\xF6\xF8\x03\x02\x02\x02\xF7" + - "\xF5\x03\x02\x02\x02\xF8\xF9\x07'\x02\x02\xF9+\x03\x02\x02\x02\xFA\xFB" + - "\x07\n\x02\x02\xFB\xFC\x05z>\x02\xFC\xFD\x07!\x02\x02\xFD\xFE\x05 \x11" + - "\x02\xFE\u0103\x03\x02\x02\x02\xFF\u0100\x07\v\x02\x02\u0100\u0101\x07" + - "!\x02\x02\u0101\u0103\x05 \x11\x02\u0102\xFA\x03\x02\x02\x02\u0102\xFF" + - "\x03\x02\x02\x02\u0103-\x03\x02\x02\x02\u0104\u0108\x050\x19\x02\u0105" + - "\u0108\x052\x1A\x02\u0106\u0108\x054\x1B\x02\u0107\u0104\x03\x02\x02\x02" + - "\u0107\u0105\x03\x02\x02\x02\u0107\u0106\x03\x02\x02\x02\u0108/\x03\x02" + - '\x02\x02\u0109\u010A\x07\x12\x02\x02\u010A\u0111\x07"\x02\x02\u010B\u010E' + - "\x05\x10\t\x02\u010C\u010E\x05z>\x02\u010D\u010B\x03\x02\x02\x02\u010D" + - "\u010C\x03\x02\x02\x02\u010E\u010F\x03\x02\x02\x02\u010F\u0110\b\x19\x01" + - "\x02\u0110\u0112\x03\x02\x02\x02\u0111\u010D\x03\x02\x02\x02\u0111\u0112" + - "\x03\x02\x02\x02\u0112\u0113\x03\x02\x02\x02\u0113\u0117\x07\x1F\x02\x02" + - "\u0114\u0115\x05z>\x02\u0115\u0116\b\x19\x01\x02\u0116\u0118\x03\x02\x02" + - "\x02\u0117\u0114\x03\x02\x02\x02\u0117\u0118\x03\x02\x02\x02\u0118\u0119" + - "\x03\x02\x02\x02\u0119\u011D\x07\x1F\x02\x02\u011A\u011B\x05z>\x02\u011B" + - "\u011C\b\x19\x01\x02\u011C\u011E\x03\x02\x02\x02\u011D\u011A\x03\x02\x02" + - "\x02\u011D\u011E\x03\x02\x02\x02\u011E\u011F\x03\x02\x02\x02\u011F\u0120" + - "\x07#\x02\x02\u0120\u0121\x05 \x11\x02\u01211\x03\x02\x02\x02\u0122\u0123" + - '\x07\x0F\x02\x02\u0123\u0124\x07"\x02\x02\u0124\u0125\x05z>\x02\u0125' + - "\u0126\x07#\x02\x02\u0126\u0127\x05 \x11\x02\u01273\x03\x02\x02\x02\u0128" + - "\u0129\x07\x0E\x02\x02\u0129\u012A\x05 \x11\x02\u012A\u012B\x07\x0F\x02" + - '\x02\u012B\u012C\x07"\x02\x02\u012C\u012D\x05z>\x02\u012D\u012E\x07#' + - "\x02\x02\u012E\u012F\x07\x1F\x02\x02\u012F5\x03\x02\x02\x02\u0130\u0131" + - "\t\x03\x02\x02\u0131\u0132\x07\x1F\x02\x02\u01327\x03\x02\x02\x02\u0133" + - "\u0135\x07\x15\x02\x02\u0134\u0136\x05z>\x02\u0135\u0134\x03\x02\x02\x02" + - "\u0135\u0136\x03\x02\x02\x02\u0136\u0137\x03\x02\x02\x02\u0137\u0138\x07" + - "\x1F\x02\x02\u01389\x03\x02\x02\x02\u0139\u0142\x05<\x1F\x02\u013A\u0142" + - "\x05> \x02\u013B\u0142\x05@!\x02\u013C\u0142\x05D#\x02\u013D\u0142\x05" + - "F$\x02\u013E\u0142\x05H%\x02\u013F\u0142\x05J&\x02\u0140\u0142\x05L'" + - "\x02\u0141\u0139\x03\x02\x02\x02\u0141\u013A\x03\x02\x02\x02\u0141\u013B" + - "\x03\x02\x02\x02\u0141\u013C\x03\x02\x02\x02\u0141\u013D\x03\x02\x02\x02" + - "\u0141\u013E\x03\x02\x02\x02\u0141\u013F\x03\x02\x02\x02\u0141\u0140\x03" + - '\x02\x02\x02\u0142;\x03\x02\x02\x02\u0143\u0144\x07"\x02\x02\u0144\u0145' + - "\x05z>\x02\u0145\u0146\x07#\x02\x02\u0146=\x03\x02\x02\x02\u0147\u0148" + - '\t\x04\x02\x02\u0148?\x03\x02\x02\x02\u0149\u014A\x05B"\x02\u014AA\x03' + - "\x02\x02\x02\u014B\u014C\x07@\x02\x02\u014CC\x03\x02\x02\x02\u014D\u014E" + - "\t\x05\x02\x02\u014EE\x03\x02\x02\x02\u014F\u0150\t\x06\x02\x02\u0150" + - "G\x03\x02\x02\x02\u0151\u0152\t\x07\x02\x02\u0152I\x03\x02\x02\x02\u0153" + - "\u015C\x07$\x02\x02\u0154\u0159\x05z>\x02\u0155\u0156\x07\x1E\x02\x02" + - "\u0156\u0158\x05z>\x02\u0157\u0155\x03\x02\x02\x02\u0158\u015B\x03\x02" + - "\x02\x02\u0159\u0157\x03\x02\x02\x02\u0159\u015A\x03\x02\x02\x02\u015A" + - "\u015D\x03\x02\x02\x02\u015B\u0159\x03\x02\x02\x02\u015C\u0154\x03\x02" + - "\x02\x02\u015C\u015D\x03\x02\x02\x02\u015D\u015E\x03\x02\x02\x02\u015E" + - "\u015F\x07%\x02\x02\u015FK\x03\x02\x02\x02\u0160\u0161\t\b\x02\x02\u0161" + - "M\x03\x02\x02\x02\u0162\u0163\b(\x01\x02\u0163\u016E\x05:\x1E\x02\u0164" + - '\u0165\x07\x16\x02\x02\u0165\u0166\x05N(\x02\u0166\u0168\x07"\x02\x02' + - "\u0167\u0169\x05P)\x02\u0168\u0167\x03\x02\x02\x02\u0168\u0169\x03\x02" + - "\x02\x02\u0169\u016A\x03\x02\x02\x02\u016A\u016B\x07#\x02\x02\u016B\u016C" + - "\b(\x01\x02\u016C\u016E\x03\x02\x02\x02\u016D\u0162\x03\x02\x02\x02\u016D" + - "\u0164\x03\x02\x02\x02\u016E\u0184\x03\x02\x02\x02\u016F\u0170\f\x07\x02" + - '\x02\u0170\u0172\x07"\x02\x02\u0171\u0173\x05P)\x02\u0172\u0171\x03\x02' + - "\x02\x02\u0172\u0173\x03\x02\x02\x02\u0173\u0174\x03\x02\x02\x02\u0174" + - "\u0175\x07#\x02\x02\u0175\u0183\b(\x01\x02\u0176\u0177\f\x05\x02\x02\u0177" + - "\u0178\x05R*\x02\u0178\u0179\b(\x01\x02\u0179\u0183\x03\x02\x02\x02\u017A" + - "\u017B\f\x04\x02\x02\u017B\u017C\x05T+\x02\u017C\u017D\b(\x01\x02\u017D" + - "\u0183\x03\x02\x02\x02\u017E\u017F\f\x03\x02\x02\u017F\u0180\x05V,\x02" + - "\u0180\u0181\b(\x01\x02\u0181\u0183\x03\x02\x02\x02\u0182\u016F\x03\x02" + - "\x02\x02\u0182\u0176\x03\x02\x02\x02\u0182\u017A\x03\x02\x02\x02\u0182" + - "\u017E\x03\x02\x02\x02\u0183\u0186\x03\x02\x02\x02\u0184\u0182\x03\x02" + - "\x02\x02\u0184\u0185\x03\x02\x02\x02\u0185O\x03\x02\x02\x02\u0186\u0184" + - "\x03\x02\x02\x02\u0187\u018C\x05v<\x02\u0188\u0189\x07\x1E\x02\x02\u0189" + - "\u018B\x05v<\x02\u018A\u0188\x03\x02\x02\x02\u018B\u018E\x03\x02\x02\x02" + - "\u018C\u018A\x03\x02\x02\x02\u018C\u018D\x03\x02\x02\x02\u018DQ\x03\x02" + - "\x02\x02\u018E\u018C\x03\x02\x02\x02\u018F\u0190\x07?\x02\x02\u0190\u0191" + - '\x05B"\x02\u0191S\x03\x02\x02\x02\u0192\u0193\x07$\x02\x02\u0193\u0194' + - "\x05z>\x02\u0194\u0195\x07%\x02\x02\u0195U\x03\x02\x02\x02\u0196\u019A" + - "\x07$\x02\x02\u0197\u0198\x05z>\x02\u0198\u0199\b,\x01\x02\u0199\u019B" + - "\x03\x02\x02\x02\u019A\u0197\x03\x02\x02\x02\u019A\u019B\x03\x02\x02\x02" + - "\u019B\u019C\x03\x02\x02\x02\u019C\u01A0\x07!\x02\x02\u019D\u019E\x05" + - "z>\x02\u019E\u019F\b,\x01\x02\u019F\u01A1\x03\x02\x02\x02\u01A0\u019D" + - "\x03\x02\x02\x02\u01A0\u01A1\x03\x02\x02\x02\u01A1\u01A2\x03\x02\x02\x02" + - "\u01A2\u01A3\x07%\x02\x02\u01A3W\x03\x02\x02\x02\u01A4\u01A7\x05N(\x02" + - "\u01A5\u01A7\x05Z.\x02\u01A6\u01A4\x03\x02\x02\x02\u01A6\u01A5\x03\x02" + - "\x02\x02\u01A7Y\x03\x02\x02\x02\u01A8\u01A9\x05N(\x02\u01A9\u01AA\x05" + - "b2\x02\u01AA[\x03\x02\x02\x02\u01AB\u01AF\x05X-\x02\u01AC\u01AF\x05^0" + - "\x02\u01AD\u01AF\x05`1\x02\u01AE\u01AB\x03\x02\x02\x02\u01AE\u01AC\x03" + - "\x02\x02\x02\u01AE\u01AD\x03\x02\x02\x02\u01AF]\x03\x02\x02\x02\u01B0" + - "\u01B1\x05b2\x02\u01B1\u01B2\x05X-\x02\u01B2_\x03\x02\x02\x02\u01B3\u01B4" + - "\x05d3\x02\u01B4\u01B5\x05X-\x02\u01B5a\x03\x02\x02\x02\u01B6\u01B7\t" + - "\t\x02\x02\u01B7c\x03\x02\x02\x02\u01B8\u01B9\t\n\x02\x02\u01B9e\x03\x02" + - "\x02\x02\u01BA\u01C0\x05\\/\x02\u01BB\u01BC\x05\\/\x02\u01BC\u01BD\x07" + - "\x07\x02\x02\u01BD\u01BE\x05|?\x02\u01BE\u01C0\x03\x02\x02\x02\u01BF\u01BA" + - "\x03\x02\x02\x02\u01BF\u01BB\x03\x02\x02\x02\u01C0g\x03\x02\x02\x02\u01C1" + - "\u01C2\b5\x01\x02\u01C2\u01C3\x05f4\x02\u01C3\u01C9\x03\x02\x02\x02\u01C4" + - "\u01C5\f\x03\x02\x02\u01C5\u01C6\t\v\x02\x02\u01C6\u01C8\x05f4\x02\u01C7" + - "\u01C4\x03\x02\x02\x02\u01C8\u01CB\x03\x02\x02\x02\u01C9\u01C7\x03\x02" + - "\x02\x02\u01C9\u01CA\x03\x02\x02\x02\u01CAi\x03\x02\x02\x02\u01CB\u01C9" + - "\x03\x02\x02\x02\u01CC\u01CD\b6\x01\x02\u01CD\u01CE\x05h5\x02\u01CE\u01D4" + - "\x03\x02\x02\x02\u01CF\u01D0\f\x03\x02\x02\u01D0\u01D1\t\f\x02\x02\u01D1" + - "\u01D3\x05h5\x02\u01D2\u01CF\x03\x02\x02\x02\u01D3\u01D6\x03\x02\x02\x02" + - "\u01D4\u01D2\x03\x02\x02\x02\u01D4\u01D5\x03\x02\x02\x02\u01D5k\x03\x02" + - "\x02\x02\u01D6\u01D4\x03\x02\x02\x02\u01D7\u01D8\b7\x01\x02\u01D8\u01D9" + - "\x05j6\x02\u01D9\u01DF\x03\x02\x02\x02\u01DA\u01DB\f\x03\x02\x02\u01DB" + - "\u01DC\t\r\x02\x02\u01DC\u01DE\x05j6\x02\u01DD\u01DA\x03\x02\x02\x02\u01DE" + - "\u01E1\x03\x02\x02\x02\u01DF\u01DD\x03\x02\x02\x02\u01DF\u01E0\x03\x02" + - "\x02\x02\u01E0m\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E2\u01E3" + - "\b8\x01\x02\u01E3\u01E4\x05l7\x02\u01E4\u01EA\x03\x02\x02\x02\u01E5\u01E6" + - "\f\x03\x02\x02\u01E6\u01E7\t\x0E\x02\x02\u01E7\u01E9\x05l7\x02\u01E8\u01E5" + - "\x03\x02\x02\x02\u01E9\u01EC\x03\x02\x02\x02\u01EA\u01E8\x03\x02\x02\x02" + - "\u01EA\u01EB\x03\x02\x02\x02\u01EBo\x03\x02\x02\x02\u01EC\u01EA\x03\x02" + - "\x02\x02\u01ED\u01EE\b9\x01\x02\u01EE\u01EF\x05n8\x02\u01EF\u01F5\x03" + - "\x02\x02\x02\u01F0\u01F1\f\x03\x02\x02\u01F1\u01F2\x070\x02\x02\u01F2" + - "\u01F4\x05n8\x02\u01F3\u01F0\x03\x02\x02\x02\u01F4\u01F7\x03\x02\x02\x02" + - "\u01F5\u01F3\x03\x02\x02\x02\u01F5\u01F6\x03\x02\x02\x02\u01F6q\x03\x02" + - "\x02\x02\u01F7\u01F5\x03\x02\x02\x02\u01F8\u01F9\b:\x01\x02\u01F9\u01FA" + - "\x05p9\x02\u01FA\u0200\x03\x02\x02\x02\u01FB\u01FC\f\x03\x02\x02\u01FC" + - "\u01FD\x071\x02\x02\u01FD\u01FF\x05p9\x02\u01FE\u01FB\x03\x02\x02\x02" + - "\u01FF\u0202\x03\x02\x02\x02\u0200\u01FE\x03\x02\x02\x02\u0200\u0201\x03" + - "\x02\x02\x02\u0201s\x03\x02\x02\x02\u0202\u0200\x03\x02\x02\x02\u0203" + - "\u020B\x05r:\x02\u0204\u0205\x05r:\x02\u0205\u0206\x07 \x02\x02\u0206" + - "\u0207\x05t;\x02\u0207\u0208\x07!\x02\x02\u0208\u0209\x05t;\x02\u0209" + - "\u020B\x03\x02\x02\x02\u020A\u0203\x03\x02\x02\x02\u020A\u0204\x03\x02" + - "\x02\x02\u020Bu\x03\x02\x02\x02\u020C\u0212\x05t;\x02\u020D\u020E\x05" + - "N(\x02\u020E\u020F\x05x=\x02\u020F\u0210\x05v<\x02\u0210\u0212\x03\x02" + - "\x02\x02\u0211\u020C\x03\x02\x02\x02\u0211\u020D\x03\x02\x02\x02\u0212" + - "w\x03\x02\x02\x02\u0213\u0214\t\x0F\x02\x02\u0214y\x03\x02\x02\x02\u0215" + - "\u021A\x05v<\x02\u0216\u0217\x07\x1E\x02\x02\u0217\u0219\x05v<\x02\u0218" + - "\u0216\x03\x02\x02\x02\u0219\u021C\x03\x02\x02\x02\u021A\u0218\x03\x02" + - "\x02\x02\u021A\u021B\x03\x02\x02\x02\u021B{\x03\x02\x02\x02\u021C\u021A" + - "\x03\x02\x02\x02\u021D\u0221\x05~@\x02\u021E\u0221\x05\x80A\x02\u021F" + - "\u0221\x05\x82B\x02\u0220\u021D\x03\x02\x02\x02\u0220\u021E\x03\x02\x02" + - "\x02\u0220\u021F\x03\x02\x02\x02\u0221}\x03\x02\x02\x02\u0222\u0223\x05" + - "\x84C\x02\u0223\x7F\x03\x02\x02\x02\u0224\u0225\x05\x84C\x02\u0225\u0226" + - "\x07;\x02\x02\u0226\u0227\x05\x84C\x02\u0227\u0228\x07=\x02\x02\u0228" + - '\x81\x03\x02\x02\x02\u0229\u022A\x07\x1A\x02\x02\u022A\u022B\x07"\x02' + - "\x02\u022B\u022C\x05\x84C\x02\u022C\u022D\x07#\x02\x02\u022D\x83\x03\x02" + - "\x02\x02\u022E\u022F\t\x10\x02\x02\u022F\x85\x03\x02\x02\x020\x87\x8E" + - "\x95\x9A\xA1\xA3\xA9\xAF\xBF\xC6\xD5\xD9\xE2\xEB\xF5\u0102\u0107\u010D" + - "\u0111\u0117\u011D\u0135\u0141\u0159\u015C\u0168\u016D\u0172\u0182\u0184" + - "\u018C\u019A\u01A0\u01A6\u01AE\u01BF\u01C9\u01D4\u01DF\u01EA\u01F5\u0200" + - "\u020A\u0211\u021A\u0220"; + "|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x02\x10\x03\x02\x06" + + "\x07\x03\x02\r\x0E\x03\x02\x19\x1A\x03\x02DE\x04\x02CCFF\x03\x02\x1C\x1E" + + "\x04\x02++--\x05\x02**,,44\x03\x02.1\x04\x02**,,\x03\x02=@\x03\x02;<\x03" + + "\x025:\x04\x02\x1C\x1EBB\x02\u0255\x02\x8B\x03\x02\x02\x02\x04\x90\x03" + + "\x02\x02\x02\x06\x94\x03\x02\x02\x02\b\x97\x03\x02\x02\x02\n\x9E\x03\x02" + + "\x02\x02\f\xA7\x03\x02\x02\x02\x0E\xA9\x03\x02\x02\x02\x10\xB5\x03\x02" + + "\x02\x02\x12\xB8\x03\x02\x02\x02\x14\xBA\x03\x02\x02\x02\x16\xBC\x03\x02" + + "\x02\x02\x18\xBE\x03\x02\x02\x02\x1A\xC5\x03\x02\x02\x02\x1C\xCD\x03\x02" + + '\x02\x02\x1E\xD1\x03\x02\x02\x02 \xD9\x03\x02\x02\x02"\xDB\x03\x02\x02' + + "\x02$\xE1\x03\x02\x02\x02&\xE6\x03\x02\x02\x02(\xE8\x03\x02\x02\x02*\xF1" + + "\x03\x02\x02\x02,\u0106\x03\x02\x02\x02.\u010B\x03\x02\x02\x020\u010D" + + "\x03\x02\x02\x022\u0126\x03\x02\x02\x024\u012C\x03\x02\x02\x026\u0134" + + "\x03\x02\x02\x028\u0137\x03\x02\x02\x02:\u0145\x03\x02\x02\x02<\u0147" + + "\x03\x02\x02\x02>\u014B\x03\x02\x02\x02@\u014D\x03\x02\x02\x02B\u014F" + + "\x03\x02\x02\x02D\u0151\x03\x02\x02\x02F\u0163\x03\x02\x02\x02H\u016B" + + "\x03\x02\x02\x02J\u0173\x03\x02\x02\x02L\u0175\x03\x02\x02\x02N\u0177" + + "\x03\x02\x02\x02P\u0184\x03\x02\x02\x02R\u0191\x03\x02\x02\x02T\u01AB" + + "\x03\x02\x02\x02V\u01B3\x03\x02\x02\x02X\u01B6\x03\x02\x02\x02Z\u01BA" + + "\x03\x02\x02\x02\\\u01CA\x03\x02\x02\x02^\u01CC\x03\x02\x02\x02`\u01D2" + + "\x03\x02\x02\x02b\u01D4\x03\x02\x02\x02d\u01D7\x03\x02\x02\x02f\u01DA" + + "\x03\x02\x02\x02h\u01DC\x03\x02\x02\x02j\u01E3\x03\x02\x02\x02l\u01E5" + + "\x03\x02\x02\x02n\u01F0\x03\x02\x02\x02p\u01FB\x03\x02\x02\x02r\u0206" + + "\x03\x02\x02\x02t\u0211\x03\x02\x02\x02v\u021C\x03\x02\x02\x02x\u022E" + + "\x03\x02\x02\x02z\u0235\x03\x02\x02\x02|\u0237\x03\x02\x02\x02~\u0239" + + "\x03\x02\x02\x02\x80\u0244\x03\x02\x02\x02\x82\u0246\x03\x02\x02\x02\x84" + + "\u0248\x03\x02\x02\x02\x86\u024D\x03\x02\x02\x02\x88\u0252\x03\x02\x02" + + "\x02\x8A\x8C\x05\x04\x03\x02\x8B\x8A\x03\x02\x02\x02\x8B\x8C\x03\x02\x02" + + "\x02\x8C\x8D\x03\x02\x02\x02\x8D\x8E\x07\x02\x02\x03\x8E\x03\x03\x02\x02" + + "\x02\x8F\x91\x05\x06\x04\x02\x90\x8F\x03\x02\x02\x02\x91\x92\x03\x02\x02" + + "\x02\x92\x90\x03\x02\x02\x02\x92\x93\x03\x02\x02\x02\x93\x05\x03\x02\x02" + + "\x02\x94\x95\x05\b\x05\x02\x95\x07\x03\x02\x02\x02\x96\x98\x05\n\x06\x02" + + "\x97\x96\x03\x02\x02\x02\x98\x99\x03\x02\x02\x02\x99\x97\x03\x02\x02\x02" + + "\x99\x9A\x03\x02\x02\x02\x9A\t\x03\x02\x02\x02\x9B\x9F\x05 \x11\x02\x9C" + + "\x9F\x05\f\x07\x02\x9D\x9F\x07 \x02\x02\x9E\x9B\x03\x02\x02\x02\x9E\x9C" + + "\x03\x02\x02\x02\x9E\x9D\x03\x02\x02\x02\x9F\v\x03\x02\x02\x02\xA0\xA1" + + "\x05\x10\t\x02\xA1\xA2\x07 \x02\x02\xA2\xA8\x03\x02\x02\x02\xA3\xA5\x05" + + "\x0E\b\x02\xA4\xA6\x07 \x02\x02\xA5\xA4\x03\x02\x02\x02\xA5\xA6\x03\x02" + + "\x02\x02\xA6\xA8\x03\x02\x02\x02\xA7\xA0\x03\x02\x02\x02\xA7\xA3\x03\x02" + + "\x02\x02\xA8\r\x03\x02\x02\x02\xA9\xAA\x07\x15\x02\x02\xAA\xAB\x05\x14" + + "\v\x02\xAB\xAD\x07#\x02\x02\xAC\xAE\x05\x1A\x0E\x02\xAD\xAC\x03\x02\x02" + + "\x02\xAD\xAE\x03\x02\x02\x02\xAE\xAF\x03\x02\x02\x02\xAF\xB0\x07$\x02" + + '\x02\xB0\xB1\x07\x18\x02\x02\xB1\xB3\x05\x80A\x02\xB2\xB4\x05"\x12\x02' + + "\xB3\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4\x0F\x03\x02\x02\x02" + + "\xB5\xB6\x05\x12\n\x02\xB6\xB7\x05\x18\r\x02\xB7\x11\x03\x02\x02\x02\xB8" + + "\xB9\t\x02\x02\x02\xB9\x13\x03\x02\x02\x02\xBA\xBB\x05\x16\f\x02\xBB\x15" + + "\x03\x02\x02\x02\xBC\xBD\x07B\x02\x02\xBD\x17\x03\x02\x02\x02\xBE\xBF" + + '\x05\x14\v\x02\xBF\xC0\x07"\x02\x02\xC0\xC3\x05\x80A\x02\xC1\xC2\x07' + + "5\x02\x02\xC2\xC4\x05\x1E\x10\x02\xC3\xC1\x03\x02\x02\x02\xC3\xC4\x03" + + "\x02\x02\x02\xC4\x19\x03\x02\x02\x02\xC5\xCA\x05\x1C\x0F\x02\xC6\xC7\x07" + + "\x1F\x02\x02\xC7\xC9\x05\x1C\x0F\x02\xC8\xC6\x03\x02\x02\x02\xC9\xCC\x03" + + "\x02\x02\x02\xCA\xC8\x03\x02\x02\x02\xCA\xCB\x03\x02\x02\x02\xCB\x1B\x03" + + "\x02\x02\x02\xCC\xCA\x03\x02\x02\x02\xCD\xCE\x05\x14\v\x02\xCE\xCF\x07" + + '"\x02\x02\xCF\xD0\x05\x80A\x02\xD0\x1D\x03\x02\x02\x02\xD1\xD2\x05z>' + + '\x02\xD2\x1F\x03\x02\x02\x02\xD3\xDA\x05"\x12\x02\xD4\xDA\x05$\x13\x02' + + "\xD5\xDA\x05&\x14\x02\xD6\xDA\x05.\x18\x02\xD7\xDA\x056\x1C\x02\xD8\xDA" + + "\x058\x1D\x02\xD9\xD3\x03\x02\x02\x02\xD9\xD4\x03\x02\x02\x02\xD9\xD5" + + "\x03\x02\x02\x02\xD9\xD6\x03\x02\x02\x02\xD9\xD7\x03\x02\x02\x02\xD9\xD8" + + "\x03\x02\x02\x02\xDA!\x03\x02\x02\x02\xDB\xDD\x07(\x02\x02\xDC\xDE\x05" + + "\b\x05\x02\xDD\xDC\x03\x02\x02\x02\xDD\xDE\x03\x02\x02\x02\xDE\xDF\x03" + + "\x02\x02\x02\xDF\xE0\x07)\x02\x02\xE0#\x03\x02\x02\x02\xE1\xE2\x05~@\x02" + + "\xE2\xE3\x07 \x02\x02\xE3%\x03\x02\x02\x02\xE4\xE7\x05(\x15\x02\xE5\xE7" + + "\x05*\x16\x02\xE6\xE4\x03\x02\x02\x02\xE6\xE5\x03\x02\x02\x02\xE7'\x03" + + "\x02\x02\x02\xE8\xE9\x07\x11\x02\x02\xE9\xEA\x07#\x02\x02\xEA\xEB\x05" + + "~@\x02\xEB\xEC\x07$\x02\x02\xEC\xEF\x05 \x11\x02\xED\xEE\x07\x12\x02\x02" + + "\xEE\xF0\x05 \x11\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02" + + "\xF0)\x03\x02\x02\x02\xF1\xF2\x07\n\x02\x02\xF2\xF3\x07#\x02\x02\xF3\xF4" + + "\x05~@\x02\xF4\xF5\x07$\x02\x02\xF5\xF9\x07(\x02\x02\xF6\xF8\x05,\x17" + + "\x02\xF7\xF6\x03\x02\x02\x02\xF8\xFB\x03\x02\x02\x02\xF9\xF7\x03\x02\x02" + + "\x02\xF9\xFA\x03\x02\x02\x02\xFA\xFC\x03\x02\x02\x02\xFB\xF9\x03\x02\x02" + + "\x02\xFC\xFD\x07)\x02\x02\xFD+\x03\x02\x02\x02\xFE\xFF\x07\v\x02\x02\xFF" + + '\u0100\x05~@\x02\u0100\u0101\x07"\x02\x02\u0101\u0102\x05 \x11\x02\u0102' + + '\u0107\x03\x02\x02\x02\u0103\u0104\x07\f\x02\x02\u0104\u0105\x07"\x02' + + "\x02\u0105\u0107\x05 \x11\x02\u0106\xFE\x03\x02\x02\x02\u0106\u0103\x03" + + "\x02\x02\x02\u0107-\x03\x02\x02\x02\u0108\u010C\x050\x19\x02\u0109\u010C" + + "\x052\x1A\x02\u010A\u010C\x054\x1B\x02\u010B\u0108\x03\x02\x02\x02\u010B" + + "\u0109\x03\x02\x02\x02\u010B\u010A\x03\x02\x02\x02\u010C/\x03\x02\x02" + + "\x02\u010D\u010E\x07\x13\x02\x02\u010E\u0115\x07#\x02\x02\u010F\u0112" + + "\x05\x10\t\x02\u0110\u0112\x05~@\x02\u0111\u010F\x03\x02\x02\x02\u0111" + + "\u0110\x03\x02\x02\x02\u0112\u0113\x03\x02\x02\x02\u0113\u0114\b\x19\x01" + + "\x02\u0114\u0116\x03\x02\x02\x02\u0115\u0111\x03\x02\x02\x02\u0115\u0116" + + "\x03\x02\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117\u011B\x07 \x02\x02" + + "\u0118\u0119\x05~@\x02\u0119\u011A\b\x19\x01\x02\u011A\u011C\x03\x02\x02" + + "\x02\u011B\u0118\x03\x02\x02\x02\u011B\u011C\x03\x02\x02\x02\u011C\u011D" + + "\x03\x02\x02\x02\u011D\u0121\x07 \x02\x02\u011E\u011F\x05~@\x02\u011F" + + "\u0120\b\x19\x01\x02\u0120\u0122\x03\x02\x02\x02\u0121\u011E\x03\x02\x02" + + "\x02\u0121\u0122\x03\x02\x02\x02\u0122\u0123\x03\x02\x02\x02\u0123\u0124" + + "\x07$\x02\x02\u0124\u0125\x05 \x11\x02\u01251\x03\x02\x02\x02\u0126\u0127" + + "\x07\x10\x02\x02\u0127\u0128\x07#\x02\x02\u0128\u0129\x05~@\x02\u0129" + + "\u012A\x07$\x02\x02\u012A\u012B\x05 \x11\x02\u012B3\x03\x02\x02\x02\u012C" + + "\u012D\x07\x0F\x02\x02\u012D\u012E\x05 \x11\x02\u012E\u012F\x07\x10\x02" + + "\x02\u012F\u0130\x07#\x02\x02\u0130\u0131\x05~@\x02\u0131\u0132\x07$\x02" + + "\x02\u0132\u0133\x07 \x02\x02\u01335\x03\x02\x02\x02\u0134\u0135\t\x03" + + "\x02\x02\u0135\u0136\x07 \x02\x02\u01367\x03\x02\x02\x02\u0137\u0139\x07" + + "\x16\x02\x02\u0138\u013A\x05~@\x02\u0139\u0138\x03\x02\x02\x02\u0139\u013A" + + "\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02\u013B\u013C\x07 \x02\x02" + + "\u013C9\x03\x02\x02\x02\u013D\u0146\x05<\x1F\x02\u013E\u0146\x05> \x02" + + "\u013F\u0146\x05@!\x02\u0140\u0146\x05D#\x02\u0141\u0146\x05F$\x02\u0142" + + "\u0146\x05L'\x02\u0143\u0146\x05N(\x02\u0144\u0146\x05P)\x02\u0145\u013D" + + "\x03\x02\x02\x02\u0145\u013E\x03\x02\x02\x02\u0145\u013F\x03\x02\x02\x02" + + "\u0145\u0140\x03\x02\x02\x02\u0145\u0141\x03\x02\x02\x02\u0145\u0142\x03" + + "\x02\x02\x02\u0145\u0143\x03\x02\x02\x02\u0145\u0144\x03\x02\x02\x02\u0146" + + ";\x03\x02\x02\x02\u0147\u0148\x07#\x02\x02\u0148\u0149\x05~@\x02\u0149" + + "\u014A\x07$\x02\x02\u014A=\x03\x02\x02\x02\u014B\u014C\t\x04\x02\x02\u014C" + + '?\x03\x02\x02\x02\u014D\u014E\x05B"\x02\u014EA\x03\x02\x02\x02\u014F' + + "\u0150\x07B\x02\x02\u0150C\x03\x02\x02\x02\u0151\u0152\t\x05\x02\x02\u0152" + + "E\x03\x02\x02\x02\u0153\u0157\x07I\x02\x02\u0154\u0156\x05H%\x02\u0155" + + "\u0154\x03\x02\x02\x02\u0156\u0159\x03\x02\x02\x02\u0157\u0155\x03\x02" + + "\x02\x02\u0157\u0158\x03\x02\x02\x02\u0158\u015A\x03\x02\x02\x02\u0159" + + "\u0157\x03\x02\x02\x02\u015A\u0164\x07K\x02\x02\u015B\u015F\x07J\x02\x02" + + "\u015C\u015E\x05J&\x02\u015D\u015C\x03\x02\x02\x02\u015E\u0161\x03\x02" + + "\x02\x02\u015F\u015D\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02\u0160" + + "\u0162\x03\x02\x02\x02\u0161\u015F\x03\x02\x02\x02\u0162\u0164\x07M\x02" + + "\x02\u0163\u0153\x03\x02\x02\x02\u0163\u015B\x03\x02\x02\x02\u0164G\x03" + + "\x02\x02\x02\u0165\u016C\x07L\x02\x02\u0166\u0168\x07\x03\x02\x02\u0167" + + "\u0169\x05~@\x02\u0168\u0167\x03\x02\x02\x02\u0168\u0169\x03\x02\x02\x02" + + "\u0169\u016A\x03\x02\x02\x02\u016A\u016C\x07'\x02\x02\u016B\u0165\x03" + + "\x02\x02\x02\u016B\u0166\x03\x02\x02\x02\u016CI\x03\x02\x02\x02\u016D" + + "\u0174\x07N\x02\x02\u016E\u0170\x07\x03\x02\x02\u016F\u0171\x05~@\x02" + + "\u0170\u016F\x03\x02\x02\x02\u0170\u0171\x03\x02\x02\x02\u0171\u0172\x03" + + "\x02\x02\x02\u0172\u0174\x07'\x02\x02\u0173\u016D\x03\x02\x02\x02\u0173" + + "\u016E\x03\x02\x02\x02\u0174K\x03\x02\x02\x02\u0175\u0176\t\x06\x02\x02" + + "\u0176M\x03\x02\x02\x02\u0177\u0180\x07%\x02\x02\u0178\u017D\x05~@\x02" + + "\u0179\u017A\x07\x1F\x02\x02\u017A\u017C\x05~@\x02\u017B\u0179\x03\x02" + + "\x02\x02\u017C\u017F\x03\x02\x02\x02\u017D\u017B\x03\x02\x02\x02\u017D" + + "\u017E\x03\x02\x02\x02\u017E\u0181\x03\x02\x02\x02\u017F\u017D\x03\x02" + + "\x02\x02\u0180\u0178\x03\x02\x02\x02\u0180\u0181\x03\x02\x02\x02\u0181" + + "\u0182\x03\x02\x02\x02\u0182\u0183\x07&\x02\x02\u0183O\x03\x02\x02\x02" + + "\u0184\u0185\t\x07\x02\x02\u0185Q\x03\x02\x02\x02\u0186\u0187\b*\x01\x02" + + "\u0187\u0192\x05:\x1E\x02\u0188\u0189\x07\x17\x02\x02\u0189\u018A\x05" + + "R*\x02\u018A\u018C\x07#\x02\x02\u018B\u018D\x05T+\x02\u018C\u018B\x03" + + "\x02\x02\x02\u018C\u018D\x03\x02\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E" + + "\u018F\x07$\x02\x02\u018F\u0190\b*\x01\x02\u0190\u0192\x03\x02\x02\x02" + + "\u0191\u0186\x03\x02\x02\x02\u0191\u0188\x03\x02\x02\x02\u0192\u01A8\x03" + + "\x02\x02\x02\u0193\u0194\f\x07\x02\x02\u0194\u0196\x07#\x02\x02\u0195" + + "\u0197\x05T+\x02\u0196\u0195\x03\x02\x02\x02\u0196\u0197\x03\x02\x02\x02" + + "\u0197\u0198\x03\x02\x02\x02\u0198\u0199\x07$\x02\x02\u0199\u01A7\b*\x01" + + "\x02\u019A\u019B\f\x05\x02\x02\u019B\u019C\x05V,\x02\u019C\u019D\b*\x01" + + "\x02\u019D\u01A7\x03\x02\x02\x02\u019E\u019F\f\x04\x02\x02\u019F\u01A0" + + "\x05X-\x02\u01A0\u01A1\b*\x01\x02\u01A1\u01A7\x03\x02\x02\x02\u01A2\u01A3" + + "\f\x03\x02\x02\u01A3\u01A4\x05Z.\x02\u01A4\u01A5\b*\x01\x02\u01A5\u01A7" + + "\x03\x02\x02\x02\u01A6\u0193\x03\x02\x02\x02\u01A6\u019A\x03\x02\x02\x02" + + "\u01A6\u019E\x03\x02\x02\x02\u01A6\u01A2\x03\x02\x02\x02\u01A7\u01AA\x03" + + "\x02\x02\x02\u01A8\u01A6\x03\x02\x02\x02\u01A8\u01A9\x03\x02\x02\x02\u01A9" + + "S\x03\x02\x02\x02\u01AA\u01A8\x03\x02\x02\x02\u01AB\u01B0\x05z>\x02\u01AC" + + "\u01AD\x07\x1F\x02\x02\u01AD\u01AF\x05z>\x02\u01AE\u01AC\x03\x02\x02\x02" + + "\u01AF\u01B2\x03\x02\x02\x02\u01B0\u01AE\x03\x02\x02\x02\u01B0\u01B1\x03" + + "\x02\x02\x02\u01B1U\x03\x02\x02\x02\u01B2\u01B0\x03\x02\x02\x02\u01B3" + + '\u01B4\x07A\x02\x02\u01B4\u01B5\x05B"\x02\u01B5W\x03\x02\x02\x02\u01B6' + + "\u01B7\x07%\x02\x02\u01B7\u01B8\x05~@\x02\u01B8\u01B9\x07&\x02\x02\u01B9" + + "Y\x03\x02\x02\x02\u01BA\u01BE\x07%\x02\x02\u01BB\u01BC\x05~@\x02\u01BC" + + "\u01BD\b.\x01\x02\u01BD\u01BF\x03\x02\x02\x02\u01BE\u01BB\x03\x02\x02" + + "\x02\u01BE\u01BF\x03\x02\x02\x02\u01BF\u01C0\x03\x02\x02\x02\u01C0\u01C4" + + '\x07"\x02\x02\u01C1\u01C2\x05~@\x02\u01C2\u01C3\b.\x01\x02\u01C3\u01C5' + + "\x03\x02\x02\x02\u01C4\u01C1\x03\x02\x02\x02\u01C4\u01C5\x03\x02\x02\x02" + + "\u01C5\u01C6\x03\x02\x02\x02\u01C6\u01C7\x07&\x02\x02\u01C7[\x03\x02\x02" + + "\x02\u01C8\u01CB\x05R*\x02\u01C9\u01CB\x05^0\x02\u01CA\u01C8\x03\x02\x02" + + "\x02\u01CA\u01C9\x03\x02\x02\x02\u01CB]\x03\x02\x02\x02\u01CC\u01CD\x05" + + "R*\x02\u01CD\u01CE\x05f4\x02\u01CE_\x03\x02\x02\x02\u01CF\u01D3\x05\\" + + "/\x02\u01D0\u01D3\x05b2\x02\u01D1\u01D3\x05d3\x02\u01D2\u01CF\x03\x02" + + "\x02\x02\u01D2\u01D0\x03\x02\x02\x02\u01D2\u01D1\x03\x02\x02\x02\u01D3" + + "a\x03\x02\x02\x02\u01D4\u01D5\x05f4\x02\u01D5\u01D6\x05\\/\x02\u01D6c" + + "\x03\x02\x02\x02\u01D7\u01D8\x05h5\x02\u01D8\u01D9\x05\\/\x02\u01D9e\x03" + + "\x02\x02\x02\u01DA\u01DB\t\b\x02\x02\u01DBg\x03\x02\x02\x02\u01DC\u01DD" + + "\t\t\x02\x02\u01DDi\x03\x02\x02\x02\u01DE\u01E4\x05`1\x02\u01DF\u01E0" + + "\x05`1\x02\u01E0\u01E1\x07\b\x02\x02\u01E1\u01E2\x05\x80A\x02\u01E2\u01E4" + + "\x03\x02\x02\x02\u01E3\u01DE\x03\x02\x02\x02\u01E3\u01DF\x03\x02\x02\x02" + + "\u01E4k\x03\x02\x02\x02\u01E5\u01E6\b7\x01\x02\u01E6\u01E7\x05j6\x02\u01E7" + + "\u01ED\x03\x02\x02\x02\u01E8\u01E9\f\x03\x02\x02\u01E9\u01EA\t\n\x02\x02" + + "\u01EA\u01EC\x05j6\x02\u01EB\u01E8\x03\x02\x02\x02\u01EC\u01EF\x03\x02" + + "\x02\x02\u01ED\u01EB\x03\x02\x02\x02\u01ED\u01EE\x03\x02\x02\x02\u01EE" + + "m\x03\x02\x02\x02\u01EF\u01ED\x03\x02\x02\x02\u01F0\u01F1\b8\x01\x02\u01F1" + + "\u01F2\x05l7\x02\u01F2\u01F8\x03\x02\x02\x02\u01F3\u01F4\f\x03\x02\x02" + + "\u01F4\u01F5\t\v\x02\x02\u01F5\u01F7\x05l7\x02\u01F6\u01F3\x03\x02\x02" + + "\x02\u01F7\u01FA\x03\x02\x02\x02\u01F8\u01F6\x03\x02\x02\x02\u01F8\u01F9" + + "\x03\x02\x02\x02\u01F9o\x03\x02\x02\x02\u01FA\u01F8\x03\x02\x02\x02\u01FB" + + "\u01FC\b9\x01\x02\u01FC\u01FD\x05n8\x02\u01FD\u0203\x03\x02\x02\x02\u01FE" + + "\u01FF\f\x03\x02\x02\u01FF\u0200\t\f\x02\x02\u0200\u0202\x05n8\x02\u0201" + + "\u01FE\x03\x02\x02\x02\u0202\u0205\x03\x02\x02\x02\u0203\u0201\x03\x02" + + "\x02\x02\u0203\u0204\x03\x02\x02\x02\u0204q\x03\x02\x02\x02\u0205\u0203" + + "\x03\x02\x02\x02\u0206\u0207\b:\x01\x02\u0207\u0208\x05p9\x02\u0208\u020E" + + "\x03\x02\x02\x02\u0209\u020A\f\x03\x02\x02\u020A\u020B\t\r\x02\x02\u020B" + + "\u020D\x05p9\x02\u020C\u0209\x03\x02\x02\x02\u020D\u0210\x03\x02\x02\x02" + + "\u020E\u020C\x03\x02\x02\x02\u020E\u020F\x03\x02\x02\x02\u020Fs\x03\x02" + + "\x02\x02\u0210\u020E\x03\x02\x02\x02\u0211\u0212\b;\x01\x02\u0212\u0213" + + "\x05r:\x02\u0213\u0219\x03\x02\x02\x02\u0214\u0215\f\x03\x02\x02\u0215" + + "\u0216\x072\x02\x02\u0216\u0218\x05r:\x02\u0217\u0214\x03\x02\x02\x02" + + "\u0218\u021B\x03\x02\x02\x02\u0219\u0217\x03\x02\x02\x02\u0219\u021A\x03" + + "\x02\x02\x02\u021Au\x03\x02\x02\x02\u021B\u0219\x03\x02\x02\x02\u021C" + + "\u021D\b<\x01\x02\u021D\u021E\x05t;\x02\u021E\u0224\x03\x02\x02\x02\u021F" + + "\u0220\f\x03\x02\x02\u0220\u0221\x073\x02\x02\u0221\u0223\x05t;\x02\u0222" + + "\u021F\x03\x02\x02\x02\u0223\u0226\x03\x02\x02\x02\u0224\u0222\x03\x02" + + "\x02\x02\u0224\u0225\x03\x02\x02\x02\u0225w\x03\x02\x02\x02\u0226\u0224" + + "\x03\x02\x02\x02\u0227\u022F\x05v<\x02\u0228\u0229\x05v<\x02\u0229\u022A" + + '\x07!\x02\x02\u022A\u022B\x05x=\x02\u022B\u022C\x07"\x02\x02\u022C\u022D' + + "\x05x=\x02\u022D\u022F\x03\x02\x02\x02\u022E\u0227\x03\x02\x02\x02\u022E" + + "\u0228\x03\x02\x02\x02\u022Fy\x03\x02\x02\x02\u0230\u0236\x05x=\x02\u0231" + + "\u0232\x05R*\x02\u0232\u0233\x05|?\x02\u0233\u0234\x05z>\x02\u0234\u0236" + + "\x03\x02\x02\x02\u0235\u0230\x03\x02\x02\x02\u0235\u0231\x03\x02\x02\x02" + + "\u0236{\x03\x02\x02\x02\u0237\u0238\t\x0E\x02\x02\u0238}\x03\x02\x02\x02" + + "\u0239\u023E\x05z>\x02\u023A\u023B\x07\x1F\x02\x02\u023B\u023D\x05z>\x02" + + "\u023C\u023A\x03\x02\x02\x02\u023D\u0240\x03\x02\x02\x02\u023E\u023C\x03" + + "\x02\x02\x02\u023E\u023F\x03\x02\x02\x02\u023F\x7F\x03\x02\x02\x02\u0240" + + "\u023E\x03\x02\x02\x02\u0241\u0245\x05\x82B\x02\u0242\u0245\x05\x84C\x02" + + "\u0243\u0245\x05\x86D\x02\u0244\u0241\x03\x02\x02\x02\u0244\u0242\x03" + + "\x02\x02\x02\u0244\u0243\x03\x02\x02\x02\u0245\x81\x03\x02\x02\x02\u0246" + + "\u0247\x05\x88E\x02\u0247\x83\x03\x02\x02\x02\u0248\u0249\x05\x88E\x02" + + "\u0249\u024A\x07=\x02\x02\u024A"; + private static readonly _serializedATNSegment1: string = + "\u024B\x05\x88E\x02\u024B\u024C\x07?\x02\x02\u024C\x85\x03\x02\x02\x02" + + "\u024D\u024E\x07\x1B\x02\x02\u024E\u024F\x07#\x02\x02\u024F\u0250\x05" + + "\x88E\x02\u0250\u0251\x07$\x02\x02\u0251\x87\x03\x02\x02\x02\u0252\u0253" + + "\t\x0F\x02\x02\u0253\x89\x03\x02\x02\x027\x8B\x92\x99\x9E\xA5\xA7\xAD" + + "\xB3\xC3\xCA\xD9\xDD\xE6\xEF\xF9\u0106\u010B\u0111\u0115\u011B\u0121\u0139" + + "\u0145\u0157\u015F\u0163\u0168\u016B\u0170\u0173\u017D\u0180\u018C\u0191" + + "\u0196\u01A6\u01A8\u01B0\u01BE\u01C4\u01CA\u01D2\u01E3\u01ED\u01F8\u0203" + + "\u020E\u0219\u0224\u022E\u0235\u023E\u0244"; + public static readonly _serializedATN: string = Utils.join( + [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], + "", + ); public static __ATN: ATN; public static get _ATN(): ATN { if (!KipperParser.__ATN) { @@ -5578,11 +5817,35 @@ export class StringPrimaryExpressionContext extends KipperParserRuleContext { } export class FStringPrimaryExpressionContext extends KipperParserRuleContext { - public SingleQuoteFStringLiteral(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.SingleQuoteFStringLiteral, 0); + public FStringSingleQuoteStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); + } + public FStringSingleQuoteEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); + } + public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext[]; + public fStringSingleQuoteAtom(i: number): FStringSingleQuoteAtomContext; + public fStringSingleQuoteAtom(i?: number): FStringSingleQuoteAtomContext | FStringSingleQuoteAtomContext[] { + if (i === undefined) { + return this.getRuleContexts(FStringSingleQuoteAtomContext); + } else { + return this.getRuleContext(i, FStringSingleQuoteAtomContext); + } + } + public FStringDoubleQuoteStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); + } + public FStringDoubleQuoteEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); } - public DoubleQuoteFStringLiteral(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.DoubleQuoteFStringLiteral, 0); + public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext[]; + public fStringDoubleQuoteAtom(i: number): FStringDoubleQuoteAtomContext; + public fStringDoubleQuoteAtom(i?: number): FStringDoubleQuoteAtomContext | FStringDoubleQuoteAtomContext[] { + if (i === undefined) { + return this.getRuleContexts(FStringDoubleQuoteAtomContext); + } else { + return this.getRuleContext(i, FStringDoubleQuoteAtomContext); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); @@ -5613,6 +5876,90 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { } } +export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { + public FStringSingleQuoteAtom(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); + } + public FStringExpStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpStart, 0); + } + public FStringExpEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpEnd, 0); + } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_fStringSingleQuoteAtom; + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterFStringSingleQuoteAtom) { + listener.enterFStringSingleQuoteAtom(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitFStringSingleQuoteAtom) { + listener.exitFStringSingleQuoteAtom(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitFStringSingleQuoteAtom) { + return visitor.visitFStringSingleQuoteAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} + +export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { + public FStringDoubleQuoteAtom(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); + } + public FStringExpStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpStart, 0); + } + public FStringExpEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpEnd, 0); + } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_fStringDoubleQuoteAtom; + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterFStringDoubleQuoteAtom) { + listener.enterFStringDoubleQuoteAtom(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitFStringDoubleQuoteAtom) { + listener.exitFStringDoubleQuoteAtom(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitFStringDoubleQuoteAtom) { + return visitor.visitFStringDoubleQuoteAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} + export class NumberPrimaryExpressionContext extends KipperParserRuleContext { public IntegerConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.IntegerConstant, 0); diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts index 8ec368577..17337df8f 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts @@ -66,6 +66,8 @@ import { IdentifierPrimaryExpressionContext } from "./KipperParser"; import { IdentifierContext } from "./KipperParser"; import { StringPrimaryExpressionContext } from "./KipperParser"; import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; import { NumberPrimaryExpressionContext } from "./KipperParser"; import { ArrayLiteralPrimaryExpressionContext } from "./KipperParser"; import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; @@ -813,6 +815,28 @@ export interface KipperParserListener extends ParseTreeListener { */ exitFStringPrimaryExpression?: (ctx: FStringPrimaryExpressionContext) => void; + /** + * Enter a parse tree produced by `KipperParser.fStringSingleQuoteAtom`. + * @param ctx the parse tree + */ + enterFStringSingleQuoteAtom?: (ctx: FStringSingleQuoteAtomContext) => void; + /** + * Exit a parse tree produced by `KipperParser.fStringSingleQuoteAtom`. + * @param ctx the parse tree + */ + exitFStringSingleQuoteAtom?: (ctx: FStringSingleQuoteAtomContext) => void; + + /** + * Enter a parse tree produced by `KipperParser.fStringDoubleQuoteAtom`. + * @param ctx the parse tree + */ + enterFStringDoubleQuoteAtom?: (ctx: FStringDoubleQuoteAtomContext) => void; + /** + * Exit a parse tree produced by `KipperParser.fStringDoubleQuoteAtom`. + * @param ctx the parse tree + */ + exitFStringDoubleQuoteAtom?: (ctx: FStringDoubleQuoteAtomContext) => void; + /** * Enter a parse tree produced by `KipperParser.numberPrimaryExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts index 31b5993e5..5c0665386 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts @@ -66,6 +66,8 @@ import { IdentifierPrimaryExpressionContext } from "./KipperParser"; import { IdentifierContext } from "./KipperParser"; import { StringPrimaryExpressionContext } from "./KipperParser"; import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; import { NumberPrimaryExpressionContext } from "./KipperParser"; import { ArrayLiteralPrimaryExpressionContext } from "./KipperParser"; import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; @@ -551,6 +553,20 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitFStringPrimaryExpression?: (ctx: FStringPrimaryExpressionContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.fStringSingleQuoteAtom`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFStringSingleQuoteAtom?: (ctx: FStringSingleQuoteAtomContext) => Result; + + /** + * Visit a parse tree produced by `KipperParser.fStringDoubleQuoteAtom`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFStringDoubleQuoteAtom?: (ctx: FStringDoubleQuoteAtomContext) => Result; + /** * Visit a parse tree produced by `KipperParser.numberPrimaryExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts b/kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts new file mode 100644 index 000000000..97cb19503 --- /dev/null +++ b/kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts @@ -0,0 +1,29 @@ +import { Lexer } from "antlr4ts/Lexer"; +import { CharStream } from "antlr4ts/CharStream"; +import { Vocabulary } from "antlr4ts/Vocabulary"; + +export default abstract class KipperLexerBase extends Lexer { + abstract readonly channelNames: string[]; + abstract readonly grammarFileName: string; + abstract readonly modeNames: string[]; + abstract readonly ruleNames: string[]; + abstract readonly vocabulary: Vocabulary; + private fStringDepth: number; + + protected constructor(input: CharStream) { + super(input); + this.fStringDepth = 0; + } + + protected insideFString(): boolean { + return this.fStringDepth > 0; + } + + protected incrementFStringDepth(): void { + this.fStringDepth++; + } + + protected decrementFStringDepth(): void { + this.fStringDepth--; + } +} From d0ff5503ab0c9ab1fa3f0c57f5700ab61138c664 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:41:12 +0200 Subject: [PATCH 007/257] Added notice for potential lexer recognition error in DEVELOPMENT.md --- kipper/core/DEVELOPMENT.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/kipper/core/DEVELOPMENT.md b/kipper/core/DEVELOPMENT.md index 0ab7ef09f..bc5c33f82 100644 --- a/kipper/core/DEVELOPMENT.md +++ b/kipper/core/DEVELOPMENT.md @@ -50,3 +50,40 @@ pnpm run lint:fix ```sh pnpm test ``` + +## Potential issues with Antlr4 Lexer and Parser combination + +If you are adding new Lexer rules that have not been yet added to the `KipperLexer.tokens` file, +then the Antlr4 CLI might raise some issues, saying that implicit tokens are not allowed. + +For example if the following syntax is added to the `KipperLexer.g4` file: + +```antlr +TriplePlus : '+++'; +``` + +And is used implicitly in the `KipperParser.g4` file: + +```antlr +someExpression + : '+++' + ; +``` + +Then likely the following error will be raised: + +``` +error(126): KipperLexer.g4:X:X: cannot create implicit token for string literal in non-combined grammar: '+++' +``` + +To fix this, simply reference the token directly in the `KipperParser.g4` file, like so: + +```antlr +someExpression + : TriplePlus + ; +``` + +This will make the Antlr4 CLI generate the token in the `KipperLexer.tokens` file, meaning afterwards the implicit use +will be valid. For now this is the only quick way to fix this issue, so this workaround should be used until a better +solution is found. From d946213eff37705d8b46f90673538fbfc7d662e8 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:53:16 +0200 Subject: [PATCH 008/257] Updated parser-ast-mapping.ts according to the latest parser grammar changes --- .../src/compiler/parser/parser-ast-mapping.ts | 68 ++++++++++--------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/kipper/core/src/compiler/parser/parser-ast-mapping.ts b/kipper/core/src/compiler/parser/parser-ast-mapping.ts index 692425469..8c9ba2265 100644 --- a/kipper/core/src/compiler/parser/parser-ast-mapping.ts +++ b/kipper/core/src/compiler/parser/parser-ast-mapping.ts @@ -52,40 +52,42 @@ export const ParserASTMapping = { RULE_identifier: 32, RULE_stringPrimaryExpression: 33, RULE_fStringPrimaryExpression: 34, - RULE_numberPrimaryExpression: 35, - RULE_arrayLiteralPrimaryExpression: 36, - RULE_voidOrNullOrUndefinedPrimaryExpression: 37, - RULE_computedPrimaryExpression: 38, - RULE_argumentExpressionList: 39, - RULE_dotNotation: 40, - RULE_bracketNotation: 41, - RULE_sliceNotation: 42, - RULE_postfixExpression: 43, - RULE_incrementOrDecrementPostfixExpression: 44, - RULE_unaryExpression: 45, - RULE_incrementOrDecrementUnaryExpression: 46, - RULE_operatorModifiedUnaryExpression: 47, - RULE_incrementOrDecrementOperator: 48, - RULE_unaryOperator: 49, - RULE_castOrConvertExpression: 50, - RULE_multiplicativeExpression: 51, - RULE_additiveExpression: 52, - RULE_relationalExpression: 53, - RULE_equalityExpression: 54, - RULE_logicalAndExpression: 55, - RULE_logicalOrExpression: 56, - RULE_conditionalExpression: 57, - RULE_assignmentExpression: 58, - RULE_assignmentOperator: 59, - RULE_expression: 60, - RULE_typeSpecifier: 61, - RULE_identifierTypeSpecifier: 62, - RULE_genericTypeSpecifier: 63, - RULE_typeofTypeSpecifier: 64, - RULE_typeSpecifierIdentifier: 65, + RULE_fStringSingleQuoteAtom: 35, + RULE_fStringDoubleQuoteAtom: 36, + RULE_numberPrimaryExpression: 37, + RULE_arrayLiteralPrimaryExpression: 38, + RULE_voidOrNullOrUndefinedPrimaryExpression: 39, + RULE_computedPrimaryExpression: 40, + RULE_argumentExpressionList: 41, + RULE_dotNotation: 42, + RULE_bracketNotation: 43, + RULE_sliceNotation: 44, + RULE_postfixExpression: 45, + RULE_incrementOrDecrementPostfixExpression: 46, + RULE_unaryExpression: 47, + RULE_incrementOrDecrementUnaryExpression: 48, + RULE_operatorModifiedUnaryExpression: 49, + RULE_incrementOrDecrementOperator: 50, + RULE_unaryOperator: 51, + RULE_castOrConvertExpression: 52, + RULE_multiplicativeExpression: 53, + RULE_additiveExpression: 54, + RULE_relationalExpression: 55, + RULE_equalityExpression: 56, + RULE_logicalAndExpression: 57, + RULE_logicalOrExpression: 58, + RULE_conditionalExpression: 59, + RULE_assignmentExpression: 60, + RULE_assignmentOperator: 61, + RULE_expression: 62, + RULE_typeSpecifier: 63, + RULE_identifierTypeSpecifier: 64, + RULE_genericTypeSpecifier: 65, + RULE_typeofTypeSpecifier: 66, + RULE_typeSpecifierIdentifier: 67, // Labelled rules, which don't have a corresponding identifier number in KipperParser. - RULE_memberAccessExpression: 66, // -> See 'computedPrimaryExpression' - RULE_functionCallExpression: 67, // -> See 'computedPrimaryExpression' + RULE_memberAccessExpression: 68, // -> See 'computedPrimaryExpression' + RULE_functionCallExpression: 69, // -> See 'computedPrimaryExpression' } as const; /** From 4f544a26c6aa2a15cd52235b637260827e337a1d Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 26 Mar 2023 17:53:56 +0200 Subject: [PATCH 009/257] Reverted ts-node version update. Back now at 10.9.1 This is due to unexpected conflicts when performing tests, as that ts-node version is seemingly incompatible with typescript 4.9.x --- package.json | 2 +- pnpm-lock.yaml | 96 +++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 76 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 41843b4dc..e5a4b3ee3 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "size-limit": "8.2.4", "source-map-support": "0.5.21", "ts-mocha": "10.0.0", - "ts-node": "9.1.1", + "ts-node": "10.9.1", "tsify": "5.0.4", "uglify-js": "3.17.4", "uuid": "9.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37911b6a7..642a4a150 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ specifiers: size-limit: 8.2.4 source-map-support: 0.5.21 ts-mocha: 10.0.0 - ts-node: 9.1.1 + ts-node: 10.9.1 tsify: 5.0.4 tslib: ~2.4.1 typescript: 4.9.4 @@ -69,7 +69,7 @@ devDependencies: size-limit: 8.2.4 source-map-support: 0.5.21 ts-mocha: 10.0.0_mocha@10.2.0 - ts-node: 9.1.1_typescript@4.9.4 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq tsify: 5.0.4_g4eddkh7z3uakxvcfln5bjmn3m typescript: 4.9.4 uglify-js: 3.17.4 @@ -279,6 +279,13 @@ packages: to-fast-properties: 2.0.0 dev: true + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + /@eslint/eslintrc/1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -387,6 +394,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -532,6 +546,22 @@ packages: - webpack-cli dev: true + /@tsconfig/node10/1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.3: + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true + /@types/chai/4.3.0: resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} dev: true @@ -878,6 +908,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} @@ -1482,7 +1517,7 @@ packages: dev: true /concat-map/0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true /concat-stream/1.6.2: @@ -3746,8 +3781,8 @@ packages: dev: true /strip-bom/3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, tarball: strip-bom/-/strip-bom-3.0.0.tgz} - engines: {node: '>=0.10.0'} + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} dependencies: is-utf8: 0.2.1 dev: true @@ -3941,6 +3976,37 @@ packages: tsconfig-paths: 3.14.1 dev: true + /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.11.18 + acorn: 8.8.1 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-node/7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} @@ -3956,22 +4022,6 @@ packages: yn: 2.0.0 dev: true - /ts-node/9.1.1_typescript@4.9.4: - resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} - engines: {node: '>=10.0.0'} - hasBin: true - peerDependencies: - typescript: '>=2.7' - dependencies: - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - source-map-support: 0.5.21 - typescript: 4.9.4 - yn: 3.1.1 - dev: true - /tsconfig-paths/3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} requiresBuild: true @@ -4161,6 +4211,10 @@ packages: hasBin: true dev: true + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + /vm-browserify/1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true From 4dd0bd8a8b7530ae9f43cbaa0d2d11021f88a936 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 27 Mar 2023 14:31:54 +0200 Subject: [PATCH 010/257] Added field `programCtx` to `KipperError` --- CHANGELOG.md | 4 ++++ kipper/core/src/errors.ts | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cab595d59..d0d1ea45e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,10 @@ To use development versions of Kipper download the ### Added +- New field: + - `KipperError.programCtx`, which contains, if `KipperError.tracebackData.errorNode` is not undefined, the program + context of the error. + ### Changed ### Fixed diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index 4988e4ea4..918c26b76 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -8,7 +8,7 @@ import type { FailedPredicateException } from "antlr4ts/FailedPredicateException import type { RecognitionException } from "antlr4ts/RecognitionException"; import type { Recognizer } from "antlr4ts/Recognizer"; import type { KipperParseStream } from "./compiler"; -import { CompilableASTNode } from "./compiler"; +import { CompilableASTNode, KipperProgramContext } from "./compiler"; import { getParseRuleSource } from "./utils"; /** @@ -159,6 +159,14 @@ export class KipperError extends Error { : undefined) ); } + + /** + * Returns the program ctx containing the metadata of the program compilation in which the error occurred. + * @since 0.11.0 + */ + public get programCtx(): KipperProgramContext | undefined { + return this.tracebackData.errorNode?.programCtx; + } } /** From a7962af4c5c851f9e17aa265f0b719574f1398ff Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 27 Mar 2023 14:34:49 +0200 Subject: [PATCH 011/257] Fixed bug in compiler.ts for compile argument `abortOnFirstError` The bug caused `abortOnFirstError` to not precede `recover`, meaning that instead of an error being thrown the failed result was returned --- CHANGELOG.md | 3 +++ kipper/core/src/compiler/compiler.ts | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0d1ea45e..034e9ab63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,9 @@ To use development versions of Kipper download the ### Fixed +- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead + of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). + ### Deprecated ### Removed diff --git a/kipper/core/src/compiler/compiler.ts b/kipper/core/src/compiler/compiler.ts index eb609950d..4e174e42e 100644 --- a/kipper/core/src/compiler/compiler.ts +++ b/kipper/core/src/compiler/compiler.ts @@ -254,7 +254,10 @@ export class KipperCompiler { // RootASTNode class and CompilableASTNode classes. programCtx.reportError(e); - if (compilerOptions.recover === false) { + if (compilerOptions.abortOnFirstError) { + // If 'abortOnFirstError' is set, then we abort the compilation and throw the error + throw e as KipperError; + } else if (!compilerOptions.recover) { // If an error was thrown and the user does not want to recover from it, simply abort the compilation // (The internal semantic analysis algorithm in RootASTNode and CompilableASTNode will have thrown this error, // as they noticed 'compilerOptions.recover' is false) From 8e0dccb36e4b7944dda2d3a7f57924f0a64bbaac Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 27 Mar 2023 14:57:50 +0200 Subject: [PATCH 012/257] Prettified CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 034e9ab63..29a19b011 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,13 +20,13 @@ To use development versions of Kipper download the - New field: - `KipperError.programCtx`, which contains, if `KipperError.tracebackData.errorNode` is not undefined, the program - context of the error. + context of the error. ### Changed ### Fixed -- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead +- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). ### Deprecated From 0bde66735a21806c42401466d19684f477318ab2 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 4 Apr 2023 17:07:01 +0200 Subject: [PATCH 013/257] Restructured node classes and create new file structure for them --- CHANGELOG.md | 6 + .../analysis/analyser/type-checker.ts | 4 +- .../analysis/symbol-table/function-scope.ts | 2 +- .../analysis/symbol-table/global-scope.ts | 4 +- .../analysis/symbol-table/local-scope.ts | 2 +- .../src/compiler/ast/analysable-ast-node.ts | 4 +- kipper/core/src/compiler/ast/ast-generator.ts | 27 +- .../src/compiler/ast/{nodes => }/factories.ts | 15 +- .../ast/nodes/declarations/declaration.ts | 110 + .../declarations/function-declaration.ts | 188 ++ .../compiler/ast/nodes/declarations/index.ts | 9 + .../declarations/parameter-declaration.ts | 147 + .../declarations/variable-declaration.ts | 189 ++ .../src/compiler/ast/nodes/definitions.ts | 608 ---- .../src/compiler/ast/nodes/expressions.ts | 2806 ----------------- .../arithmetic/additive-expression.ts | 125 + .../arithmetic/arithmetic-expression.ts | 32 + .../ast/nodes/expressions/arithmetic/index.ts | 7 + .../arithmetic/multiplicative-expression.ts | 132 + .../expressions/assignment-expression.ts | 152 + .../expressions/cast-or-convert-expression.ts | 131 + .../comparative/comparative-expression.ts | 36 + .../comparative/equality-expression.ts | 117 + .../nodes/expressions/comparative/index.ts | 8 + .../comparative/relational-expression.ts | 132 + .../expressions/conditional-expression.ts | 93 + .../ast/nodes/expressions/expression.ts | 177 ++ .../expressions/function-call-expression.ts | 132 + .../compiler/ast/nodes/expressions/index.ts | 19 + .../ast/nodes/expressions/logical/index.ts | 8 + .../logical/logical-and-expression.ts | 111 + .../expressions/logical/logical-expression.ts | 39 + .../logical/logical-or-expression.ts | 112 + .../expressions/member-access-expression.ts | 152 + ...crement-or-decrement-postfix-expression.ts | 110 + .../ast/nodes/expressions/postfix/index.ts | 6 + .../constant/array-primary-expression.ts | 86 + .../constant/bool-primary-expression.ts | 87 + .../primary/constant/constant-expression.ts | 51 + .../expressions/primary/constant/index.ts | 10 + .../constant/number-primary-expression.ts | 88 + .../constant/string-primary-expression.ts | 87 + ...or-null-or-undefined-primary-expression.ts | 89 + .../primary/fstring-primary-expression.ts | 91 + .../primary/identifier-primary-expression.ts | 124 + .../ast/nodes/expressions/primary/index.ts | 9 + .../expressions/tangled-primary-expression.ts | 102 + .../generic-type-specifier-expression.ts | 86 + .../identifier-type-specifier-expression.ts | 98 + .../nodes/expressions/type-specifier/index.ts | 9 + .../type-specifier-expression.ts | 45 + .../typeof-type-specifier-expression.ts | 82 + ...increment-or-decrement-unary-expression.ts | 111 + .../ast/nodes/expressions/unary/index.ts | 8 + .../operator-modified-unary-expression.ts | 121 + .../expressions/unary/unary-expression.ts | 44 + kipper/core/src/compiler/ast/nodes/index.ts | 8 +- .../core/src/compiler/ast/nodes/statements.ts | 920 ------ .../nodes/statements/compound-statement.ts | 98 + .../nodes/statements/expression-statement.ts | 85 + .../ast/nodes/statements/if-statement.ts | 106 + .../compiler/ast/nodes/statements/index.ts | 13 + .../iteration/do-while-loop-statement.ts | 91 + .../iteration/for-loop-statement.ts | 125 + .../ast/nodes/statements/iteration/index.ts | 4 + .../iteration/iteration-statement.ts | 43 + .../iteration/while-loop-statement.ts | 93 + .../ast/nodes/statements/jump-statement.ts | 92 + .../ast/nodes/statements/return-statement.ts | 105 + .../ast/nodes/statements/statement.ts | 64 + .../ast/nodes/statements/switch-statement.ts | 89 + kipper/core/src/compiler/ast/root-ast-node.ts | 3 +- .../compiler/ast/semantic-data/definitions.ts | 5 +- .../compiler/ast/semantic-data/expressions.ts | 34 +- .../src/compiler/ast/semantic-data/index.ts | 2 +- .../compiler/ast/semantic-data/statements.ts | 5 +- .../src/compiler/ast/type-data/definitions.ts | 2 +- .../src/compiler/ast/type-data/expressions.ts | 4 +- .../core/src/compiler/ast/type-data/index.ts | 2 +- .../src/compiler/ast/type-data/statements.ts | 2 +- kipper/core/src/compiler/const.ts | 2 +- kipper/core/src/compiler/program-ctx.ts | 2 +- 82 files changed, 4976 insertions(+), 4403 deletions(-) rename kipper/core/src/compiler/ast/{nodes => }/factories.ts (96%) create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/declaration.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/definitions.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/statements.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/if-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/return-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 29a19b011..69ccabba5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,12 @@ To use development versions of Kipper download the ### Changed +- Made `VoidOrNullOrUndefinedPrimaryExpression` a constant expression and inherit from the `ConstantExpression` class. + This means it's AST kind number is now also added to the `ASTConstantExpressionKind` type and its context class is + also part of the `ParserConstantExpressionContext` type. +- Renamed: + - `FunctionCallPostfixTypeSemantics` to `FunctionCallExpressionTypeSemantics`. + ### Fixed - Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead diff --git a/kipper/core/src/compiler/analysis/analyser/type-checker.ts b/kipper/core/src/compiler/analysis/analyser/type-checker.ts index 8049bbd9c..0a9baa91d 100644 --- a/kipper/core/src/compiler/analysis/analyser/type-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/type-checker.ts @@ -8,8 +8,6 @@ import type { KipperProgramContext } from "../../program-ctx"; import type { IncrementOrDecrementPostfixExpressionSemantics, ParameterDeclarationSemantics, - SemanticData, - TypeData, UnaryExpressionSemantics, } from "../../ast"; import { @@ -484,7 +482,7 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { // return type. if (returnType !== "void") { // Recursively check all code paths to ensure all return a value. - const checkChildrenCodePaths = (parent: Statement): boolean => { + const checkChildrenCodePaths = (parent: Statement): boolean => { let returnPathsCovered = false; // If the parent is an if statement, we have to check the if and else branches directly diff --git a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts index 35a96db78..6c3194701 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts @@ -38,7 +38,7 @@ export class FunctionScope extends LocalScope { public addArgument(declaration: ParameterDeclaration): ScopeParameterDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); const scopeDeclaration = new ScopeParameterDeclaration(declaration); diff --git a/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts index 259e0f7a9..637b9cd5e 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts @@ -27,7 +27,7 @@ export class GlobalScope extends Scope { public addFunction(declaration: FunctionDeclaration): ScopeFunctionDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this.programCtx.globalScope); const scopeDeclaration = new ScopeFunctionDeclaration(declaration); @@ -38,7 +38,7 @@ export class GlobalScope extends Scope { public addVariable(declaration: VariableDeclaration): ScopeVariableDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this.programCtx.globalScope); const scopeDeclaration = new ScopeVariableDeclaration(declaration); diff --git a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts index 14d576330..cc368c580 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts @@ -36,7 +36,7 @@ export class LocalScope extends Scope { public addVariable(declaration: VariableDeclaration): ScopeVariableDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); const scopeDeclaration = new ScopeVariableDeclaration(declaration); diff --git a/kipper/core/src/compiler/ast/analysable-ast-node.ts b/kipper/core/src/compiler/ast/analysable-ast-node.ts index 8562dbf44..8802768df 100644 --- a/kipper/core/src/compiler/ast/analysable-ast-node.ts +++ b/kipper/core/src/compiler/ast/analysable-ast-node.ts @@ -147,7 +147,7 @@ export abstract class AnalysableASTNode< /** * Ensures that this node successfully passed the semantic analysis. This will be primarily used by statements and - * definitions, which depend on other nodes to be semantically valid. + * declarations, which depend on other nodes to be semantically valid. * * This is done by checking if the {@link AnalysableASTNode.hasFailed hasFailed} property is set to true and if the * {@link AnalysableASTNode.semanticData semanticData} property is undefined. If both of these conditions are met, @@ -174,7 +174,7 @@ export abstract class AnalysableASTNode< /** * Ensures that this node successfully passed the type checking step of semantic analysis. This will be primarily used - * by statements and definitions, which depend on other nodes to be semantically valid. + * by statements and declarations, which depend on other nodes to be semantically valid. * * This is done by checking if the {@link AnalysableASTNode.hasFailed hasFailed} property is set to true and if the * {@link AnalysableASTNode.typeSemantics typeSemantics} property is undefined. If both of these conditions are met, diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 0f4db5fa6..1319847bb 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -2,6 +2,9 @@ * Antlr4 listener for walking through a parser tree and processing its content. * @since 0.0.3 */ +import type { ParserDeclarationContext } from "./ast-types"; +import type { ASTNodeParserContext, ParserExpressionContext, ParserStatementContext } from "./ast-types"; +import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; import type { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, @@ -60,22 +63,14 @@ import type { VariableDeclarationContext, } from "../parser"; import type { KipperProgramContext } from "../program-ctx"; -import { - Declaration, - DeclarationASTNodeFactory, - Expression, - ExpressionASTNodeFactory, - Statement, - StatementASTNodeFactory, - RootASTNode, - CompilableASTNode, - ParserDeclarationContext, -} from "./"; +import type { CompilableASTNode } from "./compilable-ast-node"; +import type { KipperParserRuleContext } from "../parser"; +import type { ParserRuleContext } from "antlr4ts/ParserRuleContext"; +import { Declaration } from "./nodes"; +import { Expression, Statement } from "./nodes"; +import { RootASTNode } from "./root-ast-node"; +import { DeclarationASTNodeFactory, ExpressionASTNodeFactory, StatementASTNodeFactory } from "./factories"; import { KipperInternalError } from "../../errors"; -import { ASTNodeParserContext, ParserExpressionContext, ParserStatementContext } from "./ast-types"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { KipperParserRuleContext } from "../parser"; -import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; /** * The AST generator, which acts as a listener for a {@link KipperProgramContext}, which walks through a parse tree @@ -237,7 +232,7 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ private handleExitingTreeNode() { if (this._currentExpression) { - // Ensure expressions stay separately handled from statements/definitions + // Ensure expressions stay separately handled from statements/declarations const parent = this._currentExpression?.parent; if (parent instanceof Expression) { this._currentExpression = parent; diff --git a/kipper/core/src/compiler/ast/nodes/factories.ts b/kipper/core/src/compiler/ast/factories.ts similarity index 96% rename from kipper/core/src/compiler/ast/nodes/factories.ts rename to kipper/core/src/compiler/ast/factories.ts index ba7c624db..cf94a3eea 100644 --- a/kipper/core/src/compiler/ast/nodes/factories.ts +++ b/kipper/core/src/compiler/ast/factories.ts @@ -2,7 +2,7 @@ * AST Node factories which are used to create AST nodes from the ANTLR4 parse tree. * @since 0.10.0 */ -import type { CompilableASTNode, CompilableNodeParent } from "../compilable-ast-node"; +import type { CompilableASTNode, CompilableNodeParent } from "./compilable-ast-node"; import type { ASTDeclarationKind, ASTExpressionKind, @@ -11,8 +11,8 @@ import type { ParserDeclarationContext, ParserExpressionContext, ParserStatementContext, -} from "../ast-types"; -import { KipperParserRuleContext, ParserASTMapping } from "../../parser"; +} from "./ast-types"; +import { KipperParserRuleContext, ParserASTMapping } from "../parser"; import { AdditiveExpression, ArrayLiteralPrimaryExpression, @@ -40,9 +40,10 @@ import { TangledPrimaryExpression, TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, -} from "./expressions"; -import { Declaration, FunctionDeclaration, ParameterDeclaration, VariableDeclaration } from "./definitions"; -import { + Declaration, + FunctionDeclaration, + ParameterDeclaration, + VariableDeclaration, CompoundStatement, DoWhileLoopStatement, ExpressionStatement, @@ -53,7 +54,7 @@ import { Statement, SwitchStatement, WhileLoopStatement, -} from "./statements"; +} from "./nodes"; /** * A simple blueprint for a factory for creating AST nodes from a parser context. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts new file mode 100644 index 000000000..7e320eca1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -0,0 +1,110 @@ +/** + * The base abstract AST node class for all declarations/declarations, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link DeclarationASTNodeFactory} class. + * + * Note! Any function, variable or parameter declaration in Kipper will be registered in a {@link Scope}, which will + * define the visibility of the variable. The only exception is a {@link ParameterDeclaration}, which is bound to a + * function and its local scope. + * @since 0.1.0 + */ +import type { DeclarationSemantics } from "../../semantic-data"; +import type { DeclarationTypeData } from "../../type-data"; +import type { TranslatedCodeLine } from "../../../const"; +import type { ASTDeclarationKind, ParserDeclarationContext } from "../../ast-types"; +import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; +import type { ScopeDeclaration } from "../../../analysis"; +import { CompilableASTNode, type CompilableNodeParent } from "../../compilable-ast-node"; +import { UndefinedDeclarationCtxError } from "../../../../errors"; + +/** + * The base abstract AST node class for all declarations/declarations, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link DeclarationASTNodeFactory} class. + * + * Note! Any function, variable or parameter declaration in Kipper will be registered in a {@link Scope}, which will + * define the visibility of the variable. The only exception is a {@link ParameterDeclaration}, which is bound to a + * function and its local scope. + * @since 0.1.0 + */ +export abstract class Declaration< + Semantics extends DeclarationSemantics = DeclarationSemantics, + TypeData extends DeclarationTypeData = DeclarationTypeData, +> extends CompilableASTNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParserDeclarationContext; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected _scopeDeclaration: ScopeDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public abstract readonly kind: ASTDeclarationKind; + + protected constructor(antlrRuleCtx: ParserDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + + // Manually add the child to the parent + parent.addNewChild(this); + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ParserDeclarationContext { + return this._antlrRuleCtx; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public get scopeDeclaration(): ScopeDeclaration | undefined { + return this._scopeDeclaration; + } + + protected set scopeDeclaration(declaration: ScopeDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + /** + * Returns the {@link scopeDeclaration scope declaration ctx} of this declaration and throws an error in case + * it is undefined. + * @throws UndefinedDeclarationCtx If {@link scopeDeclaration} is undefined. + * @since 0.10.0 + */ + public getScopeDeclaration(): ScopeDeclaration { + if (!this.scopeDeclaration) { + throw new UndefinedDeclarationCtxError(); + } + return this.scopeDeclaration; + } + + /** + * Generates the typescript code for this item, and all children (if they exist). + * @since 0.8.0 + */ + public async translateCtxAndChildren(): Promise> { + return await this.targetCodeGenerator(this); + } + + public abstract targetSemanticAnalysis: TargetASTNodeSemanticAnalyser | undefined; + public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts new file mode 100644 index 000000000..7e0540e9f --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts @@ -0,0 +1,188 @@ +/** + * Function definition class, which represents the definition of a function in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * @since 0.1.2 + */ +import type { ScopeNode } from "../../scope-node"; +import type { FunctionDeclarationSemantics } from "../../semantic-data"; +import type { FunctionDeclarationTypeSemantics } from "../../type-data"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { CompoundStatement, Statement } from "../statements"; +import type { IdentifierTypeSpecifierExpression } from "../expressions"; +import { FunctionScope, ScopeFunctionDeclaration, UncheckedType } from "../../../analysis"; +import { CompoundStatementContext, DeclaratorContext, FunctionDeclarationContext, KipperParser } from "../../../parser"; +import { Declaration } from "./declaration"; +import { ParameterDeclaration } from "./parameter-declaration"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * Function definition class, which represents the definition of a function in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * @since 0.1.2 + */ +export class FunctionDeclaration + extends Declaration + implements ScopeNode +{ + /** + * The private field '_innerScope' that actually stores the variable data, + * which is returned inside the {@link this.innerScope}. + * @private + */ + private readonly _innerScope: FunctionScope; + + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: FunctionDeclarationContext; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected override _scopeDeclaration: ScopeFunctionDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_functionDeclaration; + + constructor(antlrRuleCtx: FunctionDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._innerScope = new FunctionScope(this); + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): FunctionDeclarationContext { + return this._antlrRuleCtx; + } + + /** + * Gets the inner scope of this function, where also the {@link semanticData.params arguments} should be registered. + * @since 0.10.0 + */ + public get innerScope(): FunctionScope { + return this._innerScope; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public get scopeDeclaration(): ScopeFunctionDeclaration | undefined { + return this._scopeDeclaration; + } + + protected set scopeDeclaration(declaration: ScopeFunctionDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + public getScopeDeclaration(): ScopeFunctionDeclaration { + /* istanbul ignore next: super function already being run/tested */ + return super.getScopeDeclaration(); + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const parseTreeChildren = this.getAntlrRuleChildren(); + + // Fetch context instances + let declaratorCtx = ( + parseTreeChildren.find((val) => val instanceof DeclaratorContext) + ); + + let body: Statement | undefined; + let retTypeSpecifier: IdentifierTypeSpecifierExpression | undefined; + let params: Array = []; + + // Create shallow copy of the children + let children = [...this.children]; + + // Evaluate the primary semantic data for the function + while (children.length > 0) { + let child = children.shift(); + + if (child instanceof ParameterDeclaration) { + params.push(child); + } else { + // Once the return type has been reached, stop, as the last two items should be the return type and func body + retTypeSpecifier = child; + body = children.pop(); + break; + } + } + + // Ensure that the children are fully present and not undefined + // Also make sure the scope has the required argument field for the function (is of type 'FunctionScope') + if (!declaratorCtx || !retTypeSpecifier) { + throw new UnableToDetermineSemanticDataError(); + } + + // Check the function body and ensure it exists/and is valid + this.programCtx.semanticCheck(this).validFunctionBody(body); + + const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); + const type: UncheckedType = retTypeSpecifier.getSemanticData().typeIdentifier; + + this.semanticData = { + isDefined: parseTreeChildren.find((val) => val instanceof CompoundStatementContext) !== undefined, + identifier: identifier, + returnTypeSpecifier: retTypeSpecifier, + returnType: type, + params: params, + functionBody: body, // Will always syntactically be a compound statement + }; + + // Add function definition to the current scope + this.scopeDeclaration = this.scope.addFunction(this); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type that will be returned using the return type specifier + const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + returnType: returnType, + }; + + // Ensure that all code paths return a value + this.programCtx.typeCheck(this).validReturnCodePathsInFunctionBody(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.functionDeclaration; + readonly targetCodeGenerator = this.codeGenerator.functionDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/index.ts b/kipper/core/src/compiler/ast/nodes/declarations/index.ts new file mode 100644 index 000000000..51654fb51 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/index.ts @@ -0,0 +1,9 @@ +/** + * Declaration module containing the classes representing declarations and definitions, which can be used to define a + * variable, function or parameter and make up an essential part of any program. + * @since 0.11.0 + */ +export * from "./declaration"; +export * from "./parameter-declaration"; +export * from "./function-declaration"; +export * from "./variable-declaration"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts new file mode 100644 index 000000000..50413b229 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts @@ -0,0 +1,147 @@ +/** + * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. + * @since 0.1.2 + */ +import type { ParameterDeclarationSemantics } from "../../semantic-data"; +import type { ParameterDeclarationTypeSemantics } from "../../type-data"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { FunctionScope, ScopeParameterDeclaration } from "../../../analysis"; +import type { FunctionDeclaration } from "./function-declaration"; +import type { IdentifierTypeSpecifierExpression } from "../expressions"; +import { Declaration } from "./declaration"; +import { KipperParser, ParameterDeclarationContext } from "../../../parser"; +import { getParseTreeSource } from "../../../../utils"; + +/** + * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. + * @since 0.1.2 + */ +export class ParameterDeclaration extends Declaration< + ParameterDeclarationSemantics, + ParameterDeclarationTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParameterDeclarationContext; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected override _scopeDeclaration: ScopeParameterDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_parameterDeclaration; + + constructor(antlrRuleCtx: ParameterDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ParameterDeclarationContext { + return this._antlrRuleCtx; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public override get scopeDeclaration(): ScopeParameterDeclaration | undefined { + return this._scopeDeclaration; + } + + protected override set scopeDeclaration(declaration: ScopeParameterDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + public override getScopeDeclaration(): ScopeParameterDeclaration { + /* istanbul ignore next: super function already being run/tested */ + return super.getScopeDeclaration(); + } + + /** + * Registers this parameter in the {@link semanticData.func.innerScope scope} of the + * {@link this.semanticData.func parent function}. + * + * This will also populate the {@link scopeDeclaration} field, since only after the parameter is registered in the + * scope the {@link scopeDeclaration} is created. + * @param scopeToUse The scope to register the parameter in. Should match + * {@link this.semantic.func.innerScope the scope of the parent function}. + * @since 0.10.0 + */ + public async addParamToFunctionScope(scopeToUse: FunctionScope): Promise { + this.scopeDeclaration = scopeToUse.addArgument(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const parseTreeChildren = this.getAntlrRuleChildren(); + + // The type specifier of the parameter + const typeSpecifier = this.children[0]; + + this.semanticData = { + identifier: getParseTreeSource(this.tokenStream, parseTreeChildren[0]), + valueTypeSpecifier: typeSpecifier, + valueType: typeSpecifier.getSemanticData().typeIdentifier, + func: this.parent, + }; + + // Register this parameter in the function scope + if (this.semanticData.func.innerScope) { + await this.addParamToFunctionScope(this.semanticData.func.innerScope); + } + + // IMPORTANT! If 'innerScope' returns undefined, then the function has an error and the parameter should not be + // registered in the scope. For now, we will ignore the error, since the function will throw an error anyway. + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type that will be returned using the value type specifier + const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + valueType: valueType, + }; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.parameterDeclaration; + readonly targetCodeGenerator = this.codeGenerator.parameterDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts new file mode 100644 index 000000000..96bc91039 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts @@ -0,0 +1,189 @@ +/** + * Variable declaration class, which represents the declaration and or definition of a variable in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * + * In case that {@link scope} is of type {@link KipperProgramContext}, then the scope is defined as global + * (accessible for the entire program). + */ +import type { VariableDeclarationSemantics } from "../../semantic-data"; +import type { VariableDeclarationTypeSemantics } from "../../type-data"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { ScopeVariableDeclaration, UncheckedType } from "../../../analysis"; +import type { Expression, IdentifierTypeSpecifierExpression } from "../expressions"; +import type { ParseTree } from "antlr4ts/tree"; +import type { KipperStorageType } from "../../../const"; +import { Declaration } from "./declaration"; +import { + DeclaratorContext, + InitDeclaratorContext, + KipperParser, + StorageTypeSpecifierContext, + VariableDeclarationContext, +} from "../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * Variable declaration class, which represents the declaration and or definition of a variable in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * + * In case that {@link scope} is of type {@link KipperProgramContext}, then the scope is defined as global + * (accessible for the entire program). + */ +export class VariableDeclaration extends Declaration { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: VariableDeclarationContext; + + /** + * The private field '_children' that actually stores the variable data, + * which is returned inside the {@link this.children}. + * @private + */ + protected override _children: Array; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected override _scopeDeclaration: ScopeVariableDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_variableDeclaration; + + constructor(antlrRuleCtx: VariableDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): VariableDeclarationContext { + return this._antlrRuleCtx; + } + + public override get children(): Array { + return this._children; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public get scopeDeclaration(): ScopeVariableDeclaration | undefined { + return this._scopeDeclaration; + } + + protected set scopeDeclaration(declaration: ScopeVariableDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + public getScopeDeclaration(): ScopeVariableDeclaration { + return super.getScopeDeclaration(); + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const children: Array = this.getAntlrRuleChildren(); + + // Determine the ctx instances + const storageTypeCtx = ( + children.find((val) => val instanceof StorageTypeSpecifierContext) + ); + const initDeclaratorCtx = ( + children.find((val) => val instanceof InitDeclaratorContext) + ); + const declaratorCtx = ( + initDeclaratorCtx?.children?.find((val) => val instanceof DeclaratorContext) + ); + + // The type of this declaration, which should always be present, since the parser requires it during the parsing + // step. + const typeSpecifier: IdentifierTypeSpecifierExpression = this.children[0]; + + // There will always be only one child, which is the expression assigned. + // If this child is missing, then this declaration does not contain a definition. + const assignValue: Expression | undefined = this.children[1]; + + // Throw an error if children are incomplete + if (!storageTypeCtx || !initDeclaratorCtx || !declaratorCtx || !typeSpecifier) { + throw new UnableToDetermineSemanticDataError(); + } + + // Semantic data of the variable declaration + const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); + const isDefined = Boolean(assignValue); + const storageType = this.tokenStream.getText(storageTypeCtx.sourceInterval); + const valueType: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; + + this.semanticData = { + isDefined: isDefined, + identifier: identifier, + storageType: storageType, + valueType: valueType, + valueTypeSpecifier: typeSpecifier, + scope: this.scope, + value: assignValue, + }; + + // Add scope variable entry + this.scopeDeclaration = this.scope.addVariable(this); + + // If the storage type is 'const' ensure that the variable has a value set. + this.programCtx.semanticCheck(this).validVariableDeclaration(this); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type that will be returned using the value type specifier + semanticData.valueTypeSpecifier.ensureTypeSemanticallyValid(); // Ensure the type specifier didn't fail + const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + valueType: valueType, + }; + + // If the variable is defined, check whether the assignment is valid + if (semanticData.value) { + semanticData.value.ensureTypeSemanticallyValid(); // Ensure the assignment didn't fail + this.programCtx.typeCheck(this).validVariableDefinition(this.getScopeDeclaration(), semanticData.value); + } + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.variableDeclaration; + readonly targetCodeGenerator = this.codeGenerator.variableDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/definitions.ts b/kipper/core/src/compiler/ast/nodes/definitions.ts deleted file mode 100644 index 800d8469d..000000000 --- a/kipper/core/src/compiler/ast/nodes/definitions.ts +++ /dev/null @@ -1,608 +0,0 @@ -/** - * AST Node Declaration/Definition classes of the Kipper language. - * @since 0.1.0 - */ -import type { ParseTree } from "antlr4ts/tree"; -import type { CompilableNodeParent, SemanticData, TypeData } from ".."; -import { CompilableASTNode } from ".."; -import { - CompoundStatementContext, - DeclaratorContext, - FunctionDeclarationContext, - InitDeclaratorContext, - KipperParser, - ParameterDeclarationContext, - StorageTypeSpecifierContext, - VariableDeclarationContext, -} from "../../parser"; -import { - FunctionScope, - ScopeDeclaration, - ScopeFunctionDeclaration, - ScopeParameterDeclaration, - ScopeVariableDeclaration, - UncheckedType, -} from "../../analysis"; -import type { Expression, IdentifierTypeSpecifierExpression } from "./expressions"; -import type { KipperStorageType, TranslatedCodeLine } from "../../const"; -import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../target-presets"; -import type { - DeclarationSemantics, - FunctionDeclarationSemantics, - ParameterDeclarationSemantics, - VariableDeclarationSemantics, -} from "../semantic-data"; -import type { - DeclarationTypeData, - FunctionDeclarationTypeSemantics, - ParameterDeclarationTypeSemantics, - VariableDeclarationTypeSemantics, -} from "../type-data"; -import { UnableToDetermineSemanticDataError, UndefinedDeclarationCtxError } from "../../../errors"; -import { getParseTreeSource } from "../../../utils"; -import { CompoundStatement, Statement } from "./statements"; -import { ScopeNode } from "../scope-node"; -import { ASTDeclarationKind, ParserDeclarationContext } from "../ast-types"; - -/** - * The base abstract AST node class for all declarations/definitions, which wrap their corresponding - * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. - * - * These AST nodes can be created with the {@link DeclarationASTNodeFactory} class. - * - * Note! Any function, variable or parameter declaration in Kipper will be registered in a {@link Scope}, which will - * define the visibility of the variable. The only exception is a {@link ParameterDeclaration}, which is bound to a - * function and its local scope. - * @since 0.1.0 - */ -export abstract class Declaration< - Semantics extends DeclarationSemantics = DeclarationSemantics, - TypeData extends DeclarationTypeData = DeclarationTypeData, -> extends CompilableASTNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParserDeclarationContext; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected _scopeDeclaration: ScopeDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public abstract readonly kind: ASTDeclarationKind; - - protected constructor(antlrRuleCtx: ParserDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - - // Manually add the child to the parent - parent.addNewChild(this); - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ParserDeclarationContext { - return this._antlrRuleCtx; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public get scopeDeclaration(): ScopeDeclaration | undefined { - return this._scopeDeclaration; - } - - protected set scopeDeclaration(declaration: ScopeDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - /** - * Returns the {@link scopeDeclaration scope declaration ctx} of this declaration and throws an error in case - * it is undefined. - * @throws UndefinedDeclarationCtx If {@link scopeDeclaration} is undefined. - * @since 0.10.0 - */ - public getScopeDeclaration(): ScopeDeclaration { - if (!this.scopeDeclaration) { - throw new UndefinedDeclarationCtxError(); - } - return this.scopeDeclaration; - } - - /** - * Generates the typescript code for this item, and all children (if they exist). - * @since 0.8.0 - */ - public async translateCtxAndChildren(): Promise> { - return await this.targetCodeGenerator(this); - } - - public abstract targetSemanticAnalysis: TargetASTNodeSemanticAnalyser | undefined; - public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; -} - -/** - * Declaration of a parameter inside a {@link FunctionDeclaration}. - * @since 0.1.2 - */ -export class ParameterDeclaration extends Declaration< - ParameterDeclarationSemantics, - ParameterDeclarationTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParameterDeclarationContext; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected override _scopeDeclaration: ScopeParameterDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_parameterDeclaration; - - constructor(antlrRuleCtx: ParameterDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ParameterDeclarationContext { - return this._antlrRuleCtx; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public override get scopeDeclaration(): ScopeParameterDeclaration | undefined { - return this._scopeDeclaration; - } - - protected override set scopeDeclaration(declaration: ScopeParameterDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - public override getScopeDeclaration(): ScopeParameterDeclaration { - /* istanbul ignore next: super function already being run/tested */ - return super.getScopeDeclaration(); - } - - /** - * Registers this parameter in the {@link semanticData.func.innerScope scope} of the - * {@link this.semanticData.func parent function}. - * - * This will also populate the {@link scopeDeclaration} field, since only after the parameter is registered in the - * scope the {@link scopeDeclaration} is created. - * @param scopeToUse The scope to register the parameter in. Should match - * {@link this.semantic.func.innerScope the scope of the parent function}. - * @since 0.10.0 - */ - public async addParamToFunctionScope(scopeToUse: FunctionScope): Promise { - this.scopeDeclaration = scopeToUse.addArgument(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const parseTreeChildren = this.getAntlrRuleChildren(); - - // The type specifier of the parameter - const typeSpecifier = this.children[0]; - - this.semanticData = { - identifier: getParseTreeSource(this.tokenStream, parseTreeChildren[0]), - valueTypeSpecifier: typeSpecifier, - valueType: typeSpecifier.getSemanticData().typeIdentifier, - func: this.parent, - }; - - // Register this parameter in the function scope - if (this.semanticData.func.innerScope) { - await this.addParamToFunctionScope(this.semanticData.func.innerScope); - } - - // IMPORTANT! If 'innerScope' returns undefined, then the function has an error and the parameter should not be - // registered in the scope. For now, we will ignore the error, since the function will throw an error anyway. - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type that will be returned using the value type specifier - const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - valueType: valueType, - }; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.parameterDeclaration; - readonly targetCodeGenerator = this.codeGenerator.parameterDeclaration; -} - -/** - * Function definition class, which represents the definition of a function in the Kipper - * language and is compilable using {@link translateCtxAndChildren}. - * @since 0.1.2 - */ -export class FunctionDeclaration - extends Declaration - implements ScopeNode -{ - /** - * The private field '_innerScope' that actually stores the variable data, - * which is returned inside the {@link this.innerScope}. - * @private - */ - private readonly _innerScope: FunctionScope; - - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: FunctionDeclarationContext; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected override _scopeDeclaration: ScopeFunctionDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_functionDeclaration; - - constructor(antlrRuleCtx: FunctionDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._innerScope = new FunctionScope(this); - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): FunctionDeclarationContext { - return this._antlrRuleCtx; - } - - /** - * Gets the inner scope of this function, where also the {@link semanticData.params arguments} should be registered. - * @since 0.10.0 - */ - public get innerScope(): FunctionScope { - return this._innerScope; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public get scopeDeclaration(): ScopeFunctionDeclaration | undefined { - return this._scopeDeclaration; - } - - protected set scopeDeclaration(declaration: ScopeFunctionDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - public getScopeDeclaration(): ScopeFunctionDeclaration { - /* istanbul ignore next: super function already being run/tested */ - return super.getScopeDeclaration(); - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const parseTreeChildren = this.getAntlrRuleChildren(); - - // Fetch context instances - let declaratorCtx = ( - parseTreeChildren.find((val) => val instanceof DeclaratorContext) - ); - - let body: Statement | undefined; - let retTypeSpecifier: IdentifierTypeSpecifierExpression | undefined; - let params: Array = []; - - // Create shallow copy of the children - let children = [...this.children]; - - // Evaluate the primary semantic data for the function - while (children.length > 0) { - let child = children.shift(); - - if (child instanceof ParameterDeclaration) { - params.push(child); - } else { - // Once the return type has been reached, stop, as the last two items should be the return type and func body - retTypeSpecifier = child; - body = children.pop(); - break; - } - } - - // Ensure that the children are fully present and not undefined - // Also make sure the scope has the required argument field for the function (is of type 'FunctionScope') - if (!declaratorCtx || !retTypeSpecifier) { - throw new UnableToDetermineSemanticDataError(); - } - - // Check the function body and ensure it exists/and is valid - this.programCtx.semanticCheck(this).validFunctionBody(body); - - const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); - const type: UncheckedType = retTypeSpecifier.getSemanticData().typeIdentifier; - - this.semanticData = { - isDefined: parseTreeChildren.find((val) => val instanceof CompoundStatementContext) !== undefined, - identifier: identifier, - returnTypeSpecifier: retTypeSpecifier, - returnType: type, - params: params, - functionBody: body, // Will always syntactically be a compound statement - }; - - // Add function definition to the current scope - this.scopeDeclaration = this.scope.addFunction(this); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type that will be returned using the return type specifier - const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - returnType: returnType, - }; - - // Ensure that all code paths return a value - this.programCtx.typeCheck(this).validReturnCodePathsInFunctionBody(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.functionDeclaration; - readonly targetCodeGenerator = this.codeGenerator.functionDeclaration; -} - -/** - * Variable declaration class, which represents the declaration and or definition of a variable in the Kipper - * language and is compilable using {@link translateCtxAndChildren}. - * - * In case that {@link scope} is of type {@link KipperProgramContext}, then the scope is defined as global - * (accessible for the entire program). - */ -export class VariableDeclaration extends Declaration { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: VariableDeclarationContext; - - /** - * The private field '_children' that actually stores the variable data, - * which is returned inside the {@link this.children}. - * @private - */ - protected override _children: Array; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected override _scopeDeclaration: ScopeVariableDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_variableDeclaration; - - constructor(antlrRuleCtx: VariableDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): VariableDeclarationContext { - return this._antlrRuleCtx; - } - - public override get children(): Array { - return this._children; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public get scopeDeclaration(): ScopeVariableDeclaration | undefined { - return this._scopeDeclaration; - } - - protected set scopeDeclaration(declaration: ScopeVariableDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - public getScopeDeclaration(): ScopeVariableDeclaration { - return super.getScopeDeclaration(); - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const children: Array = this.getAntlrRuleChildren(); - - // Determine the ctx instances - const storageTypeCtx = ( - children.find((val) => val instanceof StorageTypeSpecifierContext) - ); - const initDeclaratorCtx = ( - children.find((val) => val instanceof InitDeclaratorContext) - ); - const declaratorCtx = ( - initDeclaratorCtx?.children?.find((val) => val instanceof DeclaratorContext) - ); - - // The type of this declaration, which should always be present, since the parser requires it during the parsing - // step. - const typeSpecifier: IdentifierTypeSpecifierExpression = this.children[0]; - - // There will always be only one child, which is the expression assigned. - // If this child is missing, then this declaration does not contain a definition. - const assignValue: Expression | undefined = this.children[1]; - - // Throw an error if children are incomplete - if (!storageTypeCtx || !initDeclaratorCtx || !declaratorCtx || !typeSpecifier) { - throw new UnableToDetermineSemanticDataError(); - } - - // Semantic data of the variable declaration - const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); - const isDefined = Boolean(assignValue); - const storageType = this.tokenStream.getText(storageTypeCtx.sourceInterval); - const valueType: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; - - this.semanticData = { - isDefined: isDefined, - identifier: identifier, - storageType: storageType, - valueType: valueType, - valueTypeSpecifier: typeSpecifier, - scope: this.scope, - value: assignValue, - }; - - // Add scope variable entry - this.scopeDeclaration = this.scope.addVariable(this); - - // If the storage type is 'const' ensure that the variable has a value set. - this.programCtx.semanticCheck(this).validVariableDeclaration(this); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type that will be returned using the value type specifier - semanticData.valueTypeSpecifier.ensureTypeSemanticallyValid(); // Ensure the type specifier didn't fail - const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - valueType: valueType, - }; - - // If the variable is defined, check whether the assignment is valid - if (semanticData.value) { - semanticData.value.ensureTypeSemanticallyValid(); // Ensure the assignment didn't fail - this.programCtx.typeCheck(this).validVariableDefinition(this.getScopeDeclaration(), semanticData.value); - } - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.variableDeclaration; - readonly targetCodeGenerator = this.codeGenerator.variableDeclaration; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions.ts b/kipper/core/src/compiler/ast/nodes/expressions.ts deleted file mode 100644 index 3e52af14c..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions.ts +++ /dev/null @@ -1,2806 +0,0 @@ -/** - * AST Node Expression classes of the Kipper language. - * @since 0.1.0 - */ -import type { TargetASTNodeCodeGenerator } from "../../target-presets"; -import type { - AdditiveExpressionSemantics, - AssignmentExpressionSemantics, - BoolPrimaryExpressionSemantics, - CastOrConvertExpressionSemantics, - ComparativeExpressionSemantics, - ConditionalExpressionSemantics, - ConstantExpressionSemantics, - EqualityExpressionSemantics, - ExpressionSemantics, - FStringPrimaryExpressionSemantics, - FunctionCallExpressionSemantics, - GenericTypeSpecifierExpressionSemantics, - IdentifierPrimaryExpressionSemantics, - IdentifierTypeSpecifierExpressionSemantics, - IncrementOrDecrementPostfixExpressionSemantics, - IncrementOrDecrementUnaryExpressionSemantics, - ArrayLiteralPrimaryExpressionSemantics, - LogicalAndExpressionSemantics, - LogicalExpressionSemantics, - LogicalOrExpressionSemantics, - MultiplicativeExpressionSemantics, - NumberPrimaryExpressionSemantics, - OperatorModifiedUnaryExpressionSemantics, - RelationalExpressionSemantics, - StringPrimaryExpressionSemantics, - TangledPrimaryExpressionSemantics, - TypeofTypeSpecifierExpressionSemantics, - TypeSpecifierExpressionSemantics, - UnaryExpressionSemantics, - VoidOrNullOrUndefinedPrimaryExpressionSemantics, - MemberAccessExpressionSemantics, -} from "../semantic-data"; -import type { - AdditiveExpressionTypeSemantics, - AssignmentExpressionTypeSemantics, - BoolPrimaryExpressionTypeSemantics, - CastOrConvertExpressionTypeSemantics, - ComparativeExpressionTypeSemantics, - ConditionalExpressionTypeSemantics, - EqualityExpressionTypeSemantics, - ExpressionTypeSemantics, - FStringPrimaryExpressionTypeSemantics, - FunctionCallPostfixTypeSemantics, - GenericTypeSpecifierExpressionTypeSemantics, - IdentifierPrimaryExpressionTypeSemantics, - IdentifierTypeSpecifierExpressionTypeSemantics, - IncrementOrDecrementPostfixExpressionTypeSemantics, - IncrementOrDecrementUnaryTypeSemantics, - ArrayLiteralPrimaryExpressionTypeSemantics, - LogicalAndExpressionTypeSemantics, - LogicalExpressionTypeSemantics, - LogicalOrExpressionTypeSemantics, - MultiplicativeTypeSemantics, - NumberPrimaryExpressionTypeSemantics, - OperatorModifiedUnaryTypeSemantics, - RelationalExpressionTypeSemantics, - StringPrimaryExpressionTypeSemantics, - TangledPrimaryTypeSemantics, - TypeofTypeSpecifierExpressionTypeSemantics, - TypeSpecifierExpressionTypeSemantics, - UnaryExpressionTypeSemantics, - VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics, - MemberAccessExpressionTypeSemantics, -} from "../type-data"; -import { - KipperAdditiveOperator, - kipperAdditiveOperators, - kipperArithmeticAssignOperators, - KipperAssignOperator, - KipperBoolTypeLiterals, - KipperEqualityOperator, - kipperEqualityOperators, - KipperIncrementOrDecrementOperator, - kipperLogicalAndOperator, - kipperLogicalOrOperator, - KipperMultiplicativeOperator, - kipperMultiplicativeOperators, - KipperNegateOperator, - KipperNullType, - KipperReferenceableFunction, - KipperRelationalOperator, - kipperRelationalOperators, - KipperSignOperator, - kipperUnaryModifierOperators, - KipperUndefinedType, - KipperVoidType, - TranslatedExpression, -} from "../../const"; -import { kipperInternalBuiltInFunctions } from "../../runtime-built-ins"; -import { CheckedType, ScopeDeclaration, ScopeVariableDeclaration, UncheckedType } from "../../analysis"; -import { - KipperNotImplementedError, - MissingRequiredSemanticDataError, - UnableToDetermineSemanticDataError, -} from "../../../errors"; -import { getConversionFunctionIdentifier, getParseRuleSource } from "../../../utils"; -import { - AdditiveExpressionContext, - AssignmentExpressionContext, - BoolPrimaryExpressionContext, - CastOrConvertExpressionContext, - ConditionalExpressionContext, - EqualityExpressionContext, - FStringPrimaryExpressionContext, - FunctionCallExpressionContext, - GenericTypeSpecifierContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - ArrayLiteralPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NumberPrimaryExpressionContext, - OperatorModifiedUnaryExpressionContext, - RelationalExpressionContext, - StringPrimaryExpressionContext, - TangledPrimaryExpressionContext, - TypeofTypeSpecifierContext, - UnaryOperatorContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - BracketNotationMemberAccessExpressionContext, - DotNotationMemberAccessExpressionContext, - SliceNotationMemberAccessExpressionContext, - ParserASTMapping, - KipperParserRuleContext, - SliceNotationContext, -} from "../../parser"; -import { CompilableASTNode } from "../compilable-ast-node"; -import { TerminalNode } from "antlr4ts/tree"; -import { ASTExpressionKind, ParserExpressionContext } from "../ast-types"; - -/** - * The base abstract AST node class for all expressions, which wrap their corresponding - * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. - * - * These AST nodes can be created with the {@link ExpressionASTNodeFactory} class. - * @since 0.1.0 - */ -export abstract class Expression< - Semantics extends ExpressionSemantics = ExpressionSemantics, - TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, -> extends CompilableASTNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParserExpressionContext; - - protected override _children: Array; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public abstract readonly kind: ASTExpressionKind; - - protected constructor(antlrRuleCtx: ParserExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - - // Manually add the child to the parent - parent.addNewChild(this); - } - - public get children(): Array { - return this._children; - } - - public addNewChild(newChild: Expression) { - this._children.push(newChild); - } - - /** - * Returns whether this expression has any side effects. This means that the expression will change the state of the - * program in some way and not only return a value. - * - * This specifically can mean it assigns or modifies a variable, calls a function, or throws an error. - * @since 0.10.0 - */ - public hasSideEffects(): boolean { - return false; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public abstract checkForWarnings?(): Promise; - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ParserExpressionContext { - return this._antlrRuleCtx; - } - - /** - * Semantically analyses the code inside this AST node and all {@link this.children children nodes}. - * - * This function will recursively call itself on the {@link this.children} instances and analyse the deepest children - * nodes first, working up as the tokens get more complex. This way the parent tokens can access the semantics of - * the children and properly process itself. - * - * This function will set the {@link this.semanticData} property and allow the use of {@link this.getSemanticData}, - * without getting any error. - * @since 0.8.0 - */ - public override async semanticAnalysis(): Promise { - // Start with the evaluation of the children - await this.semanticallyAnalyseChildren(); - - // If the semantic analysis until now hasn't failed, do the semantic analysis of this node (if defined) - // Note: The specific AST node will have to handle errors in their children and ensure for analysis all required - // data is present. - // This overwrites the default behaviour of every node handling the errors in the children - if (!this.hasFailed && this.primarySemanticAnalysis !== undefined) { - try { - await this.primarySemanticAnalysis(); - } catch (e) { - if (e instanceof MissingRequiredSemanticDataError) { - this._skippedSemanticAnalysis = true; - } - this.handleSemanticError(e); - } - } - } - - /** - * Performs type checking on this AST node and all {@link this.children children nodes}. This uses the - * {@link this.semanticData semantic data} that was evaluated during {@link this.semanticAnalysis semantic analysis}. - * @since 0.10.0 - */ - public override async semanticTypeChecking(): Promise { - // Start with the evaluation of the children - await this.semanticallyTypeCheckChildren(); - - // If the semantic analysis until now hasn't failed, do the semantic type checking of this node (if defined) - // This overwrites the default behaviour of every node handling the errors in the children - if (!this.hasFailed && !this.skippedSemanticAnalysis && this.primarySemanticTypeChecking !== undefined) { - try { - await this.primarySemanticTypeChecking(); - } catch (e) { - if (e instanceof MissingRequiredSemanticDataError) { - this._skippedSemanticAnalysis = true; - } - this.handleSemanticError(e); - } - } - } - - /** - * Wrap-up semantic analysis, which analyses this AST node and all {@link this.children children nodes}, and - * checks whether they are semantically valid for the {@link this.target target language}. This uses the - * {@link this.semanticData semantic data} and {@link this.typeData type data} that was evaluated during the previous - * {@link this.semanticAnalysis semantic analysis} and {@link this.semanticTypeChecking type checking} steps. - * @since 0.10.0 - */ - public override async wrapUpSemanticAnalysis(): Promise { - // Start with the evaluation of the children - await this.targetSemanticallyAnalyseChildren(); - - // If the semantic analysis until now hasn't failed, do the target semantic analysis of this node (if defined) - // This overwrites the default behaviour of every node handling the errors in the children - if (!this.hasFailed && !this.skippedSemanticTypeChecking && this.targetSemanticAnalysis !== undefined) { - try { - await this.targetSemanticAnalysis(this); - } catch (e) { - if (e instanceof MissingRequiredSemanticDataError) { - this._skippedSemanticAnalysis = true; - } - this.handleSemanticError(e); - } - } - } - - /** - * Generates the typescript code for this item, and all children (if they exist). - * - * Every item in the array represents a token of the expression. - */ - public override async translateCtxAndChildren(): Promise { - return await this.targetCodeGenerator(this); - } - - public abstract targetCodeGenerator: TargetASTNodeCodeGenerator; -} - -/**targetSemanticAnalysis - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. - * @since 0.10.0 - */ -export type ParserConstantExpressionContext = - | NumberPrimaryExpressionContext - | StringPrimaryExpressionContext - | BoolPrimaryExpressionContext - | VoidOrNullOrUndefinedPrimaryExpressionContext - | ArrayLiteralPrimaryExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. - * @since 0.10.0 - */ -export type ASTConstantExpressionKind = - | typeof ParserASTMapping.RULE_numberPrimaryExpression - | typeof ParserASTMapping.RULE_stringPrimaryExpression - | typeof ParserASTMapping.RULE_boolPrimaryExpression - | typeof ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression - | typeof ParserASTMapping.RULE_arrayLiteralPrimaryExpression; - -/** - * Abstract constant expression class representing a constant expression, which was defined in the source code. This - * abstract class only exists to provide the commonality between the different constant expressions. - */ -export abstract class ConstantExpression< - Semantics extends ConstantExpressionSemantics = ConstantExpressionSemantics, - TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserConstantExpressionContext; - public abstract readonly kind: ASTConstantExpressionKind; -} - -/** - * Integer constant expression, which represents a number constant that was defined in the source code. - * @since 0.1.0 - */ -export class NumberPrimaryExpression extends ConstantExpression< - NumberPrimaryExpressionSemantics, - NumberPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: NumberPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_numberPrimaryExpression; - - constructor(antlrRuleCtx: NumberPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // The value should stay the same as written, and the code generator implementation should handle outputting the - // value in the target language - this.semanticData = { - value: this.sourceCode, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'number' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("num"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): NumberPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.numberPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.numberPrimaryExpression; -} - -/** - * List constant expression, which represents a list constant that was defined in the source code. - * @since 0.1.0 - */ -export class ArrayLiteralPrimaryExpression extends ConstantExpression< - ArrayLiteralPrimaryExpressionSemantics, - ArrayLiteralPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ArrayLiteralPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_arrayLiteralPrimaryExpression; - - constructor(antlrRuleCtx: ArrayLiteralPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - value: [], // TODO! Implement list data fetching. - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'list' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("list"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ArrayLiteralPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.listPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.arrayLiteralExpression; -} - -/** - * String constant expression, which represents a string constant that was defined in the source code. - * @since 0.1.0 - */ -export class StringPrimaryExpression extends ConstantExpression< - StringPrimaryExpressionSemantics, - StringPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: StringPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_stringPrimaryExpression; - - constructor(antlrRuleCtx: StringPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - value: this.sourceCode.slice(1, this.sourceCode.length - 1), // Remove string quotation marks - quotationMarks: <`"` | `'`>this.sourceCode[0], - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'str' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("str"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): StringPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.stringPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.stringPrimaryExpression; -} - -/** - * Boolean constant expression representing the built-in constants {@link true} and {@link false}. - * @since 0.8.0 - */ -export class BoolPrimaryExpression extends Expression< - BoolPrimaryExpressionSemantics, - BoolPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: BoolPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_boolPrimaryExpression; - - constructor(antlrRuleCtx: BoolPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - value: this.sourceCode, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): BoolPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.boolPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.boolPrimaryExpression; -} - -/** - * F-String class, which represents an f-string expression in the Kipper language. - * @since 0.1.0 - */ -export class FStringPrimaryExpression extends Expression< - FStringPrimaryExpressionSemantics, - FStringPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: FStringPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_fStringPrimaryExpression; - - constructor(antlrRuleCtx: FStringPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("F-String Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'str' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("str"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): FStringPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.fStringPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.fStringPrimaryExpression; -} - -/** - * Identifier expression, which represents an identifier referencing a variable, function or built-in identifier. - * - * This is only represents a reference and not a declaration/definition. - * @since 0.1.0 - */ -export class IdentifierPrimaryExpression extends Expression< - IdentifierPrimaryExpressionSemantics, - IdentifierPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IdentifierPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_identifierPrimaryExpression; - - constructor(antlrRuleCtx: IdentifierPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const identifier = this.sourceCode; - - // Make sure the referenced variable even exists! - const ref = this.programCtx - .semanticCheck(this) - .getExistingReference(identifier, "innerScope" in this.scopeCtx ? this.scopeCtx : undefined); - - // Once we have the identifier and ensured a reference exists, we are done with the primary semantic analysis. - this.semanticData = { - identifier: identifier, - ref: { - refTarget: ref, - srcExpr: this, - }, - }; - - if (!(ref instanceof ScopeDeclaration)) { - this.programCtx.addBuiltInReference(this, ref); - } else { - // If the reference is not used inside an assignment expression, ensure that the reference is defined - // (This is due to the fact that assignments to undefined variables must always be valid, unless it's a - // modifier assignment operator) - if (!(this.parent instanceof AssignmentExpression)) { - this.programCtx.semanticCheck(this).refTargetDefined(ref); - } - } - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - const refTarget = semanticData.ref.refTarget; - - let type: CheckedType; - if (refTarget instanceof ScopeDeclaration) { - type = refTarget.type; - } else { - // Built-in function -> type is 'func' - type = CheckedType.fromCompilableType("valueType" in refTarget ? refTarget.valueType : "func"); - } - - this.typeSemantics = { - evaluatedType: type, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IdentifierPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.identifierPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.identifierPrimaryExpression; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. - * @since 0.10.0 - */ -export type ParserTypeSpecifierExpressionContext = - | IdentifierTypeSpecifierContext - | GenericTypeSpecifierContext - | TypeofTypeSpecifierContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link TypeSpecifierExpression} AST node. - * @since 0.10.0 - */ -export type ASTTypeSpecifierExpressionKind = - | typeof ParserASTMapping.RULE_identifierTypeSpecifier - | typeof ParserASTMapping.RULE_genericTypeSpecifier - | typeof ParserASTMapping.RULE_typeofTypeSpecifier; - -/** - * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the - * different type specifier expressions. - */ -export abstract class TypeSpecifierExpression< - Semantics extends TypeSpecifierExpressionSemantics = TypeSpecifierExpressionSemantics, - TypeSemantics extends TypeSpecifierExpressionTypeSemantics = TypeSpecifierExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserTypeSpecifierExpressionContext; - public abstract readonly kind: ASTTypeSpecifierExpressionKind; -} - -/** - * Type specifier expression, which represents a simple identifier type specifier. - * @example - * num // Number type - * str // String type - * char // Character type - * bool // Boolean type - * @since 0.8.0 - */ -export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< - IdentifierTypeSpecifierExpressionSemantics, - IdentifierTypeSpecifierExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IdentifierTypeSpecifierContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_identifierTypeSpecifier; - - constructor(antlrRuleCtx: IdentifierTypeSpecifierContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - typeIdentifier: new UncheckedType(this.sourceCode), - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Create a checked type instance (this function handles error recovery and invalid types) - const valueType = this.programCtx.typeCheck(this).getCheckedType(semanticData.typeIdentifier); - this.typeSemantics = { - // A type specifier will always evaluate to be of type 'type' - evaluatedType: CheckedType.fromCompilableType("type"), - storedType: valueType, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IdentifierTypeSpecifierContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.identifierTypeSpecifierExpression; - readonly targetCodeGenerator = this.codeGenerator.identifierTypeSpecifierExpression; -} - -/** - * Generic type specifier expression, which represents a generic type specifier. - * @example - * list // List type with number as generic type - * @since 0.8.0 - */ -export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< - GenericTypeSpecifierExpressionSemantics, - GenericTypeSpecifierExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: GenericTypeSpecifierContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_genericTypeSpecifier; - - constructor(antlrRuleCtx: GenericTypeSpecifierContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): GenericTypeSpecifierContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.genericTypeSpecifierExpression; - readonly targetCodeGenerator = this.codeGenerator.genericTypeSpecifierExpression; -} - -/** - * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. - * @since 0.8.0 - */ -export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< - TypeofTypeSpecifierExpressionSemantics, - TypeofTypeSpecifierExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: TypeofTypeSpecifierContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_typeofTypeSpecifier; - - constructor(antlrRuleCtx: TypeofTypeSpecifierContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): TypeofTypeSpecifierContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.typeofTypeSpecifierExpression; - readonly targetCodeGenerator = this.codeGenerator.typeofTypeSpecifierExpression; -} - -/** - * Tangled/Parenthesised expression, which represents a parenthesised expression that wraps another expression and - * increases its order of precedence. - * @example - * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed - * @since 0.1.0 - */ -export class TangledPrimaryExpression extends Expression< - TangledPrimaryExpressionSemantics, - TangledPrimaryTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: TangledPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_tangledPrimaryExpression; - - constructor(antlrRuleCtx: TangledPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Tangled expressions always contain one expression child - const exp: Expression = this.children[0]; - - // Ensure that the child expression is present - if (!exp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - childExp: exp, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const exp = this.getSemanticData().childExp; - - this.typeSemantics = { - // Tangled expressions always evaluate to the type of its child expression - evaluatedType: exp.getTypeSemanticData().evaluatedType, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): TangledPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.tangledPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.tangledPrimaryExpression; -} - -export class VoidOrNullOrUndefinedPrimaryExpression extends Expression< - VoidOrNullOrUndefinedPrimaryExpressionSemantics, - VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression; - - constructor(antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - // Syntactically there can only be 'void', 'null' or 'undefined' stored in this expression - constantIdentifier: this.sourceCode, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.10.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // The evaluated type of this expression will always be equal to the constant identifier that this expression - // contains e.g. either 'void', 'null' or 'undefined'. - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType(semanticData.constantIdentifier), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): VoidOrNullOrUndefinedPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.voidOrNullOrUndefinedPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.voidOrNullOrUndefinedPrimaryExpression; -} - -/** - * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. - * @since 0.1.0 - * @example - * 49++; // 49 will be incremented by 1 - * 11--; // 11 will be decremented by 1 - */ -export class IncrementOrDecrementPostfixExpression extends Expression< - IncrementOrDecrementPostfixExpressionSemantics, - IncrementOrDecrementPostfixExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementPostfixExpression; - - constructor(antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it modifies the value of the operand - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const exp: Expression = this.children[0]; - const operator = this.sourceCode.slice(-2); // After the expression - - // Ensure that the child expression is present - if (!exp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - operand: exp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - this.typeSemantics = { - // This will always be a number - evaluatedType: CheckedType.fromKipperType("num"), - }; - - // Ensure that this expression is valid (e.g. the operand is a number) - this.programCtx.typeCheck(this).validUnaryExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IncrementOrDecrementPostfixExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementPostfixExpression; - readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementPostfixExpression; -} - -/** - * A union of all possible {@link KipperParserRuleContext} rule contexts that {@link MemberAccessExpression} implements. - * @since 0.10.0 - */ -export type MemberAccessExpressionContext = - | DotNotationMemberAccessExpressionContext - | BracketNotationMemberAccessExpressionContext - | SliceNotationMemberAccessExpressionContext; - -/** - * Member access expression, which represents a member access expression that evaluates to a value of a member of an - * object or array. - * @since 0.10.0 - */ -export class MemberAccessExpression extends Expression< - MemberAccessExpressionSemantics, - MemberAccessExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: MemberAccessExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_memberAccessExpression; - - constructor(antlrRuleCtx: MemberAccessExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): MemberAccessExpressionContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Handle the different types of member access expressions - if (this.antlrRuleCtx instanceof DotNotationMemberAccessExpressionContext) { - throw this.programCtx - .semanticCheck(this) - .notImplementedError( - new KipperNotImplementedError("Member access expressions using dot notation are not yet implemented"), - ); - } else if (this.antlrRuleCtx instanceof BracketNotationMemberAccessExpressionContext) { - const objExp = this.children[0]; - const keyExp = this.children[1]; - - // Ensure both required objects are present - if (!objExp || !keyExp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - objectLike: objExp, - propertyIndexOrKeyOrSlice: keyExp, - accessType: "bracket", - }; - - // Add internal reference to the program ctx for the index function, so it will be generated in the output code - // Note: Once objects are implemented, an if statement will be required to check if the object is an array or - // object-like, since for objects the 'get' function will be used instead of the 'index' function. - this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["index"]); - } else { - const sliceNotationAntlrCtx = this.getAntlrRuleChildren()[1] as SliceNotationContext; - const hasStart = sliceNotationAntlrCtx.sliceStart; - const hasEnd = sliceNotationAntlrCtx.sliceEnd; - - // Slice notation requires at least 1 child, which is the object expression - // Note: Both the start and end expression are optional - if one is not present, then the slice is open-ended - const objExp: Expression = this.children[0]; - const startExp: Expression | undefined = hasStart ? this.children[1] : undefined; - const endExp: Expression | undefined = hasEnd ? (hasStart ? this.children[2] : this.children[1]) : undefined; - - // Ensure the object expression is present - if (!objExp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - objectLike: objExp, - propertyIndexOrKeyOrSlice: { start: startExp, end: endExp }, - accessType: "slice", - }; - - // Add internal reference to the program ctx for the slice function, so it will be generated in the output code - this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["slice"]); - } - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Ensure the objectLike expression is indexable/accessible - // Note: This will throw an error if the objectLike expression is not indexable/accessible - const type = this.programCtx.typeCheck(this).getTypeOfMemberAccessExpression(this); - - this.typeSemantics = { - evaluatedType: type, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.memberAccessExpression; - readonly targetCodeGenerator = this.codeGenerator.memberAccessExpression; -} - -/** - * Function call class, which represents a function call expression in the Kipper language. - * @since 0.1.0 - * @example - * call print("Hello world!") - * // or - * print("Hello world!") - */ -export class FunctionCallExpression extends Expression< - FunctionCallExpressionSemantics, - FunctionCallPostfixTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: FunctionCallExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_functionCallExpression; - - constructor(antlrRuleCtx: FunctionCallExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it calls a function - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): FunctionCallExpressionContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the identifier of the function that is called - const identifierSemantics = this.children[0].getSemanticData(); - - // Ensure that the identifier is present - if (!identifierSemantics || !identifierSemantics.ref) { - throw new UnableToDetermineSemanticDataError(); - } - - // Every item from index 1 to the end is an argument (First child is the identifier). - // Tries to fetch the function. If it fails throw a {@link UnknownFunctionIdentifier} error. - const args: Array = this.children.length > 1 ? this.children.slice(1, this.children.length) : []; - - this.semanticData = { - identifier: identifierSemantics.identifier, - args: args, - callTarget: identifierSemantics.ref, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Ensure that the reference is a callable function - this.programCtx.typeCheck(this).refTargetCallable(semanticData.callTarget.refTarget); - const calledFunc = semanticData.callTarget.refTarget; - - // Ensure valid arguments are passed - this.programCtx.typeCheck(this).validFunctionCallArguments(calledFunc, semanticData.args); - - // Get the type that the function call will evaluate to - let evaluatedType: CheckedType; - if (calledFunc.returnType instanceof CheckedType) { - evaluatedType = calledFunc.returnType; - } else { - evaluatedType = CheckedType.fromCompilableType(calledFunc.returnType); - } - - // The evaluated type is always equal to the return of the function - this.typeSemantics = { - evaluatedType: evaluatedType, - func: calledFunc, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.functionCallExpression; - readonly targetCodeGenerator = this.codeGenerator.functionCallExpression; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link UnaryExpression} AST node. - * @since 0.10.0 - */ -export type ParserUnaryExpressionContext = - | IncrementOrDecrementUnaryExpressionContext - | OperatorModifiedUnaryExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link UnaryExpression} AST node. - * @since 0.10.0 - */ -export type ASTUnaryExpressionKind = - | typeof ParserASTMapping.RULE_incrementOrDecrementUnaryExpression - | typeof ParserASTMapping.RULE_operatorModifiedUnaryExpression; - -/** - * Abstract unary expression class representing a unary expression, which can be used to modify an expression with - * a specified operator. This abstract class only exists to provide the commonality between the different comparative - * expressions. - * @since 0.9.0 - */ -export abstract class UnaryExpression< - Semantics extends UnaryExpressionSemantics = UnaryExpressionSemantics, - TypeSemantics extends UnaryExpressionTypeSemantics = UnaryExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserUnaryExpressionContext; - public abstract readonly kind: ASTUnaryExpressionKind; -} - -/** - * Increment or decrement expression class, which represents a left-side -- or ++ expression modifying a numeric value. - * @since 0.1.0 - * @example - * ++49; // 49 will be incremented by 1 - * --11; // 11 will be decremented by 1 - */ -export class IncrementOrDecrementUnaryExpression extends UnaryExpression< - IncrementOrDecrementUnaryExpressionSemantics, - IncrementOrDecrementUnaryTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementUnaryExpression; - - constructor(antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it modifies the value of the operand - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const exp: Expression = this.children[0]; - const operator = this.sourceCode.slice(0, 2); // Before the expression - - // Ensure that the child expression is present - if (!exp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - operand: exp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - this.typeSemantics = { - // This will always be a number - evaluatedType: CheckedType.fromKipperType("num"), - }; - - // Ensure that this expression is valid (e.g. the operand is a number) - this.programCtx.typeCheck(this).validUnaryExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IncrementOrDecrementUnaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementUnaryExpression; - readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementUnaryExpression; -} - -/** - * Operator modified expressions, which are used to modify the value of an expression based on an - * {@link KipperUnaryOperator unary operator.} - * @since 0.1.0 - * @example - * -41 // -41 - * +59 // 59 - */ -export class OperatorModifiedUnaryExpression extends UnaryExpression< - OperatorModifiedUnaryExpressionSemantics, - OperatorModifiedUnaryTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: OperatorModifiedUnaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_operatorModifiedUnaryExpression; - - constructor(antlrRuleCtx: OperatorModifiedUnaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the operator - const unaryOperator = children.find((token) => { - return ( - token instanceof UnaryOperatorContext && - kipperUnaryModifierOperators.find((op) => op === token.text) !== undefined - ); - })?.text; - - // Get the expression of this unary expression - const exp: Expression = this.children[0]; - - // Ensure that the children are fully present and not undefined - if (!exp || !unaryOperator) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - operator: unaryOperator, - operand: exp, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType(semanticData.operator === "!" ? "bool" : "num"), - }; - - // Ensure the operator is compatible with the type of the operand - this.programCtx.typeCheck(this).validUnaryExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): OperatorModifiedUnaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.operatorModifiedUnaryExpression; - readonly targetCodeGenerator = this.codeGenerator.operatorModifiedUnaryExpression; -} - -/** - * Convert expressions, which are used to convert a value to a different type. - * - * For now only conversions are supported, but this will be extended to conversions and casts in the future. - * @since 0.1.0 - * @example - * "4" as num // 4 - * 39 as str // "39" - */ -export class CastOrConvertExpression extends Expression< - CastOrConvertExpressionSemantics, - CastOrConvertExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: CastOrConvertExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_castOrConvertExpression; - - constructor(antlrRuleCtx: CastOrConvertExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // The first child will always be the expression that will be converted - const exp: Expression = this.children[0]; - - // Get the type using the type specifier - const typeSpecifier = this.children[1]; - const type: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; - - // Ensure that the children are fully present and not undefined - if (!exp || !type) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - castTypeSpecifier: typeSpecifier, - castType: type, - exp: exp, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type specified by the type specifier - const evalType = semanticData.castTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - // The evaluated type of the expression is equal to the cast type - evaluatedType: evalType, - castType: evalType, - }; - - // Ensure the conversion is valid - this.programCtx.typeCheck(this).validConversion(semanticData.exp, evalType); - - // Add internal reference to the program ctx for the conversion function, so it will be generated in the output code - const internalIdentifier = getConversionFunctionIdentifier( - semanticData.exp.getTypeSemanticData().evaluatedType.identifier, - semanticData.castType.identifier, - ); - if (internalIdentifier in kipperInternalBuiltInFunctions) { - this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions[internalIdentifier]); - } - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): CastOrConvertExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.castOrConvertExpression; - readonly targetCodeGenerator = this.codeGenerator.castOrConvertExpression; -} - -/** - * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. - * - * Divisions, multiplications, and modulus are also considered to be multiplicative operations. - * @since 0.1.0 - * @example - * 16 * 6 // 96 - * 12 / 5 // 2.4 - * 96 % 15 // 6 - * 2 ** 8 // 256 - */ -export class MultiplicativeExpression extends Expression< - MultiplicativeExpressionSemantics, - MultiplicativeTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: MultiplicativeExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_multiplicativeExpression; - - constructor(antlrRuleCtx: MultiplicativeExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the operator - const operator = children.find((token) => { - return ( - token instanceof TerminalNode && kipperMultiplicativeOperators.find((op) => op === token.text) !== undefined - ); - })?.text; - - // Get the expressions of this multiplicative expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!operator || !leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Assert that the arithmetic expression is valid - this.programCtx - .typeCheck(this) - .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); - - // A multiplicative expression will always be of type 'num' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("num"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): MultiplicativeExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.multiplicativeExpression; - readonly targetCodeGenerator = this.codeGenerator.multiplicativeExpression; -} - -/** - * Additive expression, which can be used add together or concatenate two expressions. - * - * Subtraction is also considered to be an additive operation. - * @since 0.1.0 - * @example - * 4 + 4 // 8 - * 9 - 3 // 6 - */ -export class AdditiveExpression extends Expression { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: AdditiveExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_additiveExpression; - - constructor(antlrRuleCtx: AdditiveExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - const operator = children.find((token) => { - return token instanceof TerminalNode && kipperAdditiveOperators.find((op) => op === token.text) !== undefined; - })?.text; - - // Get the expressions of this additive expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!operator || !leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Assert that the arithmetic expression is valid - this.programCtx - .typeCheck(this) - .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); - - this.typeSemantics = { - // Simply use the left operand's type, since the type of the right operand is irrelevant (since they are always - // the same anyway - otherwise there would have already been an error) - evaluatedType: semanticData.leftOp.getTypeSemanticData().evaluatedType, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): AdditiveExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.additiveExpression; - readonly targetCodeGenerator = this.codeGenerator.additiveExpression; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ComparativeExpression} AST node. - * @since 0.10.0 - */ -export type ParserComparativeExpressionContext = EqualityExpressionContext | RelationalExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. - * @since 0.10.0 - */ -export type ASTComparativeExpressionKind = - | typeof ParserASTMapping.RULE_equalityExpression - | typeof ParserASTMapping.RULE_relationalExpression; - -/** - * Abstract comparative expression class representing a comparative expression, which can be used to compare two - * expressions. This abstract class only exists to provide the commonality between the different comparative expressions. - * @since 0.9.0 - */ -export abstract class ComparativeExpression< - Semantics extends ComparativeExpressionSemantics = ComparativeExpressionSemantics, - TypeSemantics extends ComparativeExpressionTypeSemantics = ComparativeExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserComparativeExpressionContext; - public abstract readonly kind: ASTComparativeExpressionKind; -} - -/** - * Relational expression, which can be used to compare two numeric expressions. - * @since 0.1.0 - * @example - * 19 > 11 // true - * 91 > 99 // false - * 12 >= 11 // true - * 77 >= 77 // true - * 36 >= 43 // false - * 19 < 36 // true - * 91 < 45 // false - * 12 <= 68 // true - * 77 <= 77 // true - * 36 <= 12 // false - */ -export class RelationalExpression extends ComparativeExpression< - RelationalExpressionSemantics, - RelationalExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: RelationalExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_relationalExpression; - - constructor(antlrRuleCtx: RelationalExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the expressions of this relational expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - const operator = children.find((token) => { - return token instanceof TerminalNode && kipperRelationalOperators.find((op) => op === token.text) !== undefined; - })?.text; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp || !operator) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Relational expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - - // Type check the relational expression and ensure its operands are of type 'num' - this.programCtx.typeCheck(this).validRelationalExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): RelationalExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.relationalExpression; - readonly targetCodeGenerator = this.codeGenerator.relationalExpression; -} - -/** - * Equality expression, which can be used to compare two expressions for equality. - * @since 0.1.0 - * @example - * 4 == 4 // true - * 9 == 3 // false - * 32 != 9 // true - * 59 != 59 // false - */ -export class EqualityExpression extends ComparativeExpression< - EqualityExpressionSemantics, - EqualityExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: EqualityExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_equalityExpression; - - constructor(antlrRuleCtx: EqualityExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the expressions of this relational expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - const operator = children.find((token) => { - return token instanceof TerminalNode && kipperEqualityOperators.find((op) => op === token.text) !== undefined; - })?.text; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp || !operator) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, // First expression - rightOp: rightOp, // Second expression - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Equality expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): EqualityExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.equalityExpression; - readonly targetCodeGenerator = this.codeGenerator.equalityExpression; -} - -/** - * Union type of all possible {@link ParserASTNode.kind} context classes for a constructable - * {@link LogicalExpression} AST node. - * @since 0.10.0 - */ -export type ParserLogicalExpressionContext = EqualityExpressionContext | RelationalExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link LogicalExpression} AST node. - * @since 0.10.0 - */ -export type ASTLogicalExpressionKind = - | typeof ParserASTMapping.RULE_logicalAndExpression - | typeof ParserASTMapping.RULE_logicalOrExpression; - -/** - * Logical expression, representing an expression which can be used to combine two expressions/conditions using - * {@link LogicalAndExpression logical AND} or {@link LogicalOrExpression logical OR}. This - * abstract class only exists to provide the commonality between the different logical expressions. - * @abstract - */ -export abstract class LogicalExpression< - Semantics extends LogicalExpressionSemantics = LogicalExpressionSemantics, - TypeSemantics extends LogicalExpressionTypeSemantics = LogicalExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserLogicalExpressionContext; - public abstract readonly kind: ASTLogicalExpressionKind; -} - -/** - * Logical-and expression, representing an expression which can be used to combine multiple conditions. It will - * evaluate to true if all conditions are true. - * @since 0.1.0 - * @example - * false && false // false - * true && false // false - * false && true // false - * true && true // true - */ -export class LogicalAndExpression extends LogicalExpression< - LogicalAndExpressionSemantics, - LogicalAndExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: LogicalAndExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_logicalAndExpression; - - constructor(antlrRuleCtx: LogicalAndExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the expressions of this logical-and expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, // First expression - rightOp: rightOp, // Second expression - operator: kipperLogicalAndOperator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Logical expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): LogicalAndExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.logicalAndExpression; - readonly targetCodeGenerator = this.codeGenerator.logicalAndExpression; -} - -/** - * Logical-or expression, representing an expression which can be used to combine multiple conditions. It returns true - * if at least one condition is true. - * @since 0.1.0 - * @example - * false || false // false - * true || false // true - * false || true // true - * true || true // true - */ -export class LogicalOrExpression extends LogicalExpression< - LogicalOrExpressionSemantics, - LogicalOrExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: LogicalOrExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_logicalOrExpression; - - constructor(antlrRuleCtx: LogicalOrExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the expressions of this logical-or expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, // First expression - rightOp: rightOp, // Second expression - operator: kipperLogicalOrOperator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Logical expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): LogicalOrExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.logicalOrExpression; - readonly targetCodeGenerator = this.codeGenerator.logicalOrExpression; -} - -/** - * Conditional expression, which evaluates a condition and evaluates the left expression if it is true, or the right - * expression if it is false. - * @since 0.1.0 - * @example - * true ? 3 : 4; // 3 - * false ? 3 : 4; // 4 - */ -export class ConditionalExpression extends Expression< - ConditionalExpressionSemantics, - ConditionalExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ConditionalExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_conditionalExpression; - - constructor(antlrRuleCtx: ConditionalExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ConditionalExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.conditionalExpression; - readonly targetCodeGenerator = this.codeGenerator.conditionalExpression; -} - -/** - * Assignment expression, which assigns an expression to a variable. This class only represents assigning a value to - * an existing variable, but not creating a new one. - * - * This expression will evaluate to the value that was assigned to the identifier. - * @since 0.1.0 - * @example - * x = 4 - * x += 5 - * x -= 12 - * x *= 2 - * x /= 5 - * x %= 55 - */ -export class AssignmentExpression extends Expression { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: AssignmentExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_assignmentExpression; - - constructor(antlrRuleCtx: AssignmentExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it modifies the value of the operand - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const antlrRuleChildren = this.getAntlrRuleChildren(); - - // There will always be only two children, which are the identifier and expression assigned. - const identifier: IdentifierPrimaryExpression = (() => { - const exp = this.children[0]; - - // Ensure that the left-hand side of the expression is an identifier - this.programCtx.semanticCheck(this).validAssignment(exp); - - return exp; - })(); - const assignValue: Expression = this.children[1]; - - // Throw an error if the children are incomplete or the operator can not be determined (antlrRuleChildren[1]) - if (!assignValue || !(antlrRuleChildren[1] instanceof KipperParserRuleContext)) { - throw new UnableToDetermineSemanticDataError(); - } - - const operator = getParseRuleSource(antlrRuleChildren[1]); - const identifierSemantics = identifier.getSemanticData(); - - // Semantics of the assignment - this.semanticData = { - value: assignValue, - identifierCtx: identifier, - identifier: identifierSemantics.identifier, - assignTarget: identifierSemantics.ref, - operator: operator, - }; - - // Ensure that the reference is defined and has a usable value if it's used with an arithmetic operator - if (kipperArithmeticAssignOperators.find((o) => o === operator)) { - this.programCtx.semanticCheck(identifier).refTargetDefined(identifierSemantics.ref.refTarget); - } - - // If the reference was a variable, indicate that the value was updated, since it's being assigned to - if (identifierSemantics.ref.refTarget instanceof ScopeVariableDeclaration) { - identifierSemantics.ref.refTarget.valueWasUpdated = true; - } - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // The evaluated type of an assignment expression is always the evaluated type assigned to the variable - this.typeSemantics = { - evaluatedType: semanticData.value.getTypeSemanticData().evaluatedType, - }; - - // Ensure the assignment is valid and the types match up - this.programCtx.typeCheck(this).validAssignment(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): AssignmentExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.assignmentExpression; - readonly targetCodeGenerator = this.codeGenerator.assignmentExpression; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts new file mode 100644 index 000000000..a804f14e1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts @@ -0,0 +1,125 @@ +/** + * Additive expression, which can be used add together or concatenate two expressions. + * + * Subtraction is also considered to be an additive operation. + * @since 0.1.0 + * @example + * 4 + 4 // 8 + * 9 - 3 // 6 + */ +import type { AdditiveExpressionSemantics } from "../../../semantic-data"; +import type { AdditiveExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { AdditiveExpressionContext, ParserASTMapping } from "../../../../parser"; +import { KipperAdditiveOperator, kipperAdditiveOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { ArithmeticExpression } from "./arithmetic-expression"; + +/** + * Additive expression, which can be used add together or concatenate two expressions. + * + * Subtraction is also considered to be an additive operation. + * @since 0.1.0 + * @example + * 4 + 4 // 8 + * 9 - 3 // 6 + */ +export class AdditiveExpression extends ArithmeticExpression< + AdditiveExpressionSemantics, + AdditiveExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: AdditiveExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_additiveExpression; + + constructor(antlrRuleCtx: AdditiveExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + const operator = children.find((token) => { + return token instanceof TerminalNode && kipperAdditiveOperators.find((op) => op === token.text) !== undefined; + })?.text; + + // Get the expressions of this additive expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!operator || !leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Assert that the arithmetic expression is valid + this.programCtx + .typeCheck(this) + .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); + + this.typeSemantics = { + // Simply use the left operand's type, since the type of the right operand is irrelevant (since they are always + // the same anyway - otherwise there would have already been an error) + evaluatedType: semanticData.leftOp.getTypeSemanticData().evaluatedType, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): AdditiveExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.additiveExpression; + readonly targetCodeGenerator = this.codeGenerator.additiveExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts new file mode 100644 index 000000000..b5b388d32 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts @@ -0,0 +1,32 @@ +import type { ArithmeticExpressionSemantics } from "../../../semantic-data"; +import type { ArithmeticExpressionTypeSemantics } from "../../../type-data"; +import type { AdditiveExpressionContext, MultiplicativeExpressionContext, ParserASTMapping } from "../../../../parser"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ParserArithmeticExpressionContext = AdditiveExpressionContext | MultiplicativeExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ASTArithmeticExpressionKind = + | typeof ParserASTMapping.RULE_additiveExpression + | typeof ParserASTMapping.RULE_multiplicativeExpression; + +/** + * Abstract arithmetic expression class representing an arithmetic expression, which can be used to perform calculations + * based on two expressions. This abstract class only exists to provide the commonality between the different + * comparative expressions. + * @since 0.9.0 + */ +export abstract class ArithmeticExpression< + Semantics extends ArithmeticExpressionSemantics = ArithmeticExpressionSemantics, + TypeSemantics extends ArithmeticExpressionTypeSemantics = ArithmeticExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserArithmeticExpressionContext; + public abstract readonly kind: ASTArithmeticExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts new file mode 100644 index 000000000..c5aeffb12 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts @@ -0,0 +1,7 @@ +/** + * Arithmetic expression module containing the classes representing expressions, which can be used to perform + * calculations based on two expressions. + * @since 0.11.0 + */ +export * from "./additive-expression"; +export * from "./multiplicative-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts new file mode 100644 index 000000000..26d8908d6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts @@ -0,0 +1,132 @@ +/** + * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. + * + * Divisions, multiplications, and modulus are also considered to be multiplicative operations. + * @since 0.1.0 + * @example + * 16 * 6 // 96 + * 12 / 5 // 2.4 + * 96 % 15 // 6 + * 2 ** 8 // 256 + */ +import type { MultiplicativeExpressionSemantics } from "../../../semantic-data"; +import type { MultiplicativeTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { MultiplicativeExpressionContext, ParserASTMapping } from "../../../../parser"; +import { KipperMultiplicativeOperator, kipperMultiplicativeOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; +import { ArithmeticExpression } from "./arithmetic-expression"; + +/** + * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. + * + * Divisions, multiplications, and modulus are also considered to be multiplicative operations. + * @since 0.1.0 + * @example + * 16 * 6 // 96 + * 12 / 5 // 2.4 + * 96 % 15 // 6 + * 2 ** 8 // 256 + */ +export class MultiplicativeExpression extends ArithmeticExpression< + MultiplicativeExpressionSemantics, + MultiplicativeTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: MultiplicativeExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_multiplicativeExpression; + + constructor(antlrRuleCtx: MultiplicativeExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the operator + const operator = children.find((token) => { + return ( + token instanceof TerminalNode && kipperMultiplicativeOperators.find((op) => op === token.text) !== undefined + ); + })?.text; + + // Get the expressions of this multiplicative expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!operator || !leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Assert that the arithmetic expression is valid + this.programCtx + .typeCheck(this) + .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); + + // A multiplicative expression will always be of type 'num' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): MultiplicativeExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.multiplicativeExpression; + readonly targetCodeGenerator = this.codeGenerator.multiplicativeExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts new file mode 100644 index 000000000..61e19b280 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts @@ -0,0 +1,152 @@ +/** + * Assignment expression, which assigns an expression to a variable. This class only represents assigning a value to + * an existing variable, but not creating a new one. + * + * This expression will evaluate to the value that was assigned to the identifier. + * @since 0.1.0 + * @example + * x = 4 + * x += 5 + * x -= 12 + * x *= 2 + * x /= 5 + * x %= 55 + */ +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { AssignmentExpressionSemantics } from "../../semantic-data"; +import type { AssignmentExpressionTypeSemantics } from "../../type-data"; +import { AssignmentExpressionContext, KipperParserRuleContext, ParserASTMapping } from "../../../parser"; +import { Expression } from "./expression"; +import { IdentifierPrimaryExpression } from "./primary"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import { kipperArithmeticAssignOperators, KipperAssignOperator } from "../../../const"; +import { getParseRuleSource } from "../../../../utils"; +import { ScopeVariableDeclaration } from "../../../analysis"; + +/** + * Assignment expression, which assigns an expression to a variable. This class only represents assigning a value to + * an existing variable, but not creating a new one. + * + * This expression will evaluate to the value that was assigned to the identifier. + * @since 0.1.0 + * @example + * x = 4 + * x += 5 + * x -= 12 + * x *= 2 + * x /= 5 + * x %= 55 + */ +export class AssignmentExpression extends Expression { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: AssignmentExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_assignmentExpression; + + constructor(antlrRuleCtx: AssignmentExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it modifies the value of the operand + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const antlrRuleChildren = this.getAntlrRuleChildren(); + + // There will always be only two children, which are the identifier and expression assigned. + const identifier: IdentifierPrimaryExpression = (() => { + const exp = this.children[0]; + + // Ensure that the left-hand side of the expression is an identifier + this.programCtx.semanticCheck(this).validAssignment(exp); + + return exp; + })(); + const assignValue: Expression = this.children[1]; + + // Throw an error if the children are incomplete or the operator can not be determined (antlrRuleChildren[1]) + if (!assignValue || !(antlrRuleChildren[1] instanceof KipperParserRuleContext)) { + throw new UnableToDetermineSemanticDataError(); + } + + const operator = getParseRuleSource(antlrRuleChildren[1]); + const identifierSemantics = identifier.getSemanticData(); + + // Semantics of the assignment + this.semanticData = { + value: assignValue, + identifierCtx: identifier, + identifier: identifierSemantics.identifier, + assignTarget: identifierSemantics.ref, + operator: operator, + }; + + // Ensure that the reference is defined and has a usable value if it's used with an arithmetic operator + if (kipperArithmeticAssignOperators.find((o) => o === operator)) { + this.programCtx.semanticCheck(identifier).refTargetDefined(identifierSemantics.ref.refTarget); + } + + // If the reference was a variable, indicate that the value was updated, since it's being assigned to + if (identifierSemantics.ref.refTarget instanceof ScopeVariableDeclaration) { + identifierSemantics.ref.refTarget.valueWasUpdated = true; + } + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // The evaluated type of an assignment expression is always the evaluated type assigned to the variable + this.typeSemantics = { + evaluatedType: semanticData.value.getTypeSemanticData().evaluatedType, + }; + + // Ensure the assignment is valid and the types match up + this.programCtx.typeCheck(this).validAssignment(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): AssignmentExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.assignmentExpression; + readonly targetCodeGenerator = this.codeGenerator.assignmentExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts new file mode 100644 index 000000000..24ab5bced --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts @@ -0,0 +1,131 @@ +/** + * Convert expressions, which are used to convert a value to a different type. + * + * For now only conversions are supported, but this will be extended to conversions and casts in the future. + * @since 0.1.0 + * @example + * "4" as num // 4 + * 39 as str // "39" + */ +import type { CastOrConvertExpressionSemantics } from "../../semantic-data"; +import type { CastOrConvertExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { IdentifierTypeSpecifierExpression } from "./type-specifier"; +import { Expression } from "./expression"; +import { CastOrConvertExpressionContext, ParserASTMapping } from "../../../parser"; +import { UncheckedType } from "../../../analysis"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import { getConversionFunctionIdentifier } from "../../../../utils"; +import { kipperInternalBuiltInFunctions } from "../../../runtime-built-ins"; + +/** + * Convert expressions, which are used to convert a value to a different type. + * + * For now only conversions are supported, but this will be extended to conversions and casts in the future. + * @since 0.1.0 + * @example + * "4" as num // 4 + * 39 as str // "39" + */ +export class CastOrConvertExpression extends Expression< + CastOrConvertExpressionSemantics, + CastOrConvertExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: CastOrConvertExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_castOrConvertExpression; + + constructor(antlrRuleCtx: CastOrConvertExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // The first child will always be the expression that will be converted + const exp: Expression = this.children[0]; + + // Get the type using the type specifier + const typeSpecifier = this.children[1]; + const type: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; + + // Ensure that the children are fully present and not undefined + if (!exp || !type) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + castTypeSpecifier: typeSpecifier, + castType: type, + exp: exp, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type specified by the type specifier + const evalType = semanticData.castTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + // The evaluated type of the expression is equal to the cast type + evaluatedType: evalType, + castType: evalType, + }; + + // Ensure the conversion is valid + this.programCtx.typeCheck(this).validConversion(semanticData.exp, evalType); + + // Add internal reference to the program ctx for the conversion function, so it will be generated in the output code + const internalIdentifier = getConversionFunctionIdentifier( + semanticData.exp.getTypeSemanticData().evaluatedType.identifier, + semanticData.castType.identifier, + ); + if (internalIdentifier in kipperInternalBuiltInFunctions) { + this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions[internalIdentifier]); + } + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): CastOrConvertExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.castOrConvertExpression; + readonly targetCodeGenerator = this.codeGenerator.castOrConvertExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts new file mode 100644 index 000000000..41abadf5a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts @@ -0,0 +1,36 @@ +/** + * Abstract comparative expression class representing a comparative expression, which can be used to compare two + * expressions. This abstract class only exists to provide the commonality between the different comparative expressions. + * @since 0.9.0 + */ +import type { EqualityExpressionContext, ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import type { ComparativeExpressionSemantics } from "../../../semantic-data"; +import type { ComparativeExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ParserComparativeExpressionContext = EqualityExpressionContext | RelationalExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ASTComparativeExpressionKind = + | typeof ParserASTMapping.RULE_equalityExpression + | typeof ParserASTMapping.RULE_relationalExpression; + +/** + * Abstract comparative expression class representing a comparative expression, which can be used to compare two + * expressions. This abstract class only exists to provide the commonality between the different comparative expressions. + * @since 0.9.0 + */ +export abstract class ComparativeExpression< + Semantics extends ComparativeExpressionSemantics = ComparativeExpressionSemantics, + TypeSemantics extends ComparativeExpressionTypeSemantics = ComparativeExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserComparativeExpressionContext; + public abstract readonly kind: ASTComparativeExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts new file mode 100644 index 000000000..8a008d5c6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts @@ -0,0 +1,117 @@ +/** + * Equality expression, which can be used to compare two expressions for equality. + * @since 0.1.0 + * @example + * 4 == 4 // true + * 9 == 3 // false + * 32 != 9 // true + * 59 != 59 // false + */ +import type { EqualityExpressionSemantics } from "../../../semantic-data"; +import type { EqualityExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { ComparativeExpression } from "./comparative-expression"; +import { CheckedType } from "../../../../analysis"; +import { EqualityExpressionContext, ParserASTMapping } from "../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { KipperEqualityOperator, kipperEqualityOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { CompilableASTNode } from "../../../compilable-ast-node"; + +/** + * Equality expression, which can be used to compare two expressions for equality. + * @since 0.1.0 + * @example + * 4 == 4 // true + * 9 == 3 // false + * 32 != 9 // true + * 59 != 59 // false + */ +export class EqualityExpression extends ComparativeExpression< + EqualityExpressionSemantics, + EqualityExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: EqualityExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_equalityExpression; + + constructor(antlrRuleCtx: EqualityExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the expressions of this relational expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + const operator = children.find((token) => { + return token instanceof TerminalNode && kipperEqualityOperators.find((op) => op === token.text) !== undefined; + })?.text; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp || !operator) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, // First expression + rightOp: rightOp, // Second expression + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Equality expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): EqualityExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.equalityExpression; + readonly targetCodeGenerator = this.codeGenerator.equalityExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts new file mode 100644 index 000000000..e36344d23 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts @@ -0,0 +1,8 @@ +/** + * Comparative expression module containing the classes representing expressions, which can be used to compare two + * expressions. + * @since 0.11.0 + */ +export * from "./comparative-expression"; +export * from "./equality-expression"; +export * from "./relational-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts new file mode 100644 index 000000000..4e73dc56c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts @@ -0,0 +1,132 @@ +/** + * Relational expression, which can be used to compare two numeric expressions. + * @since 0.1.0 + * @example + * 19 > 11 // true + * 91 > 99 // false + * 12 >= 11 // true + * 77 >= 77 // true + * 36 >= 43 // false + * 19 < 36 // true + * 91 < 45 // false + * 12 <= 68 // true + * 77 <= 77 // true + * 36 <= 12 // false + */ +import type { RelationalExpressionSemantics } from "../../../semantic-data"; +import type { RelationalExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { ComparativeExpression } from "./comparative-expression"; +import { ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { KipperRelationalOperator, kipperRelationalOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Relational expression, which can be used to compare two numeric expressions. + * @since 0.1.0 + * @example + * 19 > 11 // true + * 91 > 99 // false + * 12 >= 11 // true + * 77 >= 77 // true + * 36 >= 43 // false + * 19 < 36 // true + * 91 < 45 // false + * 12 <= 68 // true + * 77 <= 77 // true + * 36 <= 12 // false + */ +export class RelationalExpression extends ComparativeExpression< + RelationalExpressionSemantics, + RelationalExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: RelationalExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_relationalExpression; + + constructor(antlrRuleCtx: RelationalExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the expressions of this relational expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + const operator = children.find((token) => { + return token instanceof TerminalNode && kipperRelationalOperators.find((op) => op === token.text) !== undefined; + })?.text; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp || !operator) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Relational expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + + // Type check the relational expression and ensure its operands are of type 'num' + this.programCtx.typeCheck(this).validRelationalExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): RelationalExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.relationalExpression; + readonly targetCodeGenerator = this.codeGenerator.relationalExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts new file mode 100644 index 000000000..3da0d73bd --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts @@ -0,0 +1,93 @@ +/** + * Conditional expression, which evaluates a condition and evaluates the left expression if it is true, or the right + * expression if it is false. + * @since 0.1.0 + * @example + * true ? 3 : 4; // 3 + * false ? 3 : 4; // 4 + */ +import type { ConditionalExpressionSemantics } from "../../semantic-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { ConditionalExpressionTypeSemantics } from "../../type-data"; +import { Expression } from "./expression"; +import { ConditionalExpressionContext, ParserASTMapping } from "../../../parser"; +import { KipperNotImplementedError } from "../../../../errors"; + +/** + * Conditional expression, which evaluates a condition and evaluates the left expression if it is true, or the right + * expression if it is false. + * @since 0.1.0 + * @example + * true ? 3 : 4; // 3 + * false ? 3 : 4; // 4 + */ +export class ConditionalExpression extends Expression< + ConditionalExpressionSemantics, + ConditionalExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ConditionalExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_conditionalExpression; + + constructor(antlrRuleCtx: ConditionalExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ConditionalExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.conditionalExpression; + readonly targetCodeGenerator = this.codeGenerator.conditionalExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts new file mode 100644 index 000000000..6299d074d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts @@ -0,0 +1,177 @@ +/** + * The base abstract AST node class for all expressions, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link ExpressionASTNodeFactory} class. + * @since 0.1.0 + */ +import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; +import type { ExpressionSemantics } from "../../semantic-data"; +import type { ExpressionTypeSemantics } from "../../type-data"; +import { TranslatedExpression } from "../../../const"; +import { MissingRequiredSemanticDataError } from "../../../../errors"; +import { CompilableASTNode } from "../../compilable-ast-node"; +import { ASTExpressionKind, ParserExpressionContext } from "../../ast-types"; + +/** + * The base abstract AST node class for all expressions, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link ExpressionASTNodeFactory} class. + * @since 0.1.0 + */ +export abstract class Expression< + Semantics extends ExpressionSemantics = ExpressionSemantics, + TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, +> extends CompilableASTNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParserExpressionContext; + + protected override _children: Array; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public abstract readonly kind: ASTExpressionKind; + + protected constructor(antlrRuleCtx: ParserExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + + // Manually add the child to the parent + parent.addNewChild(this); + } + + public get children(): Array { + return this._children; + } + + public addNewChild(newChild: Expression) { + this._children.push(newChild); + } + + /** + * Returns whether this expression has any side effects. This means that the expression will change the state of the + * program in some way and not only return a value. + * + * This specifically can mean it assigns or modifies a variable, calls a function, or throws an error. + * @since 0.10.0 + */ + public hasSideEffects(): boolean { + return false; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public abstract checkForWarnings?(): Promise; + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ParserExpressionContext { + return this._antlrRuleCtx; + } + + /** + * Semantically analyses the code inside this AST node and all {@link this.children children nodes}. + * + * This function will recursively call itself on the {@link this.children} instances and analyse the deepest children + * nodes first, working up as the tokens get more complex. This way the parent tokens can access the semantics of + * the children and properly process itself. + * + * This function will set the {@link this.semanticData} property and allow the use of {@link this.getSemanticData}, + * without getting any error. + * @since 0.8.0 + */ + public override async semanticAnalysis(): Promise { + // Start with the evaluation of the children + await this.semanticallyAnalyseChildren(); + + // If the semantic analysis until now hasn't failed, do the semantic analysis of this node (if defined) + // Note: The specific AST node will have to handle errors in their children and ensure for analysis all required + // data is present. + // This overwrites the default behaviour of every node handling the errors in the children + if (!this.hasFailed && this.primarySemanticAnalysis !== undefined) { + try { + await this.primarySemanticAnalysis(); + } catch (e) { + if (e instanceof MissingRequiredSemanticDataError) { + this._skippedSemanticAnalysis = true; + } + this.handleSemanticError(e); + } + } + } + + /** + * Performs type checking on this AST node and all {@link this.children children nodes}. This uses the + * {@link this.semanticData semantic data} that was evaluated during {@link this.semanticAnalysis semantic analysis}. + * @since 0.10.0 + */ + public override async semanticTypeChecking(): Promise { + // Start with the evaluation of the children + await this.semanticallyTypeCheckChildren(); + + // If the semantic analysis until now hasn't failed, do the semantic type checking of this node (if defined) + // This overwrites the default behaviour of every node handling the errors in the children + if (!this.hasFailed && !this.skippedSemanticAnalysis && this.primarySemanticTypeChecking !== undefined) { + try { + await this.primarySemanticTypeChecking(); + } catch (e) { + if (e instanceof MissingRequiredSemanticDataError) { + this._skippedSemanticAnalysis = true; + } + this.handleSemanticError(e); + } + } + } + + /** + * Wrap-up semantic analysis, which analyses this AST node and all {@link this.children children nodes}, and + * checks whether they are semantically valid for the {@link this.target target language}. This uses the + * {@link this.semanticData semantic data} and {@link this.typeData type data} that was evaluated during the previous + * {@link this.semanticAnalysis semantic analysis} and {@link this.semanticTypeChecking type checking} steps. + * @since 0.10.0 + */ + public override async wrapUpSemanticAnalysis(): Promise { + // Start with the evaluation of the children + await this.targetSemanticallyAnalyseChildren(); + + // If the semantic analysis until now hasn't failed, do the target semantic analysis of this node (if defined) + // This overwrites the default behaviour of every node handling the errors in the children + if (!this.hasFailed && !this.skippedSemanticTypeChecking && this.targetSemanticAnalysis !== undefined) { + try { + await this.targetSemanticAnalysis(this); + } catch (e) { + if (e instanceof MissingRequiredSemanticDataError) { + this._skippedSemanticAnalysis = true; + } + this.handleSemanticError(e); + } + } + } + + /** + * Generates the typescript code for this item, and all children (if they exist). + * + * Every item in the array represents a token of the expression. + */ + public override async translateCtxAndChildren(): Promise { + return await this.targetCodeGenerator(this); + } + + public abstract targetCodeGenerator: TargetASTNodeCodeGenerator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts new file mode 100644 index 000000000..31e65b49c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts @@ -0,0 +1,132 @@ +import type { FunctionCallExpressionSemantics, IdentifierPrimaryExpressionSemantics } from "../../semantic-data"; +/** + * Function call class, which represents a function call expression in the Kipper language. + * @since 0.1.0 + * @example + * call print("Hello world!") + * // or + * print("Hello world!") + */ +import type { FunctionCallExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { KipperReferenceableFunction } from "../../../const"; +import { Expression } from "./expression"; +import { FunctionCallExpressionContext, ParserASTMapping } from "../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import { CheckedType } from "../../../analysis"; + +/** + * Function call class, which represents a function call expression in the Kipper language. + * @since 0.1.0 + * @example + * call print("Hello world!") + * // or + * print("Hello world!") + */ +export class FunctionCallExpression extends Expression< + FunctionCallExpressionSemantics, + FunctionCallExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: FunctionCallExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_functionCallExpression; + + constructor(antlrRuleCtx: FunctionCallExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it calls a function + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): FunctionCallExpressionContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the identifier of the function that is called + const identifierSemantics = this.children[0].getSemanticData(); + + // Ensure that the identifier is present + if (!identifierSemantics || !identifierSemantics.ref) { + throw new UnableToDetermineSemanticDataError(); + } + + // Every item from index 1 to the end is an argument (First child is the identifier). + // Tries to fetch the function. If it fails throw a {@link UnknownFunctionIdentifier} error. + const args: Array = this.children.length > 1 ? this.children.slice(1, this.children.length) : []; + + this.semanticData = { + identifier: identifierSemantics.identifier, + args: args, + callTarget: identifierSemantics.ref, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Ensure that the reference is a callable function + this.programCtx.typeCheck(this).refTargetCallable(semanticData.callTarget.refTarget); + const calledFunc = semanticData.callTarget.refTarget; + + // Ensure valid arguments are passed + this.programCtx.typeCheck(this).validFunctionCallArguments(calledFunc, semanticData.args); + + // Get the type that the function call will evaluate to + let evaluatedType: CheckedType; + if (calledFunc.returnType instanceof CheckedType) { + evaluatedType = calledFunc.returnType; + } else { + evaluatedType = CheckedType.fromCompilableType(calledFunc.returnType); + } + + // The evaluated type is always equal to the return of the function + this.typeSemantics = { + evaluatedType: evaluatedType, + func: calledFunc, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.functionCallExpression; + readonly targetCodeGenerator = this.codeGenerator.functionCallExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/index.ts new file mode 100644 index 000000000..7eedf43f6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/index.ts @@ -0,0 +1,19 @@ +/** + * Expression module containing the classes representing language expressions, which are the fundamental building blocks + * of the language. + * @since 0.11.0 + */ +export * from "./expression"; +export * from "./arithmetic/"; +export * from "./comparative/"; +export * from "./logical/"; +export * from "./postfix/"; +export * from "./primary/"; +export * from "./type-specifier/"; +export * from "./unary/"; +export * from "./assignment-expression"; +export * from "./cast-or-convert-expression"; +export * from "./conditional-expression"; +export * from "./function-call-expression"; +export * from "./member-access-expression"; +export * from "./tangled-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts new file mode 100644 index 000000000..f1d70947f --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts @@ -0,0 +1,8 @@ +/** + * Logical expression module containing the classes representing expressions, which can be used to perform specific + * logical operations on two expressions (operands). + * @since 0.11.0 + */ +export * from "./logical-expression"; +export * from "./logical-and-expression"; +export * from "./logical-or-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts new file mode 100644 index 000000000..794747071 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts @@ -0,0 +1,111 @@ +/** + * Logical-and expression, representing an expression which can be used to combine multiple conditions. It will + * evaluate to true if all conditions are true. + * @since 0.1.0 + * @example + * false && false // false + * true && false // false + * false && true // false + * true && true // true + */ +import type { LogicalAndExpressionSemantics } from "../../../semantic-data"; +import type { LogicalAndExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { LogicalExpression } from "./logical-expression"; +import { LogicalAndExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Logical-and expression, representing an expression which can be used to combine multiple conditions. It will + * evaluate to true if all conditions are true. + * @since 0.1.0 + * @example + * false && false // false + * true && false // false + * false && true // false + * true && true // true + */ +export class LogicalAndExpression extends LogicalExpression< + LogicalAndExpressionSemantics, + LogicalAndExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: LogicalAndExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_logicalAndExpression; + + constructor(antlrRuleCtx: LogicalAndExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the expressions of this logical-and expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, // First expression + rightOp: rightOp, // Second expression + operator: "&&", // Logical-and operator + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Logical expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): LogicalAndExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.logicalAndExpression; + readonly targetCodeGenerator = this.codeGenerator.logicalAndExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts new file mode 100644 index 000000000..9acb8dbb6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts @@ -0,0 +1,39 @@ +/** + * Logical expression, representing an expression which can be used to combine two expressions/conditions using + * {@link LogicalAndExpression logical AND} or {@link LogicalOrExpression logical OR}. This + * abstract class only exists to provide the commonality between the different logical expressions. + * @abstract + */ +import type { EqualityExpressionContext, ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import type { LogicalExpressionSemantics } from "../../../semantic-data"; +import type { LogicalExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode.kind} context classes for a constructable + * {@link LogicalExpression} AST node. + * @since 0.10.0 + */ +export type ParserLogicalExpressionContext = EqualityExpressionContext | RelationalExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link LogicalExpression} AST node. + * @since 0.10.0 + */ +export type ASTLogicalExpressionKind = + | typeof ParserASTMapping.RULE_logicalAndExpression + | typeof ParserASTMapping.RULE_logicalOrExpression; + +/** + * Logical expression, representing an expression which can be used to combine two expressions/conditions using + * {@link LogicalAndExpression logical AND} or {@link LogicalOrExpression logical OR}. This + * abstract class only exists to provide the commonality between the different logical expressions. + * @abstract + */ +export abstract class LogicalExpression< + Semantics extends LogicalExpressionSemantics = LogicalExpressionSemantics, + TypeSemantics extends LogicalExpressionTypeSemantics = LogicalExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserLogicalExpressionContext; + public abstract readonly kind: ASTLogicalExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts new file mode 100644 index 000000000..1916dfce4 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts @@ -0,0 +1,112 @@ +/** + * Logical-or expression, representing an expression which can be used to combine multiple conditions. It returns true + * if at least one condition is true. + * @since 0.1.0 + * @example + * false || false // false + * true || false // true + * false || true // true + * true || true // true + */ +import type { LogicalOrExpressionSemantics } from "../../../semantic-data"; +import type { LogicalOrExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { LogicalExpression } from "./logical-expression"; +import { LogicalOrExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { kipperLogicalOrOperator } from "../../../../const"; +import { CheckedType } from "../../../../analysis"; + +/** + * Logical-or expression, representing an expression which can be used to combine multiple conditions. It returns true + * if at least one condition is true. + * @since 0.1.0 + * @example + * false || false // false + * true || false // true + * false || true // true + * true || true // true + */ +export class LogicalOrExpression extends LogicalExpression< + LogicalOrExpressionSemantics, + LogicalOrExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: LogicalOrExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_logicalOrExpression; + + constructor(antlrRuleCtx: LogicalOrExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the expressions of this logical-or expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, // First expression + rightOp: rightOp, // Second expression + operator: kipperLogicalOrOperator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Logical expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): LogicalOrExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.logicalOrExpression; + readonly targetCodeGenerator = this.codeGenerator.logicalOrExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts new file mode 100644 index 000000000..267e137d5 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts @@ -0,0 +1,152 @@ +/** + * Member access expression, which represents a member access expression that evaluates to a value of a member of an + * object or array. + * @since 0.10.0 + */ +import type { SliceNotationContext, SliceNotationMemberAccessExpressionContext } from "../../../parser"; +import type { MemberAccessExpressionSemantics } from "../../semantic-data"; +import type { MemberAccessExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import { + BracketNotationMemberAccessExpressionContext, + DotNotationMemberAccessExpressionContext, + ParserASTMapping, +} from "../../../parser"; +import { Expression } from "./expression"; +import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../errors"; +import { kipperInternalBuiltInFunctions } from "../../../runtime-built-ins"; + +/** + * A union of all possible {@link KipperParserRuleContext} rule contexts that {@link MemberAccessExpression} implements. + * @since 0.10.0 + */ +export type MemberAccessExpressionContext = + | DotNotationMemberAccessExpressionContext + | BracketNotationMemberAccessExpressionContext + | SliceNotationMemberAccessExpressionContext; + +/** + * Member access expression, which represents a member access expression that evaluates to a value of a member of an + * object or array. + * @since 0.10.0 + */ +export class MemberAccessExpression extends Expression< + MemberAccessExpressionSemantics, + MemberAccessExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: MemberAccessExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_memberAccessExpression; + + constructor(antlrRuleCtx: MemberAccessExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): MemberAccessExpressionContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Handle the different types of member access expressions + if (this.antlrRuleCtx instanceof DotNotationMemberAccessExpressionContext) { + throw this.programCtx + .semanticCheck(this) + .notImplementedError( + new KipperNotImplementedError("Member access expressions using dot notation are not yet implemented"), + ); + } else if (this.antlrRuleCtx instanceof BracketNotationMemberAccessExpressionContext) { + const objExp = this.children[0]; + const keyExp = this.children[1]; + + // Ensure both required objects are present + if (!objExp || !keyExp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + objectLike: objExp, + propertyIndexOrKeyOrSlice: keyExp, + accessType: "bracket", + }; + + // Add internal reference to the program ctx for the index function, so it will be generated in the output code + // Note: Once objects are implemented, an if statement will be required to check if the object is an array or + // object-like, since for objects the 'get' function will be used instead of the 'index' function. + this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["index"]); + } else { + const sliceNotationAntlrCtx = this.getAntlrRuleChildren()[1] as SliceNotationContext; + const hasStart = sliceNotationAntlrCtx.sliceStart; + const hasEnd = sliceNotationAntlrCtx.sliceEnd; + + // Slice notation requires at least 1 child, which is the object expression + // Note: Both the start and end expression are optional - if one is not present, then the slice is open-ended + const objExp: Expression = this.children[0]; + const startExp: Expression | undefined = hasStart ? this.children[1] : undefined; + const endExp: Expression | undefined = hasEnd ? (hasStart ? this.children[2] : this.children[1]) : undefined; + + // Ensure the object expression is present + if (!objExp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + objectLike: objExp, + propertyIndexOrKeyOrSlice: { start: startExp, end: endExp }, + accessType: "slice", + }; + + // Add internal reference to the program ctx for the slice function, so it will be generated in the output code + this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["slice"]); + } + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Ensure the objectLike expression is indexable/accessible + // Note: This will throw an error if the objectLike expression is not indexable/accessible + const type = this.programCtx.typeCheck(this).getTypeOfMemberAccessExpression(this); + + this.typeSemantics = { + evaluatedType: type, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.memberAccessExpression; + readonly targetCodeGenerator = this.codeGenerator.memberAccessExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts new file mode 100644 index 000000000..4f4da2bc8 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts @@ -0,0 +1,110 @@ +import type { IncrementOrDecrementPostfixExpressionSemantics } from "../../../semantic-data"; +/** + * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * 49++; // 49 will be incremented by 1 + * 11--; // 11 will be decremented by 1 + */ +import type { IncrementOrDecrementPostfixExpressionTypeSemantics } from "../../../type-data"; +import type { KipperIncrementOrDecrementOperator } from "../../../../const"; +import { Expression } from "../expression"; +import { IncrementOrDecrementPostfixExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * 49++; // 49 will be incremented by 1 + * 11--; // 11 will be decremented by 1 + */ +export class IncrementOrDecrementPostfixExpression extends Expression< + IncrementOrDecrementPostfixExpressionSemantics, + IncrementOrDecrementPostfixExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementPostfixExpression; + + constructor(antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it modifies the value of the operand + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const exp: Expression = this.children[0]; + const operator = this.sourceCode.slice(-2); // After the expression + + // Ensure that the child expression is present + if (!exp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + operand: exp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + // This will always be a number + evaluatedType: CheckedType.fromKipperType("num"), + }; + + // Ensure that this expression is valid (e.g. the operand is a number) + this.programCtx.typeCheck(this).validUnaryExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IncrementOrDecrementPostfixExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementPostfixExpression; + readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementPostfixExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts new file mode 100644 index 000000000..e6b736a55 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts @@ -0,0 +1,6 @@ +/** + * Postfix expression module containing the classes representing expressions, which can be used to perform specific + * postfix operations using a specific operator. + * @since 0.11.0 + */ +export * from "./increment-or-decrement-postfix-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts new file mode 100644 index 000000000..5368b24f0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts @@ -0,0 +1,86 @@ +/** + * List constant expression, which represents a list constant that was defined in the source code. + * @since 0.1.0 + */ +import type { ArrayLiteralPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { ArrayLiteralPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ConstantExpression } from "./constant-expression"; +import { ArrayLiteralPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * List constant expression, which represents a list constant that was defined in the source code. + * @since 0.1.0 + */ +export class ArrayLiteralPrimaryExpression extends ConstantExpression< + ArrayLiteralPrimaryExpressionSemantics, + ArrayLiteralPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ArrayLiteralPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_arrayLiteralPrimaryExpression; + + constructor(antlrRuleCtx: ArrayLiteralPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + value: [], // TODO! Implement list data fetching. + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'list' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("list"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ArrayLiteralPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.listPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.arrayLiteralExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts new file mode 100644 index 000000000..d1cb1d2f1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts @@ -0,0 +1,87 @@ +/** + * Boolean constant expression representing the built-in constants {@link true} and {@link false}. + * @since 0.8.0 + */ +import type { BoolPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { BoolPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { KipperBoolTypeLiterals } from "../../../../../const"; +import { ConstantExpression } from "./constant-expression"; +import { BoolPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * Boolean constant expression representing the built-in constants {@link true} and {@link false}. + * @since 0.8.0 + */ +export class BoolPrimaryExpression extends ConstantExpression< + BoolPrimaryExpressionSemantics, + BoolPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: BoolPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_boolPrimaryExpression; + + constructor(antlrRuleCtx: BoolPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + value: this.sourceCode, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): BoolPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.boolPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.boolPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts new file mode 100644 index 000000000..ec2a921a0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts @@ -0,0 +1,51 @@ +/** + * Abstract constant expression class representing a constant expression, which was defined in the source code. This + * abstract class only exists to provide the commonality between the different constant expressions. + * @since 0.10.0 + */ +import type { ConstantExpressionSemantics } from "../../../../semantic-data"; +import type { ExpressionTypeSemantics } from "../../../../type-data"; +import type { + ArrayLiteralPrimaryExpressionContext, + BoolPrimaryExpressionContext, + NumberPrimaryExpressionContext, + ParserASTMapping, + StringPrimaryExpressionContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, +} from "../../../../../parser"; +import { Expression } from "../../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. + * @since 0.10.0 + */ +export type ParserConstantExpressionContext = + | NumberPrimaryExpressionContext + | StringPrimaryExpressionContext + | BoolPrimaryExpressionContext + | VoidOrNullOrUndefinedPrimaryExpressionContext + | ArrayLiteralPrimaryExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. + * @since 0.10.0 + */ +export type ASTConstantExpressionKind = + | typeof ParserASTMapping.RULE_numberPrimaryExpression + | typeof ParserASTMapping.RULE_stringPrimaryExpression + | typeof ParserASTMapping.RULE_boolPrimaryExpression + | typeof ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression + | typeof ParserASTMapping.RULE_arrayLiteralPrimaryExpression; + +/** + * Abstract constant expression class representing a constant expression, which was defined in the source code. This + * abstract class only exists to provide the commonality between the different constant expressions. + * @since 0.10.0 + */ +export abstract class ConstantExpression< + Semantics extends ConstantExpressionSemantics = ConstantExpressionSemantics, + TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserConstantExpressionContext; + public abstract readonly kind: ASTConstantExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts new file mode 100644 index 000000000..f16c94616 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts @@ -0,0 +1,10 @@ +/** + * Constant expression module containing the classes representing expressions, which represent a constant value in a + * specific data structure. + * @since 0.11.0 + */ +export * from "./constant-expression"; +export * from "./array-primary-expression"; +export * from "./bool-primary-expression"; +export * from "./number-primary-expression"; +export * from "./string-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts new file mode 100644 index 000000000..87361e2d0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts @@ -0,0 +1,88 @@ +/** + * Integer constant expression, which represents a number constant that was defined in the source code. + * @since 0.1.0 + */ +import type { NumberPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { NumberPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ConstantExpression } from "./constant-expression"; +import { NumberPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * Number constant expression, which represents a number constant that was defined in the source code. + * @since 0.1.0 + */ +export class NumberPrimaryExpression extends ConstantExpression< + NumberPrimaryExpressionSemantics, + NumberPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: NumberPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_numberPrimaryExpression; + + constructor(antlrRuleCtx: NumberPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // The value should stay the same as written, and the code generator implementation should handle outputting the + // value in the target language + this.semanticData = { + value: this.sourceCode, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'number' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): NumberPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.numberPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.numberPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts new file mode 100644 index 000000000..6762dc670 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts @@ -0,0 +1,87 @@ +/** + * String constant expression, which represents a string constant that was defined in the source code. + * @since 0.1.0 + */ +import type { StringPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { StringPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ConstantExpression } from "./constant-expression"; +import { ParserASTMapping, StringPrimaryExpressionContext } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * String constant expression, which represents a string constant that was defined in the source code. + * @since 0.1.0 + */ +export class StringPrimaryExpression extends ConstantExpression< + StringPrimaryExpressionSemantics, + StringPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: StringPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_stringPrimaryExpression; + + constructor(antlrRuleCtx: StringPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + value: this.sourceCode.slice(1, this.sourceCode.length - 1), // Remove string quotation marks + quotationMarks: <`"` | `'`>this.sourceCode[0], + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'str' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("str"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): StringPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.stringPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.stringPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts new file mode 100644 index 000000000..b4f22ee2c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts @@ -0,0 +1,89 @@ +import type { VoidOrNullOrUndefinedPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics } from "../../../../type-data"; +/** + * Constant expression, representing the void, null or undefined keyword. + * @since 0.10.0 + */ +import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../const"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ParserASTMapping, VoidOrNullOrUndefinedPrimaryExpressionContext } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; +import { ConstantExpression } from "./constant-expression"; + +/** + * Constant expression, representing the void, null or undefined keyword. + * @since 0.10.0 + */ +export class VoidOrNullOrUndefinedPrimaryExpression extends ConstantExpression< + VoidOrNullOrUndefinedPrimaryExpressionSemantics, + VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression; + + constructor(antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + // Syntactically there can only be 'void', 'null' or 'undefined' stored in this expression + constantIdentifier: this.sourceCode, + value: this.sourceCode, // The value of this expression is equal to the constant identifier in string form + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.10.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // The evaluated type of this expression will always be equal to the constant identifier that this expression + // contains e.g. either 'void', 'null' or 'undefined'. + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType(semanticData.constantIdentifier), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): VoidOrNullOrUndefinedPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.voidOrNullOrUndefinedPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.voidOrNullOrUndefinedPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts new file mode 100644 index 000000000..23bcc0e82 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts @@ -0,0 +1,91 @@ +/** + * F-String class, which represents an f-string expression in the Kipper language. + * @since 0.1.0 + */ +import type { FStringPrimaryExpressionSemantics } from "../../../semantic-data"; +import type { FStringPrimaryExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; +import { FStringPrimaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { CheckedType } from "../../../../analysis"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * F-String class, which represents an f-string expression in the Kipper language. F-Strings are a way to automatically + * format strings and insert expressions into them using expression blocks that are stringified. + * @since 0.1.0 + */ +export class FStringPrimaryExpression extends Expression< + FStringPrimaryExpressionSemantics, + FStringPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: FStringPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_fStringPrimaryExpression; + + constructor(antlrRuleCtx: FStringPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const stringParts: Array = []; + // TODO! + + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("F-String Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'str' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("str"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): FStringPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.fStringPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.fStringPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts new file mode 100644 index 000000000..4d8b11151 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts @@ -0,0 +1,124 @@ +/** + * Identifier expression, which represents an identifier referencing a variable, function or built-in identifier. + * + * This is only represents a reference and not a declaration/definition. + * @since 0.1.0 + */ +import type { IdentifierPrimaryExpressionSemantics } from "../../../semantic-data"; +import type { IdentifierPrimaryExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { Expression } from "../expression"; +import { IdentifierPrimaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CheckedType, ScopeDeclaration } from "../../../../analysis"; +import { AssignmentExpression } from "../assignment-expression"; + +/** + * Identifier expression, which represents an identifier referencing a variable, function or built-in identifier. + * + * This is only represents a reference and not a declaration/definition. + * @since 0.1.0 + */ +export class IdentifierPrimaryExpression extends Expression< + IdentifierPrimaryExpressionSemantics, + IdentifierPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IdentifierPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_identifierPrimaryExpression; + + constructor(antlrRuleCtx: IdentifierPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const identifier = this.sourceCode; + + // Make sure the referenced variable even exists! + const ref = this.programCtx + .semanticCheck(this) + .getExistingReference(identifier, "innerScope" in this.scopeCtx ? this.scopeCtx : undefined); + + // Once we have the identifier and ensured a reference exists, we are done with the primary semantic analysis. + this.semanticData = { + identifier: identifier, + ref: { + refTarget: ref, + srcExpr: this, + }, + }; + + if (!(ref instanceof ScopeDeclaration)) { + this.programCtx.addBuiltInReference(this, ref); + } else { + // If the reference is not used inside an assignment expression, ensure that the reference is defined + // (This is due to the fact that assignments to undefined variables must always be valid, unless it's a + // modifier assignment operator) + if (!(this.parent instanceof AssignmentExpression)) { + this.programCtx.semanticCheck(this).refTargetDefined(ref); + } + } + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + const refTarget = semanticData.ref.refTarget; + + let type: CheckedType; + if (refTarget instanceof ScopeDeclaration) { + type = refTarget.type; + } else { + // Built-in function -> type is 'func' + type = CheckedType.fromCompilableType("valueType" in refTarget ? refTarget.valueType : "func"); + } + + this.typeSemantics = { + evaluatedType: type, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IdentifierPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.identifierPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.identifierPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts new file mode 100644 index 000000000..65978fb02 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts @@ -0,0 +1,9 @@ +/** + * Primary expression module containing the classes representing expressions, which build up the fundamental building + * blocks of the language, such as constants and identifiers. + * @since 0.11.0 + */ +export * from "./constant/"; +export * from "./fstring-primary-expression"; +export * from "./identifier-primary-expression"; +export * from "./constant/void-or-null-or-undefined-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts new file mode 100644 index 000000000..73f0b7756 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts @@ -0,0 +1,102 @@ +/** + * Tangled/Parenthesised expression, which represents a parenthesised expression that wraps another expression and + * increases its order of precedence. + * @example + * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed + * @since 0.1.0 + */ +import type { TangledPrimaryExpressionSemantics } from "../../semantic-data"; +import type { TangledPrimaryTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import { Expression } from "./expression"; +import { ParserASTMapping, TangledPrimaryExpressionContext } from "../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * Tangled/Parenthesised expression, which represents a parenthesised expression that wraps another expression and + * increases its order of precedence. + * @example + * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed + * @since 0.1.0 + */ +export class TangledPrimaryExpression extends Expression< + TangledPrimaryExpressionSemantics, + TangledPrimaryTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: TangledPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_tangledPrimaryExpression; + + constructor(antlrRuleCtx: TangledPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Tangled expressions always contain one expression child + const exp: Expression = this.children[0]; + + // Ensure that the child expression is present + if (!exp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + childExp: exp, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const exp = this.getSemanticData().childExp; + + this.typeSemantics = { + // Tangled expressions always evaluate to the type of its child expression + evaluatedType: exp.getTypeSemanticData().evaluatedType, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): TangledPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.tangledPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.tangledPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts new file mode 100644 index 000000000..1b7d59837 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts @@ -0,0 +1,86 @@ +import type { GenericTypeSpecifierExpressionSemantics } from "../../../semantic-data"; +/** + * Generic type specifier expression, which represents a generic type specifier. + * @example + * list // List type with number as generic type + * @since 0.8.0 + */ +import type { GenericTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "./type-specifier-expression"; +import { GenericTypeSpecifierContext, ParserASTMapping } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * Generic type specifier expression, which represents a generic type specifier. + * @example + * list // List type with number as generic type + * @since 0.8.0 + */ +export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< + GenericTypeSpecifierExpressionSemantics, + GenericTypeSpecifierExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: GenericTypeSpecifierContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_genericTypeSpecifier; + + constructor(antlrRuleCtx: GenericTypeSpecifierContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.8.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): GenericTypeSpecifierContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.genericTypeSpecifierExpression; + readonly targetCodeGenerator = this.codeGenerator.genericTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts new file mode 100644 index 000000000..08934ec14 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts @@ -0,0 +1,98 @@ +/** + * Type specifier expression, which represents a simple identifier type specifier. + * @example + * num // Number type + * str // String type + * char // Character type + * bool // Boolean type + * @since 0.8.0 + */ +import type { IdentifierTypeSpecifierExpressionSemantics } from "../../../semantic-data"; +import type { IdentifierTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "./type-specifier-expression"; +import { IdentifierTypeSpecifierContext, ParserASTMapping } from "../../../../parser"; +import { CheckedType, UncheckedType } from "../../../../analysis"; + +/** + * Type specifier expression, which represents a simple identifier type specifier. + * @example + * num // Number type + * str // String type + * char // Character type + * bool // Boolean type + * @since 0.8.0 + */ +export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< + IdentifierTypeSpecifierExpressionSemantics, + IdentifierTypeSpecifierExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IdentifierTypeSpecifierContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_identifierTypeSpecifier; + + constructor(antlrRuleCtx: IdentifierTypeSpecifierContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + typeIdentifier: new UncheckedType(this.sourceCode), + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.8.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Create a checked type instance (this function handles error recovery and invalid types) + const valueType = this.programCtx.typeCheck(this).getCheckedType(semanticData.typeIdentifier); + this.typeSemantics = { + // A type specifier will always evaluate to be of type 'type' + evaluatedType: CheckedType.fromCompilableType("type"), + storedType: valueType, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IdentifierTypeSpecifierContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.identifierTypeSpecifierExpression; + readonly targetCodeGenerator = this.codeGenerator.identifierTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts new file mode 100644 index 000000000..fbd06eaa7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts @@ -0,0 +1,9 @@ +/** + * Type specifier expression module containing the classes representing expressions, which are used in declaration + * and type references, where a type specifier is required. + * @since 0.11.0 + */ +export * from "./type-specifier-expression"; +export * from "./identifier-type-specifier-expression"; +export * from "./typeof-type-specifier-expression"; +export * from "./generic-type-specifier-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts new file mode 100644 index 000000000..0b0df8b5b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts @@ -0,0 +1,45 @@ +/** + * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the + * different type specifier expressions. + * @since 0.9.0 + */ +import type { TypeSpecifierExpressionSemantics } from "../../../semantic-data"; +import type { + GenericTypeSpecifierContext, + IdentifierTypeSpecifierContext, + ParserASTMapping, + TypeofTypeSpecifierContext, +} from "../../../../parser"; +import type { TypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. + * @since 0.10.0 + */ +export type ParserTypeSpecifierExpressionContext = + | IdentifierTypeSpecifierContext + | GenericTypeSpecifierContext + | TypeofTypeSpecifierContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link TypeSpecifierExpression} AST node. + * @since 0.10.0 + */ +export type ASTTypeSpecifierExpressionKind = + | typeof ParserASTMapping.RULE_identifierTypeSpecifier + | typeof ParserASTMapping.RULE_genericTypeSpecifier + | typeof ParserASTMapping.RULE_typeofTypeSpecifier; + +/** + * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the + * different type specifier expressions. + * @since 0.9.0 + */ +export abstract class TypeSpecifierExpression< + Semantics extends TypeSpecifierExpressionSemantics = TypeSpecifierExpressionSemantics, + TypeSemantics extends TypeSpecifierExpressionTypeSemantics = TypeSpecifierExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserTypeSpecifierExpressionContext; + public abstract readonly kind: ASTTypeSpecifierExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts new file mode 100644 index 000000000..efb185e43 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts @@ -0,0 +1,82 @@ +/** + * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. + * @since 0.8.0 + */ +import type { TypeofTypeSpecifierExpressionSemantics } from "../../../semantic-data"; +import type { TypeofTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "./type-specifier-expression"; +import { ParserASTMapping, TypeofTypeSpecifierContext } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. + * @since 0.8.0 + */ +export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< + TypeofTypeSpecifierExpressionSemantics, + TypeofTypeSpecifierExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: TypeofTypeSpecifierContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_typeofTypeSpecifier; + + constructor(antlrRuleCtx: TypeofTypeSpecifierContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.8.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): TypeofTypeSpecifierContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.typeofTypeSpecifierExpression; + readonly targetCodeGenerator = this.codeGenerator.typeofTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts new file mode 100644 index 000000000..09e4ea6f0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts @@ -0,0 +1,111 @@ +/** + * Increment or decrement expression class, which represents a left-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * ++49; // 49 will be incremented by 1 + * --11; // 11 will be decremented by 1 + */ +import type { IncrementOrDecrementUnaryExpressionSemantics } from "../../../semantic-data"; +import type { IncrementOrDecrementUnaryTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { Expression } from "../expression"; +import type { KipperIncrementOrDecrementOperator } from "../../../../const"; +import { UnaryExpression } from "./unary-expression"; +import { IncrementOrDecrementUnaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Increment or decrement expression class, which represents a left-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * ++49; // 49 will be incremented by 1 + * --11; // 11 will be decremented by 1 + */ +export class IncrementOrDecrementUnaryExpression extends UnaryExpression< + IncrementOrDecrementUnaryExpressionSemantics, + IncrementOrDecrementUnaryTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementUnaryExpression; + + constructor(antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it modifies the value of the operand + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const exp: Expression = this.children[0]; + const operator = this.sourceCode.slice(0, 2); // Before the expression + + // Ensure that the child expression is present + if (!exp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + operand: exp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + // This will always be a number + evaluatedType: CheckedType.fromKipperType("num"), + }; + + // Ensure that this expression is valid (e.g. the operand is a number) + this.programCtx.typeCheck(this).validUnaryExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IncrementOrDecrementUnaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementUnaryExpression; + readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementUnaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts new file mode 100644 index 000000000..67817a3c9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts @@ -0,0 +1,8 @@ +/** + * Unary expression module containing the classes representing expressions, which can be used to perform specific + * unary operations using a specific operator. + * @since 0.11.0 + */ +export * from "./unary-expression"; +export * from "./operator-modified-unary-expression"; +export * from "./increment-or-decrement-unary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts new file mode 100644 index 000000000..8fe175ef7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts @@ -0,0 +1,121 @@ +/** + * Operator modified expressions, which are used to modify the value of an expression based on an + * {@link KipperUnaryOperator unary operator.} + * @since 0.1.0 + * @example + * -41 // -41 + * +59 // 59 + */ +import type { OperatorModifiedUnaryExpressionSemantics } from "../../../semantic-data"; +import type { OperatorModifiedUnaryTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { Expression } from "../expression"; +import { UnaryExpression } from "./unary-expression"; +import { OperatorModifiedUnaryExpressionContext, ParserASTMapping, UnaryOperatorContext } from "../../../../parser"; +import { KipperNegateOperator, KipperSignOperator, kipperUnaryModifierOperators } from "../../../../const"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Operator modified expressions, which are used to modify the value of an expression based on an + * {@link KipperUnaryOperator unary operator.} + * @since 0.1.0 + * @example + * -41 // -41 + * +59 // 59 + */ +export class OperatorModifiedUnaryExpression extends UnaryExpression< + OperatorModifiedUnaryExpressionSemantics, + OperatorModifiedUnaryTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: OperatorModifiedUnaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_operatorModifiedUnaryExpression; + + constructor(antlrRuleCtx: OperatorModifiedUnaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the operator + const unaryOperator = children.find((token) => { + return ( + token instanceof UnaryOperatorContext && + kipperUnaryModifierOperators.find((op) => op === token.text) !== undefined + ); + })?.text; + + // Get the expression of this unary expression + const exp: Expression = this.children[0]; + + // Ensure that the children are fully present and not undefined + if (!exp || !unaryOperator) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + operator: unaryOperator, + operand: exp, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType(semanticData.operator === "!" ? "bool" : "num"), + }; + + // Ensure the operator is compatible with the type of the operand + this.programCtx.typeCheck(this).validUnaryExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): OperatorModifiedUnaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.operatorModifiedUnaryExpression; + readonly targetCodeGenerator = this.codeGenerator.operatorModifiedUnaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts new file mode 100644 index 000000000..581636b0c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts @@ -0,0 +1,44 @@ +/** + * Abstract unary expression class representing a unary expression, which can be used to modify an expression with + * a specified operator. This abstract class only exists to provide the commonality between the different comparative + * expressions. + * @since 0.9.0 + */ +import type { UnaryExpressionSemantics } from "../../../semantic-data"; +import type { UnaryExpressionTypeSemantics } from "../../../type-data"; +import type { + IncrementOrDecrementUnaryExpressionContext, + OperatorModifiedUnaryExpressionContext, + ParserASTMapping, +} from "../../../../parser"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link UnaryExpression} AST node. + * @since 0.10.0 + */ +export type ParserUnaryExpressionContext = + | IncrementOrDecrementUnaryExpressionContext + | OperatorModifiedUnaryExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link UnaryExpression} AST node. + * @since 0.10.0 + */ +export type ASTUnaryExpressionKind = + | typeof ParserASTMapping.RULE_incrementOrDecrementUnaryExpression + | typeof ParserASTMapping.RULE_operatorModifiedUnaryExpression; + +/** + * Abstract unary expression class representing a unary expression, which can be used to modify an expression with + * a specified operator. This abstract class only exists to provide the commonality between the different comparative + * expressions. + * @since 0.9.0 + */ +export abstract class UnaryExpression< + Semantics extends UnaryExpressionSemantics = UnaryExpressionSemantics, + TypeSemantics extends UnaryExpressionTypeSemantics = UnaryExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserUnaryExpressionContext; + public abstract readonly kind: ASTUnaryExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/index.ts b/kipper/core/src/compiler/ast/nodes/index.ts index 52f9b1a9d..b19c04ef9 100644 --- a/kipper/core/src/compiler/ast/nodes/index.ts +++ b/kipper/core/src/compiler/ast/nodes/index.ts @@ -1,9 +1,3 @@ -/** - * Language-specific AST nodes enriched with semantic data and logical handling that implement the semantic - * analysis, type checking and translation of Kipper code. - * @since 0.8.0 - */ +export * from "./declarations"; export * from "./expressions"; -export * from "./definitions"; export * from "./statements"; -export * from "./factories"; diff --git a/kipper/core/src/compiler/ast/nodes/statements.ts b/kipper/core/src/compiler/ast/nodes/statements.ts deleted file mode 100644 index c7a29d209..000000000 --- a/kipper/core/src/compiler/ast/nodes/statements.ts +++ /dev/null @@ -1,920 +0,0 @@ -/** - * AST Node Statement classes of the Kipper language. - * @since 0.1.0 - */ -import type { - CompilableNodeChild, - CompilableNodeParent, - NoSemantics, - NoTypeSemantics, - SemanticData, - TypeData, - VariableDeclaration, -} from ".."; -import type { - DoWhileLoopStatementSemantics, - ForLoopStatementSemantics, - IfStatementSemantics, - IterationStatementSemantics, - JumpStatementSemantics, - ReturnStatementSemantics, - WhileLoopStatementSemantics, -} from "../semantic-data"; -import type { ASTStatementKind, ParserStatementContext } from "../ast-types"; -import type { TranslatedCodeLine } from "../../const"; -import type { Expression } from "./expressions"; -import type { TargetASTNodeCodeGenerator } from "../../target-presets"; -import type { ReturnStatementTypeSemantics } from "../type-data"; -import type { ScopeNode } from "../scope-node"; -import { - CompoundStatementContext, - DoWhileLoopIterationStatementContext, - ExpressionStatementContext, - ForLoopIterationStatementContext, - IfStatementContext, - JumpStatementContext, - KipperParser, - ReturnStatementContext, - SwitchStatementContext, - WhileLoopIterationStatementContext, -} from "../../parser"; -import { CompilableASTNode } from "../compilable-ast-node"; -import { CheckedType, LocalScope } from "../../analysis"; -import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../errors"; - -/** - * The base abstract AST node class for all statements, which wrap their corresponding - * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. - * - * These AST nodes can be created with the {@link StatementASTNodeFactory} class. - * @since 0.1.0 - */ -export abstract class Statement< - Semantics extends SemanticData = SemanticData, - TypeSemantics extends TypeData = TypeData, -> extends CompilableASTNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParserStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public abstract readonly kind: ASTStatementKind; - - protected constructor(antlrRuleCtx: ParserStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - - // Manually add the child to the parent - parent.addNewChild(this); - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ParserStatementContext { - return this._antlrRuleCtx; - } - - /** - * Generates the typescript code for this item, and all children (if they exist). - * - * Every item in the array represents a single line of code. - */ - public async translateCtxAndChildren(): Promise> { - return await this.targetCodeGenerator(this); - } - - public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; -} - -/** - * Compound statement class, which represents a compound statement containing other items in the Kipper - * language and is compilable using {@link translateCtxAndChildren}. - */ -export class CompoundStatement extends Statement implements ScopeNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: CompoundStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_compoundStatement; - - protected readonly _children: Array>; - - private readonly _innerScope: LocalScope; - - constructor(antlrRuleCtx: CompoundStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._semanticData = {}; - this._typeSemantics = {}; - this._innerScope = new LocalScope(this); - } - - /** - * The children of this parse token. - */ - public get children(): Array> { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): CompoundStatementContext { - return this._antlrRuleCtx; - } - - /** - * Returns the inner scope of this {@link CompoundStatement}, which is automatically created when using a compound - * statement. - * @since 0.10.0 - */ - public get innerScope(): LocalScope { - return this._innerScope; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public primarySemanticAnalysis = undefined; // Compound statements will never have semantic data - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // Compound statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.compoundStatement; - readonly targetCodeGenerator = this.codeGenerator.compoundStatement; -} - -/** - * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using - * {@link translateCtxAndChildren}. - */ -export class IfStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IfStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_ifStatement; - - protected readonly _children: Array>; - - constructor(antlrRuleCtx: IfStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._typeSemantics = {}; - } - - /** - * The children of this AST node. - * - * May contain both {@link Expression expressions} and {@link Statement statements}, as it will always contain - * an expression at index 03 to represent the condition. - */ - public get children(): Array> { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): IfStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // There will be always at least two children - const condition: Expression = this.children[0]; - const body: Statement = >this.children[1]; - const alternativeBranch: IfStatement | Statement | null = - this.children.length > 2 ? >this.children[2] : null; - - // Ensure that the children are fully present and not undefined - if (!condition || !body) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - condition: condition, - ifBranch: body, - elseBranch: alternativeBranch ?? undefined, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // If-statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.ifStatement; - readonly targetCodeGenerator = this.codeGenerator.ifStatement; -} - -/** - * Switch statement class, which represents a switch selection statement in the Kipper language. - */ -export class SwitchStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: SwitchStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_switchStatement; - - protected readonly _children: Array>; - - constructor(antlrRuleCtx: SwitchStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this AST node. - */ - public get children(): Array> { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): SwitchStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.switchStatement; - readonly targetCodeGenerator = this.codeGenerator.switchStatement; -} - -/** - * Expression statement class, which represents a statement made up of an expression in the Kipper language. - */ -export class ExpressionStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ExpressionStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_expressionStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: ExpressionStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._semanticData = {}; - this._typeSemantics = {}; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ExpressionStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public primarySemanticAnalysis = undefined; // Expression statements will never have semantic data - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // Expression statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public async checkForWarnings(): Promise { - this.programCtx.warningCheck(this).uselessStatement(this); - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.expressionStatement; - readonly targetCodeGenerator = this.codeGenerator.expressionStatement; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. - * @since 0.10.0 - */ -export type ParserIterationStatementContext = - | ForLoopIterationStatementContext - | WhileLoopIterationStatementContext - | DoWhileLoopIterationStatementContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link MemberAccessExpression} AST node. - * @since 0.10.0 - */ -export type ParserIterationStatementKind = - | typeof KipperParser.RULE_forLoopIterationStatement - | typeof KipperParser.RULE_whileLoopIterationStatement - | typeof KipperParser.RULE_doWhileLoopIterationStatement; - -/** - * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export abstract class IterationStatement< - Semantics extends IterationStatementSemantics = IterationStatementSemantics, - TypeSemantics extends NoTypeSemantics = NoTypeSemantics, -> extends Statement { - protected abstract readonly _antlrRuleCtx: ParserIterationStatementContext; - public abstract readonly kind: ParserIterationStatementKind; -} - -/** - * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export class DoWhileLoopStatement extends IterationStatement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: DoWhileLoopIterationStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_doWhileLoopIterationStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: DoWhileLoopIterationStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): DoWhileLoopIterationStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.doWhileLoopStatement; - readonly targetCodeGenerator = this.codeGenerator.doWhileLoopStatement; -} - -/** - * While loop statement class, which represents a while loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export class WhileLoopStatement extends IterationStatement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: WhileLoopIterationStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_whileLoopIterationStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: WhileLoopIterationStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._typeSemantics = {}; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): WhileLoopIterationStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const loopCondition = this.children[0]; - const loopBody = >this.children[1]; - - this.semanticData = { - loopCondition: loopCondition, - loopBody: loopBody, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // While-loop statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.whileLoopStatement; - readonly targetCodeGenerator = this.codeGenerator.whileLoopStatement; -} - -/** - * For loop statement class, which represents a for loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export class ForLoopStatement - extends IterationStatement - implements ScopeNode -{ - /** - * The private field '_innerScope' that actually stores the variable data, - * which is returned inside the {@link this.innerScope}. - * @private - */ - private readonly _innerScope: LocalScope; - - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ForLoopIterationStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_forLoopIterationStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: ForLoopIterationStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._innerScope = new LocalScope(this); - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ForLoopIterationStatementContext { - return this._antlrRuleCtx; - } - - /** - * Gets the inner scope of this for-loop statement, which is automatically created when using a for loop. - * @since 0.10.0 - */ - public get innerScope(): LocalScope { - return this._innerScope; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - let index = 0; - - // 'index++' will increase the index after the assignment, so the first assignment will be '0' and the second - // assignment will be '1', and so on... - const forDeclaration = this.antlrRuleCtx._forDeclaration - ? this.children[index++] - : undefined; - const forCondition = this.antlrRuleCtx._forCondition ? this.children[index++] : undefined; - const forIterationExp = this.antlrRuleCtx._forIterationExp ? this.children[index++] : undefined; - const loopBody = this.children[index++]; - - this.semanticData = { - forDeclaration: forDeclaration, - loopCondition: forCondition, - forIterationExp: forIterationExp, - loopBody: loopBody, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // For-loop statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.forLoopStatement; - readonly targetCodeGenerator = this.codeGenerator.forLoopStatement; -} - -/** - * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using - * {@link translateCtxAndChildren}. - */ -export class JumpStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: JumpStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_jumpStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: JumpStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): JumpStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const jmpType = this.sourceCode.startsWith("break") ? "break" : "continue"; - const parent = this.programCtx.semanticCheck(this).getJumpStatementParent(this); - - this.semanticData = { - jmpType: jmpType, - parent: parent, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // Jump statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.jumpStatement; - readonly targetCodeGenerator = this.codeGenerator.jumpStatement; -} - -/** - * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using - * {@link translateCtxAndChildren}. - */ -export class ReturnStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ReturnStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_returnStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: ReturnStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ReturnStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const returnValue = this.children[0]; - - // Getting the function of the return statement - const func = this.programCtx.semanticCheck(this).getReturnStatementParent(this); - - this.semanticData = { - returnValue: returnValue, - function: func, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Ensure that the types of the return match the function's return. - this.programCtx.typeCheck(this).validReturnStatement(this); - - this.typeSemantics = { - returnType: - semanticData.returnValue?.getTypeSemanticData().evaluatedType ?? CheckedType.fromCompilableType("void"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.returnStatement; - readonly targetCodeGenerator = this.codeGenerator.returnStatement; -} diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts new file mode 100644 index 000000000..3bbec3892 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts @@ -0,0 +1,98 @@ +/** + * Compound statement class, which represents a compound statement containing other items in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + */ +import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; +import type { ScopeNode } from "../../scope-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import { Statement } from "./statement"; +import { LocalScope } from "../../../analysis"; +import { CompoundStatementContext, KipperParser } from "../../../parser"; + +/** + * Compound statement class, which represents a compound statement containing other items in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + */ +export class CompoundStatement extends Statement implements ScopeNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: CompoundStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_compoundStatement; + + protected readonly _children: Array; + + private readonly _innerScope: LocalScope; + + constructor(antlrRuleCtx: CompoundStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._semanticData = {}; + this._typeSemantics = {}; + this._innerScope = new LocalScope(this); + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): CompoundStatementContext { + return this._antlrRuleCtx; + } + + /** + * Returns the inner scope of this {@link CompoundStatement}, which is automatically created when using a compound + * statement. + * @since 0.10.0 + */ + public get innerScope(): LocalScope { + return this._innerScope; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public primarySemanticAnalysis = undefined; // Compound statements will never have semantic data + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // Compound statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.compoundStatement; + readonly targetCodeGenerator = this.codeGenerator.compoundStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts new file mode 100644 index 000000000..c1bd16d7d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts @@ -0,0 +1,85 @@ +/** + * Expression statement class, which represents a statement made up of an expression in the Kipper language. + */ +import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import { Statement } from "./statement"; +import { ExpressionStatementContext, KipperParser } from "../../../parser"; +import { Expression } from "../expressions"; + +/** + * Expression statement class, which represents a statement made up of an expression in the Kipper language. + */ +export class ExpressionStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ExpressionStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_expressionStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: ExpressionStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._semanticData = {}; + this._typeSemantics = {}; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ExpressionStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public primarySemanticAnalysis = undefined; // Expression statements will never have semantic data + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // Expression statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public async checkForWarnings(): Promise { + this.programCtx.warningCheck(this).uselessStatement(this); + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.expressionStatement; + readonly targetCodeGenerator = this.codeGenerator.expressionStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts new file mode 100644 index 000000000..e6885c72a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts @@ -0,0 +1,106 @@ +/** + * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +import type { NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { IfStatementSemantics } from "../../semantic-data"; +import { Statement } from "./statement"; +import { IfStatementContext, KipperParser } from "../../../parser"; +import { Expression } from "../expressions"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +export class IfStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IfStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_ifStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: IfStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._typeSemantics = {}; + } + + /** + * The children of this AST node. + * + * May contain both {@link Expression expressions} and {@link Statement statements}, as it will always contain + * an expression at index 03 to represent the condition. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): IfStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // There will be always at least two children + const condition: Expression = this.children[0]; + const body: Statement = this.children[1]; + const alternativeBranch: IfStatement | Statement | null = + this.children.length > 2 ? this.children[2] : null; + + // Ensure that the children are fully present and not undefined + if (!condition || !body) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + condition: condition, + ifBranch: body, + elseBranch: alternativeBranch ?? undefined, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // If-statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.ifStatement; + readonly targetCodeGenerator = this.codeGenerator.ifStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/index.ts b/kipper/core/src/compiler/ast/nodes/statements/index.ts new file mode 100644 index 000000000..ac4d8249e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/index.ts @@ -0,0 +1,13 @@ +/** + * Statement module containing the classes representing statements, which are used to perform specific operations and + * define the flow of a program. + * @since 0.11.0 + */ +export * from "./statement"; +export * from "./iteration/"; +export * from "./compound-statement"; +export * from "./expression-statement"; +export * from "./if-statement"; +export * from "./jump-statement"; +export * from "./return-statement"; +export * from "./switch-statement"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts new file mode 100644 index 000000000..3cb749150 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts @@ -0,0 +1,91 @@ +/** + * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import type { DoWhileLoopStatementSemantics } from "../../../semantic-data"; +import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; +import { IterationStatement } from "./iteration-statement"; +import { DoWhileLoopIterationStatementContext, KipperParser } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export class DoWhileLoopStatement extends IterationStatement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: DoWhileLoopIterationStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_doWhileLoopIterationStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: DoWhileLoopIterationStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): DoWhileLoopIterationStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.doWhileLoopStatement; + readonly targetCodeGenerator = this.codeGenerator.doWhileLoopStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts new file mode 100644 index 000000000..4cdc6b839 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts @@ -0,0 +1,125 @@ +import type { ForLoopStatementSemantics } from "../../../semantic-data"; +import type { NoTypeSemantics } from "../../../ast-node"; +import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; +/** + * For loop statement class, which represents a for loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import type { ScopeNode } from "../../../scope-node"; +import type { Statement } from "../statement"; +import type { VariableDeclaration } from "../../declarations"; +import { IterationStatement } from "./iteration-statement"; +import { ForLoopIterationStatementContext, KipperParser } from "../../../../parser"; +import { Expression } from "../../expressions"; +import { LocalScope } from "../../../../analysis"; + +/** + * For loop statement class, which represents a for loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export class ForLoopStatement + extends IterationStatement + implements ScopeNode +{ + /** + * The private field '_innerScope' that actually stores the variable data, + * which is returned inside the {@link this.innerScope}. + * @private + */ + private readonly _innerScope: LocalScope; + + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ForLoopIterationStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_forLoopIterationStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: ForLoopIterationStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._innerScope = new LocalScope(this); + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ForLoopIterationStatementContext { + return this._antlrRuleCtx; + } + + /** + * Gets the inner scope of this for-loop statement, which is automatically created when using a for loop. + * @since 0.10.0 + */ + public get innerScope(): LocalScope { + return this._innerScope; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + let index = 0; + + // 'index++' will increase the index after the assignment, so the first assignment will be '0' and the second + // assignment will be '1', and so on... + const forDeclaration = this.antlrRuleCtx._forDeclaration + ? this.children[index++] + : undefined; + const forCondition = this.antlrRuleCtx._forCondition ? this.children[index++] : undefined; + const forIterationExp = this.antlrRuleCtx._forIterationExp ? this.children[index++] : undefined; + const loopBody = this.children[index++]; + + this.semanticData = { + forDeclaration: forDeclaration, + loopCondition: forCondition, + forIterationExp: forIterationExp, + loopBody: loopBody, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // For-loop statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.forLoopStatement; + readonly targetCodeGenerator = this.codeGenerator.forLoopStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts new file mode 100644 index 000000000..6d8da30bd --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts @@ -0,0 +1,4 @@ +export * from "./iteration-statement"; +export * from "./while-loop-statement"; +export * from "./do-while-loop-statement"; +export * from "./for-loop-statement"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts new file mode 100644 index 000000000..1fd7f329c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts @@ -0,0 +1,43 @@ +/** + * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import { + DoWhileLoopIterationStatementContext, + ForLoopIterationStatementContext, + KipperParser, + WhileLoopIterationStatementContext, +} from "../../../../parser"; +import { IterationStatementSemantics } from "../../../semantic-data"; +import { NoTypeSemantics } from "../../../ast-node"; +import { Statement } from "../statement"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. + * @since 0.10.0 + */ +export type ParserIterationStatementContext = + | ForLoopIterationStatementContext + | WhileLoopIterationStatementContext + | DoWhileLoopIterationStatementContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link MemberAccessExpression} AST node. + * @since 0.10.0 + */ +export type ParserIterationStatementKind = + | typeof KipperParser.RULE_forLoopIterationStatement + | typeof KipperParser.RULE_whileLoopIterationStatement + | typeof KipperParser.RULE_doWhileLoopIterationStatement; + +/** + * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export abstract class IterationStatement< + Semantics extends IterationStatementSemantics = IterationStatementSemantics, + TypeSemantics extends NoTypeSemantics = NoTypeSemantics, +> extends Statement { + protected abstract readonly _antlrRuleCtx: ParserIterationStatementContext; + public abstract readonly kind: ParserIterationStatementKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts new file mode 100644 index 000000000..377727949 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts @@ -0,0 +1,93 @@ +/** + * While loop statement class, which represents a while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; +import type { WhileLoopStatementSemantics } from "../../../semantic-data"; +import { IterationStatement } from "./iteration-statement"; +import { KipperParser, WhileLoopIterationStatementContext } from "../../../../parser"; +import { Expression } from "../../expressions"; +import { Statement } from "../statement"; + +/** + * While loop statement class, which represents a while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export class WhileLoopStatement extends IterationStatement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: WhileLoopIterationStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_whileLoopIterationStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: WhileLoopIterationStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._typeSemantics = {}; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): WhileLoopIterationStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const loopCondition = this.children[0]; + const loopBody = this.children[1]; + + this.semanticData = { + loopCondition: loopCondition, + loopBody: loopBody, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // While-loop statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.whileLoopStatement; + readonly targetCodeGenerator = this.codeGenerator.whileLoopStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts new file mode 100644 index 000000000..3c0d748b7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts @@ -0,0 +1,92 @@ +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +import type { NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { JumpStatementSemantics } from "../../semantic-data"; +import { Statement } from "./statement"; +import { JumpStatementContext, KipperParser } from "../../../parser"; +import { Expression } from "../expressions"; + +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +export class JumpStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: JumpStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_jumpStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: JumpStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): JumpStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const jmpType = this.sourceCode.startsWith("break") ? "break" : "continue"; + const parent = this.programCtx.semanticCheck(this).getJumpStatementParent(this); + + this.semanticData = { + jmpType: jmpType, + parent: parent, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // Jump statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.jumpStatement; + readonly targetCodeGenerator = this.codeGenerator.jumpStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts new file mode 100644 index 000000000..686eec313 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts @@ -0,0 +1,105 @@ +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { ReturnStatementSemantics } from "../../semantic-data"; +import type { ReturnStatementTypeSemantics } from "../../type-data"; +import { Statement } from "./statement"; +import { CheckedType } from "../../../analysis"; +import { KipperParser, ReturnStatementContext } from "../../../parser"; +import { Expression } from "../expressions"; + +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +export class ReturnStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ReturnStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_returnStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: ReturnStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ReturnStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const returnValue = this.children[0]; + + // Getting the function of the return statement + const func = this.programCtx.semanticCheck(this).getReturnStatementParent(this); + + this.semanticData = { + returnValue: returnValue, + function: func, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Ensure that the types of the return match the function's return. + this.programCtx.typeCheck(this).validReturnStatement(this); + + this.typeSemantics = { + returnType: + semanticData.returnValue?.getTypeSemanticData().evaluatedType ?? CheckedType.fromCompilableType("void"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.returnStatement; + readonly targetCodeGenerator = this.codeGenerator.returnStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/statement.ts b/kipper/core/src/compiler/ast/nodes/statements/statement.ts new file mode 100644 index 000000000..19809e2a2 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/statement.ts @@ -0,0 +1,64 @@ +/** + * AST Node Statement classes of the Kipper language. + * @since 0.1.0 + */ +import type { CompilableNodeParent, SemanticData, TypeData } from "../../index"; +import type { ASTStatementKind, ParserStatementContext } from "../../ast-types"; +import type { TranslatedCodeLine } from "../../../const"; +import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; +import { KipperParser } from "../../../parser"; +import { CompilableASTNode } from "../../compilable-ast-node"; + +/** + * The base abstract AST node class for all statements, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link StatementASTNodeFactory} class. + * @since 0.1.0 + */ +export abstract class Statement< + Semantics extends SemanticData = SemanticData, + TypeSemantics extends TypeData = TypeData, +> extends CompilableASTNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParserStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public abstract readonly kind: ASTStatementKind; + + protected constructor(antlrRuleCtx: ParserStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + + // Manually add the child to the parent + parent.addNewChild(this); + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ParserStatementContext { + return this._antlrRuleCtx; + } + + /** + * Generates the typescript code for this item, and all children (if they exist). + * + * Every item in the array represents a single line of code. + */ + public async translateCtxAndChildren(): Promise> { + return await this.targetCodeGenerator(this); + } + + public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts new file mode 100644 index 000000000..0f4a64a1c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts @@ -0,0 +1,89 @@ +/** + * Switch statement class, which represents a switch selection statement in the Kipper language. + */ +import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import { Statement } from "./statement"; +import { KipperParser, SwitchStatementContext } from "../../../parser"; +import { KipperNotImplementedError } from "../../../../errors"; + +/** + * Switch statement class, which represents a switch selection statement in the Kipper language. + */ +export class SwitchStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: SwitchStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_switchStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: SwitchStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this AST node. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): SwitchStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.switchStatement; + readonly targetCodeGenerator = this.codeGenerator.switchStatement; +} diff --git a/kipper/core/src/compiler/ast/root-ast-node.ts b/kipper/core/src/compiler/ast/root-ast-node.ts index 69eb4bcd1..f3630520d 100644 --- a/kipper/core/src/compiler/ast/root-ast-node.ts +++ b/kipper/core/src/compiler/ast/root-ast-node.ts @@ -13,7 +13,8 @@ import type { } from "../target-presets"; import type { EvaluatedCompileConfig } from "../compile-config"; import type { KipperProgramContext } from "../program-ctx"; -import type { Declaration, Statement } from "./nodes"; +import type { Declaration } from "./nodes/declarations/"; +import type { Statement } from "./nodes"; import type { TranslatedCodeLine } from "../const"; import { KipperError } from "../../errors"; import { CompilationUnitContext, KipperParser } from "../parser"; diff --git a/kipper/core/src/compiler/ast/semantic-data/definitions.ts b/kipper/core/src/compiler/ast/semantic-data/definitions.ts index c004ce4b6..dbcfb4ee3 100644 --- a/kipper/core/src/compiler/ast/semantic-data/definitions.ts +++ b/kipper/core/src/compiler/ast/semantic-data/definitions.ts @@ -1,11 +1,12 @@ /** - * Semantic data definitions for all definition AST nodes. + * Semantic data declarations for all definition AST nodes. * @since 0.10.0 */ import type { SemanticData } from "../ast-node"; import type { KipperStorageType } from "../../const"; import type { Scope } from "../../analysis"; -import type { CompoundStatement, Expression, FunctionDeclaration, ParameterDeclaration } from "../nodes"; +import type { CompoundStatement, Expression } from "../nodes"; +import type { FunctionDeclaration, ParameterDeclaration } from "../nodes/declarations"; import { IdentifierTypeSpecifierExpression } from "../nodes"; import { UncheckedType } from "../../analysis"; diff --git a/kipper/core/src/compiler/ast/semantic-data/expressions.ts b/kipper/core/src/compiler/ast/semantic-data/expressions.ts index 70b73cbc3..c8c71906c 100644 --- a/kipper/core/src/compiler/ast/semantic-data/expressions.ts +++ b/kipper/core/src/compiler/ast/semantic-data/expressions.ts @@ -1,5 +1,5 @@ /** - * Semantic data definitions for all expression AST nodes. + * Semantic data declarations for all expression AST nodes. * @since 0.10.0 */ import type { @@ -49,7 +49,7 @@ export interface ConstantExpressionSemantics extends ExpressionSemantics { * Semantics for AST Node {@link NumberPrimaryExpression}. * @since 0.5.0 */ -export interface NumberPrimaryExpressionSemantics extends ExpressionSemantics { +export interface NumberPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of the constant number expression. * @@ -70,7 +70,7 @@ export interface NumberPrimaryExpressionSemantics extends ExpressionSemantics { * Semantics for AST Node {@link ArrayLiteralPrimaryExpression}. * @since 0.5.0 */ -export interface ArrayLiteralPrimaryExpressionSemantics extends ExpressionSemantics { +export interface ArrayLiteralPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of the constant list expression. * @since 0.5.0 @@ -82,7 +82,7 @@ export interface ArrayLiteralPrimaryExpressionSemantics extends ExpressionSemant * Semantics for AST Node {@link StringPrimaryExpression}. * @since 0.5.0 */ -export interface StringPrimaryExpressionSemantics extends ExpressionSemantics { +export interface StringPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of the constant string expression. * @since 0.5.0 @@ -102,7 +102,7 @@ export interface StringPrimaryExpressionSemantics extends ExpressionSemantics { * Semantics for AST Node {@link BoolPrimaryExpression}. * @since 0.8.0 */ -export interface BoolPrimaryExpressionSemantics extends ExpressionSemantics { +export interface BoolPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of this boolean constant expression. * @since 0.8.0 @@ -110,6 +110,18 @@ export interface BoolPrimaryExpressionSemantics extends ExpressionSemantics { value: KipperBoolTypeLiterals; } +/** + * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. + * @since 0.10.0 + */ +export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends ConstantExpressionSemantics { + /** + * The constant identifier of this expression. + * @since 0.10.0 + */ + constantIdentifier: KipperVoidType | KipperNullType | KipperUndefinedType; +} + /** * Semantics for AST Node {@link FStringPrimaryExpression}. * @since 0.5.0 @@ -185,18 +197,6 @@ export interface TangledPrimaryExpressionSemantics extends ExpressionSemantics { childExp: Expression; } -/** - * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. - * @since 0.10.0 - */ -export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends ExpressionSemantics { - /** - * The constant identifier of this expression. - * @since 0.10.0 - */ - constantIdentifier: KipperVoidType | KipperNullType | KipperUndefinedType; -} - /** * Semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. * @since 0.5.0 diff --git a/kipper/core/src/compiler/ast/semantic-data/index.ts b/kipper/core/src/compiler/ast/semantic-data/index.ts index 9d2bf722a..e2a5d1e3c 100644 --- a/kipper/core/src/compiler/ast/semantic-data/index.ts +++ b/kipper/core/src/compiler/ast/semantic-data/index.ts @@ -1,5 +1,5 @@ /** - * Semantic data definitions for all AST nodes. + * Semantic data declarations for all AST nodes. * @since 0.10.0 */ export * from "./definitions"; diff --git a/kipper/core/src/compiler/ast/semantic-data/statements.ts b/kipper/core/src/compiler/ast/semantic-data/statements.ts index bc6c01b5a..aca939ecc 100644 --- a/kipper/core/src/compiler/ast/semantic-data/statements.ts +++ b/kipper/core/src/compiler/ast/semantic-data/statements.ts @@ -1,10 +1,11 @@ /** - * Semantic data definitions for all statement AST nodes. + * Semantic data declarations for all statement AST nodes. * @since 0.10.0 */ import type { SemanticData } from "../ast-node"; -import type { Expression, FunctionDeclaration, IfStatement, Statement, VariableDeclaration } from "../nodes"; +import type { Expression, IfStatement, Statement } from "../nodes"; import type { JmpStatementType } from "../../const"; +import type { FunctionDeclaration, VariableDeclaration } from "../nodes/declarations"; import { IterationStatement } from "../nodes"; /** diff --git a/kipper/core/src/compiler/ast/type-data/definitions.ts b/kipper/core/src/compiler/ast/type-data/definitions.ts index 8d2babf5e..b4271a9ba 100644 --- a/kipper/core/src/compiler/ast/type-data/definitions.ts +++ b/kipper/core/src/compiler/ast/type-data/definitions.ts @@ -1,5 +1,5 @@ /** - * Semantic type data definitions for all definition AST nodes. + * Semantic type data declarations for all definition AST nodes. * @since 0.10.0 */ import type { TypeData } from "../../ast"; diff --git a/kipper/core/src/compiler/ast/type-data/expressions.ts b/kipper/core/src/compiler/ast/type-data/expressions.ts index f960a46a1..74934211b 100644 --- a/kipper/core/src/compiler/ast/type-data/expressions.ts +++ b/kipper/core/src/compiler/ast/type-data/expressions.ts @@ -1,5 +1,5 @@ /** - * Semantic type data definitions for all expression AST nodes. + * Semantic type data declarations for all expression AST nodes. * @since 0.10.0 */ import type { KipperFunction } from "../../const"; @@ -129,7 +129,7 @@ export interface MemberAccessExpressionTypeSemantics extends ExpressionTypeSeman * Type Semantics for AST Node {@link FunctionCallExpression}. * @since 0.5.0 */ -export interface FunctionCallPostfixTypeSemantics extends ExpressionTypeSemantics { +export interface FunctionCallExpressionTypeSemantics extends ExpressionTypeSemantics { /** * The function that this expression calls. Can be either a {@link ScopeFunctionDeclaration function declaration} or * a {@link ScopeVariableDeclaration function in a variable}. diff --git a/kipper/core/src/compiler/ast/type-data/index.ts b/kipper/core/src/compiler/ast/type-data/index.ts index 9d2bf722a..e2a5d1e3c 100644 --- a/kipper/core/src/compiler/ast/type-data/index.ts +++ b/kipper/core/src/compiler/ast/type-data/index.ts @@ -1,5 +1,5 @@ /** - * Semantic data definitions for all AST nodes. + * Semantic data declarations for all AST nodes. * @since 0.10.0 */ export * from "./definitions"; diff --git a/kipper/core/src/compiler/ast/type-data/statements.ts b/kipper/core/src/compiler/ast/type-data/statements.ts index 9d06dbabb..635780729 100644 --- a/kipper/core/src/compiler/ast/type-data/statements.ts +++ b/kipper/core/src/compiler/ast/type-data/statements.ts @@ -1,5 +1,5 @@ /** - * Semantic type data definitions for all statement AST nodes. + * Semantic type data declarations for all statement AST nodes. * @since 0.10.0 */ import type { TypeData } from "../../ast"; diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index c9058d68c..a72220e2b 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -1,5 +1,5 @@ /** - * Constant definitions and types for the compiler implementation. + * Constant declarations and types for the compiler implementation. * @since 0.3.0 */ import type { diff --git a/kipper/core/src/compiler/program-ctx.ts b/kipper/core/src/compiler/program-ctx.ts index 08e284af4..df3da0c9d 100644 --- a/kipper/core/src/compiler/program-ctx.ts +++ b/kipper/core/src/compiler/program-ctx.ts @@ -53,7 +53,7 @@ export class KipperProgramContext { private _compiledCode: Array | undefined; /** - * The global scope of this program, containing all variable and function definitions + * The global scope of this program, containing all variable and function declarations * @private */ private readonly _globalScope: GlobalScope; From f2d1f38e99a25145483c0f9e3283d9fd229c5d3b Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 4 Apr 2023 17:07:10 +0200 Subject: [PATCH 014/257] Updated tsconfig.json --- tsconfig.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 35746138f..29218b121 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,7 @@ "outDir": "./lib", "target": "es2016", "lib": [ - "ES2016" + "ES7", ] // ES7 -> ES2016 }, @@ -22,6 +22,7 @@ "compilerOptions": { "rootDir": ".", "sourceRoot": ".", + "sourceMap": true, }, "files": true }, @@ -40,6 +41,6 @@ "kipper/target-ts", ], "files": [ - "./kipper/index.ts" + "./kipper/index.ts", ] } From f69701a8c8c5af530359d4c47b65f2718eeec8e8 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 4 Apr 2023 17:07:01 +0200 Subject: [PATCH 015/257] Restructured node classes and create new file structure for them --- CHANGELOG.md | 6 + .../analysis/analyser/type-checker.ts | 4 +- .../analysis/symbol-table/function-scope.ts | 2 +- .../analysis/symbol-table/global-scope.ts | 4 +- .../analysis/symbol-table/local-scope.ts | 2 +- .../src/compiler/ast/analysable-ast-node.ts | 4 +- kipper/core/src/compiler/ast/ast-generator.ts | 27 +- .../src/compiler/ast/{nodes => }/factories.ts | 15 +- .../ast/nodes/declarations/declaration.ts | 110 + .../declarations/function-declaration.ts | 188 ++ .../compiler/ast/nodes/declarations/index.ts | 9 + .../declarations/parameter-declaration.ts | 147 + .../declarations/variable-declaration.ts | 189 ++ .../src/compiler/ast/nodes/definitions.ts | 608 ---- .../src/compiler/ast/nodes/expressions.ts | 2806 ----------------- .../arithmetic/additive-expression.ts | 125 + .../arithmetic/arithmetic-expression.ts | 32 + .../ast/nodes/expressions/arithmetic/index.ts | 7 + .../arithmetic/multiplicative-expression.ts | 132 + .../expressions/assignment-expression.ts | 152 + .../expressions/cast-or-convert-expression.ts | 131 + .../comparative/comparative-expression.ts | 36 + .../comparative/equality-expression.ts | 117 + .../nodes/expressions/comparative/index.ts | 8 + .../comparative/relational-expression.ts | 132 + .../expressions/conditional-expression.ts | 93 + .../ast/nodes/expressions/expression.ts | 177 ++ .../expressions/function-call-expression.ts | 132 + .../compiler/ast/nodes/expressions/index.ts | 19 + .../ast/nodes/expressions/logical/index.ts | 8 + .../logical/logical-and-expression.ts | 111 + .../expressions/logical/logical-expression.ts | 39 + .../logical/logical-or-expression.ts | 112 + .../expressions/member-access-expression.ts | 152 + ...crement-or-decrement-postfix-expression.ts | 110 + .../ast/nodes/expressions/postfix/index.ts | 6 + .../constant/array-primary-expression.ts | 86 + .../constant/bool-primary-expression.ts | 87 + .../primary/constant/constant-expression.ts | 51 + .../expressions/primary/constant/index.ts | 10 + .../constant/number-primary-expression.ts | 88 + .../constant/string-primary-expression.ts | 87 + ...or-null-or-undefined-primary-expression.ts | 89 + .../primary/fstring-primary-expression.ts | 91 + .../primary/identifier-primary-expression.ts | 124 + .../ast/nodes/expressions/primary/index.ts | 9 + .../expressions/tangled-primary-expression.ts | 102 + .../generic-type-specifier-expression.ts | 86 + .../identifier-type-specifier-expression.ts | 98 + .../nodes/expressions/type-specifier/index.ts | 9 + .../type-specifier-expression.ts | 45 + .../typeof-type-specifier-expression.ts | 82 + ...increment-or-decrement-unary-expression.ts | 111 + .../ast/nodes/expressions/unary/index.ts | 8 + .../operator-modified-unary-expression.ts | 121 + .../expressions/unary/unary-expression.ts | 44 + kipper/core/src/compiler/ast/nodes/index.ts | 8 +- .../core/src/compiler/ast/nodes/statements.ts | 920 ------ .../nodes/statements/compound-statement.ts | 98 + .../nodes/statements/expression-statement.ts | 85 + .../ast/nodes/statements/if-statement.ts | 106 + .../compiler/ast/nodes/statements/index.ts | 13 + .../iteration/do-while-loop-statement.ts | 91 + .../iteration/for-loop-statement.ts | 125 + .../ast/nodes/statements/iteration/index.ts | 4 + .../iteration/iteration-statement.ts | 43 + .../iteration/while-loop-statement.ts | 93 + .../ast/nodes/statements/jump-statement.ts | 92 + .../ast/nodes/statements/return-statement.ts | 105 + .../ast/nodes/statements/statement.ts | 64 + .../ast/nodes/statements/switch-statement.ts | 89 + kipper/core/src/compiler/ast/root-ast-node.ts | 3 +- .../compiler/ast/semantic-data/definitions.ts | 5 +- .../compiler/ast/semantic-data/expressions.ts | 34 +- .../src/compiler/ast/semantic-data/index.ts | 2 +- .../compiler/ast/semantic-data/statements.ts | 5 +- .../src/compiler/ast/type-data/definitions.ts | 2 +- .../src/compiler/ast/type-data/expressions.ts | 4 +- .../core/src/compiler/ast/type-data/index.ts | 2 +- .../src/compiler/ast/type-data/statements.ts | 2 +- kipper/core/src/compiler/const.ts | 2 +- kipper/core/src/compiler/program-ctx.ts | 2 +- 82 files changed, 4976 insertions(+), 4403 deletions(-) rename kipper/core/src/compiler/ast/{nodes => }/factories.ts (96%) create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/declaration.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/definitions.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/statements.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/if-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/return-statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/statement.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 29a19b011..69ccabba5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,12 @@ To use development versions of Kipper download the ### Changed +- Made `VoidOrNullOrUndefinedPrimaryExpression` a constant expression and inherit from the `ConstantExpression` class. + This means it's AST kind number is now also added to the `ASTConstantExpressionKind` type and its context class is + also part of the `ParserConstantExpressionContext` type. +- Renamed: + - `FunctionCallPostfixTypeSemantics` to `FunctionCallExpressionTypeSemantics`. + ### Fixed - Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead diff --git a/kipper/core/src/compiler/analysis/analyser/type-checker.ts b/kipper/core/src/compiler/analysis/analyser/type-checker.ts index 8049bbd9c..0a9baa91d 100644 --- a/kipper/core/src/compiler/analysis/analyser/type-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/type-checker.ts @@ -8,8 +8,6 @@ import type { KipperProgramContext } from "../../program-ctx"; import type { IncrementOrDecrementPostfixExpressionSemantics, ParameterDeclarationSemantics, - SemanticData, - TypeData, UnaryExpressionSemantics, } from "../../ast"; import { @@ -484,7 +482,7 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { // return type. if (returnType !== "void") { // Recursively check all code paths to ensure all return a value. - const checkChildrenCodePaths = (parent: Statement): boolean => { + const checkChildrenCodePaths = (parent: Statement): boolean => { let returnPathsCovered = false; // If the parent is an if statement, we have to check the if and else branches directly diff --git a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts index 35a96db78..6c3194701 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts @@ -38,7 +38,7 @@ export class FunctionScope extends LocalScope { public addArgument(declaration: ParameterDeclaration): ScopeParameterDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); const scopeDeclaration = new ScopeParameterDeclaration(declaration); diff --git a/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts index 259e0f7a9..637b9cd5e 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts @@ -27,7 +27,7 @@ export class GlobalScope extends Scope { public addFunction(declaration: FunctionDeclaration): ScopeFunctionDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this.programCtx.globalScope); const scopeDeclaration = new ScopeFunctionDeclaration(declaration); @@ -38,7 +38,7 @@ export class GlobalScope extends Scope { public addVariable(declaration: VariableDeclaration): ScopeVariableDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this.programCtx.globalScope); const scopeDeclaration = new ScopeVariableDeclaration(declaration); diff --git a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts index 14d576330..cc368c580 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts @@ -36,7 +36,7 @@ export class LocalScope extends Scope { public addVariable(declaration: VariableDeclaration): ScopeVariableDeclaration { const identifier = declaration.getSemanticData().identifier; - // Ensuring that the declaration does not overwrite other definitions + // Ensuring that the declaration does not overwrite other declarations this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); const scopeDeclaration = new ScopeVariableDeclaration(declaration); diff --git a/kipper/core/src/compiler/ast/analysable-ast-node.ts b/kipper/core/src/compiler/ast/analysable-ast-node.ts index 8562dbf44..8802768df 100644 --- a/kipper/core/src/compiler/ast/analysable-ast-node.ts +++ b/kipper/core/src/compiler/ast/analysable-ast-node.ts @@ -147,7 +147,7 @@ export abstract class AnalysableASTNode< /** * Ensures that this node successfully passed the semantic analysis. This will be primarily used by statements and - * definitions, which depend on other nodes to be semantically valid. + * declarations, which depend on other nodes to be semantically valid. * * This is done by checking if the {@link AnalysableASTNode.hasFailed hasFailed} property is set to true and if the * {@link AnalysableASTNode.semanticData semanticData} property is undefined. If both of these conditions are met, @@ -174,7 +174,7 @@ export abstract class AnalysableASTNode< /** * Ensures that this node successfully passed the type checking step of semantic analysis. This will be primarily used - * by statements and definitions, which depend on other nodes to be semantically valid. + * by statements and declarations, which depend on other nodes to be semantically valid. * * This is done by checking if the {@link AnalysableASTNode.hasFailed hasFailed} property is set to true and if the * {@link AnalysableASTNode.typeSemantics typeSemantics} property is undefined. If both of these conditions are met, diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 0f4db5fa6..1319847bb 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -2,6 +2,9 @@ * Antlr4 listener for walking through a parser tree and processing its content. * @since 0.0.3 */ +import type { ParserDeclarationContext } from "./ast-types"; +import type { ASTNodeParserContext, ParserExpressionContext, ParserStatementContext } from "./ast-types"; +import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; import type { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, @@ -60,22 +63,14 @@ import type { VariableDeclarationContext, } from "../parser"; import type { KipperProgramContext } from "../program-ctx"; -import { - Declaration, - DeclarationASTNodeFactory, - Expression, - ExpressionASTNodeFactory, - Statement, - StatementASTNodeFactory, - RootASTNode, - CompilableASTNode, - ParserDeclarationContext, -} from "./"; +import type { CompilableASTNode } from "./compilable-ast-node"; +import type { KipperParserRuleContext } from "../parser"; +import type { ParserRuleContext } from "antlr4ts/ParserRuleContext"; +import { Declaration } from "./nodes"; +import { Expression, Statement } from "./nodes"; +import { RootASTNode } from "./root-ast-node"; +import { DeclarationASTNodeFactory, ExpressionASTNodeFactory, StatementASTNodeFactory } from "./factories"; import { KipperInternalError } from "../../errors"; -import { ASTNodeParserContext, ParserExpressionContext, ParserStatementContext } from "./ast-types"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { KipperParserRuleContext } from "../parser"; -import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; /** * The AST generator, which acts as a listener for a {@link KipperProgramContext}, which walks through a parse tree @@ -237,7 +232,7 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ private handleExitingTreeNode() { if (this._currentExpression) { - // Ensure expressions stay separately handled from statements/definitions + // Ensure expressions stay separately handled from statements/declarations const parent = this._currentExpression?.parent; if (parent instanceof Expression) { this._currentExpression = parent; diff --git a/kipper/core/src/compiler/ast/nodes/factories.ts b/kipper/core/src/compiler/ast/factories.ts similarity index 96% rename from kipper/core/src/compiler/ast/nodes/factories.ts rename to kipper/core/src/compiler/ast/factories.ts index ba7c624db..cf94a3eea 100644 --- a/kipper/core/src/compiler/ast/nodes/factories.ts +++ b/kipper/core/src/compiler/ast/factories.ts @@ -2,7 +2,7 @@ * AST Node factories which are used to create AST nodes from the ANTLR4 parse tree. * @since 0.10.0 */ -import type { CompilableASTNode, CompilableNodeParent } from "../compilable-ast-node"; +import type { CompilableASTNode, CompilableNodeParent } from "./compilable-ast-node"; import type { ASTDeclarationKind, ASTExpressionKind, @@ -11,8 +11,8 @@ import type { ParserDeclarationContext, ParserExpressionContext, ParserStatementContext, -} from "../ast-types"; -import { KipperParserRuleContext, ParserASTMapping } from "../../parser"; +} from "./ast-types"; +import { KipperParserRuleContext, ParserASTMapping } from "../parser"; import { AdditiveExpression, ArrayLiteralPrimaryExpression, @@ -40,9 +40,10 @@ import { TangledPrimaryExpression, TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, -} from "./expressions"; -import { Declaration, FunctionDeclaration, ParameterDeclaration, VariableDeclaration } from "./definitions"; -import { + Declaration, + FunctionDeclaration, + ParameterDeclaration, + VariableDeclaration, CompoundStatement, DoWhileLoopStatement, ExpressionStatement, @@ -53,7 +54,7 @@ import { Statement, SwitchStatement, WhileLoopStatement, -} from "./statements"; +} from "./nodes"; /** * A simple blueprint for a factory for creating AST nodes from a parser context. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts new file mode 100644 index 000000000..7e320eca1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -0,0 +1,110 @@ +/** + * The base abstract AST node class for all declarations/declarations, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link DeclarationASTNodeFactory} class. + * + * Note! Any function, variable or parameter declaration in Kipper will be registered in a {@link Scope}, which will + * define the visibility of the variable. The only exception is a {@link ParameterDeclaration}, which is bound to a + * function and its local scope. + * @since 0.1.0 + */ +import type { DeclarationSemantics } from "../../semantic-data"; +import type { DeclarationTypeData } from "../../type-data"; +import type { TranslatedCodeLine } from "../../../const"; +import type { ASTDeclarationKind, ParserDeclarationContext } from "../../ast-types"; +import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; +import type { ScopeDeclaration } from "../../../analysis"; +import { CompilableASTNode, type CompilableNodeParent } from "../../compilable-ast-node"; +import { UndefinedDeclarationCtxError } from "../../../../errors"; + +/** + * The base abstract AST node class for all declarations/declarations, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link DeclarationASTNodeFactory} class. + * + * Note! Any function, variable or parameter declaration in Kipper will be registered in a {@link Scope}, which will + * define the visibility of the variable. The only exception is a {@link ParameterDeclaration}, which is bound to a + * function and its local scope. + * @since 0.1.0 + */ +export abstract class Declaration< + Semantics extends DeclarationSemantics = DeclarationSemantics, + TypeData extends DeclarationTypeData = DeclarationTypeData, +> extends CompilableASTNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParserDeclarationContext; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected _scopeDeclaration: ScopeDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public abstract readonly kind: ASTDeclarationKind; + + protected constructor(antlrRuleCtx: ParserDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + + // Manually add the child to the parent + parent.addNewChild(this); + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ParserDeclarationContext { + return this._antlrRuleCtx; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public get scopeDeclaration(): ScopeDeclaration | undefined { + return this._scopeDeclaration; + } + + protected set scopeDeclaration(declaration: ScopeDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + /** + * Returns the {@link scopeDeclaration scope declaration ctx} of this declaration and throws an error in case + * it is undefined. + * @throws UndefinedDeclarationCtx If {@link scopeDeclaration} is undefined. + * @since 0.10.0 + */ + public getScopeDeclaration(): ScopeDeclaration { + if (!this.scopeDeclaration) { + throw new UndefinedDeclarationCtxError(); + } + return this.scopeDeclaration; + } + + /** + * Generates the typescript code for this item, and all children (if they exist). + * @since 0.8.0 + */ + public async translateCtxAndChildren(): Promise> { + return await this.targetCodeGenerator(this); + } + + public abstract targetSemanticAnalysis: TargetASTNodeSemanticAnalyser | undefined; + public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts new file mode 100644 index 000000000..7e0540e9f --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts @@ -0,0 +1,188 @@ +/** + * Function definition class, which represents the definition of a function in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * @since 0.1.2 + */ +import type { ScopeNode } from "../../scope-node"; +import type { FunctionDeclarationSemantics } from "../../semantic-data"; +import type { FunctionDeclarationTypeSemantics } from "../../type-data"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { CompoundStatement, Statement } from "../statements"; +import type { IdentifierTypeSpecifierExpression } from "../expressions"; +import { FunctionScope, ScopeFunctionDeclaration, UncheckedType } from "../../../analysis"; +import { CompoundStatementContext, DeclaratorContext, FunctionDeclarationContext, KipperParser } from "../../../parser"; +import { Declaration } from "./declaration"; +import { ParameterDeclaration } from "./parameter-declaration"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * Function definition class, which represents the definition of a function in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * @since 0.1.2 + */ +export class FunctionDeclaration + extends Declaration + implements ScopeNode +{ + /** + * The private field '_innerScope' that actually stores the variable data, + * which is returned inside the {@link this.innerScope}. + * @private + */ + private readonly _innerScope: FunctionScope; + + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: FunctionDeclarationContext; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected override _scopeDeclaration: ScopeFunctionDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_functionDeclaration; + + constructor(antlrRuleCtx: FunctionDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._innerScope = new FunctionScope(this); + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): FunctionDeclarationContext { + return this._antlrRuleCtx; + } + + /** + * Gets the inner scope of this function, where also the {@link semanticData.params arguments} should be registered. + * @since 0.10.0 + */ + public get innerScope(): FunctionScope { + return this._innerScope; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public get scopeDeclaration(): ScopeFunctionDeclaration | undefined { + return this._scopeDeclaration; + } + + protected set scopeDeclaration(declaration: ScopeFunctionDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + public getScopeDeclaration(): ScopeFunctionDeclaration { + /* istanbul ignore next: super function already being run/tested */ + return super.getScopeDeclaration(); + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const parseTreeChildren = this.getAntlrRuleChildren(); + + // Fetch context instances + let declaratorCtx = ( + parseTreeChildren.find((val) => val instanceof DeclaratorContext) + ); + + let body: Statement | undefined; + let retTypeSpecifier: IdentifierTypeSpecifierExpression | undefined; + let params: Array = []; + + // Create shallow copy of the children + let children = [...this.children]; + + // Evaluate the primary semantic data for the function + while (children.length > 0) { + let child = children.shift(); + + if (child instanceof ParameterDeclaration) { + params.push(child); + } else { + // Once the return type has been reached, stop, as the last two items should be the return type and func body + retTypeSpecifier = child; + body = children.pop(); + break; + } + } + + // Ensure that the children are fully present and not undefined + // Also make sure the scope has the required argument field for the function (is of type 'FunctionScope') + if (!declaratorCtx || !retTypeSpecifier) { + throw new UnableToDetermineSemanticDataError(); + } + + // Check the function body and ensure it exists/and is valid + this.programCtx.semanticCheck(this).validFunctionBody(body); + + const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); + const type: UncheckedType = retTypeSpecifier.getSemanticData().typeIdentifier; + + this.semanticData = { + isDefined: parseTreeChildren.find((val) => val instanceof CompoundStatementContext) !== undefined, + identifier: identifier, + returnTypeSpecifier: retTypeSpecifier, + returnType: type, + params: params, + functionBody: body, // Will always syntactically be a compound statement + }; + + // Add function definition to the current scope + this.scopeDeclaration = this.scope.addFunction(this); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type that will be returned using the return type specifier + const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + returnType: returnType, + }; + + // Ensure that all code paths return a value + this.programCtx.typeCheck(this).validReturnCodePathsInFunctionBody(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.functionDeclaration; + readonly targetCodeGenerator = this.codeGenerator.functionDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/index.ts b/kipper/core/src/compiler/ast/nodes/declarations/index.ts new file mode 100644 index 000000000..51654fb51 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/index.ts @@ -0,0 +1,9 @@ +/** + * Declaration module containing the classes representing declarations and definitions, which can be used to define a + * variable, function or parameter and make up an essential part of any program. + * @since 0.11.0 + */ +export * from "./declaration"; +export * from "./parameter-declaration"; +export * from "./function-declaration"; +export * from "./variable-declaration"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts new file mode 100644 index 000000000..50413b229 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts @@ -0,0 +1,147 @@ +/** + * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. + * @since 0.1.2 + */ +import type { ParameterDeclarationSemantics } from "../../semantic-data"; +import type { ParameterDeclarationTypeSemantics } from "../../type-data"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { FunctionScope, ScopeParameterDeclaration } from "../../../analysis"; +import type { FunctionDeclaration } from "./function-declaration"; +import type { IdentifierTypeSpecifierExpression } from "../expressions"; +import { Declaration } from "./declaration"; +import { KipperParser, ParameterDeclarationContext } from "../../../parser"; +import { getParseTreeSource } from "../../../../utils"; + +/** + * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. + * @since 0.1.2 + */ +export class ParameterDeclaration extends Declaration< + ParameterDeclarationSemantics, + ParameterDeclarationTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParameterDeclarationContext; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected override _scopeDeclaration: ScopeParameterDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_parameterDeclaration; + + constructor(antlrRuleCtx: ParameterDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ParameterDeclarationContext { + return this._antlrRuleCtx; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public override get scopeDeclaration(): ScopeParameterDeclaration | undefined { + return this._scopeDeclaration; + } + + protected override set scopeDeclaration(declaration: ScopeParameterDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + public override getScopeDeclaration(): ScopeParameterDeclaration { + /* istanbul ignore next: super function already being run/tested */ + return super.getScopeDeclaration(); + } + + /** + * Registers this parameter in the {@link semanticData.func.innerScope scope} of the + * {@link this.semanticData.func parent function}. + * + * This will also populate the {@link scopeDeclaration} field, since only after the parameter is registered in the + * scope the {@link scopeDeclaration} is created. + * @param scopeToUse The scope to register the parameter in. Should match + * {@link this.semantic.func.innerScope the scope of the parent function}. + * @since 0.10.0 + */ + public async addParamToFunctionScope(scopeToUse: FunctionScope): Promise { + this.scopeDeclaration = scopeToUse.addArgument(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const parseTreeChildren = this.getAntlrRuleChildren(); + + // The type specifier of the parameter + const typeSpecifier = this.children[0]; + + this.semanticData = { + identifier: getParseTreeSource(this.tokenStream, parseTreeChildren[0]), + valueTypeSpecifier: typeSpecifier, + valueType: typeSpecifier.getSemanticData().typeIdentifier, + func: this.parent, + }; + + // Register this parameter in the function scope + if (this.semanticData.func.innerScope) { + await this.addParamToFunctionScope(this.semanticData.func.innerScope); + } + + // IMPORTANT! If 'innerScope' returns undefined, then the function has an error and the parameter should not be + // registered in the scope. For now, we will ignore the error, since the function will throw an error anyway. + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type that will be returned using the value type specifier + const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + valueType: valueType, + }; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.parameterDeclaration; + readonly targetCodeGenerator = this.codeGenerator.parameterDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts new file mode 100644 index 000000000..96bc91039 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts @@ -0,0 +1,189 @@ +/** + * Variable declaration class, which represents the declaration and or definition of a variable in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * + * In case that {@link scope} is of type {@link KipperProgramContext}, then the scope is defined as global + * (accessible for the entire program). + */ +import type { VariableDeclarationSemantics } from "../../semantic-data"; +import type { VariableDeclarationTypeSemantics } from "../../type-data"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { ScopeVariableDeclaration, UncheckedType } from "../../../analysis"; +import type { Expression, IdentifierTypeSpecifierExpression } from "../expressions"; +import type { ParseTree } from "antlr4ts/tree"; +import type { KipperStorageType } from "../../../const"; +import { Declaration } from "./declaration"; +import { + DeclaratorContext, + InitDeclaratorContext, + KipperParser, + StorageTypeSpecifierContext, + VariableDeclarationContext, +} from "../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * Variable declaration class, which represents the declaration and or definition of a variable in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + * + * In case that {@link scope} is of type {@link KipperProgramContext}, then the scope is defined as global + * (accessible for the entire program). + */ +export class VariableDeclaration extends Declaration { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: VariableDeclarationContext; + + /** + * The private field '_children' that actually stores the variable data, + * which is returned inside the {@link this.children}. + * @private + */ + protected override _children: Array; + + /** + * The private field '_scopeDeclaration' that actually stores the variable data, + * which is returned inside the {@link this.scopeDeclaration}. + * @private + */ + protected override _scopeDeclaration: ScopeVariableDeclaration | undefined; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_variableDeclaration; + + constructor(antlrRuleCtx: VariableDeclarationContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): VariableDeclarationContext { + return this._antlrRuleCtx; + } + + public override get children(): Array { + return this._children; + } + + /** + * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration + * in the {@link scope parent scope}. + * @since 0.10.0 + */ + public get scopeDeclaration(): ScopeVariableDeclaration | undefined { + return this._scopeDeclaration; + } + + protected set scopeDeclaration(declaration: ScopeVariableDeclaration | undefined) { + this._scopeDeclaration = declaration; + } + + public getScopeDeclaration(): ScopeVariableDeclaration { + return super.getScopeDeclaration(); + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const children: Array = this.getAntlrRuleChildren(); + + // Determine the ctx instances + const storageTypeCtx = ( + children.find((val) => val instanceof StorageTypeSpecifierContext) + ); + const initDeclaratorCtx = ( + children.find((val) => val instanceof InitDeclaratorContext) + ); + const declaratorCtx = ( + initDeclaratorCtx?.children?.find((val) => val instanceof DeclaratorContext) + ); + + // The type of this declaration, which should always be present, since the parser requires it during the parsing + // step. + const typeSpecifier: IdentifierTypeSpecifierExpression = this.children[0]; + + // There will always be only one child, which is the expression assigned. + // If this child is missing, then this declaration does not contain a definition. + const assignValue: Expression | undefined = this.children[1]; + + // Throw an error if children are incomplete + if (!storageTypeCtx || !initDeclaratorCtx || !declaratorCtx || !typeSpecifier) { + throw new UnableToDetermineSemanticDataError(); + } + + // Semantic data of the variable declaration + const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); + const isDefined = Boolean(assignValue); + const storageType = this.tokenStream.getText(storageTypeCtx.sourceInterval); + const valueType: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; + + this.semanticData = { + isDefined: isDefined, + identifier: identifier, + storageType: storageType, + valueType: valueType, + valueTypeSpecifier: typeSpecifier, + scope: this.scope, + value: assignValue, + }; + + // Add scope variable entry + this.scopeDeclaration = this.scope.addVariable(this); + + // If the storage type is 'const' ensure that the variable has a value set. + this.programCtx.semanticCheck(this).validVariableDeclaration(this); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type that will be returned using the value type specifier + semanticData.valueTypeSpecifier.ensureTypeSemanticallyValid(); // Ensure the type specifier didn't fail + const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + valueType: valueType, + }; + + // If the variable is defined, check whether the assignment is valid + if (semanticData.value) { + semanticData.value.ensureTypeSemanticallyValid(); // Ensure the assignment didn't fail + this.programCtx.typeCheck(this).validVariableDefinition(this.getScopeDeclaration(), semanticData.value); + } + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.variableDeclaration; + readonly targetCodeGenerator = this.codeGenerator.variableDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/definitions.ts b/kipper/core/src/compiler/ast/nodes/definitions.ts deleted file mode 100644 index 800d8469d..000000000 --- a/kipper/core/src/compiler/ast/nodes/definitions.ts +++ /dev/null @@ -1,608 +0,0 @@ -/** - * AST Node Declaration/Definition classes of the Kipper language. - * @since 0.1.0 - */ -import type { ParseTree } from "antlr4ts/tree"; -import type { CompilableNodeParent, SemanticData, TypeData } from ".."; -import { CompilableASTNode } from ".."; -import { - CompoundStatementContext, - DeclaratorContext, - FunctionDeclarationContext, - InitDeclaratorContext, - KipperParser, - ParameterDeclarationContext, - StorageTypeSpecifierContext, - VariableDeclarationContext, -} from "../../parser"; -import { - FunctionScope, - ScopeDeclaration, - ScopeFunctionDeclaration, - ScopeParameterDeclaration, - ScopeVariableDeclaration, - UncheckedType, -} from "../../analysis"; -import type { Expression, IdentifierTypeSpecifierExpression } from "./expressions"; -import type { KipperStorageType, TranslatedCodeLine } from "../../const"; -import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../target-presets"; -import type { - DeclarationSemantics, - FunctionDeclarationSemantics, - ParameterDeclarationSemantics, - VariableDeclarationSemantics, -} from "../semantic-data"; -import type { - DeclarationTypeData, - FunctionDeclarationTypeSemantics, - ParameterDeclarationTypeSemantics, - VariableDeclarationTypeSemantics, -} from "../type-data"; -import { UnableToDetermineSemanticDataError, UndefinedDeclarationCtxError } from "../../../errors"; -import { getParseTreeSource } from "../../../utils"; -import { CompoundStatement, Statement } from "./statements"; -import { ScopeNode } from "../scope-node"; -import { ASTDeclarationKind, ParserDeclarationContext } from "../ast-types"; - -/** - * The base abstract AST node class for all declarations/definitions, which wrap their corresponding - * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. - * - * These AST nodes can be created with the {@link DeclarationASTNodeFactory} class. - * - * Note! Any function, variable or parameter declaration in Kipper will be registered in a {@link Scope}, which will - * define the visibility of the variable. The only exception is a {@link ParameterDeclaration}, which is bound to a - * function and its local scope. - * @since 0.1.0 - */ -export abstract class Declaration< - Semantics extends DeclarationSemantics = DeclarationSemantics, - TypeData extends DeclarationTypeData = DeclarationTypeData, -> extends CompilableASTNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParserDeclarationContext; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected _scopeDeclaration: ScopeDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public abstract readonly kind: ASTDeclarationKind; - - protected constructor(antlrRuleCtx: ParserDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - - // Manually add the child to the parent - parent.addNewChild(this); - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ParserDeclarationContext { - return this._antlrRuleCtx; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public get scopeDeclaration(): ScopeDeclaration | undefined { - return this._scopeDeclaration; - } - - protected set scopeDeclaration(declaration: ScopeDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - /** - * Returns the {@link scopeDeclaration scope declaration ctx} of this declaration and throws an error in case - * it is undefined. - * @throws UndefinedDeclarationCtx If {@link scopeDeclaration} is undefined. - * @since 0.10.0 - */ - public getScopeDeclaration(): ScopeDeclaration { - if (!this.scopeDeclaration) { - throw new UndefinedDeclarationCtxError(); - } - return this.scopeDeclaration; - } - - /** - * Generates the typescript code for this item, and all children (if they exist). - * @since 0.8.0 - */ - public async translateCtxAndChildren(): Promise> { - return await this.targetCodeGenerator(this); - } - - public abstract targetSemanticAnalysis: TargetASTNodeSemanticAnalyser | undefined; - public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; -} - -/** - * Declaration of a parameter inside a {@link FunctionDeclaration}. - * @since 0.1.2 - */ -export class ParameterDeclaration extends Declaration< - ParameterDeclarationSemantics, - ParameterDeclarationTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParameterDeclarationContext; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected override _scopeDeclaration: ScopeParameterDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_parameterDeclaration; - - constructor(antlrRuleCtx: ParameterDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ParameterDeclarationContext { - return this._antlrRuleCtx; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public override get scopeDeclaration(): ScopeParameterDeclaration | undefined { - return this._scopeDeclaration; - } - - protected override set scopeDeclaration(declaration: ScopeParameterDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - public override getScopeDeclaration(): ScopeParameterDeclaration { - /* istanbul ignore next: super function already being run/tested */ - return super.getScopeDeclaration(); - } - - /** - * Registers this parameter in the {@link semanticData.func.innerScope scope} of the - * {@link this.semanticData.func parent function}. - * - * This will also populate the {@link scopeDeclaration} field, since only after the parameter is registered in the - * scope the {@link scopeDeclaration} is created. - * @param scopeToUse The scope to register the parameter in. Should match - * {@link this.semantic.func.innerScope the scope of the parent function}. - * @since 0.10.0 - */ - public async addParamToFunctionScope(scopeToUse: FunctionScope): Promise { - this.scopeDeclaration = scopeToUse.addArgument(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const parseTreeChildren = this.getAntlrRuleChildren(); - - // The type specifier of the parameter - const typeSpecifier = this.children[0]; - - this.semanticData = { - identifier: getParseTreeSource(this.tokenStream, parseTreeChildren[0]), - valueTypeSpecifier: typeSpecifier, - valueType: typeSpecifier.getSemanticData().typeIdentifier, - func: this.parent, - }; - - // Register this parameter in the function scope - if (this.semanticData.func.innerScope) { - await this.addParamToFunctionScope(this.semanticData.func.innerScope); - } - - // IMPORTANT! If 'innerScope' returns undefined, then the function has an error and the parameter should not be - // registered in the scope. For now, we will ignore the error, since the function will throw an error anyway. - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type that will be returned using the value type specifier - const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - valueType: valueType, - }; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.parameterDeclaration; - readonly targetCodeGenerator = this.codeGenerator.parameterDeclaration; -} - -/** - * Function definition class, which represents the definition of a function in the Kipper - * language and is compilable using {@link translateCtxAndChildren}. - * @since 0.1.2 - */ -export class FunctionDeclaration - extends Declaration - implements ScopeNode -{ - /** - * The private field '_innerScope' that actually stores the variable data, - * which is returned inside the {@link this.innerScope}. - * @private - */ - private readonly _innerScope: FunctionScope; - - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: FunctionDeclarationContext; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected override _scopeDeclaration: ScopeFunctionDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_functionDeclaration; - - constructor(antlrRuleCtx: FunctionDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._innerScope = new FunctionScope(this); - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): FunctionDeclarationContext { - return this._antlrRuleCtx; - } - - /** - * Gets the inner scope of this function, where also the {@link semanticData.params arguments} should be registered. - * @since 0.10.0 - */ - public get innerScope(): FunctionScope { - return this._innerScope; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public get scopeDeclaration(): ScopeFunctionDeclaration | undefined { - return this._scopeDeclaration; - } - - protected set scopeDeclaration(declaration: ScopeFunctionDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - public getScopeDeclaration(): ScopeFunctionDeclaration { - /* istanbul ignore next: super function already being run/tested */ - return super.getScopeDeclaration(); - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const parseTreeChildren = this.getAntlrRuleChildren(); - - // Fetch context instances - let declaratorCtx = ( - parseTreeChildren.find((val) => val instanceof DeclaratorContext) - ); - - let body: Statement | undefined; - let retTypeSpecifier: IdentifierTypeSpecifierExpression | undefined; - let params: Array = []; - - // Create shallow copy of the children - let children = [...this.children]; - - // Evaluate the primary semantic data for the function - while (children.length > 0) { - let child = children.shift(); - - if (child instanceof ParameterDeclaration) { - params.push(child); - } else { - // Once the return type has been reached, stop, as the last two items should be the return type and func body - retTypeSpecifier = child; - body = children.pop(); - break; - } - } - - // Ensure that the children are fully present and not undefined - // Also make sure the scope has the required argument field for the function (is of type 'FunctionScope') - if (!declaratorCtx || !retTypeSpecifier) { - throw new UnableToDetermineSemanticDataError(); - } - - // Check the function body and ensure it exists/and is valid - this.programCtx.semanticCheck(this).validFunctionBody(body); - - const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); - const type: UncheckedType = retTypeSpecifier.getSemanticData().typeIdentifier; - - this.semanticData = { - isDefined: parseTreeChildren.find((val) => val instanceof CompoundStatementContext) !== undefined, - identifier: identifier, - returnTypeSpecifier: retTypeSpecifier, - returnType: type, - params: params, - functionBody: body, // Will always syntactically be a compound statement - }; - - // Add function definition to the current scope - this.scopeDeclaration = this.scope.addFunction(this); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type that will be returned using the return type specifier - const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - returnType: returnType, - }; - - // Ensure that all code paths return a value - this.programCtx.typeCheck(this).validReturnCodePathsInFunctionBody(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.functionDeclaration; - readonly targetCodeGenerator = this.codeGenerator.functionDeclaration; -} - -/** - * Variable declaration class, which represents the declaration and or definition of a variable in the Kipper - * language and is compilable using {@link translateCtxAndChildren}. - * - * In case that {@link scope} is of type {@link KipperProgramContext}, then the scope is defined as global - * (accessible for the entire program). - */ -export class VariableDeclaration extends Declaration { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: VariableDeclarationContext; - - /** - * The private field '_children' that actually stores the variable data, - * which is returned inside the {@link this.children}. - * @private - */ - protected override _children: Array; - - /** - * The private field '_scopeDeclaration' that actually stores the variable data, - * which is returned inside the {@link this.scopeDeclaration}. - * @private - */ - protected override _scopeDeclaration: ScopeVariableDeclaration | undefined; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_variableDeclaration; - - constructor(antlrRuleCtx: VariableDeclarationContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): VariableDeclarationContext { - return this._antlrRuleCtx; - } - - public override get children(): Array { - return this._children; - } - - /** - * The {@link ScopeDeclaration} context instance for this declaration, which is used to register the declaration - * in the {@link scope parent scope}. - * @since 0.10.0 - */ - public get scopeDeclaration(): ScopeVariableDeclaration | undefined { - return this._scopeDeclaration; - } - - protected set scopeDeclaration(declaration: ScopeVariableDeclaration | undefined) { - this._scopeDeclaration = declaration; - } - - public getScopeDeclaration(): ScopeVariableDeclaration { - return super.getScopeDeclaration(); - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const children: Array = this.getAntlrRuleChildren(); - - // Determine the ctx instances - const storageTypeCtx = ( - children.find((val) => val instanceof StorageTypeSpecifierContext) - ); - const initDeclaratorCtx = ( - children.find((val) => val instanceof InitDeclaratorContext) - ); - const declaratorCtx = ( - initDeclaratorCtx?.children?.find((val) => val instanceof DeclaratorContext) - ); - - // The type of this declaration, which should always be present, since the parser requires it during the parsing - // step. - const typeSpecifier: IdentifierTypeSpecifierExpression = this.children[0]; - - // There will always be only one child, which is the expression assigned. - // If this child is missing, then this declaration does not contain a definition. - const assignValue: Expression | undefined = this.children[1]; - - // Throw an error if children are incomplete - if (!storageTypeCtx || !initDeclaratorCtx || !declaratorCtx || !typeSpecifier) { - throw new UnableToDetermineSemanticDataError(); - } - - // Semantic data of the variable declaration - const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); - const isDefined = Boolean(assignValue); - const storageType = this.tokenStream.getText(storageTypeCtx.sourceInterval); - const valueType: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; - - this.semanticData = { - isDefined: isDefined, - identifier: identifier, - storageType: storageType, - valueType: valueType, - valueTypeSpecifier: typeSpecifier, - scope: this.scope, - value: assignValue, - }; - - // Add scope variable entry - this.scopeDeclaration = this.scope.addVariable(this); - - // If the storage type is 'const' ensure that the variable has a value set. - this.programCtx.semanticCheck(this).validVariableDeclaration(this); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type that will be returned using the value type specifier - semanticData.valueTypeSpecifier.ensureTypeSemanticallyValid(); // Ensure the type specifier didn't fail - const valueType = semanticData.valueTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - valueType: valueType, - }; - - // If the variable is defined, check whether the assignment is valid - if (semanticData.value) { - semanticData.value.ensureTypeSemanticallyValid(); // Ensure the assignment didn't fail - this.programCtx.typeCheck(this).validVariableDefinition(this.getScopeDeclaration(), semanticData.value); - } - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.variableDeclaration; - readonly targetCodeGenerator = this.codeGenerator.variableDeclaration; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions.ts b/kipper/core/src/compiler/ast/nodes/expressions.ts deleted file mode 100644 index 3e52af14c..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions.ts +++ /dev/null @@ -1,2806 +0,0 @@ -/** - * AST Node Expression classes of the Kipper language. - * @since 0.1.0 - */ -import type { TargetASTNodeCodeGenerator } from "../../target-presets"; -import type { - AdditiveExpressionSemantics, - AssignmentExpressionSemantics, - BoolPrimaryExpressionSemantics, - CastOrConvertExpressionSemantics, - ComparativeExpressionSemantics, - ConditionalExpressionSemantics, - ConstantExpressionSemantics, - EqualityExpressionSemantics, - ExpressionSemantics, - FStringPrimaryExpressionSemantics, - FunctionCallExpressionSemantics, - GenericTypeSpecifierExpressionSemantics, - IdentifierPrimaryExpressionSemantics, - IdentifierTypeSpecifierExpressionSemantics, - IncrementOrDecrementPostfixExpressionSemantics, - IncrementOrDecrementUnaryExpressionSemantics, - ArrayLiteralPrimaryExpressionSemantics, - LogicalAndExpressionSemantics, - LogicalExpressionSemantics, - LogicalOrExpressionSemantics, - MultiplicativeExpressionSemantics, - NumberPrimaryExpressionSemantics, - OperatorModifiedUnaryExpressionSemantics, - RelationalExpressionSemantics, - StringPrimaryExpressionSemantics, - TangledPrimaryExpressionSemantics, - TypeofTypeSpecifierExpressionSemantics, - TypeSpecifierExpressionSemantics, - UnaryExpressionSemantics, - VoidOrNullOrUndefinedPrimaryExpressionSemantics, - MemberAccessExpressionSemantics, -} from "../semantic-data"; -import type { - AdditiveExpressionTypeSemantics, - AssignmentExpressionTypeSemantics, - BoolPrimaryExpressionTypeSemantics, - CastOrConvertExpressionTypeSemantics, - ComparativeExpressionTypeSemantics, - ConditionalExpressionTypeSemantics, - EqualityExpressionTypeSemantics, - ExpressionTypeSemantics, - FStringPrimaryExpressionTypeSemantics, - FunctionCallPostfixTypeSemantics, - GenericTypeSpecifierExpressionTypeSemantics, - IdentifierPrimaryExpressionTypeSemantics, - IdentifierTypeSpecifierExpressionTypeSemantics, - IncrementOrDecrementPostfixExpressionTypeSemantics, - IncrementOrDecrementUnaryTypeSemantics, - ArrayLiteralPrimaryExpressionTypeSemantics, - LogicalAndExpressionTypeSemantics, - LogicalExpressionTypeSemantics, - LogicalOrExpressionTypeSemantics, - MultiplicativeTypeSemantics, - NumberPrimaryExpressionTypeSemantics, - OperatorModifiedUnaryTypeSemantics, - RelationalExpressionTypeSemantics, - StringPrimaryExpressionTypeSemantics, - TangledPrimaryTypeSemantics, - TypeofTypeSpecifierExpressionTypeSemantics, - TypeSpecifierExpressionTypeSemantics, - UnaryExpressionTypeSemantics, - VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics, - MemberAccessExpressionTypeSemantics, -} from "../type-data"; -import { - KipperAdditiveOperator, - kipperAdditiveOperators, - kipperArithmeticAssignOperators, - KipperAssignOperator, - KipperBoolTypeLiterals, - KipperEqualityOperator, - kipperEqualityOperators, - KipperIncrementOrDecrementOperator, - kipperLogicalAndOperator, - kipperLogicalOrOperator, - KipperMultiplicativeOperator, - kipperMultiplicativeOperators, - KipperNegateOperator, - KipperNullType, - KipperReferenceableFunction, - KipperRelationalOperator, - kipperRelationalOperators, - KipperSignOperator, - kipperUnaryModifierOperators, - KipperUndefinedType, - KipperVoidType, - TranslatedExpression, -} from "../../const"; -import { kipperInternalBuiltInFunctions } from "../../runtime-built-ins"; -import { CheckedType, ScopeDeclaration, ScopeVariableDeclaration, UncheckedType } from "../../analysis"; -import { - KipperNotImplementedError, - MissingRequiredSemanticDataError, - UnableToDetermineSemanticDataError, -} from "../../../errors"; -import { getConversionFunctionIdentifier, getParseRuleSource } from "../../../utils"; -import { - AdditiveExpressionContext, - AssignmentExpressionContext, - BoolPrimaryExpressionContext, - CastOrConvertExpressionContext, - ConditionalExpressionContext, - EqualityExpressionContext, - FStringPrimaryExpressionContext, - FunctionCallExpressionContext, - GenericTypeSpecifierContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - ArrayLiteralPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NumberPrimaryExpressionContext, - OperatorModifiedUnaryExpressionContext, - RelationalExpressionContext, - StringPrimaryExpressionContext, - TangledPrimaryExpressionContext, - TypeofTypeSpecifierContext, - UnaryOperatorContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - BracketNotationMemberAccessExpressionContext, - DotNotationMemberAccessExpressionContext, - SliceNotationMemberAccessExpressionContext, - ParserASTMapping, - KipperParserRuleContext, - SliceNotationContext, -} from "../../parser"; -import { CompilableASTNode } from "../compilable-ast-node"; -import { TerminalNode } from "antlr4ts/tree"; -import { ASTExpressionKind, ParserExpressionContext } from "../ast-types"; - -/** - * The base abstract AST node class for all expressions, which wrap their corresponding - * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. - * - * These AST nodes can be created with the {@link ExpressionASTNodeFactory} class. - * @since 0.1.0 - */ -export abstract class Expression< - Semantics extends ExpressionSemantics = ExpressionSemantics, - TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, -> extends CompilableASTNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParserExpressionContext; - - protected override _children: Array; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public abstract readonly kind: ASTExpressionKind; - - protected constructor(antlrRuleCtx: ParserExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - - // Manually add the child to the parent - parent.addNewChild(this); - } - - public get children(): Array { - return this._children; - } - - public addNewChild(newChild: Expression) { - this._children.push(newChild); - } - - /** - * Returns whether this expression has any side effects. This means that the expression will change the state of the - * program in some way and not only return a value. - * - * This specifically can mean it assigns or modifies a variable, calls a function, or throws an error. - * @since 0.10.0 - */ - public hasSideEffects(): boolean { - return false; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public abstract checkForWarnings?(): Promise; - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ParserExpressionContext { - return this._antlrRuleCtx; - } - - /** - * Semantically analyses the code inside this AST node and all {@link this.children children nodes}. - * - * This function will recursively call itself on the {@link this.children} instances and analyse the deepest children - * nodes first, working up as the tokens get more complex. This way the parent tokens can access the semantics of - * the children and properly process itself. - * - * This function will set the {@link this.semanticData} property and allow the use of {@link this.getSemanticData}, - * without getting any error. - * @since 0.8.0 - */ - public override async semanticAnalysis(): Promise { - // Start with the evaluation of the children - await this.semanticallyAnalyseChildren(); - - // If the semantic analysis until now hasn't failed, do the semantic analysis of this node (if defined) - // Note: The specific AST node will have to handle errors in their children and ensure for analysis all required - // data is present. - // This overwrites the default behaviour of every node handling the errors in the children - if (!this.hasFailed && this.primarySemanticAnalysis !== undefined) { - try { - await this.primarySemanticAnalysis(); - } catch (e) { - if (e instanceof MissingRequiredSemanticDataError) { - this._skippedSemanticAnalysis = true; - } - this.handleSemanticError(e); - } - } - } - - /** - * Performs type checking on this AST node and all {@link this.children children nodes}. This uses the - * {@link this.semanticData semantic data} that was evaluated during {@link this.semanticAnalysis semantic analysis}. - * @since 0.10.0 - */ - public override async semanticTypeChecking(): Promise { - // Start with the evaluation of the children - await this.semanticallyTypeCheckChildren(); - - // If the semantic analysis until now hasn't failed, do the semantic type checking of this node (if defined) - // This overwrites the default behaviour of every node handling the errors in the children - if (!this.hasFailed && !this.skippedSemanticAnalysis && this.primarySemanticTypeChecking !== undefined) { - try { - await this.primarySemanticTypeChecking(); - } catch (e) { - if (e instanceof MissingRequiredSemanticDataError) { - this._skippedSemanticAnalysis = true; - } - this.handleSemanticError(e); - } - } - } - - /** - * Wrap-up semantic analysis, which analyses this AST node and all {@link this.children children nodes}, and - * checks whether they are semantically valid for the {@link this.target target language}. This uses the - * {@link this.semanticData semantic data} and {@link this.typeData type data} that was evaluated during the previous - * {@link this.semanticAnalysis semantic analysis} and {@link this.semanticTypeChecking type checking} steps. - * @since 0.10.0 - */ - public override async wrapUpSemanticAnalysis(): Promise { - // Start with the evaluation of the children - await this.targetSemanticallyAnalyseChildren(); - - // If the semantic analysis until now hasn't failed, do the target semantic analysis of this node (if defined) - // This overwrites the default behaviour of every node handling the errors in the children - if (!this.hasFailed && !this.skippedSemanticTypeChecking && this.targetSemanticAnalysis !== undefined) { - try { - await this.targetSemanticAnalysis(this); - } catch (e) { - if (e instanceof MissingRequiredSemanticDataError) { - this._skippedSemanticAnalysis = true; - } - this.handleSemanticError(e); - } - } - } - - /** - * Generates the typescript code for this item, and all children (if they exist). - * - * Every item in the array represents a token of the expression. - */ - public override async translateCtxAndChildren(): Promise { - return await this.targetCodeGenerator(this); - } - - public abstract targetCodeGenerator: TargetASTNodeCodeGenerator; -} - -/**targetSemanticAnalysis - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. - * @since 0.10.0 - */ -export type ParserConstantExpressionContext = - | NumberPrimaryExpressionContext - | StringPrimaryExpressionContext - | BoolPrimaryExpressionContext - | VoidOrNullOrUndefinedPrimaryExpressionContext - | ArrayLiteralPrimaryExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. - * @since 0.10.0 - */ -export type ASTConstantExpressionKind = - | typeof ParserASTMapping.RULE_numberPrimaryExpression - | typeof ParserASTMapping.RULE_stringPrimaryExpression - | typeof ParserASTMapping.RULE_boolPrimaryExpression - | typeof ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression - | typeof ParserASTMapping.RULE_arrayLiteralPrimaryExpression; - -/** - * Abstract constant expression class representing a constant expression, which was defined in the source code. This - * abstract class only exists to provide the commonality between the different constant expressions. - */ -export abstract class ConstantExpression< - Semantics extends ConstantExpressionSemantics = ConstantExpressionSemantics, - TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserConstantExpressionContext; - public abstract readonly kind: ASTConstantExpressionKind; -} - -/** - * Integer constant expression, which represents a number constant that was defined in the source code. - * @since 0.1.0 - */ -export class NumberPrimaryExpression extends ConstantExpression< - NumberPrimaryExpressionSemantics, - NumberPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: NumberPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_numberPrimaryExpression; - - constructor(antlrRuleCtx: NumberPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // The value should stay the same as written, and the code generator implementation should handle outputting the - // value in the target language - this.semanticData = { - value: this.sourceCode, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'number' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("num"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): NumberPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.numberPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.numberPrimaryExpression; -} - -/** - * List constant expression, which represents a list constant that was defined in the source code. - * @since 0.1.0 - */ -export class ArrayLiteralPrimaryExpression extends ConstantExpression< - ArrayLiteralPrimaryExpressionSemantics, - ArrayLiteralPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ArrayLiteralPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_arrayLiteralPrimaryExpression; - - constructor(antlrRuleCtx: ArrayLiteralPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - value: [], // TODO! Implement list data fetching. - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'list' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("list"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ArrayLiteralPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.listPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.arrayLiteralExpression; -} - -/** - * String constant expression, which represents a string constant that was defined in the source code. - * @since 0.1.0 - */ -export class StringPrimaryExpression extends ConstantExpression< - StringPrimaryExpressionSemantics, - StringPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: StringPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_stringPrimaryExpression; - - constructor(antlrRuleCtx: StringPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - value: this.sourceCode.slice(1, this.sourceCode.length - 1), // Remove string quotation marks - quotationMarks: <`"` | `'`>this.sourceCode[0], - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'str' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("str"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): StringPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.stringPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.stringPrimaryExpression; -} - -/** - * Boolean constant expression representing the built-in constants {@link true} and {@link false}. - * @since 0.8.0 - */ -export class BoolPrimaryExpression extends Expression< - BoolPrimaryExpressionSemantics, - BoolPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: BoolPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_boolPrimaryExpression; - - constructor(antlrRuleCtx: BoolPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - value: this.sourceCode, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): BoolPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.boolPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.boolPrimaryExpression; -} - -/** - * F-String class, which represents an f-string expression in the Kipper language. - * @since 0.1.0 - */ -export class FStringPrimaryExpression extends Expression< - FStringPrimaryExpressionSemantics, - FStringPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: FStringPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_fStringPrimaryExpression; - - constructor(antlrRuleCtx: FStringPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("F-String Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // This will always be of type 'str' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("str"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): FStringPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.fStringPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.fStringPrimaryExpression; -} - -/** - * Identifier expression, which represents an identifier referencing a variable, function or built-in identifier. - * - * This is only represents a reference and not a declaration/definition. - * @since 0.1.0 - */ -export class IdentifierPrimaryExpression extends Expression< - IdentifierPrimaryExpressionSemantics, - IdentifierPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IdentifierPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_identifierPrimaryExpression; - - constructor(antlrRuleCtx: IdentifierPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const identifier = this.sourceCode; - - // Make sure the referenced variable even exists! - const ref = this.programCtx - .semanticCheck(this) - .getExistingReference(identifier, "innerScope" in this.scopeCtx ? this.scopeCtx : undefined); - - // Once we have the identifier and ensured a reference exists, we are done with the primary semantic analysis. - this.semanticData = { - identifier: identifier, - ref: { - refTarget: ref, - srcExpr: this, - }, - }; - - if (!(ref instanceof ScopeDeclaration)) { - this.programCtx.addBuiltInReference(this, ref); - } else { - // If the reference is not used inside an assignment expression, ensure that the reference is defined - // (This is due to the fact that assignments to undefined variables must always be valid, unless it's a - // modifier assignment operator) - if (!(this.parent instanceof AssignmentExpression)) { - this.programCtx.semanticCheck(this).refTargetDefined(ref); - } - } - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - const refTarget = semanticData.ref.refTarget; - - let type: CheckedType; - if (refTarget instanceof ScopeDeclaration) { - type = refTarget.type; - } else { - // Built-in function -> type is 'func' - type = CheckedType.fromCompilableType("valueType" in refTarget ? refTarget.valueType : "func"); - } - - this.typeSemantics = { - evaluatedType: type, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IdentifierPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.identifierPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.identifierPrimaryExpression; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. - * @since 0.10.0 - */ -export type ParserTypeSpecifierExpressionContext = - | IdentifierTypeSpecifierContext - | GenericTypeSpecifierContext - | TypeofTypeSpecifierContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link TypeSpecifierExpression} AST node. - * @since 0.10.0 - */ -export type ASTTypeSpecifierExpressionKind = - | typeof ParserASTMapping.RULE_identifierTypeSpecifier - | typeof ParserASTMapping.RULE_genericTypeSpecifier - | typeof ParserASTMapping.RULE_typeofTypeSpecifier; - -/** - * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the - * different type specifier expressions. - */ -export abstract class TypeSpecifierExpression< - Semantics extends TypeSpecifierExpressionSemantics = TypeSpecifierExpressionSemantics, - TypeSemantics extends TypeSpecifierExpressionTypeSemantics = TypeSpecifierExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserTypeSpecifierExpressionContext; - public abstract readonly kind: ASTTypeSpecifierExpressionKind; -} - -/** - * Type specifier expression, which represents a simple identifier type specifier. - * @example - * num // Number type - * str // String type - * char // Character type - * bool // Boolean type - * @since 0.8.0 - */ -export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< - IdentifierTypeSpecifierExpressionSemantics, - IdentifierTypeSpecifierExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IdentifierTypeSpecifierContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_identifierTypeSpecifier; - - constructor(antlrRuleCtx: IdentifierTypeSpecifierContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - typeIdentifier: new UncheckedType(this.sourceCode), - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Create a checked type instance (this function handles error recovery and invalid types) - const valueType = this.programCtx.typeCheck(this).getCheckedType(semanticData.typeIdentifier); - this.typeSemantics = { - // A type specifier will always evaluate to be of type 'type' - evaluatedType: CheckedType.fromCompilableType("type"), - storedType: valueType, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IdentifierTypeSpecifierContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.identifierTypeSpecifierExpression; - readonly targetCodeGenerator = this.codeGenerator.identifierTypeSpecifierExpression; -} - -/** - * Generic type specifier expression, which represents a generic type specifier. - * @example - * list // List type with number as generic type - * @since 0.8.0 - */ -export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< - GenericTypeSpecifierExpressionSemantics, - GenericTypeSpecifierExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: GenericTypeSpecifierContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_genericTypeSpecifier; - - constructor(antlrRuleCtx: GenericTypeSpecifierContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): GenericTypeSpecifierContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.genericTypeSpecifierExpression; - readonly targetCodeGenerator = this.codeGenerator.genericTypeSpecifierExpression; -} - -/** - * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. - * @since 0.8.0 - */ -export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< - TypeofTypeSpecifierExpressionSemantics, - TypeofTypeSpecifierExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: TypeofTypeSpecifierContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_typeofTypeSpecifier; - - constructor(antlrRuleCtx: TypeofTypeSpecifierContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): TypeofTypeSpecifierContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.typeofTypeSpecifierExpression; - readonly targetCodeGenerator = this.codeGenerator.typeofTypeSpecifierExpression; -} - -/** - * Tangled/Parenthesised expression, which represents a parenthesised expression that wraps another expression and - * increases its order of precedence. - * @example - * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed - * @since 0.1.0 - */ -export class TangledPrimaryExpression extends Expression< - TangledPrimaryExpressionSemantics, - TangledPrimaryTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: TangledPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_tangledPrimaryExpression; - - constructor(antlrRuleCtx: TangledPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Tangled expressions always contain one expression child - const exp: Expression = this.children[0]; - - // Ensure that the child expression is present - if (!exp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - childExp: exp, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const exp = this.getSemanticData().childExp; - - this.typeSemantics = { - // Tangled expressions always evaluate to the type of its child expression - evaluatedType: exp.getTypeSemanticData().evaluatedType, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): TangledPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.tangledPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.tangledPrimaryExpression; -} - -export class VoidOrNullOrUndefinedPrimaryExpression extends Expression< - VoidOrNullOrUndefinedPrimaryExpressionSemantics, - VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression; - - constructor(antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - this.semanticData = { - // Syntactically there can only be 'void', 'null' or 'undefined' stored in this expression - constantIdentifier: this.sourceCode, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.10.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // The evaluated type of this expression will always be equal to the constant identifier that this expression - // contains e.g. either 'void', 'null' or 'undefined'. - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType(semanticData.constantIdentifier), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): VoidOrNullOrUndefinedPrimaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.voidOrNullOrUndefinedPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.voidOrNullOrUndefinedPrimaryExpression; -} - -/** - * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. - * @since 0.1.0 - * @example - * 49++; // 49 will be incremented by 1 - * 11--; // 11 will be decremented by 1 - */ -export class IncrementOrDecrementPostfixExpression extends Expression< - IncrementOrDecrementPostfixExpressionSemantics, - IncrementOrDecrementPostfixExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementPostfixExpression; - - constructor(antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it modifies the value of the operand - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const exp: Expression = this.children[0]; - const operator = this.sourceCode.slice(-2); // After the expression - - // Ensure that the child expression is present - if (!exp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - operand: exp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - this.typeSemantics = { - // This will always be a number - evaluatedType: CheckedType.fromKipperType("num"), - }; - - // Ensure that this expression is valid (e.g. the operand is a number) - this.programCtx.typeCheck(this).validUnaryExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IncrementOrDecrementPostfixExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementPostfixExpression; - readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementPostfixExpression; -} - -/** - * A union of all possible {@link KipperParserRuleContext} rule contexts that {@link MemberAccessExpression} implements. - * @since 0.10.0 - */ -export type MemberAccessExpressionContext = - | DotNotationMemberAccessExpressionContext - | BracketNotationMemberAccessExpressionContext - | SliceNotationMemberAccessExpressionContext; - -/** - * Member access expression, which represents a member access expression that evaluates to a value of a member of an - * object or array. - * @since 0.10.0 - */ -export class MemberAccessExpression extends Expression< - MemberAccessExpressionSemantics, - MemberAccessExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: MemberAccessExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_memberAccessExpression; - - constructor(antlrRuleCtx: MemberAccessExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): MemberAccessExpressionContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Handle the different types of member access expressions - if (this.antlrRuleCtx instanceof DotNotationMemberAccessExpressionContext) { - throw this.programCtx - .semanticCheck(this) - .notImplementedError( - new KipperNotImplementedError("Member access expressions using dot notation are not yet implemented"), - ); - } else if (this.antlrRuleCtx instanceof BracketNotationMemberAccessExpressionContext) { - const objExp = this.children[0]; - const keyExp = this.children[1]; - - // Ensure both required objects are present - if (!objExp || !keyExp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - objectLike: objExp, - propertyIndexOrKeyOrSlice: keyExp, - accessType: "bracket", - }; - - // Add internal reference to the program ctx for the index function, so it will be generated in the output code - // Note: Once objects are implemented, an if statement will be required to check if the object is an array or - // object-like, since for objects the 'get' function will be used instead of the 'index' function. - this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["index"]); - } else { - const sliceNotationAntlrCtx = this.getAntlrRuleChildren()[1] as SliceNotationContext; - const hasStart = sliceNotationAntlrCtx.sliceStart; - const hasEnd = sliceNotationAntlrCtx.sliceEnd; - - // Slice notation requires at least 1 child, which is the object expression - // Note: Both the start and end expression are optional - if one is not present, then the slice is open-ended - const objExp: Expression = this.children[0]; - const startExp: Expression | undefined = hasStart ? this.children[1] : undefined; - const endExp: Expression | undefined = hasEnd ? (hasStart ? this.children[2] : this.children[1]) : undefined; - - // Ensure the object expression is present - if (!objExp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - objectLike: objExp, - propertyIndexOrKeyOrSlice: { start: startExp, end: endExp }, - accessType: "slice", - }; - - // Add internal reference to the program ctx for the slice function, so it will be generated in the output code - this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["slice"]); - } - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Ensure the objectLike expression is indexable/accessible - // Note: This will throw an error if the objectLike expression is not indexable/accessible - const type = this.programCtx.typeCheck(this).getTypeOfMemberAccessExpression(this); - - this.typeSemantics = { - evaluatedType: type, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.memberAccessExpression; - readonly targetCodeGenerator = this.codeGenerator.memberAccessExpression; -} - -/** - * Function call class, which represents a function call expression in the Kipper language. - * @since 0.1.0 - * @example - * call print("Hello world!") - * // or - * print("Hello world!") - */ -export class FunctionCallExpression extends Expression< - FunctionCallExpressionSemantics, - FunctionCallPostfixTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: FunctionCallExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_functionCallExpression; - - constructor(antlrRuleCtx: FunctionCallExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it calls a function - } - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): FunctionCallExpressionContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the identifier of the function that is called - const identifierSemantics = this.children[0].getSemanticData(); - - // Ensure that the identifier is present - if (!identifierSemantics || !identifierSemantics.ref) { - throw new UnableToDetermineSemanticDataError(); - } - - // Every item from index 1 to the end is an argument (First child is the identifier). - // Tries to fetch the function. If it fails throw a {@link UnknownFunctionIdentifier} error. - const args: Array = this.children.length > 1 ? this.children.slice(1, this.children.length) : []; - - this.semanticData = { - identifier: identifierSemantics.identifier, - args: args, - callTarget: identifierSemantics.ref, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Ensure that the reference is a callable function - this.programCtx.typeCheck(this).refTargetCallable(semanticData.callTarget.refTarget); - const calledFunc = semanticData.callTarget.refTarget; - - // Ensure valid arguments are passed - this.programCtx.typeCheck(this).validFunctionCallArguments(calledFunc, semanticData.args); - - // Get the type that the function call will evaluate to - let evaluatedType: CheckedType; - if (calledFunc.returnType instanceof CheckedType) { - evaluatedType = calledFunc.returnType; - } else { - evaluatedType = CheckedType.fromCompilableType(calledFunc.returnType); - } - - // The evaluated type is always equal to the return of the function - this.typeSemantics = { - evaluatedType: evaluatedType, - func: calledFunc, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.functionCallExpression; - readonly targetCodeGenerator = this.codeGenerator.functionCallExpression; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link UnaryExpression} AST node. - * @since 0.10.0 - */ -export type ParserUnaryExpressionContext = - | IncrementOrDecrementUnaryExpressionContext - | OperatorModifiedUnaryExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link UnaryExpression} AST node. - * @since 0.10.0 - */ -export type ASTUnaryExpressionKind = - | typeof ParserASTMapping.RULE_incrementOrDecrementUnaryExpression - | typeof ParserASTMapping.RULE_operatorModifiedUnaryExpression; - -/** - * Abstract unary expression class representing a unary expression, which can be used to modify an expression with - * a specified operator. This abstract class only exists to provide the commonality between the different comparative - * expressions. - * @since 0.9.0 - */ -export abstract class UnaryExpression< - Semantics extends UnaryExpressionSemantics = UnaryExpressionSemantics, - TypeSemantics extends UnaryExpressionTypeSemantics = UnaryExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserUnaryExpressionContext; - public abstract readonly kind: ASTUnaryExpressionKind; -} - -/** - * Increment or decrement expression class, which represents a left-side -- or ++ expression modifying a numeric value. - * @since 0.1.0 - * @example - * ++49; // 49 will be incremented by 1 - * --11; // 11 will be decremented by 1 - */ -export class IncrementOrDecrementUnaryExpression extends UnaryExpression< - IncrementOrDecrementUnaryExpressionSemantics, - IncrementOrDecrementUnaryTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementUnaryExpression; - - constructor(antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it modifies the value of the operand - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const exp: Expression = this.children[0]; - const operator = this.sourceCode.slice(0, 2); // Before the expression - - // Ensure that the child expression is present - if (!exp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - operand: exp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - this.typeSemantics = { - // This will always be a number - evaluatedType: CheckedType.fromKipperType("num"), - }; - - // Ensure that this expression is valid (e.g. the operand is a number) - this.programCtx.typeCheck(this).validUnaryExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): IncrementOrDecrementUnaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementUnaryExpression; - readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementUnaryExpression; -} - -/** - * Operator modified expressions, which are used to modify the value of an expression based on an - * {@link KipperUnaryOperator unary operator.} - * @since 0.1.0 - * @example - * -41 // -41 - * +59 // 59 - */ -export class OperatorModifiedUnaryExpression extends UnaryExpression< - OperatorModifiedUnaryExpressionSemantics, - OperatorModifiedUnaryTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: OperatorModifiedUnaryExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_operatorModifiedUnaryExpression; - - constructor(antlrRuleCtx: OperatorModifiedUnaryExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the operator - const unaryOperator = children.find((token) => { - return ( - token instanceof UnaryOperatorContext && - kipperUnaryModifierOperators.find((op) => op === token.text) !== undefined - ); - })?.text; - - // Get the expression of this unary expression - const exp: Expression = this.children[0]; - - // Ensure that the children are fully present and not undefined - if (!exp || !unaryOperator) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - operator: unaryOperator, - operand: exp, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType(semanticData.operator === "!" ? "bool" : "num"), - }; - - // Ensure the operator is compatible with the type of the operand - this.programCtx.typeCheck(this).validUnaryExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): OperatorModifiedUnaryExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.operatorModifiedUnaryExpression; - readonly targetCodeGenerator = this.codeGenerator.operatorModifiedUnaryExpression; -} - -/** - * Convert expressions, which are used to convert a value to a different type. - * - * For now only conversions are supported, but this will be extended to conversions and casts in the future. - * @since 0.1.0 - * @example - * "4" as num // 4 - * 39 as str // "39" - */ -export class CastOrConvertExpression extends Expression< - CastOrConvertExpressionSemantics, - CastOrConvertExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: CastOrConvertExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_castOrConvertExpression; - - constructor(antlrRuleCtx: CastOrConvertExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // The first child will always be the expression that will be converted - const exp: Expression = this.children[0]; - - // Get the type using the type specifier - const typeSpecifier = this.children[1]; - const type: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; - - // Ensure that the children are fully present and not undefined - if (!exp || !type) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - castTypeSpecifier: typeSpecifier, - castType: type, - exp: exp, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Get the type specified by the type specifier - const evalType = semanticData.castTypeSpecifier.getTypeSemanticData().storedType; - this.typeSemantics = { - // The evaluated type of the expression is equal to the cast type - evaluatedType: evalType, - castType: evalType, - }; - - // Ensure the conversion is valid - this.programCtx.typeCheck(this).validConversion(semanticData.exp, evalType); - - // Add internal reference to the program ctx for the conversion function, so it will be generated in the output code - const internalIdentifier = getConversionFunctionIdentifier( - semanticData.exp.getTypeSemanticData().evaluatedType.identifier, - semanticData.castType.identifier, - ); - if (internalIdentifier in kipperInternalBuiltInFunctions) { - this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions[internalIdentifier]); - } - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): CastOrConvertExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.castOrConvertExpression; - readonly targetCodeGenerator = this.codeGenerator.castOrConvertExpression; -} - -/** - * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. - * - * Divisions, multiplications, and modulus are also considered to be multiplicative operations. - * @since 0.1.0 - * @example - * 16 * 6 // 96 - * 12 / 5 // 2.4 - * 96 % 15 // 6 - * 2 ** 8 // 256 - */ -export class MultiplicativeExpression extends Expression< - MultiplicativeExpressionSemantics, - MultiplicativeTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: MultiplicativeExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_multiplicativeExpression; - - constructor(antlrRuleCtx: MultiplicativeExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the operator - const operator = children.find((token) => { - return ( - token instanceof TerminalNode && kipperMultiplicativeOperators.find((op) => op === token.text) !== undefined - ); - })?.text; - - // Get the expressions of this multiplicative expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!operator || !leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Assert that the arithmetic expression is valid - this.programCtx - .typeCheck(this) - .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); - - // A multiplicative expression will always be of type 'num' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("num"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): MultiplicativeExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.multiplicativeExpression; - readonly targetCodeGenerator = this.codeGenerator.multiplicativeExpression; -} - -/** - * Additive expression, which can be used add together or concatenate two expressions. - * - * Subtraction is also considered to be an additive operation. - * @since 0.1.0 - * @example - * 4 + 4 // 8 - * 9 - 3 // 6 - */ -export class AdditiveExpression extends Expression { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: AdditiveExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_additiveExpression; - - constructor(antlrRuleCtx: AdditiveExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - const operator = children.find((token) => { - return token instanceof TerminalNode && kipperAdditiveOperators.find((op) => op === token.text) !== undefined; - })?.text; - - // Get the expressions of this additive expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!operator || !leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Assert that the arithmetic expression is valid - this.programCtx - .typeCheck(this) - .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); - - this.typeSemantics = { - // Simply use the left operand's type, since the type of the right operand is irrelevant (since they are always - // the same anyway - otherwise there would have already been an error) - evaluatedType: semanticData.leftOp.getTypeSemanticData().evaluatedType, - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): AdditiveExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.additiveExpression; - readonly targetCodeGenerator = this.codeGenerator.additiveExpression; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ComparativeExpression} AST node. - * @since 0.10.0 - */ -export type ParserComparativeExpressionContext = EqualityExpressionContext | RelationalExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. - * @since 0.10.0 - */ -export type ASTComparativeExpressionKind = - | typeof ParserASTMapping.RULE_equalityExpression - | typeof ParserASTMapping.RULE_relationalExpression; - -/** - * Abstract comparative expression class representing a comparative expression, which can be used to compare two - * expressions. This abstract class only exists to provide the commonality between the different comparative expressions. - * @since 0.9.0 - */ -export abstract class ComparativeExpression< - Semantics extends ComparativeExpressionSemantics = ComparativeExpressionSemantics, - TypeSemantics extends ComparativeExpressionTypeSemantics = ComparativeExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserComparativeExpressionContext; - public abstract readonly kind: ASTComparativeExpressionKind; -} - -/** - * Relational expression, which can be used to compare two numeric expressions. - * @since 0.1.0 - * @example - * 19 > 11 // true - * 91 > 99 // false - * 12 >= 11 // true - * 77 >= 77 // true - * 36 >= 43 // false - * 19 < 36 // true - * 91 < 45 // false - * 12 <= 68 // true - * 77 <= 77 // true - * 36 <= 12 // false - */ -export class RelationalExpression extends ComparativeExpression< - RelationalExpressionSemantics, - RelationalExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: RelationalExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_relationalExpression; - - constructor(antlrRuleCtx: RelationalExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the expressions of this relational expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - const operator = children.find((token) => { - return token instanceof TerminalNode && kipperRelationalOperators.find((op) => op === token.text) !== undefined; - })?.text; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp || !operator) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Relational expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - - // Type check the relational expression and ensure its operands are of type 'num' - this.programCtx.typeCheck(this).validRelationalExpression(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): RelationalExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.relationalExpression; - readonly targetCodeGenerator = this.codeGenerator.relationalExpression; -} - -/** - * Equality expression, which can be used to compare two expressions for equality. - * @since 0.1.0 - * @example - * 4 == 4 // true - * 9 == 3 // false - * 32 != 9 // true - * 59 != 59 // false - */ -export class EqualityExpression extends ComparativeExpression< - EqualityExpressionSemantics, - EqualityExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: EqualityExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_equalityExpression; - - constructor(antlrRuleCtx: EqualityExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the raw antlr4 parse-tree children, which should store the operator - const children = this.getAntlrRuleChildren(); - - // Get the expressions of this relational expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - const operator = children.find((token) => { - return token instanceof TerminalNode && kipperEqualityOperators.find((op) => op === token.text) !== undefined; - })?.text; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp || !operator) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, // First expression - rightOp: rightOp, // Second expression - operator: operator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Equality expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): EqualityExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.equalityExpression; - readonly targetCodeGenerator = this.codeGenerator.equalityExpression; -} - -/** - * Union type of all possible {@link ParserASTNode.kind} context classes for a constructable - * {@link LogicalExpression} AST node. - * @since 0.10.0 - */ -export type ParserLogicalExpressionContext = EqualityExpressionContext | RelationalExpressionContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link LogicalExpression} AST node. - * @since 0.10.0 - */ -export type ASTLogicalExpressionKind = - | typeof ParserASTMapping.RULE_logicalAndExpression - | typeof ParserASTMapping.RULE_logicalOrExpression; - -/** - * Logical expression, representing an expression which can be used to combine two expressions/conditions using - * {@link LogicalAndExpression logical AND} or {@link LogicalOrExpression logical OR}. This - * abstract class only exists to provide the commonality between the different logical expressions. - * @abstract - */ -export abstract class LogicalExpression< - Semantics extends LogicalExpressionSemantics = LogicalExpressionSemantics, - TypeSemantics extends LogicalExpressionTypeSemantics = LogicalExpressionTypeSemantics, -> extends Expression { - protected abstract readonly _antlrRuleCtx: ParserLogicalExpressionContext; - public abstract readonly kind: ASTLogicalExpressionKind; -} - -/** - * Logical-and expression, representing an expression which can be used to combine multiple conditions. It will - * evaluate to true if all conditions are true. - * @since 0.1.0 - * @example - * false && false // false - * true && false // false - * false && true // false - * true && true // true - */ -export class LogicalAndExpression extends LogicalExpression< - LogicalAndExpressionSemantics, - LogicalAndExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: LogicalAndExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_logicalAndExpression; - - constructor(antlrRuleCtx: LogicalAndExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the expressions of this logical-and expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, // First expression - rightOp: rightOp, // Second expression - operator: kipperLogicalAndOperator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Logical expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): LogicalAndExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.logicalAndExpression; - readonly targetCodeGenerator = this.codeGenerator.logicalAndExpression; -} - -/** - * Logical-or expression, representing an expression which can be used to combine multiple conditions. It returns true - * if at least one condition is true. - * @since 0.1.0 - * @example - * false || false // false - * true || false // true - * false || true // true - * true || true // true - */ -export class LogicalOrExpression extends LogicalExpression< - LogicalOrExpressionSemantics, - LogicalOrExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: LogicalOrExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_logicalOrExpression; - - constructor(antlrRuleCtx: LogicalOrExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // Get the expressions of this logical-or expression - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - // Ensure that the children are fully present and not undefined - if (!leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, // First expression - rightOp: rightOp, // Second expression - operator: kipperLogicalOrOperator, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - // Logical expressions always return 'bool' - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("bool"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): LogicalOrExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.logicalOrExpression; - readonly targetCodeGenerator = this.codeGenerator.logicalOrExpression; -} - -/** - * Conditional expression, which evaluates a condition and evaluates the left expression if it is true, or the right - * expression if it is false. - * @since 0.1.0 - * @example - * true ? 3 : 4; // 3 - * false ? 3 : 4; // 4 - */ -export class ConditionalExpression extends Expression< - ConditionalExpressionSemantics, - ConditionalExpressionTypeSemantics -> { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ConditionalExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_conditionalExpression; - - constructor(antlrRuleCtx: ConditionalExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): ConditionalExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.conditionalExpression; - readonly targetCodeGenerator = this.codeGenerator.conditionalExpression; -} - -/** - * Assignment expression, which assigns an expression to a variable. This class only represents assigning a value to - * an existing variable, but not creating a new one. - * - * This expression will evaluate to the value that was assigned to the identifier. - * @since 0.1.0 - * @example - * x = 4 - * x += 5 - * x -= 12 - * x *= 2 - * x /= 5 - * x %= 55 - */ -export class AssignmentExpression extends Expression { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: AssignmentExpressionContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = ParserASTMapping.RULE_assignmentExpression; - - constructor(antlrRuleCtx: AssignmentExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public hasSideEffects(): boolean { - return true; // This expression has side effects as it modifies the value of the operand - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const antlrRuleChildren = this.getAntlrRuleChildren(); - - // There will always be only two children, which are the identifier and expression assigned. - const identifier: IdentifierPrimaryExpression = (() => { - const exp = this.children[0]; - - // Ensure that the left-hand side of the expression is an identifier - this.programCtx.semanticCheck(this).validAssignment(exp); - - return exp; - })(); - const assignValue: Expression = this.children[1]; - - // Throw an error if the children are incomplete or the operator can not be determined (antlrRuleChildren[1]) - if (!assignValue || !(antlrRuleChildren[1] instanceof KipperParserRuleContext)) { - throw new UnableToDetermineSemanticDataError(); - } - - const operator = getParseRuleSource(antlrRuleChildren[1]); - const identifierSemantics = identifier.getSemanticData(); - - // Semantics of the assignment - this.semanticData = { - value: assignValue, - identifierCtx: identifier, - identifier: identifierSemantics.identifier, - assignTarget: identifierSemantics.ref, - operator: operator, - }; - - // Ensure that the reference is defined and has a usable value if it's used with an arithmetic operator - if (kipperArithmeticAssignOperators.find((o) => o === operator)) { - this.programCtx.semanticCheck(identifier).refTargetDefined(identifierSemantics.ref.refTarget); - } - - // If the reference was a variable, indicate that the value was updated, since it's being assigned to - if (identifierSemantics.ref.refTarget instanceof ScopeVariableDeclaration) { - identifierSemantics.ref.refTarget.valueWasUpdated = true; - } - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // The evaluated type of an assignment expression is always the evaluated type assigned to the variable - this.typeSemantics = { - evaluatedType: semanticData.value.getTypeSemanticData().evaluatedType, - }; - - // Ensure the assignment is valid and the types match up - this.programCtx.typeCheck(this).validAssignment(this); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - /** - * The antlr context containing the antlr4 metadata for this expression. - */ - public override get antlrRuleCtx(): AssignmentExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.assignmentExpression; - readonly targetCodeGenerator = this.codeGenerator.assignmentExpression; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts new file mode 100644 index 000000000..a804f14e1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts @@ -0,0 +1,125 @@ +/** + * Additive expression, which can be used add together or concatenate two expressions. + * + * Subtraction is also considered to be an additive operation. + * @since 0.1.0 + * @example + * 4 + 4 // 8 + * 9 - 3 // 6 + */ +import type { AdditiveExpressionSemantics } from "../../../semantic-data"; +import type { AdditiveExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { AdditiveExpressionContext, ParserASTMapping } from "../../../../parser"; +import { KipperAdditiveOperator, kipperAdditiveOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { ArithmeticExpression } from "./arithmetic-expression"; + +/** + * Additive expression, which can be used add together or concatenate two expressions. + * + * Subtraction is also considered to be an additive operation. + * @since 0.1.0 + * @example + * 4 + 4 // 8 + * 9 - 3 // 6 + */ +export class AdditiveExpression extends ArithmeticExpression< + AdditiveExpressionSemantics, + AdditiveExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: AdditiveExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_additiveExpression; + + constructor(antlrRuleCtx: AdditiveExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + const operator = children.find((token) => { + return token instanceof TerminalNode && kipperAdditiveOperators.find((op) => op === token.text) !== undefined; + })?.text; + + // Get the expressions of this additive expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!operator || !leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Assert that the arithmetic expression is valid + this.programCtx + .typeCheck(this) + .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); + + this.typeSemantics = { + // Simply use the left operand's type, since the type of the right operand is irrelevant (since they are always + // the same anyway - otherwise there would have already been an error) + evaluatedType: semanticData.leftOp.getTypeSemanticData().evaluatedType, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): AdditiveExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.additiveExpression; + readonly targetCodeGenerator = this.codeGenerator.additiveExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts new file mode 100644 index 000000000..b5b388d32 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts @@ -0,0 +1,32 @@ +import type { ArithmeticExpressionSemantics } from "../../../semantic-data"; +import type { ArithmeticExpressionTypeSemantics } from "../../../type-data"; +import type { AdditiveExpressionContext, MultiplicativeExpressionContext, ParserASTMapping } from "../../../../parser"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ParserArithmeticExpressionContext = AdditiveExpressionContext | MultiplicativeExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ASTArithmeticExpressionKind = + | typeof ParserASTMapping.RULE_additiveExpression + | typeof ParserASTMapping.RULE_multiplicativeExpression; + +/** + * Abstract arithmetic expression class representing an arithmetic expression, which can be used to perform calculations + * based on two expressions. This abstract class only exists to provide the commonality between the different + * comparative expressions. + * @since 0.9.0 + */ +export abstract class ArithmeticExpression< + Semantics extends ArithmeticExpressionSemantics = ArithmeticExpressionSemantics, + TypeSemantics extends ArithmeticExpressionTypeSemantics = ArithmeticExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserArithmeticExpressionContext; + public abstract readonly kind: ASTArithmeticExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts new file mode 100644 index 000000000..c5aeffb12 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts @@ -0,0 +1,7 @@ +/** + * Arithmetic expression module containing the classes representing expressions, which can be used to perform + * calculations based on two expressions. + * @since 0.11.0 + */ +export * from "./additive-expression"; +export * from "./multiplicative-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts new file mode 100644 index 000000000..26d8908d6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts @@ -0,0 +1,132 @@ +/** + * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. + * + * Divisions, multiplications, and modulus are also considered to be multiplicative operations. + * @since 0.1.0 + * @example + * 16 * 6 // 96 + * 12 / 5 // 2.4 + * 96 % 15 // 6 + * 2 ** 8 // 256 + */ +import type { MultiplicativeExpressionSemantics } from "../../../semantic-data"; +import type { MultiplicativeTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { MultiplicativeExpressionContext, ParserASTMapping } from "../../../../parser"; +import { KipperMultiplicativeOperator, kipperMultiplicativeOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; +import { ArithmeticExpression } from "./arithmetic-expression"; + +/** + * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. + * + * Divisions, multiplications, and modulus are also considered to be multiplicative operations. + * @since 0.1.0 + * @example + * 16 * 6 // 96 + * 12 / 5 // 2.4 + * 96 % 15 // 6 + * 2 ** 8 // 256 + */ +export class MultiplicativeExpression extends ArithmeticExpression< + MultiplicativeExpressionSemantics, + MultiplicativeTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: MultiplicativeExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_multiplicativeExpression; + + constructor(antlrRuleCtx: MultiplicativeExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the operator + const operator = children.find((token) => { + return ( + token instanceof TerminalNode && kipperMultiplicativeOperators.find((op) => op === token.text) !== undefined + ); + })?.text; + + // Get the expressions of this multiplicative expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!operator || !leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Assert that the arithmetic expression is valid + this.programCtx + .typeCheck(this) + .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); + + // A multiplicative expression will always be of type 'num' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): MultiplicativeExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.multiplicativeExpression; + readonly targetCodeGenerator = this.codeGenerator.multiplicativeExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts new file mode 100644 index 000000000..61e19b280 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts @@ -0,0 +1,152 @@ +/** + * Assignment expression, which assigns an expression to a variable. This class only represents assigning a value to + * an existing variable, but not creating a new one. + * + * This expression will evaluate to the value that was assigned to the identifier. + * @since 0.1.0 + * @example + * x = 4 + * x += 5 + * x -= 12 + * x *= 2 + * x /= 5 + * x %= 55 + */ +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { AssignmentExpressionSemantics } from "../../semantic-data"; +import type { AssignmentExpressionTypeSemantics } from "../../type-data"; +import { AssignmentExpressionContext, KipperParserRuleContext, ParserASTMapping } from "../../../parser"; +import { Expression } from "./expression"; +import { IdentifierPrimaryExpression } from "./primary"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import { kipperArithmeticAssignOperators, KipperAssignOperator } from "../../../const"; +import { getParseRuleSource } from "../../../../utils"; +import { ScopeVariableDeclaration } from "../../../analysis"; + +/** + * Assignment expression, which assigns an expression to a variable. This class only represents assigning a value to + * an existing variable, but not creating a new one. + * + * This expression will evaluate to the value that was assigned to the identifier. + * @since 0.1.0 + * @example + * x = 4 + * x += 5 + * x -= 12 + * x *= 2 + * x /= 5 + * x %= 55 + */ +export class AssignmentExpression extends Expression { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: AssignmentExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_assignmentExpression; + + constructor(antlrRuleCtx: AssignmentExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it modifies the value of the operand + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const antlrRuleChildren = this.getAntlrRuleChildren(); + + // There will always be only two children, which are the identifier and expression assigned. + const identifier: IdentifierPrimaryExpression = (() => { + const exp = this.children[0]; + + // Ensure that the left-hand side of the expression is an identifier + this.programCtx.semanticCheck(this).validAssignment(exp); + + return exp; + })(); + const assignValue: Expression = this.children[1]; + + // Throw an error if the children are incomplete or the operator can not be determined (antlrRuleChildren[1]) + if (!assignValue || !(antlrRuleChildren[1] instanceof KipperParserRuleContext)) { + throw new UnableToDetermineSemanticDataError(); + } + + const operator = getParseRuleSource(antlrRuleChildren[1]); + const identifierSemantics = identifier.getSemanticData(); + + // Semantics of the assignment + this.semanticData = { + value: assignValue, + identifierCtx: identifier, + identifier: identifierSemantics.identifier, + assignTarget: identifierSemantics.ref, + operator: operator, + }; + + // Ensure that the reference is defined and has a usable value if it's used with an arithmetic operator + if (kipperArithmeticAssignOperators.find((o) => o === operator)) { + this.programCtx.semanticCheck(identifier).refTargetDefined(identifierSemantics.ref.refTarget); + } + + // If the reference was a variable, indicate that the value was updated, since it's being assigned to + if (identifierSemantics.ref.refTarget instanceof ScopeVariableDeclaration) { + identifierSemantics.ref.refTarget.valueWasUpdated = true; + } + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // The evaluated type of an assignment expression is always the evaluated type assigned to the variable + this.typeSemantics = { + evaluatedType: semanticData.value.getTypeSemanticData().evaluatedType, + }; + + // Ensure the assignment is valid and the types match up + this.programCtx.typeCheck(this).validAssignment(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): AssignmentExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.assignmentExpression; + readonly targetCodeGenerator = this.codeGenerator.assignmentExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts new file mode 100644 index 000000000..24ab5bced --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts @@ -0,0 +1,131 @@ +/** + * Convert expressions, which are used to convert a value to a different type. + * + * For now only conversions are supported, but this will be extended to conversions and casts in the future. + * @since 0.1.0 + * @example + * "4" as num // 4 + * 39 as str // "39" + */ +import type { CastOrConvertExpressionSemantics } from "../../semantic-data"; +import type { CastOrConvertExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { IdentifierTypeSpecifierExpression } from "./type-specifier"; +import { Expression } from "./expression"; +import { CastOrConvertExpressionContext, ParserASTMapping } from "../../../parser"; +import { UncheckedType } from "../../../analysis"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import { getConversionFunctionIdentifier } from "../../../../utils"; +import { kipperInternalBuiltInFunctions } from "../../../runtime-built-ins"; + +/** + * Convert expressions, which are used to convert a value to a different type. + * + * For now only conversions are supported, but this will be extended to conversions and casts in the future. + * @since 0.1.0 + * @example + * "4" as num // 4 + * 39 as str // "39" + */ +export class CastOrConvertExpression extends Expression< + CastOrConvertExpressionSemantics, + CastOrConvertExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: CastOrConvertExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_castOrConvertExpression; + + constructor(antlrRuleCtx: CastOrConvertExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // The first child will always be the expression that will be converted + const exp: Expression = this.children[0]; + + // Get the type using the type specifier + const typeSpecifier = this.children[1]; + const type: UncheckedType = typeSpecifier.getSemanticData().typeIdentifier; + + // Ensure that the children are fully present and not undefined + if (!exp || !type) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + castTypeSpecifier: typeSpecifier, + castType: type, + exp: exp, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Get the type specified by the type specifier + const evalType = semanticData.castTypeSpecifier.getTypeSemanticData().storedType; + this.typeSemantics = { + // The evaluated type of the expression is equal to the cast type + evaluatedType: evalType, + castType: evalType, + }; + + // Ensure the conversion is valid + this.programCtx.typeCheck(this).validConversion(semanticData.exp, evalType); + + // Add internal reference to the program ctx for the conversion function, so it will be generated in the output code + const internalIdentifier = getConversionFunctionIdentifier( + semanticData.exp.getTypeSemanticData().evaluatedType.identifier, + semanticData.castType.identifier, + ); + if (internalIdentifier in kipperInternalBuiltInFunctions) { + this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions[internalIdentifier]); + } + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): CastOrConvertExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.castOrConvertExpression; + readonly targetCodeGenerator = this.codeGenerator.castOrConvertExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts new file mode 100644 index 000000000..41abadf5a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts @@ -0,0 +1,36 @@ +/** + * Abstract comparative expression class representing a comparative expression, which can be used to compare two + * expressions. This abstract class only exists to provide the commonality between the different comparative expressions. + * @since 0.9.0 + */ +import type { EqualityExpressionContext, ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import type { ComparativeExpressionSemantics } from "../../../semantic-data"; +import type { ComparativeExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ParserComparativeExpressionContext = EqualityExpressionContext | RelationalExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. + * @since 0.10.0 + */ +export type ASTComparativeExpressionKind = + | typeof ParserASTMapping.RULE_equalityExpression + | typeof ParserASTMapping.RULE_relationalExpression; + +/** + * Abstract comparative expression class representing a comparative expression, which can be used to compare two + * expressions. This abstract class only exists to provide the commonality between the different comparative expressions. + * @since 0.9.0 + */ +export abstract class ComparativeExpression< + Semantics extends ComparativeExpressionSemantics = ComparativeExpressionSemantics, + TypeSemantics extends ComparativeExpressionTypeSemantics = ComparativeExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserComparativeExpressionContext; + public abstract readonly kind: ASTComparativeExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts new file mode 100644 index 000000000..8a008d5c6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts @@ -0,0 +1,117 @@ +/** + * Equality expression, which can be used to compare two expressions for equality. + * @since 0.1.0 + * @example + * 4 == 4 // true + * 9 == 3 // false + * 32 != 9 // true + * 59 != 59 // false + */ +import type { EqualityExpressionSemantics } from "../../../semantic-data"; +import type { EqualityExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { ComparativeExpression } from "./comparative-expression"; +import { CheckedType } from "../../../../analysis"; +import { EqualityExpressionContext, ParserASTMapping } from "../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { KipperEqualityOperator, kipperEqualityOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { CompilableASTNode } from "../../../compilable-ast-node"; + +/** + * Equality expression, which can be used to compare two expressions for equality. + * @since 0.1.0 + * @example + * 4 == 4 // true + * 9 == 3 // false + * 32 != 9 // true + * 59 != 59 // false + */ +export class EqualityExpression extends ComparativeExpression< + EqualityExpressionSemantics, + EqualityExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: EqualityExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_equalityExpression; + + constructor(antlrRuleCtx: EqualityExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the expressions of this relational expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + const operator = children.find((token) => { + return token instanceof TerminalNode && kipperEqualityOperators.find((op) => op === token.text) !== undefined; + })?.text; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp || !operator) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, // First expression + rightOp: rightOp, // Second expression + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Equality expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): EqualityExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.equalityExpression; + readonly targetCodeGenerator = this.codeGenerator.equalityExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts new file mode 100644 index 000000000..e36344d23 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts @@ -0,0 +1,8 @@ +/** + * Comparative expression module containing the classes representing expressions, which can be used to compare two + * expressions. + * @since 0.11.0 + */ +export * from "./comparative-expression"; +export * from "./equality-expression"; +export * from "./relational-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts new file mode 100644 index 000000000..4e73dc56c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts @@ -0,0 +1,132 @@ +/** + * Relational expression, which can be used to compare two numeric expressions. + * @since 0.1.0 + * @example + * 19 > 11 // true + * 91 > 99 // false + * 12 >= 11 // true + * 77 >= 77 // true + * 36 >= 43 // false + * 19 < 36 // true + * 91 < 45 // false + * 12 <= 68 // true + * 77 <= 77 // true + * 36 <= 12 // false + */ +import type { RelationalExpressionSemantics } from "../../../semantic-data"; +import type { RelationalExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { ComparativeExpression } from "./comparative-expression"; +import { ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { KipperRelationalOperator, kipperRelationalOperators } from "../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Relational expression, which can be used to compare two numeric expressions. + * @since 0.1.0 + * @example + * 19 > 11 // true + * 91 > 99 // false + * 12 >= 11 // true + * 77 >= 77 // true + * 36 >= 43 // false + * 19 < 36 // true + * 91 < 45 // false + * 12 <= 68 // true + * 77 <= 77 // true + * 36 <= 12 // false + */ +export class RelationalExpression extends ComparativeExpression< + RelationalExpressionSemantics, + RelationalExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: RelationalExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_relationalExpression; + + constructor(antlrRuleCtx: RelationalExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the expressions of this relational expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + const operator = children.find((token) => { + return token instanceof TerminalNode && kipperRelationalOperators.find((op) => op === token.text) !== undefined; + })?.text; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp || !operator) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Relational expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + + // Type check the relational expression and ensure its operands are of type 'num' + this.programCtx.typeCheck(this).validRelationalExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): RelationalExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.relationalExpression; + readonly targetCodeGenerator = this.codeGenerator.relationalExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts new file mode 100644 index 000000000..3da0d73bd --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts @@ -0,0 +1,93 @@ +/** + * Conditional expression, which evaluates a condition and evaluates the left expression if it is true, or the right + * expression if it is false. + * @since 0.1.0 + * @example + * true ? 3 : 4; // 3 + * false ? 3 : 4; // 4 + */ +import type { ConditionalExpressionSemantics } from "../../semantic-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { ConditionalExpressionTypeSemantics } from "../../type-data"; +import { Expression } from "./expression"; +import { ConditionalExpressionContext, ParserASTMapping } from "../../../parser"; +import { KipperNotImplementedError } from "../../../../errors"; + +/** + * Conditional expression, which evaluates a condition and evaluates the left expression if it is true, or the right + * expression if it is false. + * @since 0.1.0 + * @example + * true ? 3 : 4; // 3 + * false ? 3 : 4; // 4 + */ +export class ConditionalExpression extends Expression< + ConditionalExpressionSemantics, + ConditionalExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ConditionalExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_conditionalExpression; + + constructor(antlrRuleCtx: ConditionalExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Conditional Expressions have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ConditionalExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.conditionalExpression; + readonly targetCodeGenerator = this.codeGenerator.conditionalExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts new file mode 100644 index 000000000..6299d074d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts @@ -0,0 +1,177 @@ +/** + * The base abstract AST node class for all expressions, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link ExpressionASTNodeFactory} class. + * @since 0.1.0 + */ +import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; +import type { ExpressionSemantics } from "../../semantic-data"; +import type { ExpressionTypeSemantics } from "../../type-data"; +import { TranslatedExpression } from "../../../const"; +import { MissingRequiredSemanticDataError } from "../../../../errors"; +import { CompilableASTNode } from "../../compilable-ast-node"; +import { ASTExpressionKind, ParserExpressionContext } from "../../ast-types"; + +/** + * The base abstract AST node class for all expressions, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link ExpressionASTNodeFactory} class. + * @since 0.1.0 + */ +export abstract class Expression< + Semantics extends ExpressionSemantics = ExpressionSemantics, + TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, +> extends CompilableASTNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParserExpressionContext; + + protected override _children: Array; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public abstract readonly kind: ASTExpressionKind; + + protected constructor(antlrRuleCtx: ParserExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + + // Manually add the child to the parent + parent.addNewChild(this); + } + + public get children(): Array { + return this._children; + } + + public addNewChild(newChild: Expression) { + this._children.push(newChild); + } + + /** + * Returns whether this expression has any side effects. This means that the expression will change the state of the + * program in some way and not only return a value. + * + * This specifically can mean it assigns or modifies a variable, calls a function, or throws an error. + * @since 0.10.0 + */ + public hasSideEffects(): boolean { + return false; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public abstract checkForWarnings?(): Promise; + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ParserExpressionContext { + return this._antlrRuleCtx; + } + + /** + * Semantically analyses the code inside this AST node and all {@link this.children children nodes}. + * + * This function will recursively call itself on the {@link this.children} instances and analyse the deepest children + * nodes first, working up as the tokens get more complex. This way the parent tokens can access the semantics of + * the children and properly process itself. + * + * This function will set the {@link this.semanticData} property and allow the use of {@link this.getSemanticData}, + * without getting any error. + * @since 0.8.0 + */ + public override async semanticAnalysis(): Promise { + // Start with the evaluation of the children + await this.semanticallyAnalyseChildren(); + + // If the semantic analysis until now hasn't failed, do the semantic analysis of this node (if defined) + // Note: The specific AST node will have to handle errors in their children and ensure for analysis all required + // data is present. + // This overwrites the default behaviour of every node handling the errors in the children + if (!this.hasFailed && this.primarySemanticAnalysis !== undefined) { + try { + await this.primarySemanticAnalysis(); + } catch (e) { + if (e instanceof MissingRequiredSemanticDataError) { + this._skippedSemanticAnalysis = true; + } + this.handleSemanticError(e); + } + } + } + + /** + * Performs type checking on this AST node and all {@link this.children children nodes}. This uses the + * {@link this.semanticData semantic data} that was evaluated during {@link this.semanticAnalysis semantic analysis}. + * @since 0.10.0 + */ + public override async semanticTypeChecking(): Promise { + // Start with the evaluation of the children + await this.semanticallyTypeCheckChildren(); + + // If the semantic analysis until now hasn't failed, do the semantic type checking of this node (if defined) + // This overwrites the default behaviour of every node handling the errors in the children + if (!this.hasFailed && !this.skippedSemanticAnalysis && this.primarySemanticTypeChecking !== undefined) { + try { + await this.primarySemanticTypeChecking(); + } catch (e) { + if (e instanceof MissingRequiredSemanticDataError) { + this._skippedSemanticAnalysis = true; + } + this.handleSemanticError(e); + } + } + } + + /** + * Wrap-up semantic analysis, which analyses this AST node and all {@link this.children children nodes}, and + * checks whether they are semantically valid for the {@link this.target target language}. This uses the + * {@link this.semanticData semantic data} and {@link this.typeData type data} that was evaluated during the previous + * {@link this.semanticAnalysis semantic analysis} and {@link this.semanticTypeChecking type checking} steps. + * @since 0.10.0 + */ + public override async wrapUpSemanticAnalysis(): Promise { + // Start with the evaluation of the children + await this.targetSemanticallyAnalyseChildren(); + + // If the semantic analysis until now hasn't failed, do the target semantic analysis of this node (if defined) + // This overwrites the default behaviour of every node handling the errors in the children + if (!this.hasFailed && !this.skippedSemanticTypeChecking && this.targetSemanticAnalysis !== undefined) { + try { + await this.targetSemanticAnalysis(this); + } catch (e) { + if (e instanceof MissingRequiredSemanticDataError) { + this._skippedSemanticAnalysis = true; + } + this.handleSemanticError(e); + } + } + } + + /** + * Generates the typescript code for this item, and all children (if they exist). + * + * Every item in the array represents a token of the expression. + */ + public override async translateCtxAndChildren(): Promise { + return await this.targetCodeGenerator(this); + } + + public abstract targetCodeGenerator: TargetASTNodeCodeGenerator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts new file mode 100644 index 000000000..31e65b49c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts @@ -0,0 +1,132 @@ +import type { FunctionCallExpressionSemantics, IdentifierPrimaryExpressionSemantics } from "../../semantic-data"; +/** + * Function call class, which represents a function call expression in the Kipper language. + * @since 0.1.0 + * @example + * call print("Hello world!") + * // or + * print("Hello world!") + */ +import type { FunctionCallExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import type { KipperReferenceableFunction } from "../../../const"; +import { Expression } from "./expression"; +import { FunctionCallExpressionContext, ParserASTMapping } from "../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import { CheckedType } from "../../../analysis"; + +/** + * Function call class, which represents a function call expression in the Kipper language. + * @since 0.1.0 + * @example + * call print("Hello world!") + * // or + * print("Hello world!") + */ +export class FunctionCallExpression extends Expression< + FunctionCallExpressionSemantics, + FunctionCallExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: FunctionCallExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_functionCallExpression; + + constructor(antlrRuleCtx: FunctionCallExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it calls a function + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): FunctionCallExpressionContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the identifier of the function that is called + const identifierSemantics = this.children[0].getSemanticData(); + + // Ensure that the identifier is present + if (!identifierSemantics || !identifierSemantics.ref) { + throw new UnableToDetermineSemanticDataError(); + } + + // Every item from index 1 to the end is an argument (First child is the identifier). + // Tries to fetch the function. If it fails throw a {@link UnknownFunctionIdentifier} error. + const args: Array = this.children.length > 1 ? this.children.slice(1, this.children.length) : []; + + this.semanticData = { + identifier: identifierSemantics.identifier, + args: args, + callTarget: identifierSemantics.ref, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Ensure that the reference is a callable function + this.programCtx.typeCheck(this).refTargetCallable(semanticData.callTarget.refTarget); + const calledFunc = semanticData.callTarget.refTarget; + + // Ensure valid arguments are passed + this.programCtx.typeCheck(this).validFunctionCallArguments(calledFunc, semanticData.args); + + // Get the type that the function call will evaluate to + let evaluatedType: CheckedType; + if (calledFunc.returnType instanceof CheckedType) { + evaluatedType = calledFunc.returnType; + } else { + evaluatedType = CheckedType.fromCompilableType(calledFunc.returnType); + } + + // The evaluated type is always equal to the return of the function + this.typeSemantics = { + evaluatedType: evaluatedType, + func: calledFunc, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.functionCallExpression; + readonly targetCodeGenerator = this.codeGenerator.functionCallExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/index.ts new file mode 100644 index 000000000..7eedf43f6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/index.ts @@ -0,0 +1,19 @@ +/** + * Expression module containing the classes representing language expressions, which are the fundamental building blocks + * of the language. + * @since 0.11.0 + */ +export * from "./expression"; +export * from "./arithmetic/"; +export * from "./comparative/"; +export * from "./logical/"; +export * from "./postfix/"; +export * from "./primary/"; +export * from "./type-specifier/"; +export * from "./unary/"; +export * from "./assignment-expression"; +export * from "./cast-or-convert-expression"; +export * from "./conditional-expression"; +export * from "./function-call-expression"; +export * from "./member-access-expression"; +export * from "./tangled-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts new file mode 100644 index 000000000..f1d70947f --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts @@ -0,0 +1,8 @@ +/** + * Logical expression module containing the classes representing expressions, which can be used to perform specific + * logical operations on two expressions (operands). + * @since 0.11.0 + */ +export * from "./logical-expression"; +export * from "./logical-and-expression"; +export * from "./logical-or-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts new file mode 100644 index 000000000..794747071 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts @@ -0,0 +1,111 @@ +/** + * Logical-and expression, representing an expression which can be used to combine multiple conditions. It will + * evaluate to true if all conditions are true. + * @since 0.1.0 + * @example + * false && false // false + * true && false // false + * false && true // false + * true && true // true + */ +import type { LogicalAndExpressionSemantics } from "../../../semantic-data"; +import type { LogicalAndExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { LogicalExpression } from "./logical-expression"; +import { LogicalAndExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Logical-and expression, representing an expression which can be used to combine multiple conditions. It will + * evaluate to true if all conditions are true. + * @since 0.1.0 + * @example + * false && false // false + * true && false // false + * false && true // false + * true && true // true + */ +export class LogicalAndExpression extends LogicalExpression< + LogicalAndExpressionSemantics, + LogicalAndExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: LogicalAndExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_logicalAndExpression; + + constructor(antlrRuleCtx: LogicalAndExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the expressions of this logical-and expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, // First expression + rightOp: rightOp, // Second expression + operator: "&&", // Logical-and operator + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Logical expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): LogicalAndExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.logicalAndExpression; + readonly targetCodeGenerator = this.codeGenerator.logicalAndExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts new file mode 100644 index 000000000..9acb8dbb6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts @@ -0,0 +1,39 @@ +/** + * Logical expression, representing an expression which can be used to combine two expressions/conditions using + * {@link LogicalAndExpression logical AND} or {@link LogicalOrExpression logical OR}. This + * abstract class only exists to provide the commonality between the different logical expressions. + * @abstract + */ +import type { EqualityExpressionContext, ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import type { LogicalExpressionSemantics } from "../../../semantic-data"; +import type { LogicalExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode.kind} context classes for a constructable + * {@link LogicalExpression} AST node. + * @since 0.10.0 + */ +export type ParserLogicalExpressionContext = EqualityExpressionContext | RelationalExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link LogicalExpression} AST node. + * @since 0.10.0 + */ +export type ASTLogicalExpressionKind = + | typeof ParserASTMapping.RULE_logicalAndExpression + | typeof ParserASTMapping.RULE_logicalOrExpression; + +/** + * Logical expression, representing an expression which can be used to combine two expressions/conditions using + * {@link LogicalAndExpression logical AND} or {@link LogicalOrExpression logical OR}. This + * abstract class only exists to provide the commonality between the different logical expressions. + * @abstract + */ +export abstract class LogicalExpression< + Semantics extends LogicalExpressionSemantics = LogicalExpressionSemantics, + TypeSemantics extends LogicalExpressionTypeSemantics = LogicalExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserLogicalExpressionContext; + public abstract readonly kind: ASTLogicalExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts new file mode 100644 index 000000000..1916dfce4 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts @@ -0,0 +1,112 @@ +/** + * Logical-or expression, representing an expression which can be used to combine multiple conditions. It returns true + * if at least one condition is true. + * @since 0.1.0 + * @example + * false || false // false + * true || false // true + * false || true // true + * true || true // true + */ +import type { LogicalOrExpressionSemantics } from "../../../semantic-data"; +import type { LogicalOrExpressionTypeSemantics } from "../../../type-data"; +import type { Expression } from "../expression"; +import { LogicalExpression } from "./logical-expression"; +import { LogicalOrExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { kipperLogicalOrOperator } from "../../../../const"; +import { CheckedType } from "../../../../analysis"; + +/** + * Logical-or expression, representing an expression which can be used to combine multiple conditions. It returns true + * if at least one condition is true. + * @since 0.1.0 + * @example + * false || false // false + * true || false // true + * false || true // true + * true || true // true + */ +export class LogicalOrExpression extends LogicalExpression< + LogicalOrExpressionSemantics, + LogicalOrExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: LogicalOrExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_logicalOrExpression; + + constructor(antlrRuleCtx: LogicalOrExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the expressions of this logical-or expression + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + // Ensure that the children are fully present and not undefined + if (!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, // First expression + rightOp: rightOp, // Second expression + operator: kipperLogicalOrOperator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Logical expressions always return 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): LogicalOrExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.logicalOrExpression; + readonly targetCodeGenerator = this.codeGenerator.logicalOrExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts new file mode 100644 index 000000000..267e137d5 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts @@ -0,0 +1,152 @@ +/** + * Member access expression, which represents a member access expression that evaluates to a value of a member of an + * object or array. + * @since 0.10.0 + */ +import type { SliceNotationContext, SliceNotationMemberAccessExpressionContext } from "../../../parser"; +import type { MemberAccessExpressionSemantics } from "../../semantic-data"; +import type { MemberAccessExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import { + BracketNotationMemberAccessExpressionContext, + DotNotationMemberAccessExpressionContext, + ParserASTMapping, +} from "../../../parser"; +import { Expression } from "./expression"; +import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../errors"; +import { kipperInternalBuiltInFunctions } from "../../../runtime-built-ins"; + +/** + * A union of all possible {@link KipperParserRuleContext} rule contexts that {@link MemberAccessExpression} implements. + * @since 0.10.0 + */ +export type MemberAccessExpressionContext = + | DotNotationMemberAccessExpressionContext + | BracketNotationMemberAccessExpressionContext + | SliceNotationMemberAccessExpressionContext; + +/** + * Member access expression, which represents a member access expression that evaluates to a value of a member of an + * object or array. + * @since 0.10.0 + */ +export class MemberAccessExpression extends Expression< + MemberAccessExpressionSemantics, + MemberAccessExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: MemberAccessExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_memberAccessExpression; + + constructor(antlrRuleCtx: MemberAccessExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): MemberAccessExpressionContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Handle the different types of member access expressions + if (this.antlrRuleCtx instanceof DotNotationMemberAccessExpressionContext) { + throw this.programCtx + .semanticCheck(this) + .notImplementedError( + new KipperNotImplementedError("Member access expressions using dot notation are not yet implemented"), + ); + } else if (this.antlrRuleCtx instanceof BracketNotationMemberAccessExpressionContext) { + const objExp = this.children[0]; + const keyExp = this.children[1]; + + // Ensure both required objects are present + if (!objExp || !keyExp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + objectLike: objExp, + propertyIndexOrKeyOrSlice: keyExp, + accessType: "bracket", + }; + + // Add internal reference to the program ctx for the index function, so it will be generated in the output code + // Note: Once objects are implemented, an if statement will be required to check if the object is an array or + // object-like, since for objects the 'get' function will be used instead of the 'index' function. + this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["index"]); + } else { + const sliceNotationAntlrCtx = this.getAntlrRuleChildren()[1] as SliceNotationContext; + const hasStart = sliceNotationAntlrCtx.sliceStart; + const hasEnd = sliceNotationAntlrCtx.sliceEnd; + + // Slice notation requires at least 1 child, which is the object expression + // Note: Both the start and end expression are optional - if one is not present, then the slice is open-ended + const objExp: Expression = this.children[0]; + const startExp: Expression | undefined = hasStart ? this.children[1] : undefined; + const endExp: Expression | undefined = hasEnd ? (hasStart ? this.children[2] : this.children[1]) : undefined; + + // Ensure the object expression is present + if (!objExp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + objectLike: objExp, + propertyIndexOrKeyOrSlice: { start: startExp, end: endExp }, + accessType: "slice", + }; + + // Add internal reference to the program ctx for the slice function, so it will be generated in the output code + this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["slice"]); + } + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // Ensure the objectLike expression is indexable/accessible + // Note: This will throw an error if the objectLike expression is not indexable/accessible + const type = this.programCtx.typeCheck(this).getTypeOfMemberAccessExpression(this); + + this.typeSemantics = { + evaluatedType: type, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.memberAccessExpression; + readonly targetCodeGenerator = this.codeGenerator.memberAccessExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts new file mode 100644 index 000000000..4f4da2bc8 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts @@ -0,0 +1,110 @@ +import type { IncrementOrDecrementPostfixExpressionSemantics } from "../../../semantic-data"; +/** + * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * 49++; // 49 will be incremented by 1 + * 11--; // 11 will be decremented by 1 + */ +import type { IncrementOrDecrementPostfixExpressionTypeSemantics } from "../../../type-data"; +import type { KipperIncrementOrDecrementOperator } from "../../../../const"; +import { Expression } from "../expression"; +import { IncrementOrDecrementPostfixExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * 49++; // 49 will be incremented by 1 + * 11--; // 11 will be decremented by 1 + */ +export class IncrementOrDecrementPostfixExpression extends Expression< + IncrementOrDecrementPostfixExpressionSemantics, + IncrementOrDecrementPostfixExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementPostfixExpression; + + constructor(antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it modifies the value of the operand + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const exp: Expression = this.children[0]; + const operator = this.sourceCode.slice(-2); // After the expression + + // Ensure that the child expression is present + if (!exp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + operand: exp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + // This will always be a number + evaluatedType: CheckedType.fromKipperType("num"), + }; + + // Ensure that this expression is valid (e.g. the operand is a number) + this.programCtx.typeCheck(this).validUnaryExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IncrementOrDecrementPostfixExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementPostfixExpression; + readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementPostfixExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts new file mode 100644 index 000000000..e6b736a55 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts @@ -0,0 +1,6 @@ +/** + * Postfix expression module containing the classes representing expressions, which can be used to perform specific + * postfix operations using a specific operator. + * @since 0.11.0 + */ +export * from "./increment-or-decrement-postfix-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts new file mode 100644 index 000000000..5368b24f0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts @@ -0,0 +1,86 @@ +/** + * List constant expression, which represents a list constant that was defined in the source code. + * @since 0.1.0 + */ +import type { ArrayLiteralPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { ArrayLiteralPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ConstantExpression } from "./constant-expression"; +import { ArrayLiteralPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * List constant expression, which represents a list constant that was defined in the source code. + * @since 0.1.0 + */ +export class ArrayLiteralPrimaryExpression extends ConstantExpression< + ArrayLiteralPrimaryExpressionSemantics, + ArrayLiteralPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ArrayLiteralPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_arrayLiteralPrimaryExpression; + + constructor(antlrRuleCtx: ArrayLiteralPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + value: [], // TODO! Implement list data fetching. + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'list' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("list"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ArrayLiteralPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.listPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.arrayLiteralExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts new file mode 100644 index 000000000..d1cb1d2f1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts @@ -0,0 +1,87 @@ +/** + * Boolean constant expression representing the built-in constants {@link true} and {@link false}. + * @since 0.8.0 + */ +import type { BoolPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { BoolPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { KipperBoolTypeLiterals } from "../../../../../const"; +import { ConstantExpression } from "./constant-expression"; +import { BoolPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * Boolean constant expression representing the built-in constants {@link true} and {@link false}. + * @since 0.8.0 + */ +export class BoolPrimaryExpression extends ConstantExpression< + BoolPrimaryExpressionSemantics, + BoolPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: BoolPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_boolPrimaryExpression; + + constructor(antlrRuleCtx: BoolPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + value: this.sourceCode, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'bool' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("bool"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): BoolPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.boolPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.boolPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts new file mode 100644 index 000000000..ec2a921a0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts @@ -0,0 +1,51 @@ +/** + * Abstract constant expression class representing a constant expression, which was defined in the source code. This + * abstract class only exists to provide the commonality between the different constant expressions. + * @since 0.10.0 + */ +import type { ConstantExpressionSemantics } from "../../../../semantic-data"; +import type { ExpressionTypeSemantics } from "../../../../type-data"; +import type { + ArrayLiteralPrimaryExpressionContext, + BoolPrimaryExpressionContext, + NumberPrimaryExpressionContext, + ParserASTMapping, + StringPrimaryExpressionContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, +} from "../../../../../parser"; +import { Expression } from "../../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. + * @since 0.10.0 + */ +export type ParserConstantExpressionContext = + | NumberPrimaryExpressionContext + | StringPrimaryExpressionContext + | BoolPrimaryExpressionContext + | VoidOrNullOrUndefinedPrimaryExpressionContext + | ArrayLiteralPrimaryExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. + * @since 0.10.0 + */ +export type ASTConstantExpressionKind = + | typeof ParserASTMapping.RULE_numberPrimaryExpression + | typeof ParserASTMapping.RULE_stringPrimaryExpression + | typeof ParserASTMapping.RULE_boolPrimaryExpression + | typeof ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression + | typeof ParserASTMapping.RULE_arrayLiteralPrimaryExpression; + +/** + * Abstract constant expression class representing a constant expression, which was defined in the source code. This + * abstract class only exists to provide the commonality between the different constant expressions. + * @since 0.10.0 + */ +export abstract class ConstantExpression< + Semantics extends ConstantExpressionSemantics = ConstantExpressionSemantics, + TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserConstantExpressionContext; + public abstract readonly kind: ASTConstantExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts new file mode 100644 index 000000000..f16c94616 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts @@ -0,0 +1,10 @@ +/** + * Constant expression module containing the classes representing expressions, which represent a constant value in a + * specific data structure. + * @since 0.11.0 + */ +export * from "./constant-expression"; +export * from "./array-primary-expression"; +export * from "./bool-primary-expression"; +export * from "./number-primary-expression"; +export * from "./string-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts new file mode 100644 index 000000000..87361e2d0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts @@ -0,0 +1,88 @@ +/** + * Integer constant expression, which represents a number constant that was defined in the source code. + * @since 0.1.0 + */ +import type { NumberPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { NumberPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ConstantExpression } from "./constant-expression"; +import { NumberPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * Number constant expression, which represents a number constant that was defined in the source code. + * @since 0.1.0 + */ +export class NumberPrimaryExpression extends ConstantExpression< + NumberPrimaryExpressionSemantics, + NumberPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: NumberPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_numberPrimaryExpression; + + constructor(antlrRuleCtx: NumberPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // The value should stay the same as written, and the code generator implementation should handle outputting the + // value in the target language + this.semanticData = { + value: this.sourceCode, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'number' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): NumberPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.numberPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.numberPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts new file mode 100644 index 000000000..6762dc670 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts @@ -0,0 +1,87 @@ +/** + * String constant expression, which represents a string constant that was defined in the source code. + * @since 0.1.0 + */ +import type { StringPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { StringPrimaryExpressionTypeSemantics } from "../../../../type-data"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ConstantExpression } from "./constant-expression"; +import { ParserASTMapping, StringPrimaryExpressionContext } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; + +/** + * String constant expression, which represents a string constant that was defined in the source code. + * @since 0.1.0 + */ +export class StringPrimaryExpression extends ConstantExpression< + StringPrimaryExpressionSemantics, + StringPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: StringPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_stringPrimaryExpression; + + constructor(antlrRuleCtx: StringPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + value: this.sourceCode.slice(1, this.sourceCode.length - 1), // Remove string quotation marks + quotationMarks: <`"` | `'`>this.sourceCode[0], + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'str' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("str"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): StringPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.stringPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.stringPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts new file mode 100644 index 000000000..b4f22ee2c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts @@ -0,0 +1,89 @@ +import type { VoidOrNullOrUndefinedPrimaryExpressionSemantics } from "../../../../semantic-data"; +import type { VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics } from "../../../../type-data"; +/** + * Constant expression, representing the void, null or undefined keyword. + * @since 0.10.0 + */ +import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../const"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { ParserASTMapping, VoidOrNullOrUndefinedPrimaryExpressionContext } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; +import { ConstantExpression } from "./constant-expression"; + +/** + * Constant expression, representing the void, null or undefined keyword. + * @since 0.10.0 + */ +export class VoidOrNullOrUndefinedPrimaryExpression extends ConstantExpression< + VoidOrNullOrUndefinedPrimaryExpressionSemantics, + VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression; + + constructor(antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + // Syntactically there can only be 'void', 'null' or 'undefined' stored in this expression + constantIdentifier: this.sourceCode, + value: this.sourceCode, // The value of this expression is equal to the constant identifier in string form + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.10.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // The evaluated type of this expression will always be equal to the constant identifier that this expression + // contains e.g. either 'void', 'null' or 'undefined'. + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType(semanticData.constantIdentifier), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): VoidOrNullOrUndefinedPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.voidOrNullOrUndefinedPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.voidOrNullOrUndefinedPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts new file mode 100644 index 000000000..23bcc0e82 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts @@ -0,0 +1,91 @@ +/** + * F-String class, which represents an f-string expression in the Kipper language. + * @since 0.1.0 + */ +import type { FStringPrimaryExpressionSemantics } from "../../../semantic-data"; +import type { FStringPrimaryExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; +import { FStringPrimaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CompilableASTNode } from "../../../compilable-ast-node"; +import { CheckedType } from "../../../../analysis"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * F-String class, which represents an f-string expression in the Kipper language. F-Strings are a way to automatically + * format strings and insert expressions into them using expression blocks that are stringified. + * @since 0.1.0 + */ +export class FStringPrimaryExpression extends Expression< + FStringPrimaryExpressionSemantics, + FStringPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: FStringPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_fStringPrimaryExpression; + + constructor(antlrRuleCtx: FStringPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const stringParts: Array = []; + // TODO! + + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("F-String Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + // This will always be of type 'str' + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("str"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): FStringPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.fStringPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.fStringPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts new file mode 100644 index 000000000..4d8b11151 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts @@ -0,0 +1,124 @@ +/** + * Identifier expression, which represents an identifier referencing a variable, function or built-in identifier. + * + * This is only represents a reference and not a declaration/definition. + * @since 0.1.0 + */ +import type { IdentifierPrimaryExpressionSemantics } from "../../../semantic-data"; +import type { IdentifierPrimaryExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { Expression } from "../expression"; +import { IdentifierPrimaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { CheckedType, ScopeDeclaration } from "../../../../analysis"; +import { AssignmentExpression } from "../assignment-expression"; + +/** + * Identifier expression, which represents an identifier referencing a variable, function or built-in identifier. + * + * This is only represents a reference and not a declaration/definition. + * @since 0.1.0 + */ +export class IdentifierPrimaryExpression extends Expression< + IdentifierPrimaryExpressionSemantics, + IdentifierPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IdentifierPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_identifierPrimaryExpression; + + constructor(antlrRuleCtx: IdentifierPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const identifier = this.sourceCode; + + // Make sure the referenced variable even exists! + const ref = this.programCtx + .semanticCheck(this) + .getExistingReference(identifier, "innerScope" in this.scopeCtx ? this.scopeCtx : undefined); + + // Once we have the identifier and ensured a reference exists, we are done with the primary semantic analysis. + this.semanticData = { + identifier: identifier, + ref: { + refTarget: ref, + srcExpr: this, + }, + }; + + if (!(ref instanceof ScopeDeclaration)) { + this.programCtx.addBuiltInReference(this, ref); + } else { + // If the reference is not used inside an assignment expression, ensure that the reference is defined + // (This is due to the fact that assignments to undefined variables must always be valid, unless it's a + // modifier assignment operator) + if (!(this.parent instanceof AssignmentExpression)) { + this.programCtx.semanticCheck(this).refTargetDefined(ref); + } + } + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + const refTarget = semanticData.ref.refTarget; + + let type: CheckedType; + if (refTarget instanceof ScopeDeclaration) { + type = refTarget.type; + } else { + // Built-in function -> type is 'func' + type = CheckedType.fromCompilableType("valueType" in refTarget ? refTarget.valueType : "func"); + } + + this.typeSemantics = { + evaluatedType: type, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IdentifierPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.identifierPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.identifierPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts new file mode 100644 index 000000000..65978fb02 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts @@ -0,0 +1,9 @@ +/** + * Primary expression module containing the classes representing expressions, which build up the fundamental building + * blocks of the language, such as constants and identifiers. + * @since 0.11.0 + */ +export * from "./constant/"; +export * from "./fstring-primary-expression"; +export * from "./identifier-primary-expression"; +export * from "./constant/void-or-null-or-undefined-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts new file mode 100644 index 000000000..73f0b7756 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts @@ -0,0 +1,102 @@ +/** + * Tangled/Parenthesised expression, which represents a parenthesised expression that wraps another expression and + * increases its order of precedence. + * @example + * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed + * @since 0.1.0 + */ +import type { TangledPrimaryExpressionSemantics } from "../../semantic-data"; +import type { TangledPrimaryTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; +import { Expression } from "./expression"; +import { ParserASTMapping, TangledPrimaryExpressionContext } from "../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * Tangled/Parenthesised expression, which represents a parenthesised expression that wraps another expression and + * increases its order of precedence. + * @example + * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed + * @since 0.1.0 + */ +export class TangledPrimaryExpression extends Expression< + TangledPrimaryExpressionSemantics, + TangledPrimaryTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: TangledPrimaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_tangledPrimaryExpression; + + constructor(antlrRuleCtx: TangledPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Tangled expressions always contain one expression child + const exp: Expression = this.children[0]; + + // Ensure that the child expression is present + if (!exp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + childExp: exp, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const exp = this.getSemanticData().childExp; + + this.typeSemantics = { + // Tangled expressions always evaluate to the type of its child expression + evaluatedType: exp.getTypeSemanticData().evaluatedType, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): TangledPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.tangledPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.tangledPrimaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts new file mode 100644 index 000000000..1b7d59837 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts @@ -0,0 +1,86 @@ +import type { GenericTypeSpecifierExpressionSemantics } from "../../../semantic-data"; +/** + * Generic type specifier expression, which represents a generic type specifier. + * @example + * list // List type with number as generic type + * @since 0.8.0 + */ +import type { GenericTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "./type-specifier-expression"; +import { GenericTypeSpecifierContext, ParserASTMapping } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * Generic type specifier expression, which represents a generic type specifier. + * @example + * list // List type with number as generic type + * @since 0.8.0 + */ +export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< + GenericTypeSpecifierExpressionSemantics, + GenericTypeSpecifierExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: GenericTypeSpecifierContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_genericTypeSpecifier; + + constructor(antlrRuleCtx: GenericTypeSpecifierContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.8.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Generic Type Expressions have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): GenericTypeSpecifierContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.genericTypeSpecifierExpression; + readonly targetCodeGenerator = this.codeGenerator.genericTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts new file mode 100644 index 000000000..08934ec14 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts @@ -0,0 +1,98 @@ +/** + * Type specifier expression, which represents a simple identifier type specifier. + * @example + * num // Number type + * str // String type + * char // Character type + * bool // Boolean type + * @since 0.8.0 + */ +import type { IdentifierTypeSpecifierExpressionSemantics } from "../../../semantic-data"; +import type { IdentifierTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "./type-specifier-expression"; +import { IdentifierTypeSpecifierContext, ParserASTMapping } from "../../../../parser"; +import { CheckedType, UncheckedType } from "../../../../analysis"; + +/** + * Type specifier expression, which represents a simple identifier type specifier. + * @example + * num // Number type + * str // String type + * char // Character type + * bool // Boolean type + * @since 0.8.0 + */ +export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< + IdentifierTypeSpecifierExpressionSemantics, + IdentifierTypeSpecifierExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IdentifierTypeSpecifierContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_identifierTypeSpecifier; + + constructor(antlrRuleCtx: IdentifierTypeSpecifierContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + this.semanticData = { + typeIdentifier: new UncheckedType(this.sourceCode), + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.8.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Create a checked type instance (this function handles error recovery and invalid types) + const valueType = this.programCtx.typeCheck(this).getCheckedType(semanticData.typeIdentifier); + this.typeSemantics = { + // A type specifier will always evaluate to be of type 'type' + evaluatedType: CheckedType.fromCompilableType("type"), + storedType: valueType, + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IdentifierTypeSpecifierContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.identifierTypeSpecifierExpression; + readonly targetCodeGenerator = this.codeGenerator.identifierTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts new file mode 100644 index 000000000..fbd06eaa7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts @@ -0,0 +1,9 @@ +/** + * Type specifier expression module containing the classes representing expressions, which are used in declaration + * and type references, where a type specifier is required. + * @since 0.11.0 + */ +export * from "./type-specifier-expression"; +export * from "./identifier-type-specifier-expression"; +export * from "./typeof-type-specifier-expression"; +export * from "./generic-type-specifier-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts new file mode 100644 index 000000000..0b0df8b5b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts @@ -0,0 +1,45 @@ +/** + * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the + * different type specifier expressions. + * @since 0.9.0 + */ +import type { TypeSpecifierExpressionSemantics } from "../../../semantic-data"; +import type { + GenericTypeSpecifierContext, + IdentifierTypeSpecifierContext, + ParserASTMapping, + TypeofTypeSpecifierContext, +} from "../../../../parser"; +import type { TypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. + * @since 0.10.0 + */ +export type ParserTypeSpecifierExpressionContext = + | IdentifierTypeSpecifierContext + | GenericTypeSpecifierContext + | TypeofTypeSpecifierContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link TypeSpecifierExpression} AST node. + * @since 0.10.0 + */ +export type ASTTypeSpecifierExpressionKind = + | typeof ParserASTMapping.RULE_identifierTypeSpecifier + | typeof ParserASTMapping.RULE_genericTypeSpecifier + | typeof ParserASTMapping.RULE_typeofTypeSpecifier; + +/** + * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the + * different type specifier expressions. + * @since 0.9.0 + */ +export abstract class TypeSpecifierExpression< + Semantics extends TypeSpecifierExpressionSemantics = TypeSpecifierExpressionSemantics, + TypeSemantics extends TypeSpecifierExpressionTypeSemantics = TypeSpecifierExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserTypeSpecifierExpressionContext; + public abstract readonly kind: ASTTypeSpecifierExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts new file mode 100644 index 000000000..efb185e43 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts @@ -0,0 +1,82 @@ +/** + * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. + * @since 0.8.0 + */ +import type { TypeofTypeSpecifierExpressionSemantics } from "../../../semantic-data"; +import type { TypeofTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "./type-specifier-expression"; +import { ParserASTMapping, TypeofTypeSpecifierContext } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. + * @since 0.8.0 + */ +export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< + TypeofTypeSpecifierExpressionSemantics, + TypeofTypeSpecifierExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: TypeofTypeSpecifierContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_typeofTypeSpecifier; + + constructor(antlrRuleCtx: TypeofTypeSpecifierContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * @since 0.8.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Typeof Type Expressions have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): TypeofTypeSpecifierContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.typeofTypeSpecifierExpression; + readonly targetCodeGenerator = this.codeGenerator.typeofTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts new file mode 100644 index 000000000..09e4ea6f0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts @@ -0,0 +1,111 @@ +/** + * Increment or decrement expression class, which represents a left-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * ++49; // 49 will be incremented by 1 + * --11; // 11 will be decremented by 1 + */ +import type { IncrementOrDecrementUnaryExpressionSemantics } from "../../../semantic-data"; +import type { IncrementOrDecrementUnaryTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { Expression } from "../expression"; +import type { KipperIncrementOrDecrementOperator } from "../../../../const"; +import { UnaryExpression } from "./unary-expression"; +import { IncrementOrDecrementUnaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Increment or decrement expression class, which represents a left-side -- or ++ expression modifying a numeric value. + * @since 0.1.0 + * @example + * ++49; // 49 will be incremented by 1 + * --11; // 11 will be decremented by 1 + */ +export class IncrementOrDecrementUnaryExpression extends UnaryExpression< + IncrementOrDecrementUnaryExpressionSemantics, + IncrementOrDecrementUnaryTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementUnaryExpression; + + constructor(antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public hasSideEffects(): boolean { + return true; // This expression has side effects as it modifies the value of the operand + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const exp: Expression = this.children[0]; + const operator = this.sourceCode.slice(0, 2); // Before the expression + + // Ensure that the child expression is present + if (!exp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + operand: exp, + operator: operator, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + // This will always be a number + evaluatedType: CheckedType.fromKipperType("num"), + }; + + // Ensure that this expression is valid (e.g. the operand is a number) + this.programCtx.typeCheck(this).validUnaryExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): IncrementOrDecrementUnaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.incrementOrDecrementUnaryExpression; + readonly targetCodeGenerator = this.codeGenerator.incrementOrDecrementUnaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts new file mode 100644 index 000000000..67817a3c9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts @@ -0,0 +1,8 @@ +/** + * Unary expression module containing the classes representing expressions, which can be used to perform specific + * unary operations using a specific operator. + * @since 0.11.0 + */ +export * from "./unary-expression"; +export * from "./operator-modified-unary-expression"; +export * from "./increment-or-decrement-unary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts new file mode 100644 index 000000000..8fe175ef7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts @@ -0,0 +1,121 @@ +/** + * Operator modified expressions, which are used to modify the value of an expression based on an + * {@link KipperUnaryOperator unary operator.} + * @since 0.1.0 + * @example + * -41 // -41 + * +59 // 59 + */ +import type { OperatorModifiedUnaryExpressionSemantics } from "../../../semantic-data"; +import type { OperatorModifiedUnaryTypeSemantics } from "../../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { Expression } from "../expression"; +import { UnaryExpression } from "./unary-expression"; +import { OperatorModifiedUnaryExpressionContext, ParserASTMapping, UnaryOperatorContext } from "../../../../parser"; +import { KipperNegateOperator, KipperSignOperator, kipperUnaryModifierOperators } from "../../../../const"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; + +/** + * Operator modified expressions, which are used to modify the value of an expression based on an + * {@link KipperUnaryOperator unary operator.} + * @since 0.1.0 + * @example + * -41 // -41 + * +59 // 59 + */ +export class OperatorModifiedUnaryExpression extends UnaryExpression< + OperatorModifiedUnaryExpressionSemantics, + OperatorModifiedUnaryTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: OperatorModifiedUnaryExpressionContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = ParserASTMapping.RULE_operatorModifiedUnaryExpression; + + constructor(antlrRuleCtx: OperatorModifiedUnaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // Get the raw antlr4 parse-tree children, which should store the operator + const children = this.getAntlrRuleChildren(); + + // Get the operator + const unaryOperator = children.find((token) => { + return ( + token instanceof UnaryOperatorContext && + kipperUnaryModifierOperators.find((op) => op === token.text) !== undefined + ); + })?.text; + + // Get the expression of this unary expression + const exp: Expression = this.children[0]; + + // Ensure that the children are fully present and not undefined + if (!exp || !unaryOperator) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + operator: unaryOperator, + operand: exp, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType(semanticData.operator === "!" ? "bool" : "num"), + }; + + // Ensure the operator is compatible with the type of the operand + this.programCtx.typeCheck(this).validUnaryExpression(this); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): OperatorModifiedUnaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.operatorModifiedUnaryExpression; + readonly targetCodeGenerator = this.codeGenerator.operatorModifiedUnaryExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts new file mode 100644 index 000000000..581636b0c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts @@ -0,0 +1,44 @@ +/** + * Abstract unary expression class representing a unary expression, which can be used to modify an expression with + * a specified operator. This abstract class only exists to provide the commonality between the different comparative + * expressions. + * @since 0.9.0 + */ +import type { UnaryExpressionSemantics } from "../../../semantic-data"; +import type { UnaryExpressionTypeSemantics } from "../../../type-data"; +import type { + IncrementOrDecrementUnaryExpressionContext, + OperatorModifiedUnaryExpressionContext, + ParserASTMapping, +} from "../../../../parser"; +import { Expression } from "../expression"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link UnaryExpression} AST node. + * @since 0.10.0 + */ +export type ParserUnaryExpressionContext = + | IncrementOrDecrementUnaryExpressionContext + | OperatorModifiedUnaryExpressionContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link UnaryExpression} AST node. + * @since 0.10.0 + */ +export type ASTUnaryExpressionKind = + | typeof ParserASTMapping.RULE_incrementOrDecrementUnaryExpression + | typeof ParserASTMapping.RULE_operatorModifiedUnaryExpression; + +/** + * Abstract unary expression class representing a unary expression, which can be used to modify an expression with + * a specified operator. This abstract class only exists to provide the commonality between the different comparative + * expressions. + * @since 0.9.0 + */ +export abstract class UnaryExpression< + Semantics extends UnaryExpressionSemantics = UnaryExpressionSemantics, + TypeSemantics extends UnaryExpressionTypeSemantics = UnaryExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserUnaryExpressionContext; + public abstract readonly kind: ASTUnaryExpressionKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/index.ts b/kipper/core/src/compiler/ast/nodes/index.ts index 52f9b1a9d..b19c04ef9 100644 --- a/kipper/core/src/compiler/ast/nodes/index.ts +++ b/kipper/core/src/compiler/ast/nodes/index.ts @@ -1,9 +1,3 @@ -/** - * Language-specific AST nodes enriched with semantic data and logical handling that implement the semantic - * analysis, type checking and translation of Kipper code. - * @since 0.8.0 - */ +export * from "./declarations"; export * from "./expressions"; -export * from "./definitions"; export * from "./statements"; -export * from "./factories"; diff --git a/kipper/core/src/compiler/ast/nodes/statements.ts b/kipper/core/src/compiler/ast/nodes/statements.ts deleted file mode 100644 index c7a29d209..000000000 --- a/kipper/core/src/compiler/ast/nodes/statements.ts +++ /dev/null @@ -1,920 +0,0 @@ -/** - * AST Node Statement classes of the Kipper language. - * @since 0.1.0 - */ -import type { - CompilableNodeChild, - CompilableNodeParent, - NoSemantics, - NoTypeSemantics, - SemanticData, - TypeData, - VariableDeclaration, -} from ".."; -import type { - DoWhileLoopStatementSemantics, - ForLoopStatementSemantics, - IfStatementSemantics, - IterationStatementSemantics, - JumpStatementSemantics, - ReturnStatementSemantics, - WhileLoopStatementSemantics, -} from "../semantic-data"; -import type { ASTStatementKind, ParserStatementContext } from "../ast-types"; -import type { TranslatedCodeLine } from "../../const"; -import type { Expression } from "./expressions"; -import type { TargetASTNodeCodeGenerator } from "../../target-presets"; -import type { ReturnStatementTypeSemantics } from "../type-data"; -import type { ScopeNode } from "../scope-node"; -import { - CompoundStatementContext, - DoWhileLoopIterationStatementContext, - ExpressionStatementContext, - ForLoopIterationStatementContext, - IfStatementContext, - JumpStatementContext, - KipperParser, - ReturnStatementContext, - SwitchStatementContext, - WhileLoopIterationStatementContext, -} from "../../parser"; -import { CompilableASTNode } from "../compilable-ast-node"; -import { CheckedType, LocalScope } from "../../analysis"; -import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../errors"; - -/** - * The base abstract AST node class for all statements, which wrap their corresponding - * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. - * - * These AST nodes can be created with the {@link StatementASTNodeFactory} class. - * @since 0.1.0 - */ -export abstract class Statement< - Semantics extends SemanticData = SemanticData, - TypeSemantics extends TypeData = TypeData, -> extends CompilableASTNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ParserStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public abstract readonly kind: ASTStatementKind; - - protected constructor(antlrRuleCtx: ParserStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - - // Manually add the child to the parent - parent.addNewChild(this); - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ParserStatementContext { - return this._antlrRuleCtx; - } - - /** - * Generates the typescript code for this item, and all children (if they exist). - * - * Every item in the array represents a single line of code. - */ - public async translateCtxAndChildren(): Promise> { - return await this.targetCodeGenerator(this); - } - - public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; -} - -/** - * Compound statement class, which represents a compound statement containing other items in the Kipper - * language and is compilable using {@link translateCtxAndChildren}. - */ -export class CompoundStatement extends Statement implements ScopeNode { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: CompoundStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_compoundStatement; - - protected readonly _children: Array>; - - private readonly _innerScope: LocalScope; - - constructor(antlrRuleCtx: CompoundStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._semanticData = {}; - this._typeSemantics = {}; - this._innerScope = new LocalScope(this); - } - - /** - * The children of this parse token. - */ - public get children(): Array> { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): CompoundStatementContext { - return this._antlrRuleCtx; - } - - /** - * Returns the inner scope of this {@link CompoundStatement}, which is automatically created when using a compound - * statement. - * @since 0.10.0 - */ - public get innerScope(): LocalScope { - return this._innerScope; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public primarySemanticAnalysis = undefined; // Compound statements will never have semantic data - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // Compound statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.compoundStatement; - readonly targetCodeGenerator = this.codeGenerator.compoundStatement; -} - -/** - * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using - * {@link translateCtxAndChildren}. - */ -export class IfStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: IfStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_ifStatement; - - protected readonly _children: Array>; - - constructor(antlrRuleCtx: IfStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._typeSemantics = {}; - } - - /** - * The children of this AST node. - * - * May contain both {@link Expression expressions} and {@link Statement statements}, as it will always contain - * an expression at index 03 to represent the condition. - */ - public get children(): Array> { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): IfStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - // There will be always at least two children - const condition: Expression = this.children[0]; - const body: Statement = >this.children[1]; - const alternativeBranch: IfStatement | Statement | null = - this.children.length > 2 ? >this.children[2] : null; - - // Ensure that the children are fully present and not undefined - if (!condition || !body) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - condition: condition, - ifBranch: body, - elseBranch: alternativeBranch ?? undefined, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // If-statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.ifStatement; - readonly targetCodeGenerator = this.codeGenerator.ifStatement; -} - -/** - * Switch statement class, which represents a switch selection statement in the Kipper language. - */ -export class SwitchStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: SwitchStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_switchStatement; - - protected readonly _children: Array>; - - constructor(antlrRuleCtx: SwitchStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this AST node. - */ - public get children(): Array> { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): SwitchStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.switchStatement; - readonly targetCodeGenerator = this.codeGenerator.switchStatement; -} - -/** - * Expression statement class, which represents a statement made up of an expression in the Kipper language. - */ -export class ExpressionStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ExpressionStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_expressionStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: ExpressionStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._semanticData = {}; - this._typeSemantics = {}; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ExpressionStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public primarySemanticAnalysis = undefined; // Expression statements will never have semantic data - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // Expression statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public async checkForWarnings(): Promise { - this.programCtx.warningCheck(this).uselessStatement(this); - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.expressionStatement; - readonly targetCodeGenerator = this.codeGenerator.expressionStatement; -} - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. - * @since 0.10.0 - */ -export type ParserIterationStatementContext = - | ForLoopIterationStatementContext - | WhileLoopIterationStatementContext - | DoWhileLoopIterationStatementContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link MemberAccessExpression} AST node. - * @since 0.10.0 - */ -export type ParserIterationStatementKind = - | typeof KipperParser.RULE_forLoopIterationStatement - | typeof KipperParser.RULE_whileLoopIterationStatement - | typeof KipperParser.RULE_doWhileLoopIterationStatement; - -/** - * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export abstract class IterationStatement< - Semantics extends IterationStatementSemantics = IterationStatementSemantics, - TypeSemantics extends NoTypeSemantics = NoTypeSemantics, -> extends Statement { - protected abstract readonly _antlrRuleCtx: ParserIterationStatementContext; - public abstract readonly kind: ParserIterationStatementKind; -} - -/** - * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export class DoWhileLoopStatement extends IterationStatement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: DoWhileLoopIterationStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_doWhileLoopIterationStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: DoWhileLoopIterationStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): DoWhileLoopIterationStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.doWhileLoopStatement; - readonly targetCodeGenerator = this.codeGenerator.doWhileLoopStatement; -} - -/** - * While loop statement class, which represents a while loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export class WhileLoopStatement extends IterationStatement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: WhileLoopIterationStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_whileLoopIterationStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: WhileLoopIterationStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._typeSemantics = {}; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): WhileLoopIterationStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const loopCondition = this.children[0]; - const loopBody = >this.children[1]; - - this.semanticData = { - loopCondition: loopCondition, - loopBody: loopBody, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // While-loop statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.whileLoopStatement; - readonly targetCodeGenerator = this.codeGenerator.whileLoopStatement; -} - -/** - * For loop statement class, which represents a for loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. - */ -export class ForLoopStatement - extends IterationStatement - implements ScopeNode -{ - /** - * The private field '_innerScope' that actually stores the variable data, - * which is returned inside the {@link this.innerScope}. - * @private - */ - private readonly _innerScope: LocalScope; - - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ForLoopIterationStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_forLoopIterationStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: ForLoopIterationStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - this._innerScope = new LocalScope(this); - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ForLoopIterationStatementContext { - return this._antlrRuleCtx; - } - - /** - * Gets the inner scope of this for-loop statement, which is automatically created when using a for loop. - * @since 0.10.0 - */ - public get innerScope(): LocalScope { - return this._innerScope; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - let index = 0; - - // 'index++' will increase the index after the assignment, so the first assignment will be '0' and the second - // assignment will be '1', and so on... - const forDeclaration = this.antlrRuleCtx._forDeclaration - ? this.children[index++] - : undefined; - const forCondition = this.antlrRuleCtx._forCondition ? this.children[index++] : undefined; - const forIterationExp = this.antlrRuleCtx._forIterationExp ? this.children[index++] : undefined; - const loopBody = this.children[index++]; - - this.semanticData = { - forDeclaration: forDeclaration, - loopCondition: forCondition, - forIterationExp: forIterationExp, - loopBody: loopBody, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // For-loop statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.forLoopStatement; - readonly targetCodeGenerator = this.codeGenerator.forLoopStatement; -} - -/** - * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using - * {@link translateCtxAndChildren}. - */ -export class JumpStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: JumpStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_jumpStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: JumpStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): JumpStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const jmpType = this.sourceCode.startsWith("break") ? "break" : "continue"; - const parent = this.programCtx.semanticCheck(this).getJumpStatementParent(this); - - this.semanticData = { - jmpType: jmpType, - parent: parent, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public primarySemanticTypeChecking = undefined; // Jump statements will never have type checking - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.jumpStatement; - readonly targetCodeGenerator = this.codeGenerator.jumpStatement; -} - -/** - * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using - * {@link translateCtxAndChildren}. - */ -export class ReturnStatement extends Statement { - /** - * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. - * @private - */ - protected override readonly _antlrRuleCtx: ReturnStatementContext; - - /** - * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST - * node wraps. - * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. - * @since 0.10.0 - */ - public override readonly kind = KipperParser.RULE_returnStatement; - - protected readonly _children: Array; - - constructor(antlrRuleCtx: ReturnStatementContext, parent: CompilableNodeParent) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - this._children = []; - } - - /** - * The children of this parse token. - */ - public get children(): Array { - return this._children; - } - - /** - * The antlr context containing the antlr4 metadata for this statement. - */ - public override get antlrRuleCtx(): ReturnStatementContext { - return this._antlrRuleCtx; - } - - /** - * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of - * the children has already failed and as such no parent node should run type checking. - */ - public async primarySemanticAnalysis(): Promise { - const returnValue = this.children[0]; - - // Getting the function of the return statement - const func = this.programCtx.semanticCheck(this).getReturnStatementParent(this); - - this.semanticData = { - returnValue: returnValue, - function: func, - }; - } - - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 - */ - public async primarySemanticTypeChecking(): Promise { - const semanticData = this.getSemanticData(); - - // Ensure that the types of the return match the function's return. - this.programCtx.typeCheck(this).validReturnStatement(this); - - this.typeSemantics = { - returnType: - semanticData.returnValue?.getTypeSemanticData().evaluatedType ?? CheckedType.fromCompilableType("void"), - }; - } - - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.9.0 - */ - public checkForWarnings = undefined; // TODO! - - readonly targetSemanticAnalysis = this.semanticAnalyser.returnStatement; - readonly targetCodeGenerator = this.codeGenerator.returnStatement; -} diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts new file mode 100644 index 000000000..3bbec3892 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts @@ -0,0 +1,98 @@ +/** + * Compound statement class, which represents a compound statement containing other items in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + */ +import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; +import type { ScopeNode } from "../../scope-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import { Statement } from "./statement"; +import { LocalScope } from "../../../analysis"; +import { CompoundStatementContext, KipperParser } from "../../../parser"; + +/** + * Compound statement class, which represents a compound statement containing other items in the Kipper + * language and is compilable using {@link translateCtxAndChildren}. + */ +export class CompoundStatement extends Statement implements ScopeNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: CompoundStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_compoundStatement; + + protected readonly _children: Array; + + private readonly _innerScope: LocalScope; + + constructor(antlrRuleCtx: CompoundStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._semanticData = {}; + this._typeSemantics = {}; + this._innerScope = new LocalScope(this); + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): CompoundStatementContext { + return this._antlrRuleCtx; + } + + /** + * Returns the inner scope of this {@link CompoundStatement}, which is automatically created when using a compound + * statement. + * @since 0.10.0 + */ + public get innerScope(): LocalScope { + return this._innerScope; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public primarySemanticAnalysis = undefined; // Compound statements will never have semantic data + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // Compound statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.compoundStatement; + readonly targetCodeGenerator = this.codeGenerator.compoundStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts new file mode 100644 index 000000000..c1bd16d7d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts @@ -0,0 +1,85 @@ +/** + * Expression statement class, which represents a statement made up of an expression in the Kipper language. + */ +import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import { Statement } from "./statement"; +import { ExpressionStatementContext, KipperParser } from "../../../parser"; +import { Expression } from "../expressions"; + +/** + * Expression statement class, which represents a statement made up of an expression in the Kipper language. + */ +export class ExpressionStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ExpressionStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_expressionStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: ExpressionStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._semanticData = {}; + this._typeSemantics = {}; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ExpressionStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public primarySemanticAnalysis = undefined; // Expression statements will never have semantic data + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // Expression statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public async checkForWarnings(): Promise { + this.programCtx.warningCheck(this).uselessStatement(this); + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.expressionStatement; + readonly targetCodeGenerator = this.codeGenerator.expressionStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts new file mode 100644 index 000000000..e6885c72a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts @@ -0,0 +1,106 @@ +/** + * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +import type { NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { IfStatementSemantics } from "../../semantic-data"; +import { Statement } from "./statement"; +import { IfStatementContext, KipperParser } from "../../../parser"; +import { Expression } from "../expressions"; +import { UnableToDetermineSemanticDataError } from "../../../../errors"; + +/** + * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +export class IfStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: IfStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_ifStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: IfStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._typeSemantics = {}; + } + + /** + * The children of this AST node. + * + * May contain both {@link Expression expressions} and {@link Statement statements}, as it will always contain + * an expression at index 03 to represent the condition. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): IfStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + // There will be always at least two children + const condition: Expression = this.children[0]; + const body: Statement = this.children[1]; + const alternativeBranch: IfStatement | Statement | null = + this.children.length > 2 ? this.children[2] : null; + + // Ensure that the children are fully present and not undefined + if (!condition || !body) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + condition: condition, + ifBranch: body, + elseBranch: alternativeBranch ?? undefined, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // If-statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.ifStatement; + readonly targetCodeGenerator = this.codeGenerator.ifStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/index.ts b/kipper/core/src/compiler/ast/nodes/statements/index.ts new file mode 100644 index 000000000..ac4d8249e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/index.ts @@ -0,0 +1,13 @@ +/** + * Statement module containing the classes representing statements, which are used to perform specific operations and + * define the flow of a program. + * @since 0.11.0 + */ +export * from "./statement"; +export * from "./iteration/"; +export * from "./compound-statement"; +export * from "./expression-statement"; +export * from "./if-statement"; +export * from "./jump-statement"; +export * from "./return-statement"; +export * from "./switch-statement"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts new file mode 100644 index 000000000..3cb749150 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts @@ -0,0 +1,91 @@ +/** + * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import type { DoWhileLoopStatementSemantics } from "../../../semantic-data"; +import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; +import { IterationStatement } from "./iteration-statement"; +import { DoWhileLoopIterationStatementContext, KipperParser } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; + +/** + * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export class DoWhileLoopStatement extends IterationStatement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: DoWhileLoopIterationStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_doWhileLoopIterationStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: DoWhileLoopIterationStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): DoWhileLoopIterationStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.doWhileLoopStatement; + readonly targetCodeGenerator = this.codeGenerator.doWhileLoopStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts new file mode 100644 index 000000000..4cdc6b839 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-statement.ts @@ -0,0 +1,125 @@ +import type { ForLoopStatementSemantics } from "../../../semantic-data"; +import type { NoTypeSemantics } from "../../../ast-node"; +import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; +/** + * For loop statement class, which represents a for loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import type { ScopeNode } from "../../../scope-node"; +import type { Statement } from "../statement"; +import type { VariableDeclaration } from "../../declarations"; +import { IterationStatement } from "./iteration-statement"; +import { ForLoopIterationStatementContext, KipperParser } from "../../../../parser"; +import { Expression } from "../../expressions"; +import { LocalScope } from "../../../../analysis"; + +/** + * For loop statement class, which represents a for loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export class ForLoopStatement + extends IterationStatement + implements ScopeNode +{ + /** + * The private field '_innerScope' that actually stores the variable data, + * which is returned inside the {@link this.innerScope}. + * @private + */ + private readonly _innerScope: LocalScope; + + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ForLoopIterationStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_forLoopIterationStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: ForLoopIterationStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._innerScope = new LocalScope(this); + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ForLoopIterationStatementContext { + return this._antlrRuleCtx; + } + + /** + * Gets the inner scope of this for-loop statement, which is automatically created when using a for loop. + * @since 0.10.0 + */ + public get innerScope(): LocalScope { + return this._innerScope; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + let index = 0; + + // 'index++' will increase the index after the assignment, so the first assignment will be '0' and the second + // assignment will be '1', and so on... + const forDeclaration = this.antlrRuleCtx._forDeclaration + ? this.children[index++] + : undefined; + const forCondition = this.antlrRuleCtx._forCondition ? this.children[index++] : undefined; + const forIterationExp = this.antlrRuleCtx._forIterationExp ? this.children[index++] : undefined; + const loopBody = this.children[index++]; + + this.semanticData = { + forDeclaration: forDeclaration, + loopCondition: forCondition, + forIterationExp: forIterationExp, + loopBody: loopBody, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // For-loop statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.forLoopStatement; + readonly targetCodeGenerator = this.codeGenerator.forLoopStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts new file mode 100644 index 000000000..6d8da30bd --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts @@ -0,0 +1,4 @@ +export * from "./iteration-statement"; +export * from "./while-loop-statement"; +export * from "./do-while-loop-statement"; +export * from "./for-loop-statement"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts new file mode 100644 index 000000000..1fd7f329c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts @@ -0,0 +1,43 @@ +/** + * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import { + DoWhileLoopIterationStatementContext, + ForLoopIterationStatementContext, + KipperParser, + WhileLoopIterationStatementContext, +} from "../../../../parser"; +import { IterationStatementSemantics } from "../../../semantic-data"; +import { NoTypeSemantics } from "../../../ast-node"; +import { Statement } from "../statement"; + +/** + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. + * @since 0.10.0 + */ +export type ParserIterationStatementContext = + | ForLoopIterationStatementContext + | WhileLoopIterationStatementContext + | DoWhileLoopIterationStatementContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link MemberAccessExpression} AST node. + * @since 0.10.0 + */ +export type ParserIterationStatementKind = + | typeof KipperParser.RULE_forLoopIterationStatement + | typeof KipperParser.RULE_whileLoopIterationStatement + | typeof KipperParser.RULE_doWhileLoopIterationStatement; + +/** + * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export abstract class IterationStatement< + Semantics extends IterationStatementSemantics = IterationStatementSemantics, + TypeSemantics extends NoTypeSemantics = NoTypeSemantics, +> extends Statement { + protected abstract readonly _antlrRuleCtx: ParserIterationStatementContext; + public abstract readonly kind: ParserIterationStatementKind; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts new file mode 100644 index 000000000..377727949 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts @@ -0,0 +1,93 @@ +/** + * While loop statement class, which represents a while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; +import type { WhileLoopStatementSemantics } from "../../../semantic-data"; +import { IterationStatement } from "./iteration-statement"; +import { KipperParser, WhileLoopIterationStatementContext } from "../../../../parser"; +import { Expression } from "../../expressions"; +import { Statement } from "../statement"; + +/** + * While loop statement class, which represents a while loop statement in the Kipper language and is compilable + * using {@link translateCtxAndChildren}. + */ +export class WhileLoopStatement extends IterationStatement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: WhileLoopIterationStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_whileLoopIterationStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: WhileLoopIterationStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + this._typeSemantics = {}; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): WhileLoopIterationStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const loopCondition = this.children[0]; + const loopBody = this.children[1]; + + this.semanticData = { + loopCondition: loopCondition, + loopBody: loopBody, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // While-loop statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.whileLoopStatement; + readonly targetCodeGenerator = this.codeGenerator.whileLoopStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts new file mode 100644 index 000000000..3c0d748b7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts @@ -0,0 +1,92 @@ +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +import type { NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { JumpStatementSemantics } from "../../semantic-data"; +import { Statement } from "./statement"; +import { JumpStatementContext, KipperParser } from "../../../parser"; +import { Expression } from "../expressions"; + +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +export class JumpStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: JumpStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_jumpStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: JumpStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): JumpStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const jmpType = this.sourceCode.startsWith("break") ? "break" : "continue"; + const parent = this.programCtx.semanticCheck(this).getJumpStatementParent(this); + + this.semanticData = { + jmpType: jmpType, + parent: parent, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public primarySemanticTypeChecking = undefined; // Jump statements will never have type checking + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.jumpStatement; + readonly targetCodeGenerator = this.codeGenerator.jumpStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts new file mode 100644 index 000000000..686eec313 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts @@ -0,0 +1,105 @@ +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import type { ReturnStatementSemantics } from "../../semantic-data"; +import type { ReturnStatementTypeSemantics } from "../../type-data"; +import { Statement } from "./statement"; +import { CheckedType } from "../../../analysis"; +import { KipperParser, ReturnStatementContext } from "../../../parser"; +import { Expression } from "../expressions"; + +/** + * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using + * {@link translateCtxAndChildren}. + */ +export class ReturnStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ReturnStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_returnStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: ReturnStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this parse token. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ReturnStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + const returnValue = this.children[0]; + + // Getting the function of the return statement + const func = this.programCtx.semanticCheck(this).getReturnStatementParent(this); + + this.semanticData = { + returnValue: returnValue, + function: func, + }; + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + + // Ensure that the types of the return match the function's return. + this.programCtx.typeCheck(this).validReturnStatement(this); + + this.typeSemantics = { + returnType: + semanticData.returnValue?.getTypeSemanticData().evaluatedType ?? CheckedType.fromCompilableType("void"), + }; + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.returnStatement; + readonly targetCodeGenerator = this.codeGenerator.returnStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/statement.ts b/kipper/core/src/compiler/ast/nodes/statements/statement.ts new file mode 100644 index 000000000..19809e2a2 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/statement.ts @@ -0,0 +1,64 @@ +/** + * AST Node Statement classes of the Kipper language. + * @since 0.1.0 + */ +import type { CompilableNodeParent, SemanticData, TypeData } from "../../index"; +import type { ASTStatementKind, ParserStatementContext } from "../../ast-types"; +import type { TranslatedCodeLine } from "../../../const"; +import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; +import { KipperParser } from "../../../parser"; +import { CompilableASTNode } from "../../compilable-ast-node"; + +/** + * The base abstract AST node class for all statements, which wrap their corresponding + * {@link KipperParserRuleContext} rule context classes that were generated by the {@link KipperParser}. + * + * These AST nodes can be created with the {@link StatementASTNodeFactory} class. + * @since 0.1.0 + */ +export abstract class Statement< + Semantics extends SemanticData = SemanticData, + TypeSemantics extends TypeData = TypeData, +> extends CompilableASTNode { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ParserStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public abstract readonly kind: ASTStatementKind; + + protected constructor(antlrRuleCtx: ParserStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + + // Manually add the child to the parent + parent.addNewChild(this); + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): ParserStatementContext { + return this._antlrRuleCtx; + } + + /** + * Generates the typescript code for this item, and all children (if they exist). + * + * Every item in the array represents a single line of code. + */ + public async translateCtxAndChildren(): Promise> { + return await this.targetCodeGenerator(this); + } + + public abstract targetCodeGenerator: TargetASTNodeCodeGenerator>; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts new file mode 100644 index 000000000..0f4a64a1c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts @@ -0,0 +1,89 @@ +/** + * Switch statement class, which represents a switch selection statement in the Kipper language. + */ +import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; +import type { CompilableNodeParent } from "../../compilable-ast-node"; +import { Statement } from "./statement"; +import { KipperParser, SwitchStatementContext } from "../../../parser"; +import { KipperNotImplementedError } from "../../../../errors"; + +/** + * Switch statement class, which represents a switch selection statement in the Kipper language. + */ +export class SwitchStatement extends Statement { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: SwitchStatementContext; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * @since 0.10.0 + */ + public override readonly kind = KipperParser.RULE_switchStatement; + + protected readonly _children: Array; + + constructor(antlrRuleCtx: SwitchStatementContext, parent: CompilableNodeParent) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + this._children = []; + } + + /** + * The children of this AST node. + */ + public get children(): Array { + return this._children; + } + + /** + * The antlr context containing the antlr4 metadata for this statement. + */ + public override get antlrRuleCtx(): SwitchStatementContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.7.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Switch statements have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.9.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.switchStatement; + readonly targetCodeGenerator = this.codeGenerator.switchStatement; +} diff --git a/kipper/core/src/compiler/ast/root-ast-node.ts b/kipper/core/src/compiler/ast/root-ast-node.ts index 69eb4bcd1..f3630520d 100644 --- a/kipper/core/src/compiler/ast/root-ast-node.ts +++ b/kipper/core/src/compiler/ast/root-ast-node.ts @@ -13,7 +13,8 @@ import type { } from "../target-presets"; import type { EvaluatedCompileConfig } from "../compile-config"; import type { KipperProgramContext } from "../program-ctx"; -import type { Declaration, Statement } from "./nodes"; +import type { Declaration } from "./nodes/declarations/"; +import type { Statement } from "./nodes"; import type { TranslatedCodeLine } from "../const"; import { KipperError } from "../../errors"; import { CompilationUnitContext, KipperParser } from "../parser"; diff --git a/kipper/core/src/compiler/ast/semantic-data/definitions.ts b/kipper/core/src/compiler/ast/semantic-data/definitions.ts index c004ce4b6..dbcfb4ee3 100644 --- a/kipper/core/src/compiler/ast/semantic-data/definitions.ts +++ b/kipper/core/src/compiler/ast/semantic-data/definitions.ts @@ -1,11 +1,12 @@ /** - * Semantic data definitions for all definition AST nodes. + * Semantic data declarations for all definition AST nodes. * @since 0.10.0 */ import type { SemanticData } from "../ast-node"; import type { KipperStorageType } from "../../const"; import type { Scope } from "../../analysis"; -import type { CompoundStatement, Expression, FunctionDeclaration, ParameterDeclaration } from "../nodes"; +import type { CompoundStatement, Expression } from "../nodes"; +import type { FunctionDeclaration, ParameterDeclaration } from "../nodes/declarations"; import { IdentifierTypeSpecifierExpression } from "../nodes"; import { UncheckedType } from "../../analysis"; diff --git a/kipper/core/src/compiler/ast/semantic-data/expressions.ts b/kipper/core/src/compiler/ast/semantic-data/expressions.ts index 70b73cbc3..c8c71906c 100644 --- a/kipper/core/src/compiler/ast/semantic-data/expressions.ts +++ b/kipper/core/src/compiler/ast/semantic-data/expressions.ts @@ -1,5 +1,5 @@ /** - * Semantic data definitions for all expression AST nodes. + * Semantic data declarations for all expression AST nodes. * @since 0.10.0 */ import type { @@ -49,7 +49,7 @@ export interface ConstantExpressionSemantics extends ExpressionSemantics { * Semantics for AST Node {@link NumberPrimaryExpression}. * @since 0.5.0 */ -export interface NumberPrimaryExpressionSemantics extends ExpressionSemantics { +export interface NumberPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of the constant number expression. * @@ -70,7 +70,7 @@ export interface NumberPrimaryExpressionSemantics extends ExpressionSemantics { * Semantics for AST Node {@link ArrayLiteralPrimaryExpression}. * @since 0.5.0 */ -export interface ArrayLiteralPrimaryExpressionSemantics extends ExpressionSemantics { +export interface ArrayLiteralPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of the constant list expression. * @since 0.5.0 @@ -82,7 +82,7 @@ export interface ArrayLiteralPrimaryExpressionSemantics extends ExpressionSemant * Semantics for AST Node {@link StringPrimaryExpression}. * @since 0.5.0 */ -export interface StringPrimaryExpressionSemantics extends ExpressionSemantics { +export interface StringPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of the constant string expression. * @since 0.5.0 @@ -102,7 +102,7 @@ export interface StringPrimaryExpressionSemantics extends ExpressionSemantics { * Semantics for AST Node {@link BoolPrimaryExpression}. * @since 0.8.0 */ -export interface BoolPrimaryExpressionSemantics extends ExpressionSemantics { +export interface BoolPrimaryExpressionSemantics extends ConstantExpressionSemantics { /** * The value of this boolean constant expression. * @since 0.8.0 @@ -110,6 +110,18 @@ export interface BoolPrimaryExpressionSemantics extends ExpressionSemantics { value: KipperBoolTypeLiterals; } +/** + * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. + * @since 0.10.0 + */ +export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends ConstantExpressionSemantics { + /** + * The constant identifier of this expression. + * @since 0.10.0 + */ + constantIdentifier: KipperVoidType | KipperNullType | KipperUndefinedType; +} + /** * Semantics for AST Node {@link FStringPrimaryExpression}. * @since 0.5.0 @@ -185,18 +197,6 @@ export interface TangledPrimaryExpressionSemantics extends ExpressionSemantics { childExp: Expression; } -/** - * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. - * @since 0.10.0 - */ -export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends ExpressionSemantics { - /** - * The constant identifier of this expression. - * @since 0.10.0 - */ - constantIdentifier: KipperVoidType | KipperNullType | KipperUndefinedType; -} - /** * Semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. * @since 0.5.0 diff --git a/kipper/core/src/compiler/ast/semantic-data/index.ts b/kipper/core/src/compiler/ast/semantic-data/index.ts index 9d2bf722a..e2a5d1e3c 100644 --- a/kipper/core/src/compiler/ast/semantic-data/index.ts +++ b/kipper/core/src/compiler/ast/semantic-data/index.ts @@ -1,5 +1,5 @@ /** - * Semantic data definitions for all AST nodes. + * Semantic data declarations for all AST nodes. * @since 0.10.0 */ export * from "./definitions"; diff --git a/kipper/core/src/compiler/ast/semantic-data/statements.ts b/kipper/core/src/compiler/ast/semantic-data/statements.ts index bc6c01b5a..aca939ecc 100644 --- a/kipper/core/src/compiler/ast/semantic-data/statements.ts +++ b/kipper/core/src/compiler/ast/semantic-data/statements.ts @@ -1,10 +1,11 @@ /** - * Semantic data definitions for all statement AST nodes. + * Semantic data declarations for all statement AST nodes. * @since 0.10.0 */ import type { SemanticData } from "../ast-node"; -import type { Expression, FunctionDeclaration, IfStatement, Statement, VariableDeclaration } from "../nodes"; +import type { Expression, IfStatement, Statement } from "../nodes"; import type { JmpStatementType } from "../../const"; +import type { FunctionDeclaration, VariableDeclaration } from "../nodes/declarations"; import { IterationStatement } from "../nodes"; /** diff --git a/kipper/core/src/compiler/ast/type-data/definitions.ts b/kipper/core/src/compiler/ast/type-data/definitions.ts index 8d2babf5e..b4271a9ba 100644 --- a/kipper/core/src/compiler/ast/type-data/definitions.ts +++ b/kipper/core/src/compiler/ast/type-data/definitions.ts @@ -1,5 +1,5 @@ /** - * Semantic type data definitions for all definition AST nodes. + * Semantic type data declarations for all definition AST nodes. * @since 0.10.0 */ import type { TypeData } from "../../ast"; diff --git a/kipper/core/src/compiler/ast/type-data/expressions.ts b/kipper/core/src/compiler/ast/type-data/expressions.ts index f960a46a1..74934211b 100644 --- a/kipper/core/src/compiler/ast/type-data/expressions.ts +++ b/kipper/core/src/compiler/ast/type-data/expressions.ts @@ -1,5 +1,5 @@ /** - * Semantic type data definitions for all expression AST nodes. + * Semantic type data declarations for all expression AST nodes. * @since 0.10.0 */ import type { KipperFunction } from "../../const"; @@ -129,7 +129,7 @@ export interface MemberAccessExpressionTypeSemantics extends ExpressionTypeSeman * Type Semantics for AST Node {@link FunctionCallExpression}. * @since 0.5.0 */ -export interface FunctionCallPostfixTypeSemantics extends ExpressionTypeSemantics { +export interface FunctionCallExpressionTypeSemantics extends ExpressionTypeSemantics { /** * The function that this expression calls. Can be either a {@link ScopeFunctionDeclaration function declaration} or * a {@link ScopeVariableDeclaration function in a variable}. diff --git a/kipper/core/src/compiler/ast/type-data/index.ts b/kipper/core/src/compiler/ast/type-data/index.ts index 9d2bf722a..e2a5d1e3c 100644 --- a/kipper/core/src/compiler/ast/type-data/index.ts +++ b/kipper/core/src/compiler/ast/type-data/index.ts @@ -1,5 +1,5 @@ /** - * Semantic data definitions for all AST nodes. + * Semantic data declarations for all AST nodes. * @since 0.10.0 */ export * from "./definitions"; diff --git a/kipper/core/src/compiler/ast/type-data/statements.ts b/kipper/core/src/compiler/ast/type-data/statements.ts index 9d06dbabb..635780729 100644 --- a/kipper/core/src/compiler/ast/type-data/statements.ts +++ b/kipper/core/src/compiler/ast/type-data/statements.ts @@ -1,5 +1,5 @@ /** - * Semantic type data definitions for all statement AST nodes. + * Semantic type data declarations for all statement AST nodes. * @since 0.10.0 */ import type { TypeData } from "../../ast"; diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index c9058d68c..a72220e2b 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -1,5 +1,5 @@ /** - * Constant definitions and types for the compiler implementation. + * Constant declarations and types for the compiler implementation. * @since 0.3.0 */ import type { diff --git a/kipper/core/src/compiler/program-ctx.ts b/kipper/core/src/compiler/program-ctx.ts index 08e284af4..df3da0c9d 100644 --- a/kipper/core/src/compiler/program-ctx.ts +++ b/kipper/core/src/compiler/program-ctx.ts @@ -53,7 +53,7 @@ export class KipperProgramContext { private _compiledCode: Array | undefined; /** - * The global scope of this program, containing all variable and function definitions + * The global scope of this program, containing all variable and function declarations * @private */ private readonly _globalScope: GlobalScope; From 436ca2f766f89630b2a2eab9dadcda3c69db0ff5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 4 Apr 2023 17:07:10 +0200 Subject: [PATCH 016/257] Updated tsconfig.json --- tsconfig.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 35746138f..29218b121 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,7 @@ "outDir": "./lib", "target": "es2016", "lib": [ - "ES2016" + "ES7", ] // ES7 -> ES2016 }, @@ -22,6 +22,7 @@ "compilerOptions": { "rootDir": ".", "sourceRoot": ".", + "sourceMap": true, }, "files": true }, @@ -40,6 +41,6 @@ "kipper/target-ts", ], "files": [ - "./kipper/index.ts" + "./kipper/index.ts", ] } From 0c87e37b25d9d3feec5fe05c1259b0ab8ffdac71 Mon Sep 17 00:00:00 2001 From: Luna Date: Mon, 8 May 2023 15:01:39 +0000 Subject: [PATCH 017/257] Fixed minor typo in analysable-ast-node.ts Signed-off-by: Luna (cherry picked from commit b51f3d7ab913661eed40e62ae8962fc7c37c8649) --- kipper/core/src/compiler/ast/analysable-ast-node.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kipper/core/src/compiler/ast/analysable-ast-node.ts b/kipper/core/src/compiler/ast/analysable-ast-node.ts index 8562dbf44..4b5a29bbb 100644 --- a/kipper/core/src/compiler/ast/analysable-ast-node.ts +++ b/kipper/core/src/compiler/ast/analysable-ast-node.ts @@ -120,7 +120,7 @@ export abstract class AnalysableASTNode< /** * Returns true if the {@link this.primarySemanticAnalysis semantic analysis} of {@link CompilableASTNode this node} * was skipped, due to required semantic data being missing. This indicates that the node is impossible to analyse - * as required semantic data from other nodes is missing. + * as the required semantic data from other nodes is missing. */ public get skippedSemanticAnalysis(): boolean { return this._skippedSemanticAnalysis; @@ -129,7 +129,7 @@ export abstract class AnalysableASTNode< /** * Returns true if the {@link this.primarySemanticTypeChecking type checking} of {@link CompilableASTNode this node} * was skipped, due to required semantic data being missing. This indicates that the node is impossible to type check - * as required semantic data from other nodes is missing. + * as the required semantic data from other nodes is missing. * @since 0.10.0 */ public get skippedSemanticTypeChecking(): boolean { From c7bc5c2281a01b2684b2ad351ee030d7239e109a Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 2 Jun 2023 13:01:18 +0200 Subject: [PATCH 018/257] Updated tests and added tests for f-strings --- test/module/core/built-ins.test.ts | 4 +- test/module/core/compiler.test.ts | 36 ++++++------- test/module/core/core-functionality.test.ts | 50 +++++++++++++++++++ .../semantic-errors/builtin-overwrite.ts | 2 +- .../module/core/warnings/useless-statement.ts | 2 +- 5 files changed, 72 insertions(+), 22 deletions(-) diff --git a/test/module/core/built-ins.test.ts b/test/module/core/built-ins.test.ts index 7636b19db..0025dc8a0 100644 --- a/test/module/core/built-ins.test.ts +++ b/test/module/core/built-ins.test.ts @@ -31,7 +31,7 @@ describe("Built-ins", () => { target: target, }; - describe(`print (${target.fileExtension})`, () => { + describe(`print [${target.fileExtension}]`, () => { it("Should error with no argument", async () => { const fileContent = "print();"; try { @@ -85,7 +85,7 @@ describe("Built-ins", () => { }); }); - describe(`len (${target.fileExtension})`, () => { + describe(`len [${target.fileExtension}]`, () => { it("Should error with no argument", async () => { const fileContent = "len();"; try { diff --git a/test/module/core/compiler.test.ts b/test/module/core/compiler.test.ts index 8194e883a..5a641d622 100644 --- a/test/module/core/compiler.test.ts +++ b/test/module/core/compiler.test.ts @@ -212,7 +212,7 @@ describe("KipperCompiler", () => { const tests = [new KipperJavaScriptTarget(), new KipperTypeScriptTarget()]; tests.forEach((target) => { - it(`Sample program (${target.fileExtension})`, async () => { + it(`Sample program [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(mainFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -222,7 +222,7 @@ describe("KipperCompiler", () => { assert.equal(result.programCtx.globalScope.entries.size, 4, "Expected four global scope entries"); }); - it(`Arithmetics (${target.fileExtension})`, async () => { + it(`Arithmetics [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(arithmeticsFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -233,7 +233,7 @@ describe("KipperCompiler", () => { assert.include(result.write(), fileContent, "Expected compiled code to not change"); }); - it(`Variable Declaration (${target.fileExtension})`, async () => { + it(`Variable Declaration [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(variableDeclarationFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -243,7 +243,7 @@ describe("KipperCompiler", () => { assert.equal(result.programCtx.globalScope.entries.size, 1, "Expected one global scope entry"); }); - it(`Nested scopes (${target.fileExtension})`, async () => { + it(`Nested scopes [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(nestedScopesFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -253,7 +253,7 @@ describe("KipperCompiler", () => { assert.equal(result.programCtx.globalScope.entries.size, 4, "Expected four global scope entries"); }); - it(`Single Function call (${target.fileExtension})`, async () => { + it(`Single Function call [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(singleFunctionFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -279,7 +279,7 @@ describe("KipperCompiler", () => { console.log = prevLog; }); - it(`Multi Function call (${target.fileExtension})`, async () => { + it(`Multi Function call [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(multiFunctionFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -295,7 +295,7 @@ describe("KipperCompiler", () => { }, jsCode); }); - it(`Single Function definition (${target.fileExtension})`, async () => { + it(`Single Function definition [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(singleFunctionDefinitionFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -305,7 +305,7 @@ describe("KipperCompiler", () => { assert.equal(result.programCtx.globalScope.entries.size, 1, "Expected one global scope entry"); }); - it(`Multi Function definition (${target.fileExtension})`, async () => { + it(`Multi Function definition [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(multiFunctionDefinitionFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -315,7 +315,7 @@ describe("KipperCompiler", () => { assert.equal(result.programCtx.globalScope.entries.size, 3, "Expected three global scope entries"); }); - it(`Function call argument (${target.fileExtension})`, async () => { + it(`Function call argument [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(addedHelloWorldFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -332,7 +332,7 @@ describe("KipperCompiler", () => { }, jsCode); }); - it(`Variable assignment (${target.fileExtension})`, async () => { + it(`Variable assignment [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(assignmentArithmeticsFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -348,7 +348,7 @@ describe("KipperCompiler", () => { }, jsCode); }); - it(`Assign (${target.fileExtension})`, async () => { + it(`Assign [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(assignFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -358,7 +358,7 @@ describe("KipperCompiler", () => { assert.equal(result.programCtx.globalScope.entries.size, 1, "Expected one global scope entry"); }); - it(`Bool (${target.fileExtension})`, async () => { + it(`Bool [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(boolFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -368,7 +368,7 @@ describe("KipperCompiler", () => { assert.equal(result.programCtx.globalScope.entries.size, 2, "Expected two global scope entries"); }); - it(`Type conversion (${target.fileExtension})`, async () => { + it(`Type conversion [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(typeConversionFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -385,7 +385,7 @@ describe("KipperCompiler", () => { assert(code.includes(TargetTS.getBuiltInIdentifier("boolToNum"))); }); - it(`Expression statements (${target.fileExtension})`, async () => { + it(`Expression statements [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(expressionStatementsFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -400,7 +400,7 @@ describe("KipperCompiler", () => { assert(code.includes(TargetTS.getBuiltInIdentifier("numToStr"))); }); - it(`Tangled expressions (${target.fileExtension})`, async () => { + it(`Tangled expressions [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(tangledExpressionsFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -416,7 +416,7 @@ describe("KipperCompiler", () => { }, jsCode); }); - it(`If statements (${target.fileExtension})`, async () => { + it(`If statements [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(ifStatementsFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -437,7 +437,7 @@ describe("KipperCompiler", () => { }, jsCode); }); - it(`While loop (${target.fileExtension})`, async () => { + it(`While loop [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(whileLoopFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); @@ -453,7 +453,7 @@ describe("KipperCompiler", () => { }, jsCode); }); - it(`For loop (${target.fileExtension})`, async () => { + it(`For loop [${target.fileExtension}]`, async () => { const fileContent = (await fs.readFile(forLoopFile, "utf8" as BufferEncoding)).toString(); const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 657a01332..9ed953445 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -839,6 +839,56 @@ describe("Core functionality", () => { }); }); + describe("F-String", () => { + const types = [ + {type: "str", value: " 1234 "}, + {type: "num", value: 12345}, + {type: "bool", value: true}, + {type: "void", value: void 0}, + {type: "null", value: null}, + {type: "undefined", value: undefined}, + ]; + types.forEach((arg) => { + describe(`Inserting [${arg.type}]`, () => { + it("Inserting single value", async () => { + const fileContent = `print(f"Test: 1. {${arg.value}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + }); + + it("Inserting two values", async () => { + const fileContent = `print(f"Test: 1. {${arg.value}} - 2. {${arg.value}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + }); + + it("Inserting three values", async () => { + const fileContent = `print(f"Test: 1. {${arg.value}} - 2. {${arg.value}} - 3. {${arg.value}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + }); + + it("Inserting more values", async () => { + const fileContent = `print(f"Test: 1. {${arg.value}} - 2. {${arg.value}} - 3. {${arg.value}} - 4. {${arg.value}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + }); + }); + }); + }); + describe("Functions", () => { it("Declaration", async () => { const fileContent = "def test() -> void { }"; diff --git a/test/module/core/errors/semantic-errors/builtin-overwrite.ts b/test/module/core/errors/semantic-errors/builtin-overwrite.ts index 846fc3b58..7ea554077 100644 --- a/test/module/core/errors/semantic-errors/builtin-overwrite.ts +++ b/test/module/core/errors/semantic-errors/builtin-overwrite.ts @@ -13,7 +13,7 @@ describe("BuiltInOverwriteError", () => { extendBuiltInFunctions: test.i !== "print" ? [{ identifier: test.i, params: [], returnType: "void", }, ] : [], }; - describe(`Global Scope - ${test.t} Overwrite`, () => { + describe(`Global Scope - Overwrite [${test.t}]`, () => { it("Redeclaration by variable", async () => { try { await new KipperCompiler().compile(`var ${test.i}: num = 4;`, config); diff --git a/test/module/core/warnings/useless-statement.ts b/test/module/core/warnings/useless-statement.ts index 0ffedd7ad..1fbd810d5 100644 --- a/test/module/core/warnings/useless-statement.ts +++ b/test/module/core/warnings/useless-statement.ts @@ -20,7 +20,7 @@ describe("UselessExpressionStatementWarning", () => { { code: "1 + 2;", name: "Single" }, { code: "1 + 2 + 3 / 4 * 5 ** 6;", name: "Chained" }, ].forEach((o) => { - it(`Useless arithmetic expression (${o.name})`, async () => { + it(`Useless arithmetic expression [${o.name}]`, async () => { let result = await new KipperCompiler().compile(o.code, defaultConfig); // Ensure a warning is given and is not undefined From af8ed8f72bbab60ea5dae5f5c7f29ada980f3de4 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 2 Jun 2023 13:31:15 +0200 Subject: [PATCH 019/257] Added more tests for f-strings in core-functionality.test.ts --- test/module/core/core-functionality.test.ts | 156 +++++++++++++++++++- 1 file changed, 150 insertions(+), 6 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 9ed953445..1e2cb137b 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -841,12 +841,11 @@ describe("Core functionality", () => { describe("F-String", () => { const types = [ - {type: "str", value: " 1234 "}, - {type: "num", value: 12345}, - {type: "bool", value: true}, - {type: "void", value: void 0}, - {type: "null", value: null}, - {type: "undefined", value: undefined}, + { type: "str", value: " '1234' " }, + { type: "num", value: 12345 }, + { type: "bool", value: true }, + { type: "null", value: null }, + { type: "undefined", value: undefined }, ]; types.forEach((arg) => { describe(`Inserting [${arg.type}]`, () => { @@ -857,6 +856,17 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value}`, + ), + jsCode, + ); }); it("Inserting two values", async () => { @@ -866,6 +876,17 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value} - 2. ${arg.value}`, + ), + jsCode, + ); }); it("Inserting three values", async () => { @@ -875,6 +896,17 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value} - 2. ${arg.value} - 3. ${arg.value}`, + ), + jsCode, + ); }); it("Inserting more values", async () => { @@ -884,9 +916,121 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value} - 2. ${arg.value} - 3. ${arg.value} - 4. ${arg.value}`, + ), + jsCode, + ); + }); + }); + }); + + const types2 = [ + { type: "str", value1: " '12'", value2: "'34' " }, + { type: "num", value1: 12, value2: 34 }, + ]; + types2.forEach((arg) => { + describe(`Inserting additive expression [${arg.type}]`, () => { + it("Inserting single value", async () => { + const fileContent = `print(f"Test: 1. {${arg.value1} + ${arg.value2}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value1 + arg.value2}`, + ), + jsCode, + ); + }); + + it("Inserting two values", async () => { + const fileContent = `print(f"Test: 1. {${arg.value1} + ${arg.value2}} - 2. {${arg.value1} + ${arg.value2}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2}`, + ), + jsCode, + ); + }); + + it("Inserting three values", async () => { + const fileContent = `print(f"Test: 1. {${arg.value1} + ${arg.value2}} - 2. {${arg.value1} + ${arg.value2}} - 3. {${arg.value1} + ${arg.value2}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2}`, + ), + jsCode, + ); + }); + + it("Inserting more values", async () => { + const fileContent = `print(f"Test: 1. {${arg.value1} + ${arg.value2}} - 2. {${arg.value1} + ${arg.value2}} - 3. {${arg.value1} + ${arg.value2}} - 4. {${arg.value1} + ${arg.value2}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2} - 4. ${arg.value1 + arg.value2}`, + ), + jsCode, + ); }); }); }); + + describe("Inserting function expression", () => { + const functionContent = "def test() -> str { return 'SUCCESS'; }"; + + it("Inserting single value", async () => { + const fileContent = `print(f"Test: 1. {${functionContent}}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + }); + }); }); describe("Functions", () => { From 03a2f07b4b3cf03fe5b4b0cea1626e718c0bdbaa Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 2 Jun 2023 18:52:21 +0200 Subject: [PATCH 020/257] Fixed minor typos in core-functionality.test.ts --- test/module/core/core-functionality.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 1e2cb137b..acafdb030 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -841,7 +841,7 @@ describe("Core functionality", () => { describe("F-String", () => { const types = [ - { type: "str", value: " '1234' " }, + { type: "str", value: "' 1234 '" }, { type: "num", value: 12345 }, { type: "bool", value: true }, { type: "null", value: null }, @@ -932,7 +932,7 @@ describe("Core functionality", () => { }); const types2 = [ - { type: "str", value1: " '12'", value2: "'34' " }, + { type: "str", value1: "' 12'", value2: "'34 '" }, { type: "num", value1: 12, value2: 34 }, ]; types2.forEach((arg) => { From 7a868fbbf9f00b296dd5affbb86de9c2275a93b2 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 2 Jun 2023 18:52:53 +0200 Subject: [PATCH 021/257] Implemented algorithm to separate constant strings and dynamic expressions in `FStringPrimaryExpression` --- .../primary/fstring-primary-expression.ts | 34 +++++++++++++++---- .../compiler/ast/semantic-data/expressions.ts | 4 +-- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts index 23bcc0e82..728553b3f 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts @@ -5,10 +5,15 @@ import type { FStringPrimaryExpressionSemantics } from "../../../semantic-data"; import type { FStringPrimaryExpressionTypeSemantics } from "../../../type-data"; import { Expression } from "../expression"; -import { FStringPrimaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { + ExpressionContext, + FStringDoubleQuoteAtomContext, + FStringPrimaryExpressionContext, + ParserASTMapping +} from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; import { CheckedType } from "../../../../analysis"; -import { KipperNotImplementedError } from "../../../../../errors"; +import { getParseRuleSource } from "../../../../../utils"; /** * F-String class, which represents an f-string expression in the Kipper language. F-Strings are a way to automatically @@ -49,11 +54,28 @@ export class FStringPrimaryExpression extends Expression< */ public async primarySemanticAnalysis(): Promise { const stringParts: Array = []; - // TODO! + const atoms = >this.getAntlrRuleChildren().filter( + (atom) => atom instanceof FStringDoubleQuoteAtomContext + ); - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("F-String Expressions have not been implemented yet.")); + let index = 0; // 'index' for going through 'this.children' (the expressions inside the f-string) + for (const atom of atoms) { + const isExpressionAtom = atom.children && atom.children.find( + (child) => child instanceof ExpressionContext + ); + if (isExpressionAtom) { + stringParts.push( + this.children[index] + ); + index++; + } else { + stringParts.push(getParseRuleSource(atom)); + } + } + + this.semanticData = { + atoms: stringParts + }; } /** diff --git a/kipper/core/src/compiler/ast/semantic-data/expressions.ts b/kipper/core/src/compiler/ast/semantic-data/expressions.ts index c8c71906c..512edb5fc 100644 --- a/kipper/core/src/compiler/ast/semantic-data/expressions.ts +++ b/kipper/core/src/compiler/ast/semantic-data/expressions.ts @@ -130,9 +130,9 @@ export interface FStringPrimaryExpressionSemantics extends ExpressionSemantics { /** * Returns the items of the f-strings, where each item represents one section of the string. The section may either be * a {@link StringPrimaryExpression constant string} or {@link Expression evaluable runtime expression}. - * @since 0.5.0 + * @since 0.10.0 */ - items: Array; + atoms: Array; } /** From 8efd3b95937cc33538c982f4a648d20884997266 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 2 Jun 2023 18:53:00 +0200 Subject: [PATCH 022/257] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69ccabba5..833695a62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ To use development versions of Kipper download the also part of the `ParserConstantExpressionContext` type. - Renamed: - `FunctionCallPostfixTypeSemantics` to `FunctionCallExpressionTypeSemantics`. + - `FStringPrimaryExpressionSemantics.items` to `atoms`. ### Fixed From b909bfda95af4de60f5099fb80a17692a8f6521b Mon Sep 17 00:00:00 2001 From: luna Date: Sat, 3 Jun 2023 12:31:53 +0200 Subject: [PATCH 023/257] Added new conversions from `void`, `null` and `undefined` to `str` --- kipper/core/src/compiler/const.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index a72220e2b..5018e01bb 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -226,9 +226,12 @@ export type KipperType = KipperCompilableType | KipperErrorType; */ export const kipperSupportedConversions: Array<[KipperType, KipperType]> = [ ["num", "str"], - ["str", "num"], ["bool", "str"], + ["void", "str"], + ["null", "str"], + ["undefined", "str"], ["bool", "num"], + ["str", "num"], ]; /** From e868c93b5cfc05761cb4a7928f14578828295037 Mon Sep 17 00:00:00 2001 From: luna Date: Sat, 3 Jun 2023 12:59:59 +0200 Subject: [PATCH 024/257] Fixed minor issue in run.ts of @kipper/cli The check whether javascript code should also be generated was specifically checking "typescript" instead for "javascript" meaning theoretically only these two targets are taken into consideration by the code (as not typescript is assumed to be javascript). --- kipper/cli/src/commands/run.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index dffe4c302..8cf59bd43 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -154,7 +154,7 @@ export default class Run extends Command { // Get the JS code that should be evaluated let jsProgram: string; - if (target.targetName === "typescript") { + if (target.targetName !== "javascript") { // Also do the compilation now with the JavaScript target let jsProgramCtx = await compiler.compile(parseStream, { ...compilerOptions, target: getTarget("js") }); jsProgram = jsProgramCtx.write(); From 9e9e6391a9e4e917d5f5fe82d21d5e2327a12b6b Mon Sep 17 00:00:00 2001 From: luna Date: Sat, 3 Jun 2023 13:11:54 +0200 Subject: [PATCH 025/257] Implemented target code generation for new conversions from `void`, `null` and `undefined` to `str` --- kipper/core/src/compiler/runtime-built-ins.ts | 46 +++++++++++++++---- .../translation/built-ins-generator.ts | 32 +++++++++++-- kipper/target-js/src/built-in-generator.ts | 27 +++++++++-- kipper/target-js/src/tools.ts | 8 +++- kipper/target-ts/src/built-in-generator.ts | 41 ++++++++++++----- kipper/target-ts/src/tools.ts | 18 +++++--- 6 files changed, 135 insertions(+), 37 deletions(-) diff --git a/kipper/core/src/compiler/runtime-built-ins.ts b/kipper/core/src/compiler/runtime-built-ins.ts index 457884597..4197e91f9 100644 --- a/kipper/core/src/compiler/runtime-built-ins.ts +++ b/kipper/core/src/compiler/runtime-built-ins.ts @@ -192,26 +192,56 @@ export const kipperInternalBuiltInFunctions: Record = ], returnType: "str", }, - strToNum: { - identifier: "strToNum", + boolToStr: { + identifier: "boolToStr", params: [ { identifier: "value", - valueType: "str", + valueType: "bool", }, ], - returnType: "num", + returnType: "str", }, - boolToStr: { - identifier: "boolToStr", + voidToStr: { + identifier: "voidToStr", params: [ { identifier: "value", - valueType: "bool", - }, + valueType: "void", + } + ], + returnType: "str", + }, + nullToStr: { + identifier: "nullToStr", + params: [ + { + identifier: "value", + valueType: "null", + } ], returnType: "str", }, + undefinedToStr: { + identifier: "undefinedToStr", + params: [ + { + identifier: "value", + valueType: "undefined", + } + ], + returnType: "str", + }, + strToNum: { + identifier: "strToNum", + params: [ + { + identifier: "value", + valueType: "str", + }, + ], + returnType: "num", + }, boolToNum: { identifier: "boolToNum", params: [ diff --git a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts index 1fc2e6172..168e5968a 100644 --- a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts @@ -28,22 +28,46 @@ export abstract class KipperTargetBuiltInGenerator { abstract numToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; /** - * Conversion function which provides 'str' to 'num' type conversion functionality. + * Conversion function which provides 'bool' to 'str' type conversion functionality. * @param func The specification for the function. This contains the overall metadata for the function that * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. * @param programCtx The program context of the environment that is being compiled. * @since 0.10.0 */ - abstract strToNum(func: InternalFunction, programCtx: KipperProgramContext): Promise>; + abstract boolToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; /** - * Conversion function which provides 'bool' to 'str' type conversion functionality. + * Conversion function which provides 'str' to 'str' type conversion functionality. + * @param func The specification for the function. This contains the overall metadata for the function that + * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. + * @param programCtx The program context of the environment that is being compiled. + */ + abstract voidToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; + + /** + * Conversion function which provides 'null' to 'str' type conversion functionality. + * @param func The specification for the function. This contains the overall metadata for the function that + * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. + * @param programCtx The program context of the environment that is being compiled. + */ + abstract nullToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; + + /** + * Conversion function which provides 'undefined' to 'str' type conversion functionality. + * @param func The specification for the function. This contains the overall metadata for the function that + * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. + * @param programCtx The program context of the environment that is being compiled. + */ + abstract undefinedToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; + + /** + * Conversion function which provides 'str' to 'num' type conversion functionality. * @param func The specification for the function. This contains the overall metadata for the function that * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. * @param programCtx The program context of the environment that is being compiled. * @since 0.10.0 */ - abstract boolToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; + abstract strToNum(func: InternalFunction, programCtx: KipperProgramContext): Promise>; /** * Conversion function which provides 'bool' to 'num' type conversion functionality. diff --git a/kipper/target-js/src/built-in-generator.ts b/kipper/target-js/src/built-in-generator.ts index 8de73060b..6b707d7dc 100644 --- a/kipper/target-js/src/built-in-generator.ts +++ b/kipper/target-js/src/built-in-generator.ts @@ -12,11 +12,13 @@ import { TargetJS } from "./target"; * Generates a JavaScript function from the given signature and body. * @param signature The signature of the function. * @param body The body of the function. + * @param ignoreParams Whether or not to ignore the parameters of the function. * @since 0.10.0 */ export function genJSFunction( signature: { identifier: string; params: string[] }, body: string, + ignoreParams: boolean = false ): Array { return [ [ @@ -24,7 +26,7 @@ export function genJSFunction( " ", "=", " ", - createJSFunctionSignature(signature), + createJSFunctionSignature(signature, ignoreParams), " ", body, ";", @@ -54,18 +56,33 @@ export class JavaScriptTargetBuiltInGenerator extends KipperTargetBuiltInGenerat return genJSFunction(signature, `{ return (${convArgIdentifier}).toString(); }`); } - async strToNum(funcSpec: InternalFunction): Promise> { + async boolToStr(funcSpec: InternalFunction): Promise> { const signature = getJSFunctionSignature(funcSpec); const convArgIdentifier = signature.params[0]; - return genJSFunction(signature, `{ return parseInt(${convArgIdentifier}); }`); + return genJSFunction(signature, `{ return \`\${${convArgIdentifier}}\`; }`); } - async boolToStr(funcSpec: InternalFunction): Promise> { + async voidToStr(funcSpec: InternalFunction): Promise> { + const signature = getJSFunctionSignature(funcSpec); + return genJSFunction(signature, `{ return "void"; }`, true); + } + + async nullToStr(funcSpec: InternalFunction): Promise> { + const signature = getJSFunctionSignature(funcSpec); + return genJSFunction(signature, `{ return "null"; }`, true); + } + + async undefinedToStr(funcSpec: InternalFunction): Promise> { + const signature = getJSFunctionSignature(funcSpec); + return genJSFunction(signature, `{ return "undefined"; }`, true); + } + + async strToNum(funcSpec: InternalFunction): Promise> { const signature = getJSFunctionSignature(funcSpec); const convArgIdentifier = signature.params[0]; - return genJSFunction(signature, `{ return \`\${${convArgIdentifier}}\`; }`); + return genJSFunction(signature, `{ return parseInt(${convArgIdentifier}); }`); } async boolToNum(funcSpec: InternalFunction): Promise> { diff --git a/kipper/target-js/src/tools.ts b/kipper/target-js/src/tools.ts index b112527aa..a152f832f 100644 --- a/kipper/target-js/src/tools.ts +++ b/kipper/target-js/src/tools.ts @@ -39,11 +39,15 @@ export function getJSFunctionSignature(funcSpec: InternalFunction | BuiltInFunct /** * Generates the JavaScript function signature, based on the {@link signature signature metadata}. * @param signature The function signature metadata. + * @param ignoreParams Whether or not to ignore the parameters of the function. * @since 0.10.0 */ -export function createJSFunctionSignature(signature: { identifier: string; params: Array }): string { +export function createJSFunctionSignature( + signature: { identifier: string; params: Array }, + ignoreParams: boolean = false +): string { const { identifier, params } = signature; - return `function ${identifier}(${params.join(", ")})`; + return `function ${identifier}(${ignoreParams ? "" : params.join(", ")})`; } /** diff --git a/kipper/target-ts/src/built-in-generator.ts b/kipper/target-ts/src/built-in-generator.ts index 30ac3f132..4fd60becd 100644 --- a/kipper/target-ts/src/built-in-generator.ts +++ b/kipper/target-ts/src/built-in-generator.ts @@ -13,15 +13,17 @@ import { TargetTS } from "./target"; * Generates a TypeScript function from the given signature and body. * @param signature The signature of the function. * @param body The body of the function. + * @param ignoreParams Whether or not to ignore the parameters of the function. * @since 0.10.0 */ -export function getTSFunction( +export function genTSFunction( signature: { identifier: string; params: Array<{ identifier: string; type: KipperCompilableType | Array }>; returnType: KipperCompilableType | Array; }, body: string, + ignoreParams: boolean = false ): Array { return [ [ @@ -29,7 +31,7 @@ export function getTSFunction( " ", "=", " ", - createTSFunctionSignature(signature), + createTSFunctionSignature(signature, ignoreParams), " ", body, ";", @@ -67,21 +69,36 @@ export class TypeScriptTargetBuiltInGenerator extends JavaScriptTargetBuiltInGen const signature = getTSFunctionSignature(funcSpec); const convArgIdentifier = signature.params[0].identifier; - return getTSFunction(signature, `{ return (${convArgIdentifier}).toString(); }`); + return genTSFunction(signature, `{ return (${convArgIdentifier}).toString(); }`); } - override async strToNum(funcSpec: InternalFunction): Promise> { + override async boolToStr(funcSpec: InternalFunction): Promise> { const signature = getTSFunctionSignature(funcSpec); const convArgIdentifier = signature.params[0].identifier; - return getTSFunction(signature, `{ return parseInt(${convArgIdentifier}); }`); + return genTSFunction(signature, `{ return \`\${${convArgIdentifier}}\`; }`); } - override async boolToStr(funcSpec: InternalFunction): Promise> { + async voidToStr(funcSpec: InternalFunction): Promise> { + const signature = getTSFunctionSignature(funcSpec); + return genTSFunction(signature, `{ return "void"; }`, true); + } + + async nullToStr(funcSpec: InternalFunction): Promise> { + const signature = getTSFunctionSignature(funcSpec); + return genTSFunction(signature, `{ return "null"; }`, true); + } + + async undefinedToStr(funcSpec: InternalFunction): Promise> { + const signature = getTSFunctionSignature(funcSpec); + return genTSFunction(signature, `{ return "undefined"; }`, true); + } + + override async strToNum(funcSpec: InternalFunction): Promise> { const signature = getTSFunctionSignature(funcSpec); const convArgIdentifier = signature.params[0].identifier; - return getTSFunction(signature, `{ return \`\${${convArgIdentifier}}\`; }`); + return genTSFunction(signature, `{ return parseInt(${convArgIdentifier}); }`); } override async boolToNum(funcSpec: InternalFunction): Promise> { @@ -89,7 +106,7 @@ export class TypeScriptTargetBuiltInGenerator extends JavaScriptTargetBuiltInGen const convArgIdentifier = signature.params[0].identifier; // Define the function signature and its body. We will simply use 'console.log(msg)' for printing out IO - return getTSFunction(signature, `{ return ${convArgIdentifier} ? 1 : 0; }`); + return genTSFunction(signature, `{ return ${convArgIdentifier} ? 1 : 0; }`); } override async slice(funcSpec: InternalFunction): Promise> { @@ -98,7 +115,7 @@ export class TypeScriptTargetBuiltInGenerator extends JavaScriptTargetBuiltInGen const startIdentifier = signature.params[1].identifier; const endIdentifier = signature.params[2].identifier; - return getTSFunction( + return genTSFunction( signature, `{ return ${objLikeIdentifier} ? ${objLikeIdentifier}.slice(${startIdentifier}, ${endIdentifier}) : ${objLikeIdentifier}; }`, ); @@ -109,7 +126,7 @@ export class TypeScriptTargetBuiltInGenerator extends JavaScriptTargetBuiltInGen const arrayLikeIdentifier = signature.params[0].identifier; const indexIdentifier = signature.params[1].identifier; - return getTSFunction( + return genTSFunction( signature, `{ if (${indexIdentifier} >= ${arrayLikeIdentifier}.length) ` + `throw new __kipper.IndexError(\`Index '\${${indexIdentifier}}' out of bonds of array-like.\`); ` + @@ -122,14 +139,14 @@ export class TypeScriptTargetBuiltInGenerator extends JavaScriptTargetBuiltInGen const printArgIdentifier = signature.params[0].identifier; // Define the function signature and its body. We will simply use 'console.log(msg)' for printing out IO. - return getTSFunction(signature, `{ console.log(${printArgIdentifier}); }`); + return genTSFunction(signature, `{ console.log(${printArgIdentifier}); }`); } async len(funcSpec: BuiltInFunction): Promise> { const signature = getTSFunctionSignature(funcSpec); const lenArgIdentifier = signature.params[0].identifier; - return getTSFunction(signature, `{ return ${lenArgIdentifier}.length; }`); + return genTSFunction(signature, `{ return ${lenArgIdentifier}.length; }`); } async __name__(varSpec: BuiltInVariable, programCtx: KipperProgramContext): Promise> { diff --git a/kipper/target-ts/src/tools.ts b/kipper/target-ts/src/tools.ts index ee351611d..d52327d03 100644 --- a/kipper/target-ts/src/tools.ts +++ b/kipper/target-ts/src/tools.ts @@ -50,15 +50,21 @@ export function getTSFunctionSignature(funcSpec: InternalFunction | BuiltInFunct /** * Generates the TypeScript function signature, based on the {@link signature signature metadata}. * @param signature The function signature metadata. + * @param ignoreParams Whether or not to ignore the parameters of the function. * @since 0.10.0 */ -export function createTSFunctionSignature(signature: { - identifier: string; - params: Array<{ identifier: string; type: KipperCompilableType | Array }>; - returnType: KipperCompilableType | Array; -}): string { +export function createTSFunctionSignature( + signature: { + identifier: string; + params: Array<{ identifier: string; type: KipperCompilableType | Array }>; + returnType: KipperCompilableType | Array; + }, + ignoreParams: boolean = false +): string { const { identifier, params } = signature; - const argsSignature = `${params.map((p) => `${p.identifier}: ${TargetTS.getTypeScriptType(p.type)}`).join(", ")}`; + const argsSignature = ignoreParams ? + "" : + `${params.map((p) => `${p.identifier}: ${TargetTS.getTypeScriptType(p.type)}`).join(", ")}`; return `function ${identifier}(${argsSignature}): ${TargetTS.getTypeScriptType(signature.returnType)}`; } From 7832b768bc9273476e5f57458ffe2f9739a15b69 Mon Sep 17 00:00:00 2001 From: luna Date: Sat, 3 Jun 2023 13:12:03 +0200 Subject: [PATCH 026/257] Updated CHANGELOG.md --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 833695a62..0d1d1e9a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,9 +18,22 @@ To use development versions of Kipper download the ### Added +- Added new valid conversions: + - `void` to `str`. + - `null` to `str`. + - `undefined` to `str`. +- New parameters: + - `ignoreParams` in `genJSFunction`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `createJSFunctionSignature`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `genTSFunction`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `createTSFunctionSignature`, which, if true makes the function signature define no parameters. - New field: - `KipperError.programCtx`, which contains, if `KipperError.tracebackData.errorNode` is not undefined, the program context of the error. +- New functions: + - `KipperTargetBuiltInGenerator.voidToStr`, for the built-in conversion from `void` to `str`. + - `KipperTargetBuiltInGenerator.nullToStr`, for the built-in conversion from `null` to `str`. + - `KipperTargetBuiltInGenerator.undefinedToStr`, for the built-in conversion from `undefined` to `str`. ### Changed @@ -30,6 +43,7 @@ To use development versions of Kipper download the - Renamed: - `FunctionCallPostfixTypeSemantics` to `FunctionCallExpressionTypeSemantics`. - `FStringPrimaryExpressionSemantics.items` to `atoms`. + - `getTSFunction()` to `genTSFunction()`. ### Fixed From caaed8edcf3ac22b1ef685f0e722c3fa082c9da5 Mon Sep 17 00:00:00 2001 From: luna Date: Sat, 3 Jun 2023 13:48:09 +0200 Subject: [PATCH 027/257] Implemented code generation for f-strings --- kipper/target-js/src/code-generator.ts | 18 ++++++++++++++---- test.kip | 1 + test/module/core/core-functionality.test.ts | 18 +++++++++--------- 3 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 test.kip diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 6239e2e8a..62822605f 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -2,11 +2,14 @@ * The JavaScript target-specific code generator for translating Kipper code into JavaScript. * @since 0.10.0 */ -import { +import type { + TranslatedCodeToken, ComparativeExpressionSemantics, LogicalExpressionSemantics, TranslatedCodeLine, TranslatedExpression, +} from "@kipper/core"; +import { AdditiveExpression, AssignmentExpression, BoolPrimaryExpression, @@ -41,8 +44,6 @@ import { TangledPrimaryExpression, TypeofTypeSpecifierExpression, VariableDeclaration, -} from "@kipper/core"; -import { CompoundStatement, DoWhileLoopStatement, ForLoopStatement, @@ -467,7 +468,16 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { * Translates a {@link FStringPrimaryExpression} into the JavaScript language. */ fStringPrimaryExpression = async (node: FStringPrimaryExpression): Promise => { - return []; + const atoms: Array = []; + for (const atom of node.getSemanticData().atoms) { + if (typeof atom === "string") { + atoms.push(atom); + } else { + atoms.push("${", ...(await atom.translateCtxAndChildren()), "}"); + } + } + + return ["`", ...atoms, "`"]; }; /** diff --git a/test.kip b/test.kip new file mode 100644 index 000000000..871f0de79 --- /dev/null +++ b/test.kip @@ -0,0 +1 @@ +print(f"Test: {0x5 + 0x5}"); diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index acafdb030..3efaee179 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -863,7 +863,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value}`, + `Test: 1. ${arg.value}`.replace(/'/g, ""), ), jsCode, ); @@ -883,7 +883,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value} - 2. ${arg.value}`, + `Test: 1. ${arg.value} - 2. ${arg.value}`.replace(/'/g, ""), ), jsCode, ); @@ -903,7 +903,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value} - 2. ${arg.value} - 3. ${arg.value}`, + `Test: 1. ${arg.value} - 2. ${arg.value} - 3. ${arg.value}`.replace(/'/g, ""), ), jsCode, ); @@ -923,7 +923,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value} - 2. ${arg.value} - 3. ${arg.value} - 4. ${arg.value}`, + `Test: 1. ${arg.value} - 2. ${arg.value} - 3. ${arg.value} - 4. ${arg.value}`.replace(/'/g, ""), ), jsCode, ); @@ -951,7 +951,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value1 + arg.value2}`, + `Test: 1. ${arg.value1 + arg.value2}`.replace(/'/g, ""), ), jsCode, ); @@ -971,7 +971,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2}`, + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2}`.replace(/'/g, "") ), jsCode, ); @@ -991,7 +991,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2}`, + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2}`.replace(/'/g, ""), ), jsCode, ); @@ -1011,7 +1011,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2} - 4. ${arg.value1 + arg.value2}`, + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2} - 4. ${arg.value1 + arg.value2}`.replace(/'/g, ""), ), jsCode, ); @@ -1023,7 +1023,7 @@ describe("Core functionality", () => { const functionContent = "def test() -> str { return 'SUCCESS'; }"; it("Inserting single value", async () => { - const fileContent = `print(f"Test: 1. {${functionContent}}");`; + const fileContent = `${functionContent}; print(f"Test: 1. {test()}");`; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); From 1f55319f498f70a99c48cdb3e63c9259d776b8e8 Mon Sep 17 00:00:00 2001 From: luna Date: Sat, 3 Jun 2023 16:52:10 +0200 Subject: [PATCH 028/257] Fixed bug not allowing proper generation of nested f-strings --- .../ast/nodes/expressions/primary/fstring-primary-expression.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts index 728553b3f..6a27ade95 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts @@ -9,6 +9,7 @@ import { ExpressionContext, FStringDoubleQuoteAtomContext, FStringPrimaryExpressionContext, + FStringSingleQuoteAtomContext, ParserASTMapping } from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; @@ -56,6 +57,7 @@ export class FStringPrimaryExpression extends Expression< const stringParts: Array = []; const atoms = >this.getAntlrRuleChildren().filter( (atom) => atom instanceof FStringDoubleQuoteAtomContext + || atom instanceof FStringSingleQuoteAtomContext ); let index = 0; // 'index' for going through 'this.children' (the expressions inside the f-string) From df035c4ae1d0de78c1751ecfd55fa1d9c04efed0 Mon Sep 17 00:00:00 2001 From: luna Date: Sat, 3 Jun 2023 19:58:26 +0200 Subject: [PATCH 029/257] Updated f-string tests and added tests for nested f-strings --- test/module/core/core-functionality.test.ts | 153 +++++++++++++++----- 1 file changed, 113 insertions(+), 40 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 3efaee179..90dd27e35 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -908,26 +908,6 @@ describe("Core functionality", () => { jsCode, ); }); - - it("Inserting more values", async () => { - const fileContent = `print(f"Test: 1. {${arg.value}} - 2. {${arg.value}} - 3. {${arg.value}} - 4. {${arg.value}}");`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); - assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); - - const jsCode = ts.transpile(instance.write()); - testPrintOutput( - (msg: any) => - assert.equal( - msg, - // @ts-ignore - `Test: 1. ${arg.value} - 2. ${arg.value} - 3. ${arg.value} - 4. ${arg.value}`.replace(/'/g, ""), - ), - jsCode, - ); - }); }); }); @@ -996,26 +976,6 @@ describe("Core functionality", () => { jsCode, ); }); - - it("Inserting more values", async () => { - const fileContent = `print(f"Test: 1. {${arg.value1} + ${arg.value2}} - 2. {${arg.value1} + ${arg.value2}} - 3. {${arg.value1} + ${arg.value2}} - 4. {${arg.value1} + ${arg.value2}}");`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); - assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); - - const jsCode = ts.transpile(instance.write()); - testPrintOutput( - (msg: any) => - assert.equal( - msg, - // @ts-ignore - `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2} - 4. ${arg.value1 + arg.value2}`.replace(/'/g, ""), - ), - jsCode, - ); - }); }); }); @@ -1029,6 +989,119 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. SUCCESS`.replace(/'/g, ""), + ), + jsCode, + ); + }); + + it("Inserting two values", async () => { + const fileContent = `${functionContent}; print(f"Test: 1. {test()} - 2. {test()}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. SUCCESS - 2. SUCCESS`.replace(/'/g, ""), + ), + jsCode, + ); + }); + + it("Inserting three values", async () => { + const fileContent = `${functionContent}; print(f"Test: 1. {test()} - 2. {test()} - 3. {test()}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. SUCCESS - 2. SUCCESS - 3. SUCCESS`.replace(/'/g, ""), + ), + jsCode, + ); + }); + }); + + describe("Inserting nested f-strings", () => { + it("One level", async () => { + const fileContent = `print(f"Test: 1. {f'{1 + 1}'}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. 2`.replace(/'/g, ""), + ), + jsCode, + ); + }); + + it("Two levels", async () => { + const fileContent = `print(f"Test: 1. {f'{f'{1 + 1}'}'}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. 2`.replace(/'/g, ""), + ), + jsCode, + ); + }); + + it("Three levels", async () => { + const fileContent = `print(f"Test: 1. {f'{f'{f'{1 + 1}'}'}'}");`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert(instance.programCtx.errors.length === 0, "Expected no compilation errors"); + assert(instance.programCtx.stream.stringContent === fileContent, "Expected matching streams"); + + const jsCode = ts.transpile(instance.write()); + testPrintOutput( + (msg: any) => + assert.equal( + msg, + // @ts-ignore + `Test: 1. 2`.replace(/'/g, ""), + ), + jsCode, + ); }); }); }); From a24e559ab4f585aec803a9bb598e42c8aa34b0e4 Mon Sep 17 00:00:00 2001 From: luna Date: Sun, 4 Jun 2023 15:11:10 +0200 Subject: [PATCH 030/257] Prettified code --- .../primary/fstring-primary-expression.ts | 19 ++++++++----------- kipper/core/src/compiler/runtime-built-ins.ts | 6 +++--- kipper/target-js/src/built-in-generator.ts | 2 +- kipper/target-js/src/tools.ts | 2 +- kipper/target-ts/src/built-in-generator.ts | 2 +- kipper/target-ts/src/tools.ts | 8 ++++---- 6 files changed, 18 insertions(+), 21 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts index 6a27ade95..9a3320cf8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts @@ -10,7 +10,7 @@ import { FStringDoubleQuoteAtomContext, FStringPrimaryExpressionContext, FStringSingleQuoteAtomContext, - ParserASTMapping + ParserASTMapping, } from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; import { CheckedType } from "../../../../analysis"; @@ -55,20 +55,17 @@ export class FStringPrimaryExpression extends Expression< */ public async primarySemanticAnalysis(): Promise { const stringParts: Array = []; - const atoms = >this.getAntlrRuleChildren().filter( - (atom) => atom instanceof FStringDoubleQuoteAtomContext - || atom instanceof FStringSingleQuoteAtomContext + const atoms = >( + this.getAntlrRuleChildren().filter( + (atom) => atom instanceof FStringDoubleQuoteAtomContext || atom instanceof FStringSingleQuoteAtomContext, + ) ); let index = 0; // 'index' for going through 'this.children' (the expressions inside the f-string) for (const atom of atoms) { - const isExpressionAtom = atom.children && atom.children.find( - (child) => child instanceof ExpressionContext - ); + const isExpressionAtom = atom.children && atom.children.find((child) => child instanceof ExpressionContext); if (isExpressionAtom) { - stringParts.push( - this.children[index] - ); + stringParts.push(this.children[index]); index++; } else { stringParts.push(getParseRuleSource(atom)); @@ -76,7 +73,7 @@ export class FStringPrimaryExpression extends Expression< } this.semanticData = { - atoms: stringParts + atoms: stringParts, }; } diff --git a/kipper/core/src/compiler/runtime-built-ins.ts b/kipper/core/src/compiler/runtime-built-ins.ts index 4197e91f9..2eb370235 100644 --- a/kipper/core/src/compiler/runtime-built-ins.ts +++ b/kipper/core/src/compiler/runtime-built-ins.ts @@ -208,7 +208,7 @@ export const kipperInternalBuiltInFunctions: Record = { identifier: "value", valueType: "void", - } + }, ], returnType: "str", }, @@ -218,7 +218,7 @@ export const kipperInternalBuiltInFunctions: Record = { identifier: "value", valueType: "null", - } + }, ], returnType: "str", }, @@ -228,7 +228,7 @@ export const kipperInternalBuiltInFunctions: Record = { identifier: "value", valueType: "undefined", - } + }, ], returnType: "str", }, diff --git a/kipper/target-js/src/built-in-generator.ts b/kipper/target-js/src/built-in-generator.ts index 6b707d7dc..3b77aa0fa 100644 --- a/kipper/target-js/src/built-in-generator.ts +++ b/kipper/target-js/src/built-in-generator.ts @@ -18,7 +18,7 @@ import { TargetJS } from "./target"; export function genJSFunction( signature: { identifier: string; params: string[] }, body: string, - ignoreParams: boolean = false + ignoreParams: boolean = false, ): Array { return [ [ diff --git a/kipper/target-js/src/tools.ts b/kipper/target-js/src/tools.ts index a152f832f..2d33c0e42 100644 --- a/kipper/target-js/src/tools.ts +++ b/kipper/target-js/src/tools.ts @@ -44,7 +44,7 @@ export function getJSFunctionSignature(funcSpec: InternalFunction | BuiltInFunct */ export function createJSFunctionSignature( signature: { identifier: string; params: Array }, - ignoreParams: boolean = false + ignoreParams: boolean = false, ): string { const { identifier, params } = signature; return `function ${identifier}(${ignoreParams ? "" : params.join(", ")})`; diff --git a/kipper/target-ts/src/built-in-generator.ts b/kipper/target-ts/src/built-in-generator.ts index 4fd60becd..56c26c7bb 100644 --- a/kipper/target-ts/src/built-in-generator.ts +++ b/kipper/target-ts/src/built-in-generator.ts @@ -23,7 +23,7 @@ export function genTSFunction( returnType: KipperCompilableType | Array; }, body: string, - ignoreParams: boolean = false + ignoreParams: boolean = false, ): Array { return [ [ diff --git a/kipper/target-ts/src/tools.ts b/kipper/target-ts/src/tools.ts index d52327d03..8e3537452 100644 --- a/kipper/target-ts/src/tools.ts +++ b/kipper/target-ts/src/tools.ts @@ -59,12 +59,12 @@ export function createTSFunctionSignature( params: Array<{ identifier: string; type: KipperCompilableType | Array }>; returnType: KipperCompilableType | Array; }, - ignoreParams: boolean = false + ignoreParams: boolean = false, ): string { const { identifier, params } = signature; - const argsSignature = ignoreParams ? - "" : - `${params.map((p) => `${p.identifier}: ${TargetTS.getTypeScriptType(p.type)}`).join(", ")}`; + const argsSignature = ignoreParams + ? "" + : `${params.map((p) => `${p.identifier}: ${TargetTS.getTypeScriptType(p.type)}`).join(", ")}`; return `function ${identifier}(${argsSignature}): ${TargetTS.getTypeScriptType(signature.returnType)}`; } From ac0c813ce1679a5d23df327079ac061cb1a14a0d Mon Sep 17 00:00:00 2001 From: luna Date: Sun, 4 Jun 2023 15:11:18 +0200 Subject: [PATCH 031/257] Prettified CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c270a675..bb4c78993 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,10 +20,10 @@ To use development versions of Kipper download the - Added new valid conversions: - `void` to `str`. - - `null` to `str`. + - `null` to `str`. - `undefined` to `str`. - New parameters: - - `ignoreParams` in `genJSFunction`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `genJSFunction`, which, if true makes the function signature define no parameters. - `ignoreParams` in `createJSFunctionSignature`, which, if true makes the function signature define no parameters. - `ignoreParams` in `genTSFunction`, which, if true makes the function signature define no parameters. - `ignoreParams` in `createTSFunctionSignature`, which, if true makes the function signature define no parameters. From 0995149d4d7929013e7146f1ea8da948e84fd1dc Mon Sep 17 00:00:00 2001 From: luna Date: Sun, 4 Jun 2023 15:11:28 +0200 Subject: [PATCH 032/257] Prettified tests (and fixed issue during `test` script run) --- test/module/core/core-functionality.test.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 90dd27e35..91458651a 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -951,7 +951,7 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2}`.replace(/'/g, "") + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2}`.replace(/'/g, ""), ), jsCode, ); @@ -971,7 +971,10 @@ describe("Core functionality", () => { assert.equal( msg, // @ts-ignore - `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${arg.value1 + arg.value2}`.replace(/'/g, ""), + `Test: 1. ${arg.value1 + arg.value2} - 2. ${arg.value1 + arg.value2} - 3. ${ + // @ts-ignore + arg.value1 + arg.value2 + }`.replace(/'/g, ""), ), jsCode, ); From 6599c21b72b1de44e746bfb97e9ae337c878da22 Mon Sep 17 00:00:00 2001 From: luna Date: Sun, 4 Jun 2023 15:31:37 +0200 Subject: [PATCH 033/257] Removed f-string not implemented test --- test/module/core/not-implemented.test.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/test/module/core/not-implemented.test.ts b/test/module/core/not-implemented.test.ts index e09a62cb0..d7b155eb6 100644 --- a/test/module/core/not-implemented.test.ts +++ b/test/module/core/not-implemented.test.ts @@ -5,20 +5,6 @@ import { assert } from "chai"; describe("NotImplemented", () => { const defaultTarget = new KipperTypeScriptTarget(); - it("F-String Expression", async () => { - try { - await new KipperCompiler().compile("var x: num = 5; var y: str = f'Value: {x}';", { - abortOnFirstError: true, - target: defaultTarget, - }); - } catch (e) { - assert.equal((e).constructor.name, "KipperNotImplementedError", "Expected different error"); - assert.equal((e).name, "NotImplementedError", "Expected different error"); - return; - } - assert.fail("Expected NotImplementedError"); - }); - it("Typeof Type Expression", async () => { try { await new KipperCompiler().compile("var x: typeof(n) = 5;", { From df8ce858814df4c8d6ca64bf624043c6ae0f4676 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 5 Jun 2023 15:21:52 +0200 Subject: [PATCH 034/257] Updated CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb4c78993..ee2b5d304 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,9 @@ To use development versions of Kipper download the ### Added -- Added new valid conversions: +- Support for complex string formatting (or also called templating) in form of Python-like F-Strings. + ([#287](https://github.com/Luna-Klatzer/Kipper/issues/287)). +- New valid conversions: - `void` to `str`. - `null` to `str`. - `undefined` to `str`. From 89a13cf772463dc9c61c75e9098a3e4fe8ebe643 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 5 Jun 2023 15:22:35 +0200 Subject: [PATCH 035/257] Small typo fix in CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee2b5d304..b4ca0a4ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ To use development versions of Kipper download the ### Added -- Support for complex string formatting (or also called templating) in form of Python-like F-Strings. +- Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. ([#287](https://github.com/Luna-Klatzer/Kipper/issues/287)). - New valid conversions: - `void` to `str`. From c1641e1bb5faeb8765668ab54f0e4af81b8bde1f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 5 Jun 2023 16:58:19 +0200 Subject: [PATCH 036/257] Updated pnpm-lock.yaml --- kipper/cli/pnpm-lock.yaml | 4 ++-- pnpm-lock.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 96ae23996..a855f84c3 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -3457,8 +3457,8 @@ packages: dev: true /strip-bom/3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, tarball: strip-bom/-/strip-bom-3.0.0.tgz} - engines: {node: '>=0.10.0'} + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} dependencies: is-utf8: 0.2.1 dev: true diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 642a4a150..a058ec094 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2044,7 +2044,7 @@ packages: dev: true /fast-levenshtein/2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dependencies: fastest-levenshtein: 1.0.16 dev: true From 68d0dbf9d603105cb29ed0535244a1134ffab6e6 Mon Sep 17 00:00:00 2001 From: luna Date: Wed, 7 Jun 2023 12:59:38 +0200 Subject: [PATCH 037/257] Fixed bug in `VariableDeclaration` (as according to #462) The bug was caused by the variable declaration still performing type checking after the semantic error (as expected), but not ensuring the scope declaration is present. --- .../src/compiler/ast/analysable-ast-node.ts | 10 +++++--- .../ast/nodes/declarations/declaration.ts | 24 ++++++++++++++++++- .../declarations/variable-declaration.ts | 1 + 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/kipper/core/src/compiler/ast/analysable-ast-node.ts b/kipper/core/src/compiler/ast/analysable-ast-node.ts index 8802768df..5b79272ec 100644 --- a/kipper/core/src/compiler/ast/analysable-ast-node.ts +++ b/kipper/core/src/compiler/ast/analysable-ast-node.ts @@ -268,9 +268,11 @@ export abstract class AnalysableASTNode< // Start with the evaluation of the children await this.semanticallyTypeCheckChildren(); - // If the semantic analysis until now hasn't failed, do the semantic type checking of this node (if defined) + // If the semantic analysis until now has evaluated data, do the semantic type checking of this node (if defined) // Per default, we will say the nodes themselves handle all errors, so we don't need to do anything here // Note! Expressions do this differently and abort immediately all processing if one of the children failed. + // Additionally, this will also not check for 'this.hasFailed', as we still want to run type checking if possible + // even with a logic error in the code (so we only check for the semantic data) if (this.semanticData && this.primarySemanticTypeChecking !== undefined) { try { await this.primarySemanticTypeChecking(); @@ -309,9 +311,11 @@ export abstract class AnalysableASTNode< // Start with the evaluation of the children await this.targetSemanticallyAnalyseChildren(); - // If the semantic analysis until now hasn't failed, do the target semantic analysis of this node (if defined) + // If the semantic analysis until now has evaluated data, do the target semantic analysis of this node (if defined) // Per default, we will say the nodes themselves handle all errors, so we don't need to do anything here // Note! Expressions do this differently and abort immediately all processing if one of the children failed. + // Additionally, this will also not check for 'this.hasFailed', as we still want to run the target semantic + // analysis if possible even with a logic error in the code (so we only check for the semantic data) if (this.semanticData && this.typeSemantics && this.targetSemanticAnalysis !== undefined) { try { await this.targetSemanticAnalysis(this); @@ -335,7 +339,7 @@ export abstract class AnalysableASTNode< } // If the check for warnings function is defined, then call it - if (this.checkForWarnings && !this.hasFailed) { + if (!this.hasFailed && this.checkForWarnings) { await this.checkForWarnings(); } } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts index 7e320eca1..b9187df60 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -16,7 +16,7 @@ import type { ASTDeclarationKind, ParserDeclarationContext } from "../../ast-typ import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; import type { ScopeDeclaration } from "../../../analysis"; import { CompilableASTNode, type CompilableNodeParent } from "../../compilable-ast-node"; -import { UndefinedDeclarationCtxError } from "../../../../errors"; +import {MissingRequiredSemanticDataError, UndefinedDeclarationCtxError} from "../../../../errors"; /** * The base abstract AST node class for all declarations/declarations, which wrap their corresponding @@ -97,6 +97,28 @@ export abstract class Declaration< return this.scopeDeclaration; } + /** + * Ensures that this node has a {@link Declaration.scopeDeclaration scope declaration} available. This will be + * primarily used by declarations in their own analysis. + * + * This will throw an error if the scope declaration is not available. + * + * This is primarily used by the {@link Declaration.semanticTypeChecking} method, which often requires the scope + * declaration to be available. As such this is a helper method which ensures the control flow is correct and no + * invalid errors are thrown. (E.g. an internal error is thrown after a normal semantic analysis error). + * + * Intentionally this will also likely cause an {@link UndefinedSemanticsError} in case the {@link scopeDeclaration} + * is missing and {@link AnalysableASTNode.hasFailed hasFailed} is returning false. Since that's an automatic + * contradiction, it's better to ignore it here and let the {@link UndefinedSemanticsError} be thrown later. + * @throws {MissingRequiredSemanticDataError} If the scope declaration is not available. + * @since 0.11.0 + */ + public ensureScopeDeclarationAvailableIfNeeded(): void { + if (this instanceof Declaration && this.hasFailed && this.scopeDeclaration === undefined) { + throw new MissingRequiredSemanticDataError(); + } + } + /** * Generates the typescript code for this item, and all children (if they exist). * @since 0.8.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts index 96bc91039..857a639f1 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts @@ -172,6 +172,7 @@ export class VariableDeclaration extends Declaration Date: Wed, 7 Jun 2023 13:01:30 +0200 Subject: [PATCH 038/257] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4ca0a4ec..9f25a01fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ To use development versions of Kipper download the ### Added -- Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. +- Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. ([#287](https://github.com/Luna-Klatzer/Kipper/issues/287)). - New valid conversions: - `void` to `str`. @@ -49,6 +49,9 @@ To use development versions of Kipper download the ### Fixed +- Redeclaration bug causing an `InternalError` after calling the compiler + ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). + ### Deprecated ### Removed From d933b8b4857def3a28b8ce3a710bd2f060a10179 Mon Sep 17 00:00:00 2001 From: luna Date: Thu, 15 Jun 2023 15:20:45 +0200 Subject: [PATCH 039/257] Removed space in PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2df4c054f..fa4d00d4d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -3,7 +3,7 @@ - [ ] Info or documentation change (Non-breaking change that updates dependencies, info files or online documentation) -- [ ] Website feature update or docs development changes (Change that changes the design or functionality of the websites or docs) +- [ ] Website feature update or docs development changes (Change that changes the design or functionality of the websites or docs) - [ ] Maintenance (Non-breaking change that updates dependencies) - [ ] Development or internal changes (These changes do not add new features or fix bugs, but update the code in other ways) - [ ] Bug fix (Non-breaking change which fixes an issue) From 38b43afcd3ef2f8d471ecf15ed8c44846b848e96 Mon Sep 17 00:00:00 2001 From: luna Date: Thu, 15 Jun 2023 15:20:53 +0200 Subject: [PATCH 040/257] Removed space in CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4ca0a4ec..73f6d80a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ To use development versions of Kipper download the ### Added -- Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. +- Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. ([#287](https://github.com/Luna-Klatzer/Kipper/issues/287)). - New valid conversions: - `void` to `str`. From ea9c13172f7975dab864dc14872c64441ee48b22 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 09:36:15 +0200 Subject: [PATCH 041/257] Fixed debugging issue due to incorrectly defined `sourceRoot` in tsconfig.json files --- kipper/cli/tsconfig.json | 1 - kipper/core/tsconfig.json | 1 - kipper/target-js/tsconfig.json | 1 - kipper/target-ts/tsconfig.json | 1 - 4 files changed, 4 deletions(-) diff --git a/kipper/cli/tsconfig.json b/kipper/cli/tsconfig.json index 6cf410a7e..2116c4503 100644 --- a/kipper/cli/tsconfig.json +++ b/kipper/cli/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./lib", "rootDir": "./src", - "sourceRoot": "./src", "target": "es2016", "noImplicitOverride": false, "skipLibCheck": true, diff --git a/kipper/core/tsconfig.json b/kipper/core/tsconfig.json index 58b1ceb1c..e73eaa67e 100644 --- a/kipper/core/tsconfig.json +++ b/kipper/core/tsconfig.json @@ -5,7 +5,6 @@ "noImplicitOverride": false, "outDir": "./lib", "rootDir": "./src", - "sourceRoot": "./src", "target": "es2016", "lib": [ "ES7" // ES7 -> ES2016 diff --git a/kipper/target-js/tsconfig.json b/kipper/target-js/tsconfig.json index 8316ef507..76a3d60e3 100644 --- a/kipper/target-js/tsconfig.json +++ b/kipper/target-js/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./lib", "rootDir": "./src", - "sourceRoot": "./src", "target": "es2016", "lib": [ "ES7" // ES7 -> ES2016 diff --git a/kipper/target-ts/tsconfig.json b/kipper/target-ts/tsconfig.json index 2d5db4adf..b3f01934a 100644 --- a/kipper/target-ts/tsconfig.json +++ b/kipper/target-ts/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./lib", "rootDir": "./src", - "sourceRoot": "./src", "noImplicitAny": true, "strict": true, "target": "es2016", From 2b51aad1bc89cc0ec43b3c87ddeb6783c6c2298c Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 10:28:49 +0200 Subject: [PATCH 042/257] Fixed bug according to #434 The bug was caused due to an invalid usage of `tokenSrc`, where actually using `srcLine` makes more sense. --- kipper/core/src/errors.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index 4988e4ea4..0078b8e93 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -82,6 +82,9 @@ export class KipperError extends Error { * @since 0.3.0 */ public getTraceback(): string { + // Sanitize the traceback message (No actual newlines) + this.message = this.message.replace(/\n/g, "\\n"); + const tokenSrc = (() => { if ( this.tracebackData.location?.line !== undefined && @@ -93,8 +96,16 @@ export class KipperError extends Error { let startOfError = this.tracebackData.location.col; // In case the error is at the exact end of the line, mark the whole line as the error origin - if (startOfError === this.tracebackData.tokenSrc.length) { - startOfError = 0; + if (startOfError === (srcLine.length - 1)) { + let countOfLeadingSpaces = 0; + for (const char of srcLine) { + if (char === " ") { + countOfLeadingSpaces++; + } else { + break; + } + } + startOfError = countOfLeadingSpaces; // Set the start of the error to the first non-space character } let endOfError = startOfError + this.tracebackData.tokenSrc.length; From a5b6d8e05e30711eda9b5a1c9da33534d041dbf3 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 10:28:58 +0200 Subject: [PATCH 043/257] Updated CHANGELOG.md --- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cab595d59..c18f7035b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,10 +18,40 @@ To use development versions of Kipper download the ### Added +- Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. + ([#287](https://github.com/Luna-Klatzer/Kipper/issues/287)). +- New valid conversions: + - `void` to `str`. + - `null` to `str`. + - `undefined` to `str`. +- New parameters: + - `ignoreParams` in `genJSFunction`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `createJSFunctionSignature`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `genTSFunction`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `createTSFunctionSignature`, which, if true makes the function signature define no parameters. +- New field: + - `KipperError.programCtx`, which contains, if `KipperError.tracebackData.errorNode` is not undefined, the program + context of the error. +- New functions: + - `KipperTargetBuiltInGenerator.voidToStr`, for the built-in conversion from `void` to `str`. + - `KipperTargetBuiltInGenerator.nullToStr`, for the built-in conversion from `null` to `str`. + - `KipperTargetBuiltInGenerator.undefinedToStr`, for the built-in conversion from `undefined` to `str`. + ### Changed +- Made `VoidOrNullOrUndefinedPrimaryExpression` a constant expression and inherit from the `ConstantExpression` class. + This means it's AST kind number is now also added to the `ASTConstantExpressionKind` type and its context class is + also part of the `ParserConstantExpressionContext` type. +- Renamed: + - `FunctionCallPostfixTypeSemantics` to `FunctionCallExpressionTypeSemantics`. + - `FStringPrimaryExpressionSemantics.items` to `atoms`. + - `getTSFunction()` to `genTSFunction()`. + ### Fixed +- Redeclaration bug causing an `InternalError` after calling the compiler + ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). + ### Deprecated ### Removed From 072fbab7c3f8a34206b0e204a08eaef05cd7de4e Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 10:34:35 +0200 Subject: [PATCH 044/257] Updated CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c18f7035b..00d431055 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,8 @@ To use development versions of Kipper download the - Redeclaration bug causing an `InternalError` after calling the compiler ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). +- Bug of invalid underline indent in error traceback. + ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). ### Deprecated From a9243a90cf20567fc953762705529126f4861d86 Mon Sep 17 00:00:00 2001 From: Luna Date: Fri, 16 Jun 2023 08:56:20 +0000 Subject: [PATCH 045/257] Added missing change info to CHANGELOG.md Signed-off-by: Luna --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f25a01fe..c6486851f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,8 @@ To use development versions of Kipper download the - Redeclaration bug causing an `InternalError` after calling the compiler ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). +- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead + of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). ### Deprecated From 524919f89752af290565770d995f504886be1943 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 11:13:01 +0200 Subject: [PATCH 046/257] Added more traceback generation tests in kipper-error.ts --- test/module/core/errors/kipper-error.ts | 105 +++++++++++++++++++----- 1 file changed, 86 insertions(+), 19 deletions(-) diff --git a/test/module/core/errors/kipper-error.ts b/test/module/core/errors/kipper-error.ts index af1f037c9..a0cd19734 100644 --- a/test/module/core/errors/kipper-error.ts +++ b/test/module/core/errors/kipper-error.ts @@ -3,25 +3,92 @@ import { defaultConfig, ensureTracebackDataExists } from "./index"; import { assert } from "chai"; describe("KipperError", () => { - it("getTraceback", async () => { - try { - await new KipperCompiler().compile('var i: str = "4";\n var i: str = "4";', defaultConfig); - } catch (e) { - assert.equal( - (e).constructor.name, - "IdentifierAlreadyUsedByVariableError", - "Expected different error", - ); - ensureTracebackDataExists(e); - assert.equal( - (e).getTraceback(), - `Traceback:\nFile 'anonymous-script', line 2, col 1:\n` + - ` var i: str = "4";\n` + - ` ^^^^^^^^^^^^^^^^ \n` + + describe("getTraceback", () => { + it("Inside String Underline (No leading or trailing Spaces)", async () => { + try { + await new KipperCompiler().compile('var i: str = "4";\nvar i: str = "4";', defaultConfig); + } catch (e) { + assert.equal( + (e).constructor.name, + "IdentifierAlreadyUsedByVariableError", + "Expected different error", + ); + ensureTracebackDataExists(e); + assert.equal( + (e).getTraceback(), + `Traceback:\nFile 'anonymous-script', line 2, col 0:\n` + + ` var i: str = "4";\n` + + ` ^^^^^^^^^^^^^^^^ \n` + `${(e).name}: ${(e).message}`, - ); - return; - } - assert.fail("Expected 'IdentifierAlreadyUsedByVariableError'"); + ); + return; + } + assert.fail("Expected 'IdentifierAlreadyUsedByVariableError'"); + }); + + it("Inside String Underline (Leading Spaces)", async () => { + try { + await new KipperCompiler().compile('var i: str = "4";\n var i: str = "4";', defaultConfig); + } catch (e) { + assert.equal( + (e).constructor.name, + "IdentifierAlreadyUsedByVariableError", + "Expected different error", + ); + ensureTracebackDataExists(e); + assert.equal( + (e).getTraceback(), + `Traceback:\nFile 'anonymous-script', line 2, col 3:\n` + + ` var i: str = "4";\n` + + ` ^^^^^^^^^^^^^^^^ \n` + + `${(e).name}: ${(e).message}`, + ); + return; + } + assert.fail("Expected 'IdentifierAlreadyUsedByVariableError'"); + }); + + it("Inside String Underline (Trailing Spaces)", async () => { + try { + await new KipperCompiler().compile('var i: str = "4";\n var i: str = "4"; ', defaultConfig); + } catch (e) { + assert.equal( + (e).constructor.name, + "IdentifierAlreadyUsedByVariableError", + "Expected different error", + ); + ensureTracebackDataExists(e); + assert.equal( + (e).getTraceback(), + `Traceback:\nFile 'anonymous-script', line 2, col 3:\n` + + ` var i: str = "4"; \n` + + ` ^^^^^^^^^^^^^^^^ \n` + + `${(e).name}: ${(e).message}`, + ); + return; + } + assert.fail("Expected 'IdentifierAlreadyUsedByVariableError'"); + }); + + it("Whole String Underline", async () => { + try { + await new KipperCompiler().compile('\\\\\\\\', defaultConfig); + } catch (e) { + assert.equal( + (e).constructor.name, + "LexerOrParserSyntaxError", + "Expected different error", + ); + ensureTracebackDataExists(e); + assert.equal( + (e).getTraceback(), + `Traceback:\nFile 'anonymous-script', line 1, col 0:\n` + + ` \\\\\\\\\n` + + ` ^^^^\n` + + `${(e).name}: ${(e).message}`, + ); + return; + } + }); }); }); From 7beae538356b9a18070c167d63ff5c2434777bb5 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 11:46:57 +0200 Subject: [PATCH 047/257] Bumped static index.ts versions to 0.11.0-alpha.0 --- kipper/cli/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index d22331d3f..6d9712c4b 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.10.1"; +export const version = "0.11.0-alpha.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 5d580342c..89a4af769 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./utils"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.10.1"; +export const version = "0.11.0-alpha.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 0a3badb77..f74195bcd 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.10.1"; +export const version = "0.11.0-alpha.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index cb3f72eb8..762b8b8c9 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.10.1"; +export const version = "0.11.0-alpha.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index ffdfacdbe..a3a71dfbc 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.10.1"; +export const version = "0.11.0-alpha.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From f4e56b5d48854c7a688dcfaed8022c33038638af Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 11:49:59 +0200 Subject: [PATCH 048/257] Prettified code --- .../ast/nodes/declarations/declaration.ts | 2 +- kipper/core/src/errors.ts | 2 +- test/module/core/errors/kipper-error.ts | 32 ++++++++----------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts index b9187df60..f9c6b1f2d 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -16,7 +16,7 @@ import type { ASTDeclarationKind, ParserDeclarationContext } from "../../ast-typ import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; import type { ScopeDeclaration } from "../../../analysis"; import { CompilableASTNode, type CompilableNodeParent } from "../../compilable-ast-node"; -import {MissingRequiredSemanticDataError, UndefinedDeclarationCtxError} from "../../../../errors"; +import { MissingRequiredSemanticDataError, UndefinedDeclarationCtxError } from "../../../../errors"; /** * The base abstract AST node class for all declarations/declarations, which wrap their corresponding diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index 9f4dd7c57..a44465c88 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -96,7 +96,7 @@ export class KipperError extends Error { let startOfError = this.tracebackData.location.col; // In case the error is at the exact end of the line, mark the whole line as the error origin - if (startOfError === (srcLine.length - 1)) { + if (startOfError === srcLine.length - 1) { let countOfLeadingSpaces = 0; for (const char of srcLine) { if (char === " ") { diff --git a/test/module/core/errors/kipper-error.ts b/test/module/core/errors/kipper-error.ts index a0cd19734..3a802db00 100644 --- a/test/module/core/errors/kipper-error.ts +++ b/test/module/core/errors/kipper-error.ts @@ -17,9 +17,9 @@ describe("KipperError", () => { assert.equal( (e).getTraceback(), `Traceback:\nFile 'anonymous-script', line 2, col 0:\n` + - ` var i: str = "4";\n` + - ` ^^^^^^^^^^^^^^^^ \n` + - `${(e).name}: ${(e).message}`, + ` var i: str = "4";\n` + + ` ^^^^^^^^^^^^^^^^ \n` + + `${(e).name}: ${(e).message}`, ); return; } @@ -39,9 +39,9 @@ describe("KipperError", () => { assert.equal( (e).getTraceback(), `Traceback:\nFile 'anonymous-script', line 2, col 3:\n` + - ` var i: str = "4";\n` + - ` ^^^^^^^^^^^^^^^^ \n` + - `${(e).name}: ${(e).message}`, + ` var i: str = "4";\n` + + ` ^^^^^^^^^^^^^^^^ \n` + + `${(e).name}: ${(e).message}`, ); return; } @@ -61,9 +61,9 @@ describe("KipperError", () => { assert.equal( (e).getTraceback(), `Traceback:\nFile 'anonymous-script', line 2, col 3:\n` + - ` var i: str = "4"; \n` + - ` ^^^^^^^^^^^^^^^^ \n` + - `${(e).name}: ${(e).message}`, + ` var i: str = "4"; \n` + + ` ^^^^^^^^^^^^^^^^ \n` + + `${(e).name}: ${(e).message}`, ); return; } @@ -72,20 +72,16 @@ describe("KipperError", () => { it("Whole String Underline", async () => { try { - await new KipperCompiler().compile('\\\\\\\\', defaultConfig); + await new KipperCompiler().compile("\\\\\\\\", defaultConfig); } catch (e) { - assert.equal( - (e).constructor.name, - "LexerOrParserSyntaxError", - "Expected different error", - ); + assert.equal((e).constructor.name, "LexerOrParserSyntaxError", "Expected different error"); ensureTracebackDataExists(e); assert.equal( (e).getTraceback(), `Traceback:\nFile 'anonymous-script', line 1, col 0:\n` + - ` \\\\\\\\\n` + - ` ^^^^\n` + - `${(e).name}: ${(e).message}`, + ` \\\\\\\\\n` + + ` ^^^^\n` + + `${(e).name}: ${(e).message}`, ); return; } From 5cfbf6338ebc30e0a1ea8cc7fbb63573c686cb31 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 11:50:04 +0200 Subject: [PATCH 049/257] Prettified CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28531fe1c..9ecaa52e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,10 +51,10 @@ To use development versions of Kipper download the - Redeclaration bug causing an `InternalError` after calling the compiler ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). -- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead +- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). - Bug of invalid underline indent in error traceback. - ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). + ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). ### Deprecated From b8057832491fdb129ea91027071ab754cf677593 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 13:36:46 +0200 Subject: [PATCH 050/257] Added required type hints for flags --- kipper/cli/src/commands/analyse.ts | 3 +-- kipper/cli/src/commands/compile.ts | 2 +- kipper/cli/src/commands/help.ts | 3 ++- kipper/cli/src/commands/run.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/kipper/cli/src/commands/analyse.ts b/kipper/cli/src/commands/analyse.ts index 99e945502..0f4186d44 100644 --- a/kipper/cli/src/commands/analyse.ts +++ b/kipper/cli/src/commands/analyse.ts @@ -6,7 +6,6 @@ import { Command, flags } from "@oclif/command"; import { KipperCompiler, KipperError, KipperLogger, KipperParseStream, LogLevel } from "@kipper/core"; import { KipperEncodings, KipperParseFile, verifyEncoding } from "../file-stream"; import { CLIEmitHandler, defaultCliLogger } from "../logger"; -import { IFlag } from "@oclif/command/lib/flags"; import { getFile } from "../compile"; export default class Analyse extends Command { @@ -23,7 +22,7 @@ export default class Analyse extends Command { }, ]; - static override flags: Record> = { + static override flags: flags.Input = { encoding: flags.string({ char: "e", default: "utf8", diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index 0878689cf..b478d1d6a 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -33,7 +33,7 @@ export default class Compile extends Command { }, ]; - static override flags: Record> = { + static override flags: flags.Input = { target: flags.string({ char: "t", default: "js", diff --git a/kipper/cli/src/commands/help.ts b/kipper/cli/src/commands/help.ts index eee2bca04..e3b8dcc83 100644 --- a/kipper/cli/src/commands/help.ts +++ b/kipper/cli/src/commands/help.ts @@ -3,11 +3,12 @@ * @since 0.5.0 */ import HelpCommand from "@oclif/plugin-help/lib/commands/help"; +import { flags } from "@oclif/command"; export default class Help extends HelpCommand { static override description = "Display help for the Kipper CLI."; static override args = HelpCommand.args; - static override flags = HelpCommand.flags; + static override flags: flags.Input = HelpCommand.flags; static override async run(): Promise { return await super.run(); diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index 8cf59bd43..b305eb196 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -52,7 +52,7 @@ export default class Run extends Command { }, ]; - static override flags: Record> = { + static override flags: flags.Input = { target: flags.string({ char: "t", default: "js", From 09f5397801fccd0ab62a0f13d3a9eed757befe02 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 20:01:59 +0200 Subject: [PATCH 051/257] Reverted version of `oclif` back to `3.4.6` This is due to an unexpected issue of the newer versions having a version conflict and the @kipper/cli package not having moved to v2 of oclif yet. --- kipper/cli/README.md | 23 ++++------ kipper/cli/package.json | 2 +- kipper/cli/pnpm-lock.yaml | 79 +++++++++++++++++++++------------ kipper/target-js/pnpm-lock.yaml | 8 ++-- kipper/target-ts/pnpm-lock.yaml | 8 ++-- kipper/web/pnpm-lock.yaml | 8 ++-- pnpm-lock.yaml | 8 ++-- 7 files changed, 76 insertions(+), 60 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index a667e1cc6..807e99758 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -21,10 +21,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/cli)](https://packagephobia.com/result?p=@kipper/cli) - -- [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -39,30 +38,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.10.1 linux-x64 node-v16.19.0 +@kipper/cli/0.10.1 linux-x64 node-v18.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -191,7 +187,6 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/version.ts)_ - ## Copyright and License diff --git a/kipper/cli/package.json b/kipper/cli/package.json index e6e5390c7..58ecbc09e 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -28,7 +28,7 @@ "os-tmpdir": "1.0.2", "pseudomap": "1.0.2", "typescript": "5.1.3", - "oclif": "3.9.0", + "oclif": "3.4.6", "json-parse-even-better-errors": "2.3.1", "semver": "7.5.1" }, diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index f3ba5b604..beee1db1d 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -15,7 +15,7 @@ specifiers: '@types/node': 18.16.16 '@types/sinon': 10.0.15 json-parse-even-better-errors: 2.3.1 - oclif: 3.9.0 + oclif: 3.4.6 os-tmpdir: 1.0.2 pseudomap: 1.0.2 rimraf: 5.0.1 @@ -28,7 +28,7 @@ dependencies: '@kipper/core': link:../core '@kipper/target-js': link:../target-js '@kipper/target-ts': link:../target-ts - '@oclif/command': 1.8.26_@oclif+config@1.18.8 + '@oclif/command': 1.8.26 '@oclif/config': 1.18.8 '@oclif/errors': 1.3.6 '@oclif/parser': 3.8.10 @@ -42,7 +42,7 @@ devDependencies: '@types/node': 18.16.16 '@types/sinon': 10.0.15 json-parse-even-better-errors: 2.3.1 - oclif: 3.9.0_sz2hep2ld4tbz4lvm5u3llauiu + oclif: 3.4.6_sz2hep2ld4tbz4lvm5u3llauiu os-tmpdir: 1.0.2 pseudomap: 1.0.2 rimraf: 5.0.1 @@ -295,27 +295,9 @@ packages: tslib: 2.5.2 dev: true - /@oclif/command/1.8.26_@oclif+config@1.18.2: - resolution: {integrity: sha512-IT9kOLFRMc3s6KJ1FymsNjbHShI211eVgAg+JMiDVl8LXwOJxYe8ybesgL1kpV9IUFByOBwZKNG2mmrVeNBHPg==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@oclif/config': ^1 - dependencies: - '@oclif/config': 1.18.2 - '@oclif/errors': 1.3.6 - '@oclif/help': 1.0.5 - '@oclif/parser': 3.8.11 - debug: 4.3.4 - semver: 7.5.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@oclif/command/1.8.26_@oclif+config@1.18.8: + /@oclif/command/1.8.26: resolution: {integrity: sha512-IT9kOLFRMc3s6KJ1FymsNjbHShI211eVgAg+JMiDVl8LXwOJxYe8ybesgL1kpV9IUFByOBwZKNG2mmrVeNBHPg==} engines: {node: '>=12.0.0'} - peerDependencies: - '@oclif/config': ^1 dependencies: '@oclif/config': 1.18.8 '@oclif/errors': 1.3.6 @@ -369,6 +351,40 @@ packages: - supports-color dev: false + /@oclif/core/1.26.2: + resolution: {integrity: sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==} + engines: {node: '>=14.0.0'} + dependencies: + '@oclif/linewrap': 1.0.0 + '@oclif/screen': 3.0.4 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + debug: 4.3.4_supports-color@8.1.1 + ejs: 3.1.8 + fs-extra: 9.1.0 + get-package-type: 0.1.0 + globby: 11.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.2 + semver: 7.5.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.2.0 + tslib: 2.5.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + dev: true + /@oclif/core/2.8.5_sz2hep2ld4tbz4lvm5u3llauiu: resolution: {integrity: sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==} engines: {node: '>=14.0.0'} @@ -449,7 +465,6 @@ packages: /@oclif/linewrap/1.0.0: resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} - dev: false /@oclif/parser/3.8.10: resolution: {integrity: sha512-J4l/NcnfbIU84+NNdy6bxq9yJt4joFWNvpk59hq+uaQPUNtjmNJDVGuRvf6GUOxHNgRsVK1JRmd/Ez+v7Z9GqQ==} @@ -475,7 +490,7 @@ packages: resolution: {integrity: sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ==} engines: {node: '>=8.0.0'} dependencies: - '@oclif/command': 1.8.26_@oclif+config@1.18.2 + '@oclif/command': 1.8.26 '@oclif/config': 1.18.2 '@oclif/errors': 1.3.5 '@oclif/help': 1.0.5 @@ -535,6 +550,12 @@ packages: - supports-color - typescript + /@oclif/screen/3.0.4: + resolution: {integrity: sha512-IMsTN1dXEXaOSre27j/ywGbBjrzx0FNd1XmuhCWCB9NTPrhWI1Ifbz+YLSEcstfQfocYsrbrIessxXb2oon4lA==} + engines: {node: '>=12.0.0'} + deprecated: Deprecated in favor of @oclif/core + dev: true + /@oclif/test/2.3.21_sz2hep2ld4tbz4lvm5u3llauiu: resolution: {integrity: sha512-RaFNf3/PMwBLrL9yu8aFsONsUSpyI16AGC6HiAabDyu534Rh+jBtqy/dPZ53/SOCBOholhZmVs7jT0UE5Utwew==} engines: {node: '>=12.0.0'} @@ -2811,12 +2832,12 @@ packages: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} - /oclif/3.9.0_sz2hep2ld4tbz4lvm5u3llauiu: - resolution: {integrity: sha512-fsFyHVQYJdE50EcKrBjwzl2WT5sZUtTiRY1vqMwykgLFUDYrQS0lj7yqy2IgcPSmAWaLQryODdfBujCWOU98Ww==} + /oclif/3.4.6_sz2hep2ld4tbz4lvm5u3llauiu: + resolution: {integrity: sha512-YyGMDil2JpfC9OcB76Gtcd5LqwwOeAgb8S7mVHf/6Qecjqor8QbbvcSwZvB1e1TqjlD1JUhDPqBiFeVe/WOdWg==} engines: {node: '>=12.0.0'} hasBin: true dependencies: - '@oclif/core': 2.8.5_sz2hep2ld4tbz4lvm5u3llauiu + '@oclif/core': 1.26.2 '@oclif/plugin-help': 5.2.4_sz2hep2ld4tbz4lvm5u3llauiu '@oclif/plugin-not-found': 2.3.18_sz2hep2ld4tbz4lvm5u3llauiu '@oclif/plugin-warn-if-update-available': 2.0.37_sz2hep2ld4tbz4lvm5u3llauiu @@ -2830,8 +2851,7 @@ packages: lodash: 4.17.21 normalize-package-data: 3.0.3 semver: 7.5.1 - shelljs: 0.8.5 - tslib: 2.5.0 + tslib: 2.5.2 yeoman-environment: 3.15.1 yeoman-generator: 5.8.0_yeoman-environment@3.15.1 yosay: 2.0.2 @@ -3776,6 +3796,7 @@ packages: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true + dev: true /unique-filename/1.1.1: resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} diff --git a/kipper/target-js/pnpm-lock.yaml b/kipper/target-js/pnpm-lock.yaml index fdaadf2b0..86fcb98a5 100644 --- a/kipper/target-js/pnpm-lock.yaml +++ b/kipper/target-js/pnpm-lock.yaml @@ -194,9 +194,9 @@ packages: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: - JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 + JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 @@ -268,7 +268,6 @@ packages: engines: {node: '>= 0.8'} hasBin: true dependencies: - JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -290,6 +289,7 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 + JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -762,11 +762,11 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: - JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 + JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -993,7 +993,6 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true dependencies: - JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1001,6 +1000,7 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 + JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 diff --git a/kipper/target-ts/pnpm-lock.yaml b/kipper/target-ts/pnpm-lock.yaml index 9dfca1e07..fcec503c5 100644 --- a/kipper/target-ts/pnpm-lock.yaml +++ b/kipper/target-ts/pnpm-lock.yaml @@ -196,9 +196,9 @@ packages: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: - JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 + JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 @@ -270,7 +270,6 @@ packages: engines: {node: '>= 0.8'} hasBin: true dependencies: - JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -292,6 +291,7 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 + JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -764,11 +764,11 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: - JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 + JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -995,7 +995,6 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true dependencies: - JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1003,6 +1002,7 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 + JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 diff --git a/kipper/web/pnpm-lock.yaml b/kipper/web/pnpm-lock.yaml index 1dddf9d7e..5fb9bf70d 100644 --- a/kipper/web/pnpm-lock.yaml +++ b/kipper/web/pnpm-lock.yaml @@ -200,9 +200,9 @@ packages: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: - JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 + JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 @@ -274,7 +274,6 @@ packages: engines: {node: '>= 0.8'} hasBin: true dependencies: - JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -296,6 +295,7 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 + JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -768,11 +768,11 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: - JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 + JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -999,7 +999,6 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true dependencies: - JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1007,6 +1006,7 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 + JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0b0abb82..09b6c7a40 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1180,9 +1180,9 @@ packages: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: - JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.1 + JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 @@ -1258,7 +1258,6 @@ packages: engines: {node: '>= 0.8'} hasBin: true dependencies: - JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -1280,6 +1279,7 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 + JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -2470,11 +2470,11 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: - JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 + JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -2992,7 +2992,6 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true dependencies: - JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -3000,6 +2999,7 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 + JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 From 9416100cfcbf69de1c48476ab8942f8bb8273dc2 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 20:29:10 +0200 Subject: [PATCH 052/257] Prettified README.md --- kipper/cli/README.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 807e99758..df4876730 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -21,9 +21,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/cli)](https://packagephobia.com/result?p=@kipper/cli) -* [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -38,6 +39,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -49,16 +51,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -187,6 +191,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/version.ts)_ + ## Copyright and License From 8a99bb782dab0714703cba1ee11368bb58bfd5d9 Mon Sep 17 00:00:00 2001 From: luna Date: Fri, 16 Jun 2023 20:29:53 +0200 Subject: [PATCH 053/257] Release 0.11.0-alpha.0 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 7 files changed, 20 insertions(+), 25 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index df4876730..a609f6c27 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -21,10 +21,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/cli)](https://packagephobia.com/result?p=@kipper/cli) - -- [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -39,30 +38,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.10.1 linux-x64 node-v18.15.0 +@kipper/cli/0.11.0-alpha.0 linux-x64 node-v18.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -84,7 +80,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -123,7 +119,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -140,7 +136,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/help.ts)_ ## `kipper run [FILE]` @@ -179,7 +175,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -190,8 +186,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.10.1/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/version.ts)_ ## Copyright and License diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 58ecbc09e..a74183bbe 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.10.1", + "version": "0.11.0-alpha.0", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run" diff --git a/kipper/core/package.json b/kipper/core/package.json index 13c2fb26f..12e7ed2ef 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.10.1", + "version": "0.11.0-alpha.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 834bb36f8..c04e48a87 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.10.1", + "version": "0.11.0-alpha.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~" diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 500f88240..6fde44b30 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.10.1", + "version": "0.11.0-alpha.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index edcecdd8b..c538521a5 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.10.1", + "version": "0.11.0-alpha.0", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index 74891d71d..de52cc335 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.10.1", + "version": "0.11.0-alpha.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From ed53e9e14abe6f73a71c35eac6022cd79fada225 Mon Sep 17 00:00:00 2001 From: luna Date: Sun, 18 Jun 2023 20:33:23 +0200 Subject: [PATCH 054/257] Added version annotation in built-ins-generator.ts --- .../compiler/target-presets/translation/built-ins-generator.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts index 168e5968a..884a43367 100644 --- a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts @@ -41,6 +41,7 @@ export abstract class KipperTargetBuiltInGenerator { * @param func The specification for the function. This contains the overall metadata for the function that * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. * @param programCtx The program context of the environment that is being compiled. + * @since 0.11.0 */ abstract voidToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; @@ -49,6 +50,7 @@ export abstract class KipperTargetBuiltInGenerator { * @param func The specification for the function. This contains the overall metadata for the function that * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. * @param programCtx The program context of the environment that is being compiled. + * @since 0.11.0 */ abstract nullToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; @@ -57,6 +59,7 @@ export abstract class KipperTargetBuiltInGenerator { * @param func The specification for the function. This contains the overall metadata for the function that * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. * @param programCtx The program context of the environment that is being compiled. + * @since 0.11.0 */ abstract undefinedToStr(func: InternalFunction, programCtx: KipperProgramContext): Promise>; From 03cac5fa51ad82f479d6cce39dfda5ca81f08fd8 Mon Sep 17 00:00:00 2001 From: luna Date: Sun, 18 Jun 2023 20:33:54 +0200 Subject: [PATCH 055/257] Release 0.11.0-alpha.0 --- CHANGELOG.md | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ecaa52e4..d7f14ff89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,9 +29,6 @@ To use development versions of Kipper download the - `ignoreParams` in `createJSFunctionSignature`, which, if true makes the function signature define no parameters. - `ignoreParams` in `genTSFunction`, which, if true makes the function signature define no parameters. - `ignoreParams` in `createTSFunctionSignature`, which, if true makes the function signature define no parameters. -- New field: - - `KipperError.programCtx`, which contains, if `KipperError.tracebackData.errorNode` is not undefined, the program - context of the error. - New functions: - `KipperTargetBuiltInGenerator.voidToStr`, for the built-in conversion from `void` to `str`. - `KipperTargetBuiltInGenerator.nullToStr`, for the built-in conversion from `null` to `str`. @@ -49,19 +46,33 @@ To use development versions of Kipper download the ### Fixed -- Redeclaration bug causing an `InternalError` after calling the compiler - ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). -- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead - of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). -- Bug of invalid underline indent in error traceback. - ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). - ### Deprecated ### Removed +## [0.10.2] - 2023-06-16 + +### Added + +- New field: + - `KipperError.programCtx`, which contains, if `KipperError.tracebackData.errorNode` is not undefined, the program + context of the error. +- New function: + - `ensureScopeDeclarationAvailableIfNeeded`, which ensures that a scope declaration is available if needed. This + is used during the semantic analysis/type checking of a declaration statement, which may need the scope + declaration object during the processing. + +### Fixed + +- Redeclaration bug causing an `InternalError` after calling the compiler + ([#462](https://github.com/Luna-Klatzer/Kipper/issues/462)). +- Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead + of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). +- Bug of invalid underline indent in error traceback. + ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). + ## [0.10.1] - 2023-02-21 ### Fixed @@ -1190,7 +1201,8 @@ To use development versions of Kipper download the - Updated file structure to separate `commands` (for `oclif`) and `compiler` (for the compiler source-code) -[unreleased]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.1...HEAD +[unreleased]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.2...HEAD +[0.10.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.1...v0.10.2 [0.10.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.0...v0.10.1 [0.10.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.9.2...v0.10.0 [0.9.2]: https://github.com/Luna-Klatzer/Kipper/compare/v0.9.1...v0.9.2 From 3db034df0765a160c4cb34fcde9347f6c2dceb17 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 8 Jul 2023 17:55:22 +0200 Subject: [PATCH 056/257] Enabled decorators in tsconfig.json --- tsconfig.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tsconfig.json b/tsconfig.json index 29218b121..36b76fce4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,8 @@ "noImplicitOverride": false, "noImplicitThis": true, "noImplicitReturns": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, "strict": true, "moduleResolution": "node", "module": "commonjs", From f23045c3fc43ba75d2497966a3aedbeadd8f2579 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 8 Jul 2023 19:50:02 +0200 Subject: [PATCH 057/257] Updated core AST structure and added new mapping & factory functionality This primarily helps improve security by having more strict type inference and clearness navigating the code, as things should be more directly accessible now. In addition with the improved mapping of kind ids and rule names the connection between the AST and the parser is more streamlined and clear. --- kipper/core/KipperParser.g4 | 33 +- .../err-handler/semantics-asserter.ts | 4 +- .../err-handler/semantics-error-handler.ts | 2 +- .../analysis/analyser/semantic-checker.ts | 26 +- .../analysis/analyser/type-checker.ts | 14 +- .../analysis/analyser/warning-issuer.ts | 2 +- .../entry/scope-function-declaration.ts | 2 +- .../entry/scope-parameter-declaration.ts | 2 +- .../analysis/symbol-table/function-scope.ts | 2 +- .../analysis/symbol-table/local-scope.ts | 2 +- .../src/compiler/ast/analysable-ast-node.ts | 2 +- kipper/core/src/compiler/ast/ast-generator.ts | 95 ++-- kipper/core/src/compiler/ast/ast-node.ts | 11 +- kipper/core/src/compiler/ast/ast-types.ts | 180 -------- .../core/src/compiler/ast/common/ast-types.ts | 244 +++++++++++ kipper/core/src/compiler/ast/common/index.ts | 5 + .../src/compiler/ast/compilable-ast-node.ts | 8 +- kipper/core/src/compiler/ast/factories.ts | 281 ------------ .../ast/factories/ast-node-factory.ts | 33 ++ .../ast/factories/declaration-ast-factory.ts | 66 +++ .../ast/factories/expression-ast-factory.ts | 66 +++ .../core/src/compiler/ast/factories/index.ts | 27 ++ .../ast/factories/statement-ast-factory.ts | 64 +++ kipper/core/src/compiler/ast/index.ts | 6 +- .../compiler/ast/mapping/ast-node-mapper.ts | 412 ++++++++++++++++++ kipper/core/src/compiler/ast/mapping/index.ts | 5 + .../ast/nodes/declarations/declaration.ts | 16 +- .../declarations/function-declaration.ts | 40 +- .../declarations/parameter-declaration.ts | 35 +- .../declarations/variable-declaration.ts | 42 +- .../arithmetic/additive-expression.ts | 33 +- .../arithmetic/arithmetic-expression.ts | 34 +- .../arithmetic/multiplicative-expression.ts | 33 +- .../expressions/assignment-expression.ts | 40 +- .../expressions/cast-or-convert-expression.ts | 35 +- .../comparative/comparative-expression.ts | 28 +- .../comparative/equality-expression.ts | 33 +- .../comparative/relational-expression.ts | 33 +- .../expressions/conditional-expression.ts | 33 +- .../ast/nodes/expressions/expression.ts | 17 +- .../expressions/function-call-expression.ts | 33 +- .../logical/logical-and-expression.ts | 33 +- .../expressions/logical/logical-expression.ts | 28 +- .../logical/logical-or-expression.ts | 33 +- .../expressions/member-access-expression.ts | 40 +- ...crement-or-decrement-postfix-expression.ts | 37 +- .../constant/array-primary-expression.ts | 37 +- .../constant/bool-primary-expression.ts | 33 +- .../primary/constant/constant-expression.ts | 46 +- .../constant/number-primary-expression.ts | 33 +- .../constant/string-primary-expression.ts | 33 +- ...or-null-or-undefined-primary-expression.ts | 37 +- .../primary/fstring-primary-expression.ts | 36 +- .../primary/identifier-primary-expression.ts | 33 +- .../expressions/tangled-primary-expression.ts | 33 +- .../generic-type-specifier-expression.ts | 39 +- .../identifier-type-specifier-expression.ts | 43 +- .../type-specifier-expression.ts | 39 +- .../typeof-type-specifier-expression.ts | 39 +- ...increment-or-decrement-unary-expression.ts | 37 +- .../operator-modified-unary-expression.ts | 38 +- .../expressions/unary/unary-expression.ts | 34 +- kipper/core/src/compiler/ast/nodes/index.ts | 5 + .../compiler/ast/{ => nodes}/root-ast-node.ts | 55 ++- .../nodes/statements/compound-statement.ts | 33 +- .../nodes/statements/expression-statement.ts | 33 +- .../ast/nodes/statements/if-statement.ts | 33 +- ...s => do-while-loop-iteration-statement.ts} | 39 +- ...ent.ts => for-loop-iteration-statement.ts} | 39 +- .../ast/nodes/statements/iteration/index.ts | 6 +- .../iteration/iteration-statement.ts | 39 +- ...t.ts => while-loop-iteration-statement.ts} | 39 +- .../ast/nodes/statements/jump-statement.ts | 33 +- .../ast/nodes/statements/return-statement.ts | 33 +- .../ast/nodes/statements/statement.ts | 18 +- .../ast/nodes/statements/switch-statement.ts | 33 +- .../compiler/ast/semantic-data/definitions.ts | 4 +- .../compiler/ast/semantic-data/expressions.ts | 5 +- .../compiler/ast/semantic-data/statements.ts | 4 +- kipper/core/src/compiler/compile-config.ts | 4 +- kipper/core/src/compiler/const.ts | 2 +- .../src/compiler/parser/antlr/KipperLexer.ts | 3 - .../compiler/parser/antlr/KipperParser.interp | 8 +- .../src/compiler/parser/antlr/KipperParser.ts | 181 ++++---- .../parser/antlr/KipperParserListener.ts | 225 +++++----- .../parser/antlr/KipperParserVisitor.ts | 207 ++++----- kipper/core/src/compiler/parser/index.ts | 2 +- ...-mapping.ts => parse-rule-kind-mapping.ts} | 23 +- .../compiler/parser/parser-rule-context.ts | 4 +- kipper/core/src/compiler/program-ctx.ts | 4 +- .../target-presets/semantic-analyser.ts | 30 +- .../translation/code-generator.ts | 37 +- kipper/core/src/errors.ts | 2 +- kipper/core/src/index.ts | 4 +- .../src/tools/decorators/code-generator.ts | 22 + kipper/core/src/tools/decorators/index.ts | 5 + kipper/core/src/tools/functions/index.ts | 8 + .../core/src/tools/functions/inverse-map.ts | 14 + kipper/core/src/tools/functions/other.ts | 33 ++ .../functions/parser-rules.ts} | 39 +- .../src/tools/functions/replace-obj-keys.ts | 16 + kipper/core/src/tools/index.ts | 6 + kipper/core/src/tools/types/index.ts | 5 + kipper/core/src/tools/types/inverse-map.ts | 23 + kipper/target-js/src/code-generator.ts | 18 +- kipper/target-js/src/semantic-analyser.ts | 12 +- 106 files changed, 2998 insertions(+), 1230 deletions(-) delete mode 100644 kipper/core/src/compiler/ast/ast-types.ts create mode 100644 kipper/core/src/compiler/ast/common/ast-types.ts create mode 100644 kipper/core/src/compiler/ast/common/index.ts delete mode 100644 kipper/core/src/compiler/ast/factories.ts create mode 100644 kipper/core/src/compiler/ast/factories/ast-node-factory.ts create mode 100644 kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts create mode 100644 kipper/core/src/compiler/ast/factories/expression-ast-factory.ts create mode 100644 kipper/core/src/compiler/ast/factories/index.ts create mode 100644 kipper/core/src/compiler/ast/factories/statement-ast-factory.ts create mode 100644 kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts create mode 100644 kipper/core/src/compiler/ast/mapping/index.ts rename kipper/core/src/compiler/ast/{ => nodes}/root-ast-node.ts (79%) rename kipper/core/src/compiler/ast/nodes/statements/iteration/{do-while-loop-statement.ts => do-while-loop-iteration-statement.ts} (72%) rename kipper/core/src/compiler/ast/nodes/statements/iteration/{for-loop-statement.ts => for-loop-iteration-statement.ts} (79%) rename kipper/core/src/compiler/ast/nodes/statements/iteration/{while-loop-statement.ts => while-loop-iteration-statement.ts} (72%) rename kipper/core/src/compiler/parser/{parser-ast-mapping.ts => parse-rule-kind-mapping.ts} (81%) create mode 100644 kipper/core/src/tools/decorators/code-generator.ts create mode 100644 kipper/core/src/tools/decorators/index.ts create mode 100644 kipper/core/src/tools/functions/index.ts create mode 100644 kipper/core/src/tools/functions/inverse-map.ts create mode 100644 kipper/core/src/tools/functions/other.ts rename kipper/core/src/{utils.ts => tools/functions/parser-rules.ts} (67%) create mode 100644 kipper/core/src/tools/functions/replace-obj-keys.ts create mode 100644 kipper/core/src/tools/index.ts create mode 100644 kipper/core/src/tools/types/index.ts create mode 100644 kipper/core/src/tools/types/inverse-map.ts diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 104478358..8e133947d 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -12,7 +12,7 @@ options { @parser::header { // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. - import { KipperParserRuleContext, ParserASTMapping, ASTKind } from ".."; + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; } // Entry Point for an entire file @@ -44,7 +44,7 @@ declaration ; functionDeclaration - : 'def' declarator '(' parameterList? ')' '->' typeSpecifier compoundStatement? + : 'def' declarator '(' parameterList? ')' '->' typeSpecifierExpression compoundStatement? ; variableDeclaration @@ -65,7 +65,7 @@ directDeclarator ; initDeclarator - : declarator ':' typeSpecifier ('=' initializer)? + : declarator ':' typeSpecifierExpression ('=' initializer)? ; parameterList @@ -74,7 +74,7 @@ parameterList ; parameterDeclaration - : declarator ':' typeSpecifier + : declarator ':' typeSpecifierExpression ; initializer @@ -217,15 +217,15 @@ voidOrNullOrUndefinedPrimaryExpression // comes in the form of a special '_labelASTKind' property on the rule context, which defines which AST class should // implement the rule context. // -// Note: All AST identifier numbers are stored in the 'ParserASTMapping' object. +// Note: All AST identifier numbers are stored in the 'ParseRuleKindMapping' object. computedPrimaryExpression locals[_labelASTKind: ASTKind | undefined] : primaryExpression # passOncomputedPrimaryExpression - | computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParserASTMapping.RULE_functionCallExpression } # functionCallExpression - | 'call' computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParserASTMapping.RULE_functionCallExpression } # explicitCallFunctionCallExpression - | computedPrimaryExpression dotNotation { _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression } # dotNotationMemberAccessExpression - | computedPrimaryExpression bracketNotation { _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression } # bracketNotationMemberAccessExpression - | computedPrimaryExpression sliceNotation { _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression } # sliceNotationMemberAccessExpression + | computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } # functionCallExpression + | 'call' computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } # explicitCallFunctionCallExpression + | computedPrimaryExpression dotNotation { _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } # dotNotationMemberAccessExpression + | computedPrimaryExpression bracketNotation { _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } # bracketNotationMemberAccessExpression + | computedPrimaryExpression sliceNotation { _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } # sliceNotationMemberAccessExpression ; argumentExpressionList @@ -278,7 +278,7 @@ unaryOperator castOrConvertExpression : unaryExpression # passOnCastOrConvertExpression - | unaryExpression 'as' typeSpecifier #actualCastOrConvertExpression + | unaryExpression 'as' typeSpecifierExpression #actualCastOrConvertExpression ; multiplicativeExpression @@ -329,20 +329,19 @@ expression : assignmentExpression (',' assignmentExpression)* // Comma-separated expressions ; -// TODO! Implement the following type specifiers as expressions -typeSpecifier - : identifierTypeSpecifier | genericTypeSpecifier | typeofTypeSpecifier +typeSpecifierExpression + : identifierTypeSpecifierExpression | genericTypeSpecifierExpression | typeofTypeSpecifierExpression ; -identifierTypeSpecifier +identifierTypeSpecifierExpression : typeSpecifierIdentifier ; -genericTypeSpecifier +genericTypeSpecifierExpression : typeSpecifierIdentifier '<' typeSpecifierIdentifier '>' ; -typeofTypeSpecifier +typeofTypeSpecifierExpression : 'typeof' '(' typeSpecifierIdentifier ')' ; diff --git a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts index 42d6b8d10..98c733388 100644 --- a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts +++ b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts @@ -5,10 +5,10 @@ */ import type { KipperProgramContext } from "../../../program-ctx"; import type { KipperError } from "../../../../errors"; -import type { CompilableASTNode } from "../../../ast"; import { KipperNotImplementedError } from "../../../../errors"; +import type { CompilableASTNode } from "../../../ast"; import { KipperSemanticErrorHandler } from "./semantics-error-handler"; -import { getParseRuleSource } from "../../../../utils"; +import { getParseRuleSource } from "../../../../tools"; /** * Kipper Asserter, which is used to assert certain truths and throw {@link KipperError KipperErrors} in case that diff --git a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts index bcebbe2ac..8ddd47fc4 100644 --- a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts +++ b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts @@ -5,7 +5,7 @@ import type { CompilableASTNode } from "../../../ast"; import type { KipperParseStream } from "../../../parser"; import { KipperError } from "../../../../errors"; -import { getParseRuleSource } from "../../../../utils"; +import { getParseRuleSource } from "../../../../tools"; /** * Error handler which handles semantic errors for {@link CompilableASTNode compilable AST nodes}. diff --git a/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts b/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts index 9e8d07bb7..71cc590c7 100644 --- a/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts @@ -6,14 +6,6 @@ import type { KipperReferenceable } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; import type { CompilableNodeChild, CompilableNodeParent, ScopeNode } from "../../ast"; -import { KipperSemanticsAsserter } from "./err-handler"; -import { - LocalScope, - Scope, - ScopeDeclaration, - ScopeFunctionDeclaration, - ScopeVariableDeclaration, -} from "../symbol-table"; import { CompoundStatement, Expression, @@ -22,22 +14,30 @@ import { IterationStatement, JumpStatement, ReturnStatement, - VariableDeclaration, + VariableDeclaration } from "../../ast"; +import { KipperSemanticsAsserter } from "./err-handler"; +import { + LocalScope, + Scope, + ScopeDeclaration, + ScopeFunctionDeclaration, + ScopeVariableDeclaration +} from "../symbol-table"; import { + BuiltInOrInternalGeneratorFunctionNotFoundError, BuiltInOverwriteError, IdentifierAlreadyUsedByFunctionError, IdentifierAlreadyUsedByParameterError, IdentifierAlreadyUsedByVariableError, InvalidAssignmentError, InvalidGlobalError, - MissingFunctionBodyError, + InvalidJumpStatementError, InvalidReturnStatementError, + MissingFunctionBodyError, UndefinedConstantError, UndefinedReferenceError, - UnknownReferenceError, - InvalidJumpStatementError, - BuiltInOrInternalGeneratorFunctionNotFoundError, + UnknownReferenceError } from "../../../errors"; /** diff --git a/kipper/core/src/compiler/analysis/analyser/type-checker.ts b/kipper/core/src/compiler/analysis/analyser/type-checker.ts index 0a9baa91d..d5cc3f62f 100644 --- a/kipper/core/src/compiler/analysis/analyser/type-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/type-checker.ts @@ -8,23 +8,23 @@ import type { KipperProgramContext } from "../../program-ctx"; import type { IncrementOrDecrementPostfixExpressionSemantics, ParameterDeclarationSemantics, - UnaryExpressionSemantics, + UnaryExpressionSemantics } from "../../ast"; import { AssignmentExpression, - Expression, - RelationalExpression, - UnaryExpression, CompoundStatement, + Expression, FunctionDeclaration, IdentifierPrimaryExpression, IfStatement, IncrementOrDecrementPostfixExpression, + MemberAccessExpression, ParameterDeclaration, + RelationalExpression, ReturnStatement, Statement, TangledPrimaryExpression, - MemberAccessExpression, + UnaryExpression } from "../../ast"; import { KipperSemanticsAsserter } from "./err-handler"; import { ScopeDeclaration, ScopeParameterDeclaration, ScopeVariableDeclaration } from "../symbol-table"; @@ -37,7 +37,7 @@ import { KipperReferenceable, KipperReferenceableFunction, kipperStrType, - kipperSupportedConversions, + kipperSupportedConversions } from "../../const"; import { ArgumentTypeError, @@ -55,7 +55,7 @@ import { KipperNotImplementedError, ReadOnlyWriteTypeError, UnknownTypeError, - ValueNotIndexableTypeError, + ValueNotIndexableTypeError } from "../../../errors"; import { CheckedType, UncheckedType, UndefinedCustomType } from "../type"; diff --git a/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts b/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts index 1a910ea0f..63df9b704 100644 --- a/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts +++ b/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts @@ -1,6 +1,6 @@ import { KipperProgramContext } from "../../program-ctx"; import { KipperSemanticErrorHandler } from "./err-handler"; -import { getParseRuleSource } from "../../../utils"; +import { getParseRuleSource } from "../../../tools"; import { CompilableASTNode, Expression, ExpressionStatement } from "../../ast"; import { KipperWarning, UselessExpressionStatementWarning } from "../../../warnings"; diff --git a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts index c6f89146f..2b9176e3b 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts @@ -6,7 +6,7 @@ import { FunctionDeclaration, FunctionDeclarationSemantics, FunctionDeclarationTypeSemantics, - ParameterDeclaration, + ParameterDeclaration } from "../../../ast"; import { ScopeDeclaration } from "./scope-declaration"; import { CheckedType } from "../../type"; diff --git a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts index 5f55743e3..2934ad14a 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts @@ -7,7 +7,7 @@ import type { FunctionDeclaration, ParameterDeclaration, ParameterDeclarationSemantics, - ParameterDeclarationTypeSemantics, + ParameterDeclarationTypeSemantics } from "../../../ast"; import type { LocalScope } from "../index"; import type { CheckedType } from "../../type"; diff --git a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts index 6c3194701..3f6f42921 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts @@ -3,7 +3,7 @@ * the global namespace. * @since 0.8.0 */ -import type { ParameterDeclaration, FunctionDeclaration } from "../../ast"; +import type { FunctionDeclaration, ParameterDeclaration } from "../../ast"; import { ScopeDeclaration, ScopeParameterDeclaration } from "./entry"; import { LocalScope } from "./local-scope"; diff --git a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts index cc368c580..c6be12d86 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts @@ -3,7 +3,7 @@ * namespace. * @since 0.8.0 */ -import type { ScopeNode, FunctionDeclaration, VariableDeclaration } from "../../ast/"; +import type { FunctionDeclaration, ScopeNode, VariableDeclaration } from "../../ast/"; import type { GlobalScope } from "./global-scope"; import { KipperNotImplementedError } from "../../../errors"; import { ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; diff --git a/kipper/core/src/compiler/ast/analysable-ast-node.ts b/kipper/core/src/compiler/ast/analysable-ast-node.ts index c498ac8dd..dcac5d555 100644 --- a/kipper/core/src/compiler/ast/analysable-ast-node.ts +++ b/kipper/core/src/compiler/ast/analysable-ast-node.ts @@ -10,7 +10,7 @@ import type { TargetAnalysableNode } from "./target-node"; import { ParserASTNode, SemanticData, TypeData } from "./ast-node"; import { KipperError, MissingRequiredSemanticDataError } from "../../errors"; import { KipperProgramContext } from "../program-ctx"; -import { RootASTNode } from "./root-ast-node"; +import { RootASTNode } from "./nodes/root-ast-node"; import { EvaluatedCompileConfig } from "../compile-config"; import { handleSemanticError } from "../analysis"; diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 1319847bb..7fb8ec135 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -2,8 +2,12 @@ * Antlr4 listener for walking through a parser tree and processing its content. * @since 0.0.3 */ -import type { ParserDeclarationContext } from "./ast-types"; -import type { ASTNodeParserContext, ParserExpressionContext, ParserStatementContext } from "./ast-types"; +import type { + ASTNodeParserContext, + ParserDeclarationContext, + ParserExpressionContext, + ParserStatementContext +} from "./common"; import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; import type { ActualAdditiveExpressionContext, @@ -15,60 +19,59 @@ import type { ActualLogicalOrExpressionContext, ActualMultiplicativeExpressionContext, ActualRelationalExpressionContext, + ArrayLiteralPrimaryExpressionContext, BoolPrimaryExpressionContext, + BracketNotationMemberAccessExpressionContext, CompilationUnitContext, CompoundStatementContext, DeclarationContext, + DeclaratorContext, + DirectDeclaratorContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + ExplicitCallFunctionCallExpressionContext, + ExpressionContext, ExpressionStatementContext, + ExternalItemContext, + ForLoopIterationStatementContext, FStringPrimaryExpressionContext, FunctionCallExpressionContext, - GenericTypeSpecifierContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, IncrementOrDecrementPostfixExpressionContext, IncrementOrDecrementUnaryExpressionContext, + InitDeclaratorContext, + InitializerContext, JumpStatementContext, KipperParserListener, - ArrayLiteralPrimaryExpressionContext, + KipperParserRuleContext, + LogicalAndExpressionContext, NumberPrimaryExpressionContext, OperatorModifiedUnaryExpressionContext, ParameterDeclarationContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - TangledPrimaryExpressionContext, - TypeofTypeSpecifierContext, - DoWhileLoopIterationStatementContext, - ExternalItemContext, - ForLoopIterationStatementContext, - IfStatementContext, - InitializerContext, - ReturnStatementContext, - SwitchStatementContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, - FunctionDeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - ExpressionContext, - InitDeclaratorContext, ParameterListContext, - StorageTypeSpecifierContext, - TypeSpecifierContext, - BracketNotationMemberAccessExpressionContext, - DotNotationMemberAccessExpressionContext, - ExplicitCallFunctionCallExpressionContext, - LogicalAndExpressionContext, PassOnLogicalAndExpressionContext, + ReturnStatementContext, SliceNotationMemberAccessExpressionContext, + storageTypeSpecifierContext, + StringPrimaryExpressionContext, + SwitchLabeledStatementContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TypeofTypeSpecifierExpressionContext, + TypeSpecifierExpressionContext, VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext } from "../parser"; import type { KipperProgramContext } from "../program-ctx"; import type { CompilableASTNode } from "./compilable-ast-node"; -import type { KipperParserRuleContext } from "../parser"; import type { ParserRuleContext } from "antlr4ts/ParserRuleContext"; -import { Declaration } from "./nodes"; -import { Expression, Statement } from "./nodes"; -import { RootASTNode } from "./root-ast-node"; +import { Declaration, Expression, Statement } from "./nodes"; +import { RootASTNode } from "./nodes/root-ast-node"; import { DeclarationASTNodeFactory, ExpressionASTNodeFactory, StatementASTNodeFactory } from "./factories"; import { KipperInternalError } from "../../errors"; @@ -991,13 +994,13 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi * Enter a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public enterStorageTypeSpecifier?(ctx: StorageTypeSpecifierContext): void; + public enterStorageTypeSpecifier?(ctx: storageTypeSpecifierContext): void; /** * Exit a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public exitStorageTypeSpecifier?(ctx: StorageTypeSpecifierContext): void; + public exitStorageTypeSpecifier?(ctx: storageTypeSpecifierContext): void; /** * Enter a parse tree produced by `KipperParser.initDeclarator`. @@ -1015,49 +1018,55 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi * Enter a parse tree produced by `KipperParser.identifierTypeSpecifier`. * @param ctx the parse tree */ - public enterIdentifierTypeSpecifier: (ctx: IdentifierTypeSpecifierContext) => void = this.handleEnteringTreeNode; + public enterIdentifierTypeSpecifierExpression: (ctx: IdentifierTypeSpecifierExpressionContext) => void = + this.handleEnteringTreeNode; /** * Exit a parse tree produced by `KipperParser.identifierTypeSpecifier`. * @param ctx the parse tree */ - public exitIdentifierTypeSpecifier: (ctx: IdentifierTypeSpecifierContext) => void = this.handleExitingTreeNode; + public exitIdentifierTypeSpecifierExpression: (ctx: IdentifierTypeSpecifierExpressionContext) => void = + this.handleExitingTreeNode; /** * Enter a parse tree produced by `KipperParser.genericTypeSpecifier`. * @param ctx the parse tree */ - public enterGenericTypeSpecifier: (ctx: GenericTypeSpecifierContext) => void = this.handleEnteringTreeNode; + public enterGenericTypeSpecifierExpression: (ctx: GenericTypeSpecifierExpressionContext) => void = + this.handleEnteringTreeNode; /** * Exit a parse tree produced by `KipperParser.genericTypeSpecifier`. * @param ctx the parse tree */ - public exitGenericTypeSpecifier: (ctx: GenericTypeSpecifierContext) => void = this.handleExitingTreeNode; + public exitGenericTypeSpecifierExpression: (ctx: GenericTypeSpecifierExpressionContext) => void = + this.handleExitingTreeNode; /** * Enter a parse tree produced by `KipperParser.typeofTypeSpecifier`. * @param ctx the parse tree */ - public enterTypeofTypeSpecifier: (ctx: TypeofTypeSpecifierContext) => void = this.handleEnteringTreeNode; + public enterTypeofTypeSpecifierExpression: (ctx: TypeofTypeSpecifierExpressionContext) => void = + this.handleEnteringTreeNode; /** * Exit a parse tree produced by `KipperParser.typeofTypeSpecifier`. * @param ctx the parse tree */ - public exitTypeofTypeSpecifier: (ctx: TypeofTypeSpecifierContext) => void = this.handleExitingTreeNode; + public exitTypeofTypeSpecifierExpression: (ctx: TypeofTypeSpecifierExpressionContext) => void = + this.handleExitingTreeNode; /** * Enter a parse tree produced by `KipperParser.typeSpecifier`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public enterTypeSpecifier?(ctx: TypeSpecifierContext): void; + public enterTypeSpecifierExpression?(ctx: TypeSpecifierExpressionContext): void; /** * Exit a parse tree produced by `KipperParser.typeSpecifier`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public exitTypeSpecifier?(ctx: TypeSpecifierContext): void; + public exitTypeSpecifierExpression?(ctx: TypeSpecifierExpressionContext): void; /** * Enter a parse tree produced by `KipperParser.declarator`. diff --git a/kipper/core/src/compiler/ast/ast-node.ts b/kipper/core/src/compiler/ast/ast-node.ts index b8fde0610..b9e972796 100644 --- a/kipper/core/src/compiler/ast/ast-node.ts +++ b/kipper/core/src/compiler/ast/ast-node.ts @@ -6,7 +6,7 @@ */ import type { ParseTree } from "antlr4ts/tree"; -import { getParseRuleSource } from "../../utils"; +import { getParseRuleSource } from "../../tools"; import { UnableToDetermineSemanticDataError, UndefinedSemanticsError } from "../../errors"; import { KipperParserRuleContext } from "../parser"; @@ -55,7 +55,14 @@ export abstract class ParserASTNode | undefined) { this._antlrRuleCtx = antlrCtx; diff --git a/kipper/core/src/compiler/ast/ast-types.ts b/kipper/core/src/compiler/ast/ast-types.ts deleted file mode 100644 index 66828dfef..000000000 --- a/kipper/core/src/compiler/ast/ast-types.ts +++ /dev/null @@ -1,180 +0,0 @@ -/** - * AST pre-set types that are used throughout the compiler. - * @since 0.10.0 - */ -import type { - AdditiveExpressionContext, - ArrayLiteralPrimaryExpressionContext, - AssignmentExpressionContext, - BoolPrimaryExpressionContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - ConditionalExpressionContext, - DotNotationMemberAccessExpressionContext, - EqualityExpressionContext, - FStringPrimaryExpressionContext, - FunctionCallExpressionContext, - GenericTypeSpecifierContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - KipperParser, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NumberPrimaryExpressionContext, - OperatorModifiedUnaryExpressionContext, - ParserASTMapping, - RelationalExpressionContext, - StringPrimaryExpressionContext, - TangledPrimaryExpressionContext, - TypeofTypeSpecifierContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - CompoundStatementContext, - DoWhileLoopIterationStatementContext, - ExpressionStatementContext, - ForLoopIterationStatementContext, - FunctionDeclarationContext, - IfStatementContext, - JumpStatementContext, - ParameterDeclarationContext, - ReturnStatementContext, - SwitchStatementContext, - VariableDeclarationContext, - WhileLoopIterationStatementContext, -} from "../parser/"; - -/** - * Union type of all usable expression rule context classes implemented by the {@link KipperParser} for an - * {@link Expression}. - */ -export type ParserExpressionContext = - | NumberPrimaryExpressionContext - | ArrayLiteralPrimaryExpressionContext - | IdentifierPrimaryExpressionContext - | VoidOrNullOrUndefinedPrimaryExpressionContext - | BoolPrimaryExpressionContext - | StringPrimaryExpressionContext - | FStringPrimaryExpressionContext - | TangledPrimaryExpressionContext - | IncrementOrDecrementPostfixExpressionContext - | FunctionCallExpressionContext - | IncrementOrDecrementUnaryExpressionContext - | OperatorModifiedUnaryExpressionContext - | CastOrConvertExpressionContext - | MultiplicativeExpressionContext - | AdditiveExpressionContext - | RelationalExpressionContext - | EqualityExpressionContext - | LogicalAndExpressionContext - | LogicalOrExpressionContext - | ConditionalExpressionContext - | AssignmentExpressionContext - | IdentifierTypeSpecifierContext - | DotNotationMemberAccessExpressionContext - | BracketNotationMemberAccessExpressionContext - | GenericTypeSpecifierContext - | TypeofTypeSpecifierContext; - -/** - * Union type of all usable statement rule context classes implemented by the {@link KipperParser} for a - * {@link Statement}. - */ -export type ParserStatementContext = - | CompoundStatementContext - | IfStatementContext - | SwitchStatementContext - | ExpressionStatementContext - | DoWhileLoopIterationStatementContext - | WhileLoopIterationStatementContext - | ForLoopIterationStatementContext - | JumpStatementContext - | ReturnStatementContext; - -/** - * Union type of all usable definition/declaration rule context classes implemented by the {@link KipperParser} - * for a {@link Declaration}. - */ -export type ParserDeclarationContext = - | FunctionDeclarationContext - | ParameterDeclarationContext - | VariableDeclarationContext; - -/** - * Union type of all rule context classes implemented by the {@link KipperParser} that have a corresponding AST node class. - * @since 0.10.0 - */ -export type ASTNodeParserContext = ParserExpressionContext | ParserStatementContext | ParserDeclarationContext; - -/** - * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link Declaration} AST node. - * - * Note that not all KipperParser rule context classes have a corresponding AST node class. For example, the - * {@link KipperParser.declaration} rule context has no corresponding AST node class because it is a union of all - * possible declaration types. - * @since 0.10.0 - */ -export type ASTDeclarationKind = - | typeof KipperParser.RULE_functionDeclaration - | typeof KipperParser.RULE_parameterDeclaration - | typeof KipperParser.RULE_variableDeclaration; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a {@link Statement} AST node. - * @since 0.10.0 - */ -export type ASTStatementKind = - | typeof KipperParser.RULE_compoundStatement - | typeof KipperParser.RULE_ifStatement - | typeof KipperParser.RULE_switchStatement - | typeof KipperParser.RULE_expressionStatement - | typeof KipperParser.RULE_doWhileLoopIterationStatement - | typeof KipperParser.RULE_whileLoopIterationStatement - | typeof KipperParser.RULE_forLoopIterationStatement - | typeof KipperParser.RULE_jumpStatement - | typeof KipperParser.RULE_returnStatement; - -/** - * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link Expression} AST node. - * - * Note that not all KipperParser rule context classes have a corresponding AST node class. For example, the - * {@link KipperParser.primaryExpression} rule context has no corresponding AST node class because it is a union of all - * possible primary expression types. - * @since 0.10.0 - */ -export type ASTExpressionKind = - | typeof ParserASTMapping.RULE_numberPrimaryExpression - | typeof ParserASTMapping.RULE_arrayLiteralPrimaryExpression - | typeof ParserASTMapping.RULE_identifierPrimaryExpression - | typeof ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression - | typeof ParserASTMapping.RULE_boolPrimaryExpression - | typeof ParserASTMapping.RULE_stringPrimaryExpression - | typeof ParserASTMapping.RULE_fStringPrimaryExpression - | typeof ParserASTMapping.RULE_tangledPrimaryExpression - | typeof ParserASTMapping.RULE_incrementOrDecrementPostfixExpression - | typeof ParserASTMapping.RULE_functionCallExpression - | typeof ParserASTMapping.RULE_incrementOrDecrementUnaryExpression - | typeof ParserASTMapping.RULE_operatorModifiedUnaryExpression - | typeof ParserASTMapping.RULE_castOrConvertExpression - | typeof ParserASTMapping.RULE_multiplicativeExpression - | typeof ParserASTMapping.RULE_additiveExpression - | typeof ParserASTMapping.RULE_relationalExpression - | typeof ParserASTMapping.RULE_equalityExpression - | typeof ParserASTMapping.RULE_logicalAndExpression - | typeof ParserASTMapping.RULE_logicalOrExpression - | typeof ParserASTMapping.RULE_conditionalExpression - | typeof ParserASTMapping.RULE_assignmentExpression - | typeof ParserASTMapping.RULE_identifierTypeSpecifier - | typeof ParserASTMapping.RULE_genericTypeSpecifier - | typeof ParserASTMapping.RULE_typeofTypeSpecifier - | typeof ParserASTMapping.RULE_memberAccessExpression; - -/** - * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link CompilableASTNode}. - * - * This unlike {@link ASTKind} only contains the syntax kinds that have a corresponding constructable - * {@link CompilableASTNode} implementation and as such can be created using an {@link ASTNodeFactory}. - * @since 0.10.0 - */ -export type ConstructableASTKind = ASTDeclarationKind | ASTStatementKind | ASTExpressionKind; diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts new file mode 100644 index 000000000..2f871a55f --- /dev/null +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -0,0 +1,244 @@ +/** + * AST pre-set types that are used throughout the compiler. + * @since 0.10.0 + */ +import type { + AdditiveExpressionContext, + ArrayLiteralPrimaryExpressionContext, + AssignmentExpressionContext, + BoolPrimaryExpressionContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + CompoundStatementContext, + ConditionalExpressionContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExpressionStatementContext, + ForLoopIterationStatementContext, + FStringPrimaryExpressionContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + JumpStatementContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NumberPrimaryExpressionContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParseRuleKindMapping, + RelationalExpressionContext, + ReturnStatementContext, + StringPrimaryExpressionContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TypeofTypeSpecifierExpressionContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext +} from "../../parser"; +import { KindParseRuleMapping } from "../../parser"; + +/** + * Union type of all usable expression rule context classes implemented by the {@link ParseRuleKindMapping} for an + * {@link Expression}. + */ +export type ParserExpressionContext = + | NumberPrimaryExpressionContext + | ArrayLiteralPrimaryExpressionContext + | IdentifierPrimaryExpressionContext + | VoidOrNullOrUndefinedPrimaryExpressionContext + | BoolPrimaryExpressionContext + | StringPrimaryExpressionContext + | FStringPrimaryExpressionContext + | TangledPrimaryExpressionContext + | IncrementOrDecrementPostfixExpressionContext + | FunctionCallExpressionContext + | IncrementOrDecrementUnaryExpressionContext + | OperatorModifiedUnaryExpressionContext + | CastOrConvertExpressionContext + | MultiplicativeExpressionContext + | AdditiveExpressionContext + | RelationalExpressionContext + | EqualityExpressionContext + | LogicalAndExpressionContext + | LogicalOrExpressionContext + | ConditionalExpressionContext + | AssignmentExpressionContext + | IdentifierTypeSpecifierExpressionContext + | DotNotationMemberAccessExpressionContext + | BracketNotationMemberAccessExpressionContext + | GenericTypeSpecifierExpressionContext + | TypeofTypeSpecifierExpressionContext; + +/** + * Union type of all usable statement rule context classes implemented by the {@link ParseRuleKindMapping} for a + * {@link Statement}. + */ +export type ParserStatementContext = + | CompoundStatementContext + | IfStatementContext + | SwitchStatementContext + | ExpressionStatementContext + | DoWhileLoopIterationStatementContext + | WhileLoopIterationStatementContext + | ForLoopIterationStatementContext + | JumpStatementContext + | ReturnStatementContext; + +/** + * Union type of all usable definition/declaration rule context classes implemented by the {@link ParseRuleKindMapping} + * for a {@link Declaration}. + */ +export type ParserDeclarationContext = + | FunctionDeclarationContext + | ParameterDeclarationContext + | VariableDeclarationContext; + +/** + * Union type of all rule context classes implemented by the {@link ParseRuleKindMapping} that have a corresponding AST node class. + * @since 0.10.0 + */ +export type ASTNodeParserContext = ParserExpressionContext | ParserStatementContext | ParserDeclarationContext; + +/** + * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link Declaration} AST node. + * + * Note that not all ParseRuleKindMapping rule context classes have a corresponding AST node class. For example, the + * {@link ParseRuleKindMapping.declaration} rule context has no corresponding AST node class because it is a union of all + * possible declaration types. + * @since 0.10.0 + */ +export type ASTDeclarationKind = + | typeof ParseRuleKindMapping.RULE_functionDeclaration + | typeof ParseRuleKindMapping.RULE_parameterDeclaration + | typeof ParseRuleKindMapping.RULE_variableDeclaration; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a {@link Statement} AST node. + * @since 0.10.0 + */ +export type ASTStatementKind = + | typeof ParseRuleKindMapping.RULE_compoundStatement + | typeof ParseRuleKindMapping.RULE_ifStatement + | typeof ParseRuleKindMapping.RULE_switchStatement + | typeof ParseRuleKindMapping.RULE_expressionStatement + | typeof ParseRuleKindMapping.RULE_doWhileLoopIterationStatement + | typeof ParseRuleKindMapping.RULE_whileLoopIterationStatement + | typeof ParseRuleKindMapping.RULE_forLoopIterationStatement + | typeof ParseRuleKindMapping.RULE_jumpStatement + | typeof ParseRuleKindMapping.RULE_returnStatement; + +/** + * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link Expression} AST node. + * + * Note that not all ParseRuleKindMapping rule context classes have a corresponding AST node class. For example, the + * {@link ParseRuleKindMapping.primaryExpression} rule context has no corresponding AST node class because it is a union of all + * possible primary expression types. + * @since 0.10.0 + */ +export type ASTExpressionKind = + | typeof ParseRuleKindMapping.RULE_numberPrimaryExpression + | typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression + | typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression + | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression + | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression + | typeof ParseRuleKindMapping.RULE_stringPrimaryExpression + | typeof ParseRuleKindMapping.RULE_fStringPrimaryExpression + | typeof ParseRuleKindMapping.RULE_tangledPrimaryExpression + | typeof ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression + | typeof ParseRuleKindMapping.RULE_functionCallExpression + | typeof ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression + | typeof ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression + | typeof ParseRuleKindMapping.RULE_castOrConvertExpression + | typeof ParseRuleKindMapping.RULE_multiplicativeExpression + | typeof ParseRuleKindMapping.RULE_additiveExpression + | typeof ParseRuleKindMapping.RULE_relationalExpression + | typeof ParseRuleKindMapping.RULE_equalityExpression + | typeof ParseRuleKindMapping.RULE_logicalAndExpression + | typeof ParseRuleKindMapping.RULE_logicalOrExpression + | typeof ParseRuleKindMapping.RULE_conditionalExpression + | typeof ParseRuleKindMapping.RULE_assignmentExpression + | typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression + | typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression + | typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression + | typeof ParseRuleKindMapping.RULE_memberAccessExpression; + +/** + * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link CompilableASTNode}. + * + * This unlike {@link ASTKind} only contains the syntax kinds that have a corresponding constructable + * {@link CompilableASTNode} implementation and as such can be created using an {@link ASTNodeFactory}. + * @since 0.10.0 + */ +export type ConstructableASTKind = ASTDeclarationKind | ASTStatementKind | ASTExpressionKind; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link Declaration} AST + * node. + * @since 0.11.0 + */ +export type ASTDeclarationRuleName = + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_functionDeclaration] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_parameterDeclaration] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_variableDeclaration]; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link Statement} AST + * node. + * @since 0.11.0 + */ +export type ASTStatementRuleName = + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_compoundStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_ifStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_switchStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_expressionStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_doWhileLoopIterationStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_whileLoopIterationStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_forLoopIterationStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_jumpStatement] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_returnStatement]; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link Expression} AST + * node. + * @since 0.11.0 + */ +export type ASTExpressionRuleName = + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_numberPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_boolPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_stringPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_fStringPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_tangledPrimaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_functionCallExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_castOrConvertExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_multiplicativeExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_additiveExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_relationalExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_equalityExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_logicalAndExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_logicalOrExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_conditionalExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_assignmentExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression] + | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_memberAccessExpression]; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link CompilableASTNode}. + * @since 0.11.0 + */ +export type ConstructableASTRuleName = ASTDeclarationRuleName | ASTStatementRuleName | ASTExpressionRuleName; diff --git a/kipper/core/src/compiler/ast/common/index.ts b/kipper/core/src/compiler/ast/common/index.ts new file mode 100644 index 000000000..a9d914d4d --- /dev/null +++ b/kipper/core/src/compiler/ast/common/index.ts @@ -0,0 +1,5 @@ +/** + * Commonly used data and types, which are used throughout the AST. + * @since 0.11.0 + */ +export * from "./ast-types"; diff --git a/kipper/core/src/compiler/ast/compilable-ast-node.ts b/kipper/core/src/compiler/ast/compilable-ast-node.ts index 65b351096..5bcbedbb8 100644 --- a/kipper/core/src/compiler/ast/compilable-ast-node.ts +++ b/kipper/core/src/compiler/ast/compilable-ast-node.ts @@ -3,7 +3,12 @@ * @since 0.8.0 */ import type { TranslatedCodeLine } from "../const"; -import type { KipperCompileTarget, KipperTargetCodeGenerator, KipperTargetSemanticAnalyser } from "../target-presets"; +import type { + KipperCompileTarget, + KipperTargetCodeGenerator, + KipperTargetSemanticAnalyser, + TargetASTNodeCodeGenerator +} from "../target-presets"; import type { KipperParser, KipperParserRuleContext } from "../parser"; import type { TypeData } from "./ast-node"; import type { KipperProgramContext } from "../program-ctx"; @@ -12,7 +17,6 @@ import type { RootASTNode, SemanticData } from "./index"; import type { FunctionScope, GlobalScope, LocalScope } from "../analysis"; import type { ScopeNode } from "./scope-node"; import type { TargetCompilableNode } from "./target-node"; -import type { TargetASTNodeCodeGenerator } from "../target-presets"; import { AnalysableASTNode } from "./analysable-ast-node"; /** diff --git a/kipper/core/src/compiler/ast/factories.ts b/kipper/core/src/compiler/ast/factories.ts deleted file mode 100644 index cf94a3eea..000000000 --- a/kipper/core/src/compiler/ast/factories.ts +++ /dev/null @@ -1,281 +0,0 @@ -/** - * AST Node factories which are used to create AST nodes from the ANTLR4 parse tree. - * @since 0.10.0 - */ -import type { CompilableASTNode, CompilableNodeParent } from "./compilable-ast-node"; -import type { - ASTDeclarationKind, - ASTExpressionKind, - ASTStatementKind, - ConstructableASTKind, - ParserDeclarationContext, - ParserExpressionContext, - ParserStatementContext, -} from "./ast-types"; -import { KipperParserRuleContext, ParserASTMapping } from "../parser"; -import { - AdditiveExpression, - ArrayLiteralPrimaryExpression, - AssignmentExpression, - BoolPrimaryExpression, - CastOrConvertExpression, - ConditionalExpression, - EqualityExpression, - Expression, - FStringPrimaryExpression, - FunctionCallExpression, - GenericTypeSpecifierExpression, - IdentifierPrimaryExpression, - IdentifierTypeSpecifierExpression, - IncrementOrDecrementPostfixExpression, - IncrementOrDecrementUnaryExpression, - LogicalAndExpression, - LogicalOrExpression, - MemberAccessExpression, - MultiplicativeExpression, - NumberPrimaryExpression, - OperatorModifiedUnaryExpression, - RelationalExpression, - StringPrimaryExpression, - TangledPrimaryExpression, - TypeofTypeSpecifierExpression, - VoidOrNullOrUndefinedPrimaryExpression, - Declaration, - FunctionDeclaration, - ParameterDeclaration, - VariableDeclaration, - CompoundStatement, - DoWhileLoopStatement, - ExpressionStatement, - ForLoopStatement, - IfStatement, - JumpStatement, - ReturnStatement, - Statement, - SwitchStatement, - WhileLoopStatement, -} from "./nodes"; - -/** - * A simple blueprint for a factory for creating AST nodes from a parser context. - * @since 0.10.0 - */ -export abstract class ASTNodeFactory< - T extends CompilableASTNode = CompilableASTNode, - U extends KipperParserRuleContext = KipperParserRuleContext, -> { - /** - * A map of all {@link ParserASTMapping AST node kind ids} mapped to their respective constructable AST node classes. - * @since 0.10.0 - */ - public abstract readonly ruleMap: Record; - - /** - * Returns an array of all {@link ParserASTMapping AST node kind ids} that this factory can process. - * @since 0.10.0 - */ - public get ruleIds(): Array { - return Object.keys(this.ruleMap).map((key: string) => parseInt(key)); - } - - /** - * Fetches the AST node class and creates a new instance based on the {@link antlrRuleCtx}. - * @param antlrRuleCtx The context instance that the handler class should be fetched for. - * @param parent The parent of the AST node that is being created. - * @since 0.9.0 - */ - public abstract create(antlrRuleCtx: U, parent: CompilableASTNode): T; -} - -/** - * Factory class which generates statement class instances using {@link StatementASTNodeFactory.create StatementASTNodeFactory.create()}. - * @since 0.9.0 - */ -export class StatementASTNodeFactory extends ASTNodeFactory { - /** - * A table matching all {@link ASTStatementKind statement kinds} to their respective constructable AST node - * classes. - * @since 0.10.0 - */ - public readonly ruleMap = { - [ParserASTMapping.RULE_compoundStatement]: CompoundStatement, - [ParserASTMapping.RULE_ifStatement]: IfStatement, - [ParserASTMapping.RULE_switchStatement]: SwitchStatement, - [ParserASTMapping.RULE_expressionStatement]: ExpressionStatement, - [ParserASTMapping.RULE_doWhileLoopIterationStatement]: DoWhileLoopStatement, - [ParserASTMapping.RULE_whileLoopIterationStatement]: WhileLoopStatement, - [ParserASTMapping.RULE_forLoopIterationStatement]: ForLoopStatement, - [ParserASTMapping.RULE_returnStatement]: ReturnStatement, - [ParserASTMapping.RULE_jumpStatement]: JumpStatement, - } satisfies Record>; - - /** - * Returns an array of all {@link ParserASTMapping AST node kind ids} that this factory can process. - * @since 0.10.0 - */ - public get ruleIds(): Array { - return >super.ruleIds; - } - - /** - * Fetches the AST node class and creates a new instance based on the {@link antlrRuleCtx}. - * @param antlrRuleCtx The context instance that the handler class should be fetched for. - * @param parent The parent of the AST node that is being created. - * @since 0.9.0 - */ - public create(antlrRuleCtx: ParserStatementContext, parent: CompilableNodeParent): ConstructableASTStatement { - const astSyntaxKind = antlrRuleCtx.astSyntaxKind; - - // Forcing compatibility using 'any', since it's not already inferred - return new this.ruleMap[astSyntaxKind](antlrRuleCtx, parent); - } -} - -/** - * A union of all construable Statement AST node classes. - * @since 0.10.0 - */ -export type ConstructableASTStatementClass = (typeof StatementASTNodeFactory.prototype.ruleMap)[ASTStatementKind]; - -/** - * A union of all construable Statement AST nodes. Uses {@link ConstructableASTStatementClass} to infer the type. - * @since 0.10.0 - */ -export type ConstructableASTStatement = InstanceType; - -/** - * Factory class which generates expression class instances using {@link ExpressionASTNodeFactory.create ExpressionASTNodeFactory.create()}. - * @since 0.9.0 - */ -export class ExpressionASTNodeFactory extends ASTNodeFactory { - /** - * A table matching all {@link ASTExpressionKind expression kinds} to their respective constructable AST node - * classes. - * @since 0.10.0 - */ - public readonly ruleMap = { - [ParserASTMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpression, - [ParserASTMapping.RULE_arrayLiteralPrimaryExpression]: ArrayLiteralPrimaryExpression, - [ParserASTMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpression, - [ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpression, - [ParserASTMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpression, - [ParserASTMapping.RULE_stringPrimaryExpression]: StringPrimaryExpression, - [ParserASTMapping.RULE_fStringPrimaryExpression]: FStringPrimaryExpression, - [ParserASTMapping.RULE_tangledPrimaryExpression]: TangledPrimaryExpression, - [ParserASTMapping.RULE_incrementOrDecrementPostfixExpression]: IncrementOrDecrementPostfixExpression, - [ParserASTMapping.RULE_functionCallExpression]: FunctionCallExpression, - [ParserASTMapping.RULE_incrementOrDecrementUnaryExpression]: IncrementOrDecrementUnaryExpression, - [ParserASTMapping.RULE_operatorModifiedUnaryExpression]: OperatorModifiedUnaryExpression, - [ParserASTMapping.RULE_castOrConvertExpression]: CastOrConvertExpression, - [ParserASTMapping.RULE_multiplicativeExpression]: MultiplicativeExpression, - [ParserASTMapping.RULE_additiveExpression]: AdditiveExpression, - [ParserASTMapping.RULE_relationalExpression]: RelationalExpression, - [ParserASTMapping.RULE_equalityExpression]: EqualityExpression, - [ParserASTMapping.RULE_logicalAndExpression]: LogicalAndExpression, - [ParserASTMapping.RULE_logicalOrExpression]: LogicalOrExpression, - [ParserASTMapping.RULE_conditionalExpression]: ConditionalExpression, - [ParserASTMapping.RULE_assignmentExpression]: AssignmentExpression, - [ParserASTMapping.RULE_identifierTypeSpecifier]: IdentifierTypeSpecifierExpression, - [ParserASTMapping.RULE_genericTypeSpecifier]: GenericTypeSpecifierExpression, - [ParserASTMapping.RULE_typeofTypeSpecifier]: TypeofTypeSpecifierExpression, - [ParserASTMapping.RULE_memberAccessExpression]: MemberAccessExpression, - } satisfies Record>; - - /** - * Returns an array of all {@link ParserASTMapping AST node kind ids} that this factory can process. - * @since 0.10.0 - */ - public get ruleIds(): Array { - return >super.ruleIds; - } - - /** - * Fetches the AST node class and creates a new instance based on the {@link antlrRuleCtx}. - * @param antlrRuleCtx The context instance that the handler class should be fetched for. - * @param parent The parent of the AST node that is being created. - * @since 0.9.0 - */ - public create(antlrRuleCtx: ParserExpressionContext, parent: CompilableASTNode): ConstructableASTExpression { - const astSyntaxKind = antlrRuleCtx.astSyntaxKind; - - // Forcing compatibility using 'any', since it's not already inferred - return new this.ruleMap[astSyntaxKind](antlrRuleCtx, parent); - } -} - -/** - * A union of all construable Expression AST node classes. - * @since 0.10.0 - */ -export type ConstructableASTExpressionClass = (typeof ExpressionASTNodeFactory.prototype.ruleMap)[ASTExpressionKind]; - -/** - * A union of all construable Expression AST nodes. Uses {@link ConstructableASTExpressionClass} to infer the type. - * @since 0.10.0 - */ -export type ConstructableASTExpression = InstanceType; - -/** - * Factory class which generates definition class instances using {@link DeclarationASTNodeFactory.create DefinitionASTNodeFactory.create()}. - * @since 0.9.0 - */ -export class DeclarationASTNodeFactory extends ASTNodeFactory { - /** - * A table matching all {@link ASTDeclarationKind declaration kinds} to their respective constructable AST node - * classes. - * @since 0.10.0 - */ - public readonly ruleMap = { - [ParserASTMapping.RULE_functionDeclaration]: FunctionDeclaration, - [ParserASTMapping.RULE_variableDeclaration]: VariableDeclaration, - [ParserASTMapping.RULE_parameterDeclaration]: ParameterDeclaration, - } satisfies Record>; - - /** - * Returns an array of all {@link ParserASTMapping AST node kind ids} that this factory can process. - * @since 0.10.0 - */ - public get ruleIds(): Array { - return >super.ruleIds; - } - - /** - * Fetches the AST node and creates a new instance based on the {@link antlrRuleCtx}. - * @param antlrRuleCtx The context instance that the handler class should be fetched for. - * @param parent The parent of the AST node that is being created. - * @since 0.9.0 - */ - public create(antlrRuleCtx: ParserDeclarationContext, parent: CompilableNodeParent): ConstructableASTDeclaration { - const astSyntaxKind = antlrRuleCtx.astSyntaxKind; - - // Forcing compatibility using 'any', since it's not already inferred - return new this.ruleMap[astSyntaxKind](antlrRuleCtx, parent); - } -} - -/** - * A union of all construable Declaration AST node classes. - * @since 0.10.0 - */ -export type ConstructableASTDeclarationClass = (typeof DeclarationASTNodeFactory.prototype.ruleMap)[ASTDeclarationKind]; - -/** - * A union of all construable Declaration AST nodes. Uses {@link ConstructableASTDeclarationClass} to infer the type. - * @since 0.10.0 - */ -export type ConstructableASTDeclaration = InstanceType; - -/** - * A union of all construable AST node classes. - * @since 0.10.0 - */ -export type ConstructableASTNodeClass = - | ConstructableASTStatementClass - | ConstructableASTExpressionClass - | ConstructableASTDeclarationClass; - -/** - * A union of all construable AST nodes. Uses {@link ConstructableASTNodeClass} to infer the type. - * @since 0.10.0 - */ -export type ConstructableASTNode = InstanceType; diff --git a/kipper/core/src/compiler/ast/factories/ast-node-factory.ts b/kipper/core/src/compiler/ast/factories/ast-node-factory.ts new file mode 100644 index 000000000..2ee32ae72 --- /dev/null +++ b/kipper/core/src/compiler/ast/factories/ast-node-factory.ts @@ -0,0 +1,33 @@ +/** + * A simple blueprint for a factory for creating AST nodes from a parser context. + * @since 0.10.0 + */ +import type { ConstructableASTKind } from "../common"; +import type { ConstructableASTNodeClass } from "./index"; +import { CompilableASTNode } from "../compilable-ast-node"; +import { KipperParserRuleContext } from "../../parser"; + +/** + * A simple blueprint for a factory for creating AST nodes from a parser context. + * @since 0.10.0 + */ +export abstract class ASTNodeFactory< + T extends CompilableASTNode = CompilableASTNode, + U extends KipperParserRuleContext = KipperParserRuleContext, +> { + /** + * Returns an array of all {@link ParseRuleKindMapping AST node kind ids} that this factory can process. + * @since 0.10.0 + */ + protected static getRuleIds(ruleMapping: Record): Array { + return Object.keys(ruleMapping).map((key: string) => parseInt(key)); + } + + /** + * Fetches the AST node class and creates a new instance based on the {@link antlrRuleCtx}. + * @param antlrRuleCtx The context instance that the handler class should be fetched for. + * @param parent The parent of the AST node that is being created. + * @since 0.9.0 + */ + public abstract create(antlrRuleCtx: U, parent: CompilableASTNode): T; +} diff --git a/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts b/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts new file mode 100644 index 000000000..3a5415ea1 --- /dev/null +++ b/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts @@ -0,0 +1,66 @@ +/** + * Factory class which generates definition class instances using {@link DeclarationASTNodeFactory.create DefinitionASTNodeFactory.create()}. + * @since 0.9.0 + */ +import type { ASTDeclarationKind, ParserDeclarationContext, ParserExpressionContext } from "../common"; +import type { CompilableNodeParent } from "../compilable-ast-node"; +import { Declaration } from "../nodes"; +import { ASTNodeFactory } from "./ast-node-factory"; +import { ASTNodeMapper } from "../mapping/"; + +/** + * Factory class which generates definition class instances using {@link DeclarationASTNodeFactory.create DefinitionASTNodeFactory.create()}. + * @since 0.9.0 + */ +export class DeclarationASTNodeFactory extends ASTNodeFactory { + /** + * A mapping of {@link ParseRuleKindMapping AST node kind ids} to their respective + * {@link Declaration declaration AST node classes}. + * + * Directly using {@link ASTNodeMapper.declarationKindToClassMap}. + * @since 0.11.0 + */ + public static readonly ruleMapping = ASTNodeMapper.declarationKindToClassMap; + + /** + * Returns an array of all {@link ParseRuleKindMapping AST node kind ids} that this factory can process. + * @since 0.10.0 + */ + public static get ruleIds(): Array { + return >super.getRuleIds(this.ruleMapping); + } + + /** + * Returns an array of all {@link ParseRuleKindMapping AST node kind ids} that this factory can process. + * @since 0.10.0 + */ + public get ruleIds(): Array { + return DeclarationASTNodeFactory.ruleIds; + } + + /** + * Fetches the AST node and creates a new instance based on the {@link antlrRuleCtx}. + * @param antlrRuleCtx The context instance that the handler class should be fetched for. + * @param parent The parent of the AST node that is being created. + * @since 0.9.0 + */ + public create(antlrRuleCtx: ParserDeclarationContext, parent: CompilableNodeParent): ConstructableASTDeclaration { + const astSyntaxKind = antlrRuleCtx.astSyntaxKind; + const classObj = ASTNodeMapper.mapDeclarationKindToClass(astSyntaxKind); + + // Forcing compatibility using 'any', since it's not already inferred + return new classObj(antlrRuleCtx, parent); + } +} + +/** + * A union of all construable Declaration AST node classes. + * @since 0.10.0 + */ +export type ConstructableASTDeclarationClass = typeof DeclarationASTNodeFactory.ruleMapping[ASTDeclarationKind]; + +/** + * A union of all construable Declaration AST nodes. Uses {@link ConstructableASTDeclarationClass} to infer the type. + * @since 0.10.0 + */ +export type ConstructableASTDeclaration = InstanceType; diff --git a/kipper/core/src/compiler/ast/factories/expression-ast-factory.ts b/kipper/core/src/compiler/ast/factories/expression-ast-factory.ts new file mode 100644 index 000000000..4e5164727 --- /dev/null +++ b/kipper/core/src/compiler/ast/factories/expression-ast-factory.ts @@ -0,0 +1,66 @@ +/** + * Factory class which generates expression class instances using {@link ExpressionASTNodeFactory.create ExpressionASTNodeFactory.create()}. + * @since 0.9.0 + */ +import type { ASTExpressionKind, ParserExpressionContext } from "../common"; +import { Expression } from "../nodes"; +import { CompilableASTNode } from "../compilable-ast-node"; +import { ASTNodeFactory } from "./ast-node-factory"; +import { ASTNodeMapper } from "../mapping"; + +/** + * Factory class which generates expression class instances using {@link ExpressionASTNodeFactory.create ExpressionASTNodeFactory.create()}. + * @since 0.9.0 + */ +export class ExpressionASTNodeFactory extends ASTNodeFactory { + /** + * A mapping of {@link ParseRuleKindMapping AST node kind ids} to their respective + * {@link Expression expression AST node classes}. + * + * Directly using {@link ASTNodeMapper.expressionKindToClassMap}. + * @since 0.11.0 + */ + public static readonly ruleMapping = ASTNodeMapper.expressionKindToClassMap; + + /** + * Returns an array of all {@link ParseRuleKindMapping AST node kind ids} that this factory can process. + * @since 0.10.0 + */ + public static get ruleIds(): Array { + return >super.getRuleIds(this.ruleMapping); + } + + /** + * Returns an array of all {@link ParseRuleKindMapping AST node kind ids} that this factory can process. + * @since 0.10.0 + */ + public get ruleIds(): Array { + return ExpressionASTNodeFactory.ruleIds; + } + + /** + * Fetches the AST node class and creates a new instance based on the {@link antlrRuleCtx}. + * @param antlrRuleCtx The context instance that the handler class should be fetched for. + * @param parent The parent of the AST node that is being created. + * @since 0.9.0 + */ + public create(antlrRuleCtx: ParserExpressionContext, parent: CompilableASTNode): ConstructableASTExpression { + const astSyntaxKind = antlrRuleCtx.astSyntaxKind; + const classObj = ASTNodeMapper.mapExpressionKindToClass(astSyntaxKind); + + // Forcing compatibility using 'any', since it's not already inferred + return new classObj(antlrRuleCtx, parent); + } +} + +/** + * A union of all construable Expression AST node classes. + * @since 0.10.0 + */ +export type ConstructableASTExpressionClass = typeof ExpressionASTNodeFactory.ruleMapping[ASTExpressionKind]; + +/** + * A union of all construable Expression AST nodes. Uses {@link ConstructableASTExpressionClass} to infer the type. + * @since 0.10.0 + */ +export type ConstructableASTExpression = InstanceType; diff --git a/kipper/core/src/compiler/ast/factories/index.ts b/kipper/core/src/compiler/ast/factories/index.ts new file mode 100644 index 000000000..e9e93fb88 --- /dev/null +++ b/kipper/core/src/compiler/ast/factories/index.ts @@ -0,0 +1,27 @@ +/** + * AST Node factories which are used to create AST nodes from the ANTLR4 parse tree. + * @since 0.10.0 + */ +import { ConstructableASTExpressionClass } from "./expression-ast-factory"; +import { ConstructableASTStatementClass } from "./statement-ast-factory"; +import { ConstructableASTDeclarationClass } from "./declaration-ast-factory"; + +export * from "./ast-node-factory"; +export * from "./expression-ast-factory"; +export * from "./statement-ast-factory"; +export * from "./declaration-ast-factory"; + +/** + * A union of all construable AST node classes. + * @since 0.10.0 + */ +export type ConstructableASTNodeClass = + | ConstructableASTStatementClass + | ConstructableASTExpressionClass + | ConstructableASTDeclarationClass; + +/** + * A union of all construable AST nodes. Uses {@link ConstructableASTNodeClass} to infer the type. + * @since 0.10.0 + */ +export type ConstructableASTNode = InstanceType; diff --git a/kipper/core/src/compiler/ast/factories/statement-ast-factory.ts b/kipper/core/src/compiler/ast/factories/statement-ast-factory.ts new file mode 100644 index 000000000..e2bf915a0 --- /dev/null +++ b/kipper/core/src/compiler/ast/factories/statement-ast-factory.ts @@ -0,0 +1,64 @@ +/** + * Factory class which generates statement class instances using {@link StatementASTNodeFactory.create StatementASTNodeFactory.create()}. + * @since 0.9.0 + */ +import type { ASTStatementKind, ParserExpressionContext, ParserStatementContext } from "../common"; +import type { CompilableNodeParent } from "../compilable-ast-node"; +import { Statement } from "../nodes"; +import { ASTNodeFactory } from "./ast-node-factory"; +import { ASTNodeMapper } from "../mapping"; + +/** + * Factory class which generates statement class instances using {@link StatementASTNodeFactory.create StatementASTNodeFactory.create()}. + * @since 0.9.0 + */ +export class StatementASTNodeFactory extends ASTNodeFactory { + /** + * A mapping of {@link ParseRuleKindMapping AST node kind ids} to their respective + * {@link Statement statement AST node classes}. + * @since 0.11.0 + */ + public static readonly ruleMapping = ASTNodeMapper.statementKindToClassMap; + + /** + * Returns an array of all {@link ParseRuleKindMapping AST node kind ids} that this factory can process. + * @since 0.10.0 + */ + public static get ruleIds(): Array { + return >super.getRuleIds(this.ruleMapping); + } + + /** + * Returns an array of all {@link ParseRuleKindMapping AST node kind ids} that this factory can process. + * @since 0.10.0 + */ + public get ruleIds(): Array { + return StatementASTNodeFactory.ruleIds; + } + + /** + * Fetches the AST node class and creates a new instance based on the {@link antlrRuleCtx}. + * @param antlrRuleCtx The context instance that the handler class should be fetched for. + * @param parent The parent of the AST node that is being created. + * @since 0.9.0 + */ + public create(antlrRuleCtx: ParserStatementContext, parent: CompilableNodeParent): ConstructableASTStatement { + const astSyntaxKind = antlrRuleCtx.astSyntaxKind; + const classObj = ASTNodeMapper.mapStatementKindToClass(astSyntaxKind); + + // Forcing compatibility using 'any', since it's not already inferred + return new classObj(antlrRuleCtx, parent); + } +} + +/** + * A union of all construable Statement AST node classes. + * @since 0.10.0 + */ +export type ConstructableASTStatementClass = typeof StatementASTNodeFactory.ruleMapping[ASTStatementKind]; + +/** + * A union of all construable Statement AST nodes. Uses {@link ConstructableASTStatementClass} to infer the type. + * @since 0.10.0 + */ +export type ConstructableASTStatement = InstanceType; diff --git a/kipper/core/src/compiler/ast/index.ts b/kipper/core/src/compiler/ast/index.ts index adece34de..c38a6e497 100644 --- a/kipper/core/src/compiler/ast/index.ts +++ b/kipper/core/src/compiler/ast/index.ts @@ -2,14 +2,16 @@ * Implementation of the AST (Abstract Syntax Tree). * @since 0.10.0 */ -export * from "./ast-types"; +export * from "./common/"; export * from "./ast-node"; -export * from "./root-ast-node"; +export * from "./factories"; export * from "./target-node"; export * from "./ast-generator"; export * from "./analysable-ast-node"; export * from "./compilable-ast-node"; export * from "./scope-node"; +export * from "./mapping/"; +export * from "./factories/"; export * from "./semantic-data/"; export * from "./type-data/"; export * from "./nodes/"; diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts new file mode 100644 index 000000000..6cbae6c5c --- /dev/null +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -0,0 +1,412 @@ +/** + * Mapper class which maps kind ids or rule names to their corresponding AST classes. + * + * This is used to simplify the process of determining the relationships between parser, AST and code generators. + * @since 0.11.0 + */ +import { + AdditiveExpressionContext, + ArrayLiteralPrimaryExpressionContext, + AssignmentExpressionContext, + BoolPrimaryExpressionContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + CompoundStatementContext, + ConditionalExpressionContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExpressionStatementContext, + ForLoopIterationStatementContext, + FStringPrimaryExpressionContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + JumpStatementContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NumberPrimaryExpressionContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParseRuleKindMapping, + RelationalExpressionContext, + ReturnStatementContext, + SliceNotationMemberAccessExpressionContext, + StringPrimaryExpressionContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TypeofTypeSpecifierExpressionContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext +} from "../../parser"; +import type { + ASTDeclarationKind, + ASTDeclarationRuleName, + ASTExpressionKind, + ASTExpressionRuleName, + ASTStatementKind, + ASTStatementRuleName +} from "../common"; +import { + AdditiveExpression, + ArrayLiteralPrimaryExpression, + AssignmentExpression, + BoolPrimaryExpression, + CastOrConvertExpression, + CompoundStatement, + ConditionalExpression, + Declaration, + DoWhileLoopIterationStatement, + EqualityExpression, + Expression, + ExpressionStatement, + ForLoopIterationStatement, + FStringPrimaryExpression, + FunctionCallExpression, + FunctionDeclaration, + GenericTypeSpecifierExpression, + IdentifierPrimaryExpression, + IdentifierTypeSpecifierExpression, + IfStatement, + IncrementOrDecrementPostfixExpression, + IncrementOrDecrementUnaryExpression, + JumpStatement, + LogicalAndExpression, + LogicalOrExpression, + MemberAccessExpression, + MultiplicativeExpression, + NumberPrimaryExpression, + OperatorModifiedUnaryExpression, + ParameterDeclaration, + RelationalExpression, + ReturnStatement, + Statement, + StringPrimaryExpression, + SwitchStatement, + TangledPrimaryExpression, + TypeofTypeSpecifierExpression, + VariableDeclaration, + VoidOrNullOrUndefinedPrimaryExpression, + WhileLoopIterationStatement +} from "../nodes"; + +/** + * Mapper class which maps kind ids or rule names to their corresponding AST classes. + * + * This is used to simplify the process of determining the relationships between parser, AST and code generators. + * @since 0.11.0 + */ +export class ASTNodeMapper { + /** + * A mapping matching all {@link ASTDeclarationKind declaration kinds} to their respective constructable AST node + * classes. + * @since 0.10.0 + */ + public static readonly declarationKindToClassMap = { + [ParseRuleKindMapping.RULE_functionDeclaration]: FunctionDeclaration, + [ParseRuleKindMapping.RULE_variableDeclaration]: VariableDeclaration, + [ParseRuleKindMapping.RULE_parameterDeclaration]: ParameterDeclaration, + } satisfies Record>; + + /** + * A mapping matching all {@link ASTExpressionKind expression kinds} to their respective constructable AST node + * classes. + * @since 0.10.0 + */ + public static readonly expressionKindToClassMap = { + [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpression, + [ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression]: ArrayLiteralPrimaryExpression, + [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpression, + [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpression, + [ParseRuleKindMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpression, + [ParseRuleKindMapping.RULE_stringPrimaryExpression]: StringPrimaryExpression, + [ParseRuleKindMapping.RULE_fStringPrimaryExpression]: FStringPrimaryExpression, + [ParseRuleKindMapping.RULE_tangledPrimaryExpression]: TangledPrimaryExpression, + [ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression]: IncrementOrDecrementPostfixExpression, + [ParseRuleKindMapping.RULE_functionCallExpression]: FunctionCallExpression, + [ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression]: IncrementOrDecrementUnaryExpression, + [ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression]: OperatorModifiedUnaryExpression, + [ParseRuleKindMapping.RULE_castOrConvertExpression]: CastOrConvertExpression, + [ParseRuleKindMapping.RULE_multiplicativeExpression]: MultiplicativeExpression, + [ParseRuleKindMapping.RULE_additiveExpression]: AdditiveExpression, + [ParseRuleKindMapping.RULE_relationalExpression]: RelationalExpression, + [ParseRuleKindMapping.RULE_equalityExpression]: EqualityExpression, + [ParseRuleKindMapping.RULE_logicalAndExpression]: LogicalAndExpression, + [ParseRuleKindMapping.RULE_logicalOrExpression]: LogicalOrExpression, + [ParseRuleKindMapping.RULE_conditionalExpression]: ConditionalExpression, + [ParseRuleKindMapping.RULE_assignmentExpression]: AssignmentExpression, + [ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression]: IdentifierTypeSpecifierExpression, + [ParseRuleKindMapping.RULE_genericTypeSpecifierExpression]: GenericTypeSpecifierExpression, + [ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression]: TypeofTypeSpecifierExpression, + [ParseRuleKindMapping.RULE_memberAccessExpression]: MemberAccessExpression, + } satisfies Record>; + + /** + * A mapping matching all {@link ASTStatementKind statement kinds} to their respective constructable AST node + * classes. + * @since 0.10.0 + */ + public static readonly statementKindToClassMap = { + [ParseRuleKindMapping.RULE_compoundStatement]: CompoundStatement, + [ParseRuleKindMapping.RULE_ifStatement]: IfStatement, + [ParseRuleKindMapping.RULE_switchStatement]: SwitchStatement, + [ParseRuleKindMapping.RULE_expressionStatement]: ExpressionStatement, + [ParseRuleKindMapping.RULE_doWhileLoopIterationStatement]: DoWhileLoopIterationStatement, + [ParseRuleKindMapping.RULE_whileLoopIterationStatement]: WhileLoopIterationStatement, + [ParseRuleKindMapping.RULE_forLoopIterationStatement]: ForLoopIterationStatement, + [ParseRuleKindMapping.RULE_returnStatement]: ReturnStatement, + [ParseRuleKindMapping.RULE_jumpStatement]: JumpStatement, + } satisfies Record>; + + /** + * A mapping matching all {@link ASTDeclarationKind declaration kinds} to their respective constructable AST node + * classes. + * @since 0.11.0 + */ + public static readonly declarationKindToRuleContextMap = { + [ParseRuleKindMapping.RULE_functionDeclaration]: FunctionDeclarationContext, + [ParseRuleKindMapping.RULE_variableDeclaration]: VariableDeclarationContext, + [ParseRuleKindMapping.RULE_parameterDeclaration]: ParameterDeclarationContext, + } satisfies Record; + + /** + * A mapping matching all {@link ASTExpressionKind expression kinds} to their respective constructable AST node + * classes. + * @since 0.11.0 + */ + public static readonly expressionKindToRuleContextMap = { + [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression]: ArrayLiteralPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_stringPrimaryExpression]: StringPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_fStringPrimaryExpression]: FStringPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_tangledPrimaryExpression]: TangledPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression]: IncrementOrDecrementPostfixExpressionContext, + [ParseRuleKindMapping.RULE_functionCallExpression]: FunctionCallExpressionContext, + [ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression]: IncrementOrDecrementUnaryExpressionContext, + [ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression]: OperatorModifiedUnaryExpressionContext, + [ParseRuleKindMapping.RULE_castOrConvertExpression]: CastOrConvertExpressionContext, + [ParseRuleKindMapping.RULE_multiplicativeExpression]: MultiplicativeExpressionContext, + [ParseRuleKindMapping.RULE_additiveExpression]: AdditiveExpressionContext, + [ParseRuleKindMapping.RULE_relationalExpression]: RelationalExpressionContext, + [ParseRuleKindMapping.RULE_equalityExpression]: EqualityExpressionContext, + [ParseRuleKindMapping.RULE_logicalAndExpression]: LogicalAndExpressionContext, + [ParseRuleKindMapping.RULE_logicalOrExpression]: LogicalOrExpressionContext, + [ParseRuleKindMapping.RULE_conditionalExpression]: ConditionalExpressionContext, + [ParseRuleKindMapping.RULE_assignmentExpression]: AssignmentExpressionContext, + [ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression]: IdentifierTypeSpecifierExpressionContext, + [ParseRuleKindMapping.RULE_genericTypeSpecifierExpression]: GenericTypeSpecifierExpressionContext, + [ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression]: TypeofTypeSpecifierExpressionContext, + [ParseRuleKindMapping.RULE_memberAccessExpression]: [ + // Due to the nature of the parser not handling the notations as one rule, it's an array + DotNotationMemberAccessExpressionContext, + BracketNotationMemberAccessExpressionContext, + SliceNotationMemberAccessExpressionContext, + ], + } satisfies Record>; + + /** + * A mapping matching all {@link ASTStatementKind statement kinds} to their respective constructable AST node + * classes. + * @since 0.11.0 + */ + public static readonly statementKindToRuleContextMap = { + [ParseRuleKindMapping.RULE_compoundStatement]: CompoundStatementContext, + [ParseRuleKindMapping.RULE_ifStatement]: IfStatementContext, + [ParseRuleKindMapping.RULE_switchStatement]: SwitchStatementContext, + [ParseRuleKindMapping.RULE_expressionStatement]: ExpressionStatementContext, + [ParseRuleKindMapping.RULE_doWhileLoopIterationStatement]: DoWhileLoopIterationStatementContext, + [ParseRuleKindMapping.RULE_whileLoopIterationStatement]: WhileLoopIterationStatementContext, + [ParseRuleKindMapping.RULE_forLoopIterationStatement]: ForLoopIterationStatementContext, + [ParseRuleKindMapping.RULE_returnStatement]: ReturnStatementContext, + [ParseRuleKindMapping.RULE_jumpStatement]: JumpStatementContext, + } satisfies Record; + + /** + * A mapping matching all {@link ASTDeclarationRuleName declaration rule names} to their respective constructable + * AST node classes. + * @since 0.11.0 + */ + public static readonly declarationRuleNameToClassMap = { + RULE_functionDeclaration: FunctionDeclaration, + RULE_variableDeclaration: VariableDeclaration, + RULE_parameterDeclaration: ParameterDeclaration, + } satisfies Record>; + + /** + * A mapping matching all {@link ASTExpressionRuleName expression rule names} to their respective constructable AST + * node classes. + * @since 0.11.0 + */ + public static readonly expressionRuleNameToClassMap = { + RULE_numberPrimaryExpression: NumberPrimaryExpression, + RULE_arrayLiteralPrimaryExpression: ArrayLiteralPrimaryExpression, + RULE_identifierPrimaryExpression: IdentifierPrimaryExpression, + RULE_voidOrNullOrUndefinedPrimaryExpression: VoidOrNullOrUndefinedPrimaryExpression, + RULE_boolPrimaryExpression: BoolPrimaryExpression, + RULE_stringPrimaryExpression: StringPrimaryExpression, + RULE_fStringPrimaryExpression: FStringPrimaryExpression, + RULE_tangledPrimaryExpression: TangledPrimaryExpression, + RULE_incrementOrDecrementPostfixExpression: IncrementOrDecrementPostfixExpression, + RULE_functionCallExpression: FunctionCallExpression, + RULE_incrementOrDecrementUnaryExpression: IncrementOrDecrementUnaryExpression, + RULE_operatorModifiedUnaryExpression: OperatorModifiedUnaryExpression, + RULE_castOrConvertExpression: CastOrConvertExpression, + RULE_multiplicativeExpression: MultiplicativeExpression, + RULE_additiveExpression: AdditiveExpression, + RULE_relationalExpression: RelationalExpression, + RULE_equalityExpression: EqualityExpression, + RULE_logicalAndExpression: LogicalAndExpression, + RULE_logicalOrExpression: LogicalOrExpression, + RULE_conditionalExpression: ConditionalExpression, + RULE_assignmentExpression: AssignmentExpression, + RULE_identifierTypeSpecifierExpression: IdentifierTypeSpecifierExpression, + RULE_genericTypeSpecifierExpression: GenericTypeSpecifierExpression, + RULE_typeofTypeSpecifierExpression: TypeofTypeSpecifierExpression, + RULE_memberAccessExpression: MemberAccessExpression, + } satisfies Record>; + + /** + * A mapping matching all {@link ASTStatementRuleName statement rule names} to their respective constructable AST + * node classes. + * @since 0.11.0 + */ + public static readonly statementRuleNameToClassMap = { + RULE_compoundStatement: CompoundStatement, + RULE_ifStatement: IfStatement, + RULE_switchStatement: SwitchStatement, + RULE_expressionStatement: ExpressionStatement, + RULE_doWhileLoopIterationStatement: DoWhileLoopIterationStatement, + RULE_whileLoopIterationStatement: WhileLoopIterationStatement, + RULE_forLoopIterationStatement: ForLoopIterationStatement, + RULE_returnStatement: ReturnStatement, + RULE_jumpStatement: JumpStatement, + } satisfies Record>; + + /** + * A mapping function matching all {@link ASTDeclarationKind declaration kinds} to their respective constructable + * {@link Declaration} AST node classes. + * @param kind The declaration kind to map to a class. + * @returns The class matching the given declaration kind. + * @since 0.11.0 + */ + public static mapDeclarationKindToClass( + kind: T, + ): typeof ASTNodeMapper.declarationKindToClassMap[T] { + return this.declarationKindToClassMap[kind]; + } + + /** + * A mapping function matching all {@link ASTExpressionKind expression kinds} to their respective constructable + * {@link Expression} AST node classes. + * @param kind The expression kind to map to a class. + * @returns The class matching the given expression kind. + * @since 0.11.0 + */ + public static mapExpressionKindToClass( + kind: T, + ): typeof ASTNodeMapper.expressionKindToClassMap[T] { + return this.expressionKindToClassMap[kind]; + } + + /** + * A mapping function matching all {@link ASTStatementKind statement kinds} to their respective constructable + * {@link Statement} AST node classes. + * @param kind The statement kind to map to a class. + * @returns The class matching the given statement kind. + * @since 0.11.0 + * @since 0.11.0 + */ + public static mapStatementKindToClass( + kind: T, + ): typeof ASTNodeMapper.statementKindToClassMap[T] { + return this.statementKindToClassMap[kind]; + } + + /** + * A mapping function matching all {@link ASTExpressionRuleName expression rule names} to their respective + * constructable {@link Declaration} AST node classes. + * @param kind The declaration rule name to map to a class. + * @returns The class matching the given declaration rule name. + * @since 0.11.0 + */ + public static mapDeclarationKindToRuleContext( + kind: T, + ): typeof ASTNodeMapper.declarationKindToRuleContextMap[T] { + return this.declarationKindToRuleContextMap[kind]; + } + + /** + * A mapping function matching all {@link ASTExpressionRuleName expression rule names} to their respective + * constructable {@link Expression} AST node classes. + * @param kind The expression rule name to map to a class. + * @returns The class matching the given expression rule name. + * @since 0.11.0 + */ + public static mapExpressionKindToRuleContext( + kind: T, + ): typeof ASTNodeMapper.expressionKindToRuleContextMap[T] { + return this.expressionKindToRuleContextMap[kind]; + } + + /** + * A mapping function matching all {@link ASTExpressionRuleName expression rule names} to their respective + * constructable {@link Statement} AST node classes. + * @param kind The statement rule name to map to a class. + * @returns The class matching the given statement rule name. + * @since 0.11.0 + */ + public static mapStatementKindToRuleContext( + kind: T, + ): typeof ASTNodeMapper.statementKindToRuleContextMap[T] { + return this.statementKindToRuleContextMap[kind]; + } + + /** + * A mapping function matching all {@link ASTDeclarationRuleName declaration rule names} to their respective + * constructable {@link Declaration} AST node classes. + * @param name The declaration rule name to map to a class. + * @returns The class matching the given declaration rule name. + * @since 0.11.0 + */ + public static mapDeclarationRuleNameToClass( + name: T, + ): typeof ASTNodeMapper.declarationRuleNameToClassMap[T] { + return this.declarationRuleNameToClassMap[name]; + } + + /** + * A mapping function matching all {@link ASTExpressionRuleName expression rule names} to their respective + * constructable {@link Expression} AST node classes. + * @param name The expression rule name to map to a class. + * @returns The class matching the given expression rule name. + * @since 0.11.0 + */ + public static mapExpressionRuleNameToClass( + name: T, + ): typeof ASTNodeMapper.expressionRuleNameToClassMap[T] { + return this.expressionRuleNameToClassMap[name]; + } + + /** + * A mapping function matching all {@link ASTStatementRuleName statement rule names} to their respective + * constructable {@link Statement} AST node classes. + * @param name The statement rule name to map to a class. + * @returns The class matching the given statement rule name. + * @since 0.11.0 + */ + public static mapStatementRuleNameToClass( + name: T, + ): typeof ASTNodeMapper.statementRuleNameToClassMap[T] { + return this.statementRuleNameToClassMap[name]; + } +} diff --git a/kipper/core/src/compiler/ast/mapping/index.ts b/kipper/core/src/compiler/ast/mapping/index.ts new file mode 100644 index 000000000..f37f1597c --- /dev/null +++ b/kipper/core/src/compiler/ast/mapping/index.ts @@ -0,0 +1,5 @@ +/** + * Mapping module for managing the mapping of AST nodes. + * @since 0.11.0 + */ +export * from "./ast-node-mapper"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts index f9c6b1f2d..ed935d782 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -12,7 +12,7 @@ import type { DeclarationSemantics } from "../../semantic-data"; import type { DeclarationTypeData } from "../../type-data"; import type { TranslatedCodeLine } from "../../../const"; -import type { ASTDeclarationKind, ParserDeclarationContext } from "../../ast-types"; +import type { ASTDeclarationKind, ASTDeclarationRuleName, ParserDeclarationContext } from "../../common"; import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; import type { ScopeDeclaration } from "../../../analysis"; import { CompilableASTNode, type CompilableNodeParent } from "../../compilable-ast-node"; @@ -51,10 +51,20 @@ export abstract class Declaration< * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public abstract readonly kind: ASTDeclarationKind; + public abstract get kind(): ASTDeclarationKind; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. + * @since 0.11.0 + */ + public abstract get ruleName(): ASTDeclarationRuleName; protected constructor(antlrRuleCtx: ParserDeclarationContext, parent: CompilableNodeParent) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts index 7e0540e9f..af63aeec4 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts @@ -10,7 +10,13 @@ import type { CompilableNodeParent } from "../../compilable-ast-node"; import type { CompoundStatement, Statement } from "../statements"; import type { IdentifierTypeSpecifierExpression } from "../expressions"; import { FunctionScope, ScopeFunctionDeclaration, UncheckedType } from "../../../analysis"; -import { CompoundStatementContext, DeclaratorContext, FunctionDeclarationContext, KipperParser } from "../../../parser"; +import { + CompoundStatementContext, + DeclaratorContext, + FunctionDeclarationContext, + KindParseRuleMapping, + ParseRuleKindMapping +} from "../../../parser"; import { Declaration } from "./declaration"; import { ParameterDeclaration } from "./parameter-declaration"; import { UnableToDetermineSemanticDataError } from "../../../../errors"; @@ -45,14 +51,42 @@ export class FunctionDeclaration */ protected override _scopeDeclaration: ScopeFunctionDeclaration | undefined; + /** + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_functionDeclaration; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_declaration}. * @since 0.10.0 */ - public override readonly kind = KipperParser.RULE_functionDeclaration; + public override get kind() { + return FunctionDeclaration.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_declaration}. + * @since 0.11.0 + */ + public override get ruleName() { + return FunctionDeclaration.ruleName; + } constructor(antlrRuleCtx: FunctionDeclarationContext, parent: CompilableNodeParent) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts index 50413b229..d88225858 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts @@ -9,8 +9,8 @@ import type { FunctionScope, ScopeParameterDeclaration } from "../../../analysis import type { FunctionDeclaration } from "./function-declaration"; import type { IdentifierTypeSpecifierExpression } from "../expressions"; import { Declaration } from "./declaration"; -import { KipperParser, ParameterDeclarationContext } from "../../../parser"; -import { getParseTreeSource } from "../../../../utils"; +import { KindParseRuleMapping, ParameterDeclarationContext, ParseRuleKindMapping } from "../../../parser"; +import { getParseTreeSource } from "../../../../tools"; /** * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. @@ -34,14 +34,41 @@ export class ParameterDeclaration extends Declaration< */ protected override _scopeDeclaration: ScopeParameterDeclaration | undefined; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_parameterDeclaration; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_declaration}. * @since 0.10.0 */ - public override readonly kind = KipperParser.RULE_parameterDeclaration; + public override get kind() { + return ParameterDeclaration.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_declaration}. + * @since 0.11.0 + */ + public override get ruleName() { + return ParameterDeclaration.ruleName; + } constructor(antlrRuleCtx: ParameterDeclarationContext, parent: CompilableNodeParent) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts index 857a639f1..b25ce863c 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts @@ -16,9 +16,10 @@ import { Declaration } from "./declaration"; import { DeclaratorContext, InitDeclaratorContext, - KipperParser, - StorageTypeSpecifierContext, - VariableDeclarationContext, + KindParseRuleMapping, + ParseRuleKindMapping, + storageTypeSpecifierContext, + VariableDeclarationContext } from "../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../errors"; @@ -51,14 +52,41 @@ export class VariableDeclaration extends Declaration = this.getAntlrRuleChildren(); // Determine the ctx instances - const storageTypeCtx = ( - children.find((val) => val instanceof StorageTypeSpecifierContext) + const storageTypeCtx = ( + children.find((val) => val instanceof storageTypeSpecifierContext) ); const initDeclaratorCtx = ( children.find((val) => val instanceof InitDeclaratorContext) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts index a804f14e1..f872c4ae6 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts @@ -11,7 +11,7 @@ import type { AdditiveExpressionSemantics } from "../../../semantic-data"; import type { AdditiveExpressionTypeSemantics } from "../../../type-data"; import type { Expression } from "../expression"; import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { AdditiveExpressionContext, ParserASTMapping } from "../../../../parser"; +import { AdditiveExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { KipperAdditiveOperator, kipperAdditiveOperators } from "../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; @@ -37,14 +37,41 @@ export class AdditiveExpression extends ArithmeticExpression< */ protected override readonly _antlrRuleCtx: AdditiveExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_additiveExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_additiveExpression; + public override get kind() { + return AdditiveExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return AdditiveExpression.ruleName; + } constructor(antlrRuleCtx: AdditiveExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts index b5b388d32..0009d727d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts @@ -1,21 +1,38 @@ +/** + * Abstract arithmetic expression class representing an arithmetic expression, which can be used to perform calculations + * based on two expressions. This abstract class only exists to provide the commonality between the different + * comparative expressions. + * @since 0.9.0 + */ import type { ArithmeticExpressionSemantics } from "../../../semantic-data"; import type { ArithmeticExpressionTypeSemantics } from "../../../type-data"; -import type { AdditiveExpressionContext, MultiplicativeExpressionContext, ParserASTMapping } from "../../../../parser"; +import type { ParseRuleKindMapping } from "../../../../parser"; +import { KindParseRuleMapping } from "../../../../parser"; import { Expression } from "../expression"; +import { ASTNodeMapper } from "../../../mapping"; /** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ComparativeExpression} AST node. + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ArithmeticExpression} AST node. * @since 0.10.0 */ -export type ParserArithmeticExpressionContext = AdditiveExpressionContext | MultiplicativeExpressionContext; +export type ASTArithmeticExpressionKind = + | typeof ParseRuleKindMapping.RULE_additiveExpression + | typeof ParseRuleKindMapping.RULE_multiplicativeExpression; /** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ArithmeticExpression} AST node. * @since 0.10.0 */ -export type ASTArithmeticExpressionKind = - | typeof ParserASTMapping.RULE_additiveExpression - | typeof ParserASTMapping.RULE_multiplicativeExpression; +export type ParserArithmeticExpressionContext = InstanceType< + typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTArithmeticExpressionKind] +>; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link ArithmeticExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserArithmeticExpressionRuleName = typeof KindParseRuleMapping[ASTArithmeticExpressionKind]; /** * Abstract arithmetic expression class representing an arithmetic expression, which can be used to perform calculations @@ -28,5 +45,6 @@ export abstract class ArithmeticExpression< TypeSemantics extends ArithmeticExpressionTypeSemantics = ArithmeticExpressionTypeSemantics, > extends Expression { protected abstract readonly _antlrRuleCtx: ParserArithmeticExpressionContext; - public abstract readonly kind: ASTArithmeticExpressionKind; + public abstract get kind(): ASTArithmeticExpressionKind; + public abstract get ruleName(): ParserArithmeticExpressionRuleName; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts index 26d8908d6..56fb22733 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts @@ -13,7 +13,7 @@ import type { MultiplicativeExpressionSemantics } from "../../../semantic-data"; import type { MultiplicativeTypeSemantics } from "../../../type-data"; import type { Expression } from "../expression"; import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { MultiplicativeExpressionContext, ParserASTMapping } from "../../../../parser"; +import { KindParseRuleMapping, MultiplicativeExpressionContext, ParseRuleKindMapping } from "../../../../parser"; import { KipperMultiplicativeOperator, kipperMultiplicativeOperators } from "../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; @@ -42,14 +42,41 @@ export class MultiplicativeExpression extends ArithmeticExpression< */ protected override readonly _antlrRuleCtx: MultiplicativeExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_multiplicativeExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_multiplicativeExpression; + public override get kind() { + return MultiplicativeExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return MultiplicativeExpression.ruleName; + } constructor(antlrRuleCtx: MultiplicativeExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts index 61e19b280..0ebecfbaa 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts @@ -15,12 +15,17 @@ import type { CompilableASTNode } from "../../compilable-ast-node"; import type { AssignmentExpressionSemantics } from "../../semantic-data"; import type { AssignmentExpressionTypeSemantics } from "../../type-data"; -import { AssignmentExpressionContext, KipperParserRuleContext, ParserASTMapping } from "../../../parser"; +import { + AssignmentExpressionContext, + KindParseRuleMapping, + KipperParserRuleContext, + ParseRuleKindMapping +} from "../../../parser"; import { Expression } from "./expression"; import { IdentifierPrimaryExpression } from "./primary"; import { UnableToDetermineSemanticDataError } from "../../../../errors"; import { kipperArithmeticAssignOperators, KipperAssignOperator } from "../../../const"; -import { getParseRuleSource } from "../../../../utils"; +import { getParseRuleSource } from "../../../../tools"; import { ScopeVariableDeclaration } from "../../../analysis"; /** @@ -45,14 +50,41 @@ export class AssignmentExpression extends Expression; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link ComparativeExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserComparativeExpressionRuleName = typeof KindParseRuleMapping[ASTComparativeExpressionKind]; /** * Abstract comparative expression class representing a comparative expression, which can be used to compare two @@ -32,5 +43,6 @@ export abstract class ComparativeExpression< TypeSemantics extends ComparativeExpressionTypeSemantics = ComparativeExpressionTypeSemantics, > extends Expression { protected abstract readonly _antlrRuleCtx: ParserComparativeExpressionContext; - public abstract readonly kind: ASTComparativeExpressionKind; + public abstract get kind(): ASTComparativeExpressionKind; + public abstract get ruleName(): ParserComparativeExpressionRuleName; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts index 8a008d5c6..c487acc13 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts @@ -12,7 +12,7 @@ import type { EqualityExpressionTypeSemantics } from "../../../type-data"; import type { Expression } from "../expression"; import { ComparativeExpression } from "./comparative-expression"; import { CheckedType } from "../../../../analysis"; -import { EqualityExpressionContext, ParserASTMapping } from "../../../../parser"; +import { EqualityExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { KipperEqualityOperator, kipperEqualityOperators } from "../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; @@ -38,14 +38,41 @@ export class EqualityExpression extends ComparativeExpression< */ protected override readonly _antlrRuleCtx: EqualityExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_equalityExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_equalityExpression; + public override get kind() { + return EqualityExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return EqualityExpression.ruleName; + } constructor(antlrRuleCtx: EqualityExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts index 4e73dc56c..50c6870cb 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts @@ -17,7 +17,7 @@ import type { RelationalExpressionSemantics } from "../../../semantic-data"; import type { RelationalExpressionTypeSemantics } from "../../../type-data"; import type { Expression } from "../expression"; import { ComparativeExpression } from "./comparative-expression"; -import { ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, RelationalExpressionContext } from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; import { KipperRelationalOperator, kipperRelationalOperators } from "../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; @@ -50,14 +50,41 @@ export class RelationalExpression extends ComparativeExpression< */ protected override readonly _antlrRuleCtx: RelationalExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_relationalExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_relationalExpression; + public override get kind() { + return RelationalExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return RelationalExpression.ruleName; + } constructor(antlrRuleCtx: RelationalExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts index 3da0d73bd..261db0428 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts @@ -10,7 +10,7 @@ import type { ConditionalExpressionSemantics } from "../../semantic-data"; import type { CompilableASTNode } from "../../compilable-ast-node"; import type { ConditionalExpressionTypeSemantics } from "../../type-data"; import { Expression } from "./expression"; -import { ConditionalExpressionContext, ParserASTMapping } from "../../../parser"; +import { ConditionalExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; import { KipperNotImplementedError } from "../../../../errors"; /** @@ -32,14 +32,41 @@ export class ConditionalExpression extends Expression< */ protected override readonly _antlrRuleCtx: ConditionalExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_conditionalExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_conditionalExpression; + public override get kind() { + return ConditionalExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return ConditionalExpression.ruleName; + } constructor(antlrRuleCtx: ConditionalExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts index 6299d074d..5f9715e78 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts @@ -11,7 +11,7 @@ import type { ExpressionTypeSemantics } from "../../type-data"; import { TranslatedExpression } from "../../../const"; import { MissingRequiredSemanticDataError } from "../../../../errors"; import { CompilableASTNode } from "../../compilable-ast-node"; -import { ASTExpressionKind, ParserExpressionContext } from "../../ast-types"; +import { ASTExpressionKind, ASTExpressionRuleName, ParserExpressionContext } from "../../common"; /** * The base abstract AST node class for all expressions, which wrap their corresponding @@ -37,10 +37,21 @@ export abstract class Expression< * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public abstract readonly kind: ASTExpressionKind; + public abstract get kind(): ASTExpressionKind; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public abstract get ruleName(): ASTExpressionRuleName; protected constructor(antlrRuleCtx: ParserExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts index 31e65b49c..3b8592a13 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts @@ -11,7 +11,7 @@ import type { FunctionCallExpressionTypeSemantics } from "../../type-data"; import type { CompilableASTNode } from "../../compilable-ast-node"; import type { KipperReferenceableFunction } from "../../../const"; import { Expression } from "./expression"; -import { FunctionCallExpressionContext, ParserASTMapping } from "../../../parser"; +import { FunctionCallExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../errors"; import { CheckedType } from "../../../analysis"; @@ -34,14 +34,41 @@ export class FunctionCallExpression extends Expression< */ protected override readonly _antlrRuleCtx: FunctionCallExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_functionCallExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_functionCallExpression; + public override get kind() { + return FunctionCallExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return FunctionCallExpression.ruleName; + } constructor(antlrRuleCtx: FunctionCallExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts index 794747071..e1efe4186 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts @@ -12,7 +12,7 @@ import type { LogicalAndExpressionSemantics } from "../../../semantic-data"; import type { LogicalAndExpressionTypeSemantics } from "../../../type-data"; import type { Expression } from "../expression"; import { LogicalExpression } from "./logical-expression"; -import { LogicalAndExpressionContext, ParserASTMapping } from "../../../../parser"; +import { KindParseRuleMapping, LogicalAndExpressionContext, ParseRuleKindMapping } from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { CheckedType } from "../../../../analysis"; @@ -38,14 +38,41 @@ export class LogicalAndExpression extends LogicalExpression< */ protected override readonly _antlrRuleCtx: LogicalAndExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_logicalAndExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_logicalAndExpression; + public override get kind() { + return LogicalAndExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return LogicalAndExpression.ruleName; + } constructor(antlrRuleCtx: LogicalAndExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts index 9acb8dbb6..97885d643 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts @@ -4,25 +4,36 @@ * abstract class only exists to provide the commonality between the different logical expressions. * @abstract */ -import type { EqualityExpressionContext, ParserASTMapping, RelationalExpressionContext } from "../../../../parser"; +import type { ParseRuleKindMapping } from "../../../../parser"; +import { KindParseRuleMapping } from "../../../../parser"; import type { LogicalExpressionSemantics } from "../../../semantic-data"; import type { LogicalExpressionTypeSemantics } from "../../../type-data"; import { Expression } from "../expression"; +import { ASTNodeMapper } from "../../../mapping"; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link LogicalExpression} AST node. + * @since 0.10.0 + */ +export type ASTLogicalExpressionKind = + | typeof ParseRuleKindMapping.RULE_logicalAndExpression + | typeof ParseRuleKindMapping.RULE_logicalOrExpression; /** * Union type of all possible {@link ParserASTNode.kind} context classes for a constructable * {@link LogicalExpression} AST node. * @since 0.10.0 */ -export type ParserLogicalExpressionContext = EqualityExpressionContext | RelationalExpressionContext; +export type ParserLogicalExpressionContext = InstanceType< + typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTLogicalExpressionKind] +>; /** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link LogicalExpression} AST node. - * @since 0.10.0 + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link LogicalExpression} + * AST node. + * @since 0.11.0 */ -export type ASTLogicalExpressionKind = - | typeof ParserASTMapping.RULE_logicalAndExpression - | typeof ParserASTMapping.RULE_logicalOrExpression; +export type ParserLogicalExpressionRuleName = typeof KindParseRuleMapping[ASTLogicalExpressionKind]; /** * Logical expression, representing an expression which can be used to combine two expressions/conditions using @@ -35,5 +46,6 @@ export abstract class LogicalExpression< TypeSemantics extends LogicalExpressionTypeSemantics = LogicalExpressionTypeSemantics, > extends Expression { protected abstract readonly _antlrRuleCtx: ParserLogicalExpressionContext; - public abstract readonly kind: ASTLogicalExpressionKind; + public abstract get kind(): ASTLogicalExpressionKind; + public abstract get ruleName(): ParserLogicalExpressionRuleName; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts index 1916dfce4..7c3309749 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts @@ -12,7 +12,7 @@ import type { LogicalOrExpressionSemantics } from "../../../semantic-data"; import type { LogicalOrExpressionTypeSemantics } from "../../../type-data"; import type { Expression } from "../expression"; import { LogicalExpression } from "./logical-expression"; -import { LogicalOrExpressionContext, ParserASTMapping } from "../../../../parser"; +import { KindParseRuleMapping, LogicalOrExpressionContext, ParseRuleKindMapping } from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { kipperLogicalOrOperator } from "../../../../const"; @@ -39,14 +39,41 @@ export class LogicalOrExpression extends LogicalExpression< */ protected override readonly _antlrRuleCtx: LogicalOrExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_logicalOrExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_logicalOrExpression; + public override get kind() { + return LogicalOrExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return LogicalOrExpression.ruleName; + } constructor(antlrRuleCtx: LogicalOrExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts index 267e137d5..11f2eb0ac 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts @@ -4,14 +4,15 @@ * @since 0.10.0 */ import type { SliceNotationContext, SliceNotationMemberAccessExpressionContext } from "../../../parser"; -import type { MemberAccessExpressionSemantics } from "../../semantic-data"; -import type { MemberAccessExpressionTypeSemantics } from "../../type-data"; -import type { CompilableASTNode } from "../../compilable-ast-node"; import { BracketNotationMemberAccessExpressionContext, DotNotationMemberAccessExpressionContext, - ParserASTMapping, + KindParseRuleMapping, + ParseRuleKindMapping } from "../../../parser"; +import type { MemberAccessExpressionSemantics } from "../../semantic-data"; +import type { MemberAccessExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../compilable-ast-node"; import { Expression } from "./expression"; import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../errors"; import { kipperInternalBuiltInFunctions } from "../../../runtime-built-ins"; @@ -41,12 +42,41 @@ export class MemberAccessExpression extends Expression< */ protected override readonly _antlrRuleCtx: MemberAccessExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_memberAccessExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_memberAccessExpression; + public override get kind() { + return MemberAccessExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return MemberAccessExpression.ruleName; + } constructor(antlrRuleCtx: MemberAccessExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts index 4f4da2bc8..ef375381d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts @@ -9,7 +9,11 @@ import type { IncrementOrDecrementPostfixExpressionSemantics } from "../../../se import type { IncrementOrDecrementPostfixExpressionTypeSemantics } from "../../../type-data"; import type { KipperIncrementOrDecrementOperator } from "../../../../const"; import { Expression } from "../expression"; -import { IncrementOrDecrementPostfixExpressionContext, ParserASTMapping } from "../../../../parser"; +import { + IncrementOrDecrementPostfixExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping +} from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { CheckedType } from "../../../../analysis"; @@ -32,14 +36,41 @@ export class IncrementOrDecrementPostfixExpression extends Expression< */ protected override readonly _antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementPostfixExpression; + public override get kind() { + return IncrementOrDecrementPostfixExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return IncrementOrDecrementPostfixExpression.ruleName; + } constructor(antlrRuleCtx: IncrementOrDecrementPostfixExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts index 5368b24f0..565021d11 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts @@ -6,7 +6,11 @@ import type { ArrayLiteralPrimaryExpressionSemantics } from "../../../../semanti import type { ArrayLiteralPrimaryExpressionTypeSemantics } from "../../../../type-data"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { ConstantExpression } from "./constant-expression"; -import { ArrayLiteralPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { + ArrayLiteralPrimaryExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping +} from "../../../../../parser"; import { CheckedType } from "../../../../../analysis"; /** @@ -24,14 +28,41 @@ export class ArrayLiteralPrimaryExpression extends ConstantExpression< */ protected override readonly _antlrRuleCtx: ArrayLiteralPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_arrayLiteralPrimaryExpression; + public override get kind() { + return ArrayLiteralPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return ArrayLiteralPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: ArrayLiteralPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts index d1cb1d2f1..7a4bff027 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts @@ -7,7 +7,7 @@ import type { BoolPrimaryExpressionTypeSemantics } from "../../../../type-data"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { KipperBoolTypeLiterals } from "../../../../../const"; import { ConstantExpression } from "./constant-expression"; -import { BoolPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { BoolPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { CheckedType } from "../../../../../analysis"; /** @@ -25,14 +25,41 @@ export class BoolPrimaryExpression extends ConstantExpression< */ protected override readonly _antlrRuleCtx: BoolPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_boolPrimaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_boolPrimaryExpression; + public override get kind() { + return BoolPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return BoolPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: BoolPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts index ec2a921a0..a8161ed95 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts @@ -5,37 +5,36 @@ */ import type { ConstantExpressionSemantics } from "../../../../semantic-data"; import type { ExpressionTypeSemantics } from "../../../../type-data"; -import type { - ArrayLiteralPrimaryExpressionContext, - BoolPrimaryExpressionContext, - NumberPrimaryExpressionContext, - ParserASTMapping, - StringPrimaryExpressionContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, -} from "../../../../../parser"; +import type { ParseRuleKindMapping } from "../../../../../parser"; +import { KindParseRuleMapping } from "../../../../../parser"; import { Expression } from "../../expression"; +import { ASTNodeMapper } from "../../../../mapping"; /** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. * @since 0.10.0 */ -export type ParserConstantExpressionContext = - | NumberPrimaryExpressionContext - | StringPrimaryExpressionContext - | BoolPrimaryExpressionContext - | VoidOrNullOrUndefinedPrimaryExpressionContext - | ArrayLiteralPrimaryExpressionContext; +export type ASTConstantExpressionKind = + | typeof ParseRuleKindMapping.RULE_numberPrimaryExpression + | typeof ParseRuleKindMapping.RULE_stringPrimaryExpression + | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression + | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression + | typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression; /** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. * @since 0.10.0 */ -export type ASTConstantExpressionKind = - | typeof ParserASTMapping.RULE_numberPrimaryExpression - | typeof ParserASTMapping.RULE_stringPrimaryExpression - | typeof ParserASTMapping.RULE_boolPrimaryExpression - | typeof ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression - | typeof ParserASTMapping.RULE_arrayLiteralPrimaryExpression; +export type ParserConstantExpressionContext = InstanceType< + typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTConstantExpressionKind] +>; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link ConstantExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserConstantExpressionRuleName = typeof KindParseRuleMapping[ASTConstantExpressionKind]; /** * Abstract constant expression class representing a constant expression, which was defined in the source code. This @@ -47,5 +46,6 @@ export abstract class ConstantExpression< TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, > extends Expression { protected abstract readonly _antlrRuleCtx: ParserConstantExpressionContext; - public abstract readonly kind: ASTConstantExpressionKind; + public abstract get kind(): ASTConstantExpressionKind; + public abstract get ruleName(): ParserConstantExpressionRuleName; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts index 87361e2d0..d61b819f7 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts @@ -6,7 +6,7 @@ import type { NumberPrimaryExpressionSemantics } from "../../../../semantic-data import type { NumberPrimaryExpressionTypeSemantics } from "../../../../type-data"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { ConstantExpression } from "./constant-expression"; -import { NumberPrimaryExpressionContext, ParserASTMapping } from "../../../../../parser"; +import { KindParseRuleMapping, NumberPrimaryExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; import { CheckedType } from "../../../../../analysis"; /** @@ -24,14 +24,41 @@ export class NumberPrimaryExpression extends ConstantExpression< */ protected override readonly _antlrRuleCtx: NumberPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_numberPrimaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_numberPrimaryExpression; + public override get kind() { + return NumberPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return NumberPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: NumberPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts index 6762dc670..25955dd8d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts @@ -6,7 +6,7 @@ import type { StringPrimaryExpressionSemantics } from "../../../../semantic-data import type { StringPrimaryExpressionTypeSemantics } from "../../../../type-data"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { ConstantExpression } from "./constant-expression"; -import { ParserASTMapping, StringPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, StringPrimaryExpressionContext } from "../../../../../parser"; import { CheckedType } from "../../../../../analysis"; /** @@ -24,14 +24,41 @@ export class StringPrimaryExpression extends ConstantExpression< */ protected override readonly _antlrRuleCtx: StringPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_stringPrimaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_stringPrimaryExpression; + public override get kind() { + return StringPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return StringPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: StringPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts index b4f22ee2c..427909023 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts @@ -6,7 +6,11 @@ import type { VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics } from "../../ */ import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../const"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import { ParserASTMapping, VoidOrNullOrUndefinedPrimaryExpressionContext } from "../../../../../parser"; +import { + KindParseRuleMapping, + ParseRuleKindMapping, + VoidOrNullOrUndefinedPrimaryExpressionContext +} from "../../../../../parser"; import { CheckedType } from "../../../../../analysis"; import { ConstantExpression } from "./constant-expression"; @@ -25,14 +29,41 @@ export class VoidOrNullOrUndefinedPrimaryExpression extends ConstantExpression< */ protected override readonly _antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_voidOrNullOrUndefinedPrimaryExpression; + public override get kind() { + return VoidOrNullOrUndefinedPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return VoidOrNullOrUndefinedPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: VoidOrNullOrUndefinedPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts index 9a3320cf8..7963ef9c2 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts @@ -10,11 +10,12 @@ import { FStringDoubleQuoteAtomContext, FStringPrimaryExpressionContext, FStringSingleQuoteAtomContext, - ParserASTMapping, + KindParseRuleMapping, + ParseRuleKindMapping } from "../../../../parser"; import { CompilableASTNode } from "../../../compilable-ast-node"; import { CheckedType } from "../../../../analysis"; -import { getParseRuleSource } from "../../../../../utils"; +import { getParseRuleSource } from "../../../../../tools"; /** * F-String class, which represents an f-string expression in the Kipper language. F-Strings are a way to automatically @@ -32,14 +33,41 @@ export class FStringPrimaryExpression extends Expression< */ protected override readonly _antlrRuleCtx: FStringPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_fStringPrimaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_fStringPrimaryExpression; + public override get kind() { + return FStringPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return FStringPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: FStringPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts index 4d8b11151..0790a04d3 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts @@ -8,7 +8,7 @@ import type { IdentifierPrimaryExpressionSemantics } from "../../../semantic-dat import type { IdentifierPrimaryExpressionTypeSemantics } from "../../../type-data"; import type { CompilableASTNode } from "../../../compilable-ast-node"; import { Expression } from "../expression"; -import { IdentifierPrimaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { IdentifierPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { CheckedType, ScopeDeclaration } from "../../../../analysis"; import { AssignmentExpression } from "../assignment-expression"; @@ -29,14 +29,41 @@ export class IdentifierPrimaryExpression extends Expression< */ protected override readonly _antlrRuleCtx: IdentifierPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_identifierPrimaryExpression; + public override get kind() { + return IdentifierPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return IdentifierPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: IdentifierPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts index 73f0b7756..964e3c1ae 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts @@ -9,7 +9,7 @@ import type { TangledPrimaryExpressionSemantics } from "../../semantic-data"; import type { TangledPrimaryTypeSemantics } from "../../type-data"; import type { CompilableASTNode } from "../../compilable-ast-node"; import { Expression } from "./expression"; -import { ParserASTMapping, TangledPrimaryExpressionContext } from "../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, TangledPrimaryExpressionContext } from "../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../errors"; /** @@ -30,14 +30,41 @@ export class TangledPrimaryExpression extends Expression< */ protected override readonly _antlrRuleCtx: TangledPrimaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_tangledPrimaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_tangledPrimaryExpression; + public override get kind() { + return TangledPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return TangledPrimaryExpression.ruleName; + } constructor(antlrRuleCtx: TangledPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts index 1b7d59837..31951ce20 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts @@ -8,7 +8,7 @@ import type { GenericTypeSpecifierExpressionSemantics } from "../../../semantic- import type { GenericTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; import type { CompilableASTNode } from "../../../compilable-ast-node"; import { TypeSpecifierExpression } from "./type-specifier-expression"; -import { GenericTypeSpecifierContext, ParserASTMapping } from "../../../../parser"; +import { GenericTypeSpecifierExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { KipperNotImplementedError } from "../../../../../errors"; /** @@ -26,18 +26,45 @@ export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< * which is returned inside the {@link this.antlrRuleCtx}. * @private */ - protected override readonly _antlrRuleCtx: GenericTypeSpecifierContext; + protected override readonly _antlrRuleCtx: GenericTypeSpecifierExpressionContext; + + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_genericTypeSpecifierExpression; /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_genericTypeSpecifier; + public override get kind() { + return GenericTypeSpecifierExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return GenericTypeSpecifierExpression.ruleName; + } - constructor(antlrRuleCtx: GenericTypeSpecifierContext, parent: CompilableASTNode) { + constructor(antlrRuleCtx: GenericTypeSpecifierExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); this._antlrRuleCtx = antlrRuleCtx; } @@ -77,7 +104,7 @@ export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< /** * The antlr context containing the antlr4 metadata for this expression. */ - public override get antlrRuleCtx(): GenericTypeSpecifierContext { + public override get antlrRuleCtx(): GenericTypeSpecifierExpressionContext { return this._antlrRuleCtx; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts index 08934ec14..e33562a57 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts @@ -11,7 +11,11 @@ import type { IdentifierTypeSpecifierExpressionSemantics } from "../../../semant import type { IdentifierTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; import type { CompilableASTNode } from "../../../compilable-ast-node"; import { TypeSpecifierExpression } from "./type-specifier-expression"; -import { IdentifierTypeSpecifierContext, ParserASTMapping } from "../../../../parser"; +import { + IdentifierTypeSpecifierExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping +} from "../../../../parser"; import { CheckedType, UncheckedType } from "../../../../analysis"; /** @@ -32,18 +36,45 @@ export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< * which is returned inside the {@link this.antlrRuleCtx}. * @private */ - protected override readonly _antlrRuleCtx: IdentifierTypeSpecifierContext; + protected override readonly _antlrRuleCtx: IdentifierTypeSpecifierExpressionContext; + + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression; /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_identifierTypeSpecifier; + public override get kind() { + return IdentifierTypeSpecifierExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return IdentifierTypeSpecifierExpression.ruleName; + } - constructor(antlrRuleCtx: IdentifierTypeSpecifierContext, parent: CompilableASTNode) { + constructor(antlrRuleCtx: IdentifierTypeSpecifierExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); this._antlrRuleCtx = antlrRuleCtx; } @@ -89,7 +120,7 @@ export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< /** * The antlr context containing the antlr4 metadata for this expression. */ - public override get antlrRuleCtx(): IdentifierTypeSpecifierContext { + public override get antlrRuleCtx(): IdentifierTypeSpecifierExpressionContext { return this._antlrRuleCtx; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts index 0b0df8b5b..762e4fbef 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts @@ -4,32 +4,36 @@ * @since 0.9.0 */ import type { TypeSpecifierExpressionSemantics } from "../../../semantic-data"; -import type { - GenericTypeSpecifierContext, - IdentifierTypeSpecifierContext, - ParserASTMapping, - TypeofTypeSpecifierContext, -} from "../../../../parser"; +import type { ParseRuleKindMapping } from "../../../../parser"; +import { KindParseRuleMapping } from "../../../../parser"; import type { TypeSpecifierExpressionTypeSemantics } from "../../../type-data"; import { Expression } from "../expression"; +import { ASTNodeMapper } from "../../../mapping"; /** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link TypeSpecifierExpression} AST node. * @since 0.10.0 */ -export type ParserTypeSpecifierExpressionContext = - | IdentifierTypeSpecifierContext - | GenericTypeSpecifierContext - | TypeofTypeSpecifierContext; +export type ASTTypeSpecifierExpressionKind = + | typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression + | typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression + | typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression; /** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link TypeSpecifierExpression} AST node. + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link TypeSpecifierExpression} + * AST node. * @since 0.10.0 */ -export type ASTTypeSpecifierExpressionKind = - | typeof ParserASTMapping.RULE_identifierTypeSpecifier - | typeof ParserASTMapping.RULE_genericTypeSpecifier - | typeof ParserASTMapping.RULE_typeofTypeSpecifier; +export type ParserTypeSpecifierExpressionContext = InstanceType< + typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTTypeSpecifierExpressionKind] +>; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link TypeSpecifierExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserTypeSpecifierExpressionRuleName = typeof KindParseRuleMapping[ASTTypeSpecifierExpressionKind]; /** * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the @@ -41,5 +45,6 @@ export abstract class TypeSpecifierExpression< TypeSemantics extends TypeSpecifierExpressionTypeSemantics = TypeSpecifierExpressionTypeSemantics, > extends Expression { protected abstract readonly _antlrRuleCtx: ParserTypeSpecifierExpressionContext; - public abstract readonly kind: ASTTypeSpecifierExpressionKind; + public abstract get kind(): ASTTypeSpecifierExpressionKind; + public abstract get ruleName(): ParserTypeSpecifierExpressionRuleName; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts index efb185e43..46da4f391 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts @@ -6,7 +6,7 @@ import type { TypeofTypeSpecifierExpressionSemantics } from "../../../semantic-d import type { TypeofTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; import type { CompilableASTNode } from "../../../compilable-ast-node"; import { TypeSpecifierExpression } from "./type-specifier-expression"; -import { ParserASTMapping, TypeofTypeSpecifierContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, TypeofTypeSpecifierExpressionContext } from "../../../../parser"; import { KipperNotImplementedError } from "../../../../../errors"; /** @@ -22,18 +22,45 @@ export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< * which is returned inside the {@link this.antlrRuleCtx}. * @private */ - protected override readonly _antlrRuleCtx: TypeofTypeSpecifierContext; + protected override readonly _antlrRuleCtx: TypeofTypeSpecifierExpressionContext; + + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression; /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_typeofTypeSpecifier; + public override get kind() { + return TypeofTypeSpecifierExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return TypeofTypeSpecifierExpression.ruleName; + } - constructor(antlrRuleCtx: TypeofTypeSpecifierContext, parent: CompilableASTNode) { + constructor(antlrRuleCtx: TypeofTypeSpecifierExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); this._antlrRuleCtx = antlrRuleCtx; } @@ -73,7 +100,7 @@ export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< /** * The antlr context containing the antlr4 metadata for this expression. */ - public override get antlrRuleCtx(): TypeofTypeSpecifierContext { + public override get antlrRuleCtx(): TypeofTypeSpecifierExpressionContext { return this._antlrRuleCtx; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts index 09e4ea6f0..6aaa95090 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts @@ -11,7 +11,11 @@ import type { CompilableASTNode } from "../../../compilable-ast-node"; import type { Expression } from "../expression"; import type { KipperIncrementOrDecrementOperator } from "../../../../const"; import { UnaryExpression } from "./unary-expression"; -import { IncrementOrDecrementUnaryExpressionContext, ParserASTMapping } from "../../../../parser"; +import { + IncrementOrDecrementUnaryExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping +} from "../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { CheckedType } from "../../../../analysis"; @@ -33,14 +37,41 @@ export class IncrementOrDecrementUnaryExpression extends UnaryExpression< */ protected override readonly _antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_incrementOrDecrementUnaryExpression; + public override get kind() { + return IncrementOrDecrementUnaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return IncrementOrDecrementUnaryExpression.ruleName; + } constructor(antlrRuleCtx: IncrementOrDecrementUnaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts index 8fe175ef7..92eb22024 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts @@ -11,7 +11,12 @@ import type { OperatorModifiedUnaryTypeSemantics } from "../../../type-data"; import type { CompilableASTNode } from "../../../compilable-ast-node"; import type { Expression } from "../expression"; import { UnaryExpression } from "./unary-expression"; -import { OperatorModifiedUnaryExpressionContext, ParserASTMapping, UnaryOperatorContext } from "../../../../parser"; +import { + KindParseRuleMapping, + OperatorModifiedUnaryExpressionContext, + ParseRuleKindMapping, + UnaryOperatorContext +} from "../../../../parser"; import { KipperNegateOperator, KipperSignOperator, kipperUnaryModifierOperators } from "../../../../const"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { CheckedType } from "../../../../analysis"; @@ -35,14 +40,41 @@ export class OperatorModifiedUnaryExpression extends UnaryExpression< */ protected override readonly _antlrRuleCtx: OperatorModifiedUnaryExpressionContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link ParserASTMapping.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = ParserASTMapping.RULE_operatorModifiedUnaryExpression; + public override get kind() { + return OperatorModifiedUnaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return OperatorModifiedUnaryExpression.ruleName; + } constructor(antlrRuleCtx: OperatorModifiedUnaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts index 581636b0c..f46bfeecd 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts @@ -6,28 +6,33 @@ */ import type { UnaryExpressionSemantics } from "../../../semantic-data"; import type { UnaryExpressionTypeSemantics } from "../../../type-data"; -import type { - IncrementOrDecrementUnaryExpressionContext, - OperatorModifiedUnaryExpressionContext, - ParserASTMapping, -} from "../../../../parser"; +import type { ParseRuleKindMapping } from "../../../../parser"; +import { KindParseRuleMapping } from "../../../../parser"; import { Expression } from "../expression"; +import { ASTNodeMapper } from "../../../mapping"; /** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link UnaryExpression} AST node. + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link UnaryExpression} AST node. * @since 0.10.0 */ -export type ParserUnaryExpressionContext = - | IncrementOrDecrementUnaryExpressionContext - | OperatorModifiedUnaryExpressionContext; +export type ASTUnaryExpressionKind = + | typeof ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression + | typeof ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression; /** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link UnaryExpression} AST node. + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link UnaryExpression} AST node. * @since 0.10.0 */ -export type ASTUnaryExpressionKind = - | typeof ParserASTMapping.RULE_incrementOrDecrementUnaryExpression - | typeof ParserASTMapping.RULE_operatorModifiedUnaryExpression; +export type ParserUnaryExpressionContext = InstanceType< + typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTUnaryExpressionKind] +>; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link UnaryExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserUnaryExpressionRuleName = typeof KindParseRuleMapping[ASTUnaryExpressionKind]; /** * Abstract unary expression class representing a unary expression, which can be used to modify an expression with @@ -40,5 +45,6 @@ export abstract class UnaryExpression< TypeSemantics extends UnaryExpressionTypeSemantics = UnaryExpressionTypeSemantics, > extends Expression { protected abstract readonly _antlrRuleCtx: ParserUnaryExpressionContext; - public abstract readonly kind: ASTUnaryExpressionKind; + public abstract get kind(): ASTUnaryExpressionKind; + public abstract get ruleName(): ParserUnaryExpressionRuleName; } diff --git a/kipper/core/src/compiler/ast/nodes/index.ts b/kipper/core/src/compiler/ast/nodes/index.ts index b19c04ef9..06e2cc301 100644 --- a/kipper/core/src/compiler/ast/nodes/index.ts +++ b/kipper/core/src/compiler/ast/nodes/index.ts @@ -1,3 +1,8 @@ +/** + * Module containing all the AST node classes. + * @since 0.10.0 + */ export * from "./declarations"; export * from "./expressions"; export * from "./statements"; +export * from "./root-ast-node"; diff --git a/kipper/core/src/compiler/ast/root-ast-node.ts b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts similarity index 79% rename from kipper/core/src/compiler/ast/root-ast-node.ts rename to kipper/core/src/compiler/ast/nodes/root-ast-node.ts index f3630520d..b2260cee7 100644 --- a/kipper/core/src/compiler/ast/root-ast-node.ts +++ b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts @@ -2,23 +2,23 @@ * The root node of an abstract syntax tree, which contains all AST nodes of a file. * @since 0.8.0 */ -import type { NoSemantics, NoTypeSemantics } from "./ast-node"; -import { ParserASTNode } from "./ast-node"; +import type { NoSemantics, NoTypeSemantics } from "../ast-node"; +import { ParserASTNode } from "../ast-node"; import type { KipperCompileTarget, KipperTargetCodeGenerator, KipperTargetSemanticAnalyser, TargetSetUpCodeGenerator, - TargetWrapUpCodeGenerator, -} from "../target-presets"; -import type { EvaluatedCompileConfig } from "../compile-config"; -import type { KipperProgramContext } from "../program-ctx"; -import type { Declaration } from "./nodes/declarations/"; -import type { Statement } from "./nodes"; -import type { TranslatedCodeLine } from "../const"; -import { KipperError } from "../../errors"; -import { CompilationUnitContext, KipperParser } from "../parser"; -import { handleSemanticError } from "../analysis"; + TargetWrapUpCodeGenerator +} from "../../target-presets"; +import type { EvaluatedCompileConfig } from "../../compile-config"; +import type { KipperProgramContext } from "../../program-ctx"; +import type { Declaration } from "./declarations"; +import type { Statement } from "./index"; +import type { TranslatedCodeLine } from "../../const"; +import { KipperError } from "../../../errors"; +import { CompilationUnitContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../parser"; +import { handleSemanticError } from "../../analysis"; /** * The root node of an abstract syntax tree, which contains all AST nodes of a file. @@ -30,14 +30,41 @@ export class RootASTNode extends ParserASTNode { protected readonly _parent: undefined; protected readonly _children: Array; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_compilationUnit; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. * @since 0.10.0 */ - public override readonly kind = KipperParser.RULE_compilationUnit; + public override get kind() { + return RootASTNode.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return RootASTNode.ruleName; + } constructor(programCtx: KipperProgramContext, antlrCtx: CompilationUnitContext) { super(antlrCtx, undefined); diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts index 3bbec3892..aa17d79e4 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts @@ -7,7 +7,7 @@ import type { ScopeNode } from "../../scope-node"; import type { CompilableNodeParent } from "../../compilable-ast-node"; import { Statement } from "./statement"; import { LocalScope } from "../../../analysis"; -import { CompoundStatementContext, KipperParser } from "../../../parser"; +import { CompoundStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; /** * Compound statement class, which represents a compound statement containing other items in the Kipper @@ -21,14 +21,41 @@ export class CompoundStatement extends Statement i */ protected override readonly _antlrRuleCtx: CompoundStatementContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_compoundStatement; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. * @since 0.10.0 */ - public override readonly kind = KipperParser.RULE_compoundStatement; + public override get kind() { + return CompoundStatement.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. + * @since 0.11.0 + */ + public override get ruleName() { + return CompoundStatement.ruleName; + } protected readonly _children: Array; diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts index c1bd16d7d..6658cec0b 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts @@ -4,7 +4,7 @@ import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; import type { CompilableNodeParent } from "../../compilable-ast-node"; import { Statement } from "./statement"; -import { ExpressionStatementContext, KipperParser } from "../../../parser"; +import { ExpressionStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; import { Expression } from "../expressions"; /** @@ -18,14 +18,41 @@ export class ExpressionStatement extends Statement */ protected override readonly _antlrRuleCtx: ExpressionStatementContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_expressionStatement; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. * @since 0.10.0 */ - public override readonly kind = KipperParser.RULE_expressionStatement; + public override get kind() { + return ExpressionStatement.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. + * @since 0.11.0 + */ + public override get ruleName() { + return ExpressionStatement.ruleName; + } protected readonly _children: Array; diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts index e6885c72a..81a666ed4 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts @@ -6,7 +6,7 @@ import type { NoTypeSemantics } from "../../ast-node"; import type { CompilableNodeParent } from "../../compilable-ast-node"; import type { IfStatementSemantics } from "../../semantic-data"; import { Statement } from "./statement"; -import { IfStatementContext, KipperParser } from "../../../parser"; +import { IfStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; import { Expression } from "../expressions"; import { UnableToDetermineSemanticDataError } from "../../../../errors"; @@ -22,14 +22,41 @@ export class IfStatement extends Statement; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-iteration-statement.ts similarity index 72% rename from kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-iteration-statement.ts index 3cb749150..b58ad3868 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-iteration-statement.ts @@ -5,14 +5,14 @@ import type { DoWhileLoopStatementSemantics } from "../../../semantic-data"; import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; import { IterationStatement } from "./iteration-statement"; -import { DoWhileLoopIterationStatementContext, KipperParser } from "../../../../parser"; +import { DoWhileLoopIterationStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { KipperNotImplementedError } from "../../../../../errors"; /** * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -export class DoWhileLoopStatement extends IterationStatement { +export class DoWhileLoopIterationStatement extends IterationStatement { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. @@ -20,14 +20,41 @@ export class DoWhileLoopStatement extends IterationStatement; @@ -86,6 +113,6 @@ export class DoWhileLoopStatement extends IterationStatement implements ScopeNode { @@ -35,14 +35,41 @@ export class ForLoopStatement */ protected override readonly _antlrRuleCtx: ForLoopIterationStatementContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_forLoopIterationStatement; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. * @since 0.10.0 */ - public override readonly kind = KipperParser.RULE_forLoopIterationStatement; + public override get kind() { + return ForLoopIterationStatement.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. + * @since 0.11.0 + */ + public override get ruleName() { + return ForLoopIterationStatement.ruleName; + } protected readonly _children: Array; @@ -120,6 +147,6 @@ export class ForLoopStatement */ public checkForWarnings = undefined; // TODO! - readonly targetSemanticAnalysis = this.semanticAnalyser.forLoopStatement; - readonly targetCodeGenerator = this.codeGenerator.forLoopStatement; + readonly targetSemanticAnalysis = this.semanticAnalyser.forLoopIterationStatement; + readonly targetCodeGenerator = this.codeGenerator.forLoopIterationStatement; } diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts index 6d8da30bd..8044cfb86 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts @@ -1,4 +1,4 @@ export * from "./iteration-statement"; -export * from "./while-loop-statement"; -export * from "./do-while-loop-statement"; -export * from "./for-loop-statement"; +export * from "./while-loop-iteration-statement"; +export * from "./do-while-loop-iteration-statement"; +export * from "./for-loop-iteration-statement"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts index 1fd7f329c..efb66e57e 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts @@ -2,33 +2,37 @@ * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -import { - DoWhileLoopIterationStatementContext, - ForLoopIterationStatementContext, - KipperParser, - WhileLoopIterationStatementContext, -} from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { IterationStatementSemantics } from "../../../semantic-data"; import { NoTypeSemantics } from "../../../ast-node"; import { Statement } from "../statement"; +import { ASTNodeMapper } from "../../../mapping/ast-node-mapper"; /** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} AST node. + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link MemberAccessExpression} AST + * node. * @since 0.10.0 */ -export type ParserIterationStatementContext = - | ForLoopIterationStatementContext - | WhileLoopIterationStatementContext - | DoWhileLoopIterationStatementContext; +export type ParserIterationStatementKind = + | typeof ParseRuleKindMapping.RULE_forLoopIterationStatement + | typeof ParseRuleKindMapping.RULE_whileLoopIterationStatement + | typeof ParseRuleKindMapping.RULE_doWhileLoopIterationStatement; /** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link MemberAccessExpression} AST node. + * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link MemberAccessExpression} + * AST node. * @since 0.10.0 */ -export type ParserIterationStatementKind = - | typeof KipperParser.RULE_forLoopIterationStatement - | typeof KipperParser.RULE_whileLoopIterationStatement - | typeof KipperParser.RULE_doWhileLoopIterationStatement; +export type ParserIterationStatementContext = InstanceType< + typeof ASTNodeMapper.statementKindToRuleContextMap[ParserIterationStatementKind] +>; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link MemberAccessExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserIterationStatementRuleName = typeof KindParseRuleMapping[ParserIterationStatementKind]; /** * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable @@ -39,5 +43,6 @@ export abstract class IterationStatement< TypeSemantics extends NoTypeSemantics = NoTypeSemantics, > extends Statement { protected abstract readonly _antlrRuleCtx: ParserIterationStatementContext; - public abstract readonly kind: ParserIterationStatementKind; + public abstract get kind(): ParserIterationStatementKind; + public abstract get ruleName(): ParserIterationStatementRuleName; } diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-iteration-statement.ts similarity index 72% rename from kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-iteration-statement.ts index 377727949..7df65aa13 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-iteration-statement.ts @@ -5,7 +5,7 @@ import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; import type { WhileLoopStatementSemantics } from "../../../semantic-data"; import { IterationStatement } from "./iteration-statement"; -import { KipperParser, WhileLoopIterationStatementContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, WhileLoopIterationStatementContext } from "../../../../parser"; import { Expression } from "../../expressions"; import { Statement } from "../statement"; @@ -13,7 +13,7 @@ import { Statement } from "../statement"; * While loop statement class, which represents a while loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -export class WhileLoopStatement extends IterationStatement { +export class WhileLoopIterationStatement extends IterationStatement { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. @@ -21,14 +21,41 @@ export class WhileLoopStatement extends IterationStatement; @@ -88,6 +115,6 @@ export class WhileLoopStatement extends IterationStatement; diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts index 686eec313..93567f71c 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts @@ -7,7 +7,7 @@ import type { ReturnStatementSemantics } from "../../semantic-data"; import type { ReturnStatementTypeSemantics } from "../../type-data"; import { Statement } from "./statement"; import { CheckedType } from "../../../analysis"; -import { KipperParser, ReturnStatementContext } from "../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, ReturnStatementContext } from "../../../parser"; import { Expression } from "../expressions"; /** @@ -22,14 +22,41 @@ export class ReturnStatement extends Statement; diff --git a/kipper/core/src/compiler/ast/nodes/statements/statement.ts b/kipper/core/src/compiler/ast/nodes/statements/statement.ts index 19809e2a2..f4bb98d0a 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/statement.ts @@ -3,10 +3,9 @@ * @since 0.1.0 */ import type { CompilableNodeParent, SemanticData, TypeData } from "../../index"; -import type { ASTStatementKind, ParserStatementContext } from "../../ast-types"; +import type { ASTStatementKind, ASTStatementRuleName, ParserStatementContext } from "../../common"; import type { TranslatedCodeLine } from "../../../const"; import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; -import { KipperParser } from "../../../parser"; import { CompilableASTNode } from "../../compilable-ast-node"; /** @@ -31,10 +30,21 @@ export abstract class Statement< * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. * @since 0.10.0 */ - public abstract readonly kind: ASTStatementKind; + public abstract get kind(): ASTStatementKind; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. + * @since 0.11.0 + */ + public abstract get ruleName(): ASTStatementRuleName; protected constructor(antlrRuleCtx: ParserStatementContext, parent: CompilableNodeParent) { super(antlrRuleCtx, parent); diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts index 0f4a64a1c..e9e9e5c8e 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts @@ -4,7 +4,7 @@ import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; import type { CompilableNodeParent } from "../../compilable-ast-node"; import { Statement } from "./statement"; -import { KipperParser, SwitchStatementContext } from "../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, SwitchStatementContext } from "../../../parser"; import { KipperNotImplementedError } from "../../../../errors"; /** @@ -18,14 +18,41 @@ export class SwitchStatement extends Statement { */ protected override readonly _antlrRuleCtx: SwitchStatementContext; + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_switchStatement; + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. * - * This may be compared using the {@link KipperParser} rule fields, for example {@link KipperParser.RULE_expression}. + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. * @since 0.10.0 */ - public override readonly kind = KipperParser.RULE_switchStatement; + public override get kind() { + return SwitchStatement.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_statement}. + * @since 0.11.0 + */ + public override get ruleName() { + return SwitchStatement.ruleName; + } protected readonly _children: Array; diff --git a/kipper/core/src/compiler/ast/semantic-data/definitions.ts b/kipper/core/src/compiler/ast/semantic-data/definitions.ts index dbcfb4ee3..53cdfc8bd 100644 --- a/kipper/core/src/compiler/ast/semantic-data/definitions.ts +++ b/kipper/core/src/compiler/ast/semantic-data/definitions.ts @@ -5,10 +5,10 @@ import type { SemanticData } from "../ast-node"; import type { KipperStorageType } from "../../const"; import type { Scope } from "../../analysis"; +import { UncheckedType } from "../../analysis"; import type { CompoundStatement, Expression } from "../nodes"; -import type { FunctionDeclaration, ParameterDeclaration } from "../nodes/declarations"; import { IdentifierTypeSpecifierExpression } from "../nodes"; -import { UncheckedType } from "../../analysis"; +import type { FunctionDeclaration, ParameterDeclaration } from "../nodes"; /** * Semantics for a {@link Declaration}. diff --git a/kipper/core/src/compiler/ast/semantic-data/expressions.ts b/kipper/core/src/compiler/ast/semantic-data/expressions.ts index 512edb5fc..bb706f3fc 100644 --- a/kipper/core/src/compiler/ast/semantic-data/expressions.ts +++ b/kipper/core/src/compiler/ast/semantic-data/expressions.ts @@ -19,13 +19,12 @@ import type { KipperUnaryModifierOperator, KipperUnaryOperator, KipperUndefinedType, - KipperVoidType, + KipperVoidType } from "../../const"; import type { SemanticData } from "../ast-node"; import type { Expression, IdentifierPrimaryExpression } from "../nodes"; -import type { Reference } from "../../analysis"; -import type { UncheckedType } from "../../analysis"; import { IdentifierTypeSpecifierExpression } from "../nodes"; +import type { Reference, UncheckedType } from "../../analysis"; /** * Static semantics for an expression class that must be evaluated during the Semantic Analysis. diff --git a/kipper/core/src/compiler/ast/semantic-data/statements.ts b/kipper/core/src/compiler/ast/semantic-data/statements.ts index aca939ecc..c8aee2d0d 100644 --- a/kipper/core/src/compiler/ast/semantic-data/statements.ts +++ b/kipper/core/src/compiler/ast/semantic-data/statements.ts @@ -4,9 +4,9 @@ */ import type { SemanticData } from "../ast-node"; import type { Expression, IfStatement, Statement } from "../nodes"; -import type { JmpStatementType } from "../../const"; -import type { FunctionDeclaration, VariableDeclaration } from "../nodes/declarations"; import { IterationStatement } from "../nodes"; +import type { JmpStatementType } from "../../const"; +import type { FunctionDeclaration, VariableDeclaration } from "../nodes"; /** * Semantics for AST Node {@link IfStatement}. diff --git a/kipper/core/src/compiler/compile-config.ts b/kipper/core/src/compiler/compile-config.ts index 655a3f48a..8a3feba8e 100644 --- a/kipper/core/src/compiler/compile-config.ts +++ b/kipper/core/src/compiler/compile-config.ts @@ -6,7 +6,7 @@ import { BuiltInFunction, BuiltInVariable, kipperRuntimeBuiltInFunctions, - kipperRuntimeBuiltInVariables, + kipperRuntimeBuiltInVariables } from "./runtime-built-ins"; import { KipperCompileTarget } from "./target-presets"; import { defaultOptimisationOptions, OptimisationOptions } from "./optimiser"; @@ -217,7 +217,7 @@ export class EvaluatedCompileConfig implements CompileConfig { * @since 0.10.0 * @private */ - private getConfigOption(option: keyof (typeof EvaluatedCompileConfig)["defaults"], rawConfig: CompileConfig): T { + private getConfigOption(option: keyof typeof EvaluatedCompileConfig["defaults"], rawConfig: CompileConfig): T { if (rawConfig[option] !== undefined) { return rawConfig[option] as T; } diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index 5018e01bb..b22d0d803 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -7,7 +7,7 @@ import type { ScopeFunctionDeclaration, ScopeParameterDeclaration, ScopeVariableDeclaration, - UndefinedCustomType, + UndefinedCustomType } from "./analysis"; import type { BuiltInFunction, BuiltInVariable } from "./runtime-built-ins"; import { InternalFunction } from "./runtime-built-ins"; diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts index 9c366d450..c4e3d155b 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts @@ -5,10 +5,7 @@ import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; -import { Lexer } from "antlr4ts/Lexer"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; -import { NotNull } from "antlr4ts/Decorators"; -import { Override } from "antlr4ts/Decorators"; import { RuleContext } from "antlr4ts/RuleContext"; import { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.interp b/kipper/core/src/compiler/parser/antlr/KipperParser.interp index 8e6017a99..c8c0930f9 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.interp @@ -220,10 +220,10 @@ conditionalExpression assignmentExpression assignmentOperator expression -typeSpecifier -identifierTypeSpecifier -genericTypeSpecifier -typeofTypeSpecifier +typeSpecifierExpression +identifierTypeSpecifierExpression +genericTypeSpecifierExpression +typeofTypeSpecifierExpression typeSpecifierIdentifier diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.ts b/kipper/core/src/compiler/parser/antlr/KipperParser.ts index e3cb2b7b6..284a17991 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.ts @@ -2,19 +2,15 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParserASTMapping, ASTKind } from ".."; +import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; -import { NotNull } from "antlr4ts/Decorators"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; -import { Override } from "antlr4ts/Decorators"; import { Parser } from "antlr4ts/Parser"; import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; import { RecognitionException } from "antlr4ts/RecognitionException"; import { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; @@ -169,10 +165,10 @@ export class KipperParser extends Parser { public static readonly RULE_assignmentExpression = 60; public static readonly RULE_assignmentOperator = 61; public static readonly RULE_expression = 62; - public static readonly RULE_typeSpecifier = 63; - public static readonly RULE_identifierTypeSpecifier = 64; - public static readonly RULE_genericTypeSpecifier = 65; - public static readonly RULE_typeofTypeSpecifier = 66; + public static readonly RULE_typeSpecifierExpression = 63; + public static readonly RULE_identifierTypeSpecifierExpression = 64; + public static readonly RULE_genericTypeSpecifierExpression = 65; + public static readonly RULE_typeofTypeSpecifierExpression = 66; public static readonly RULE_typeSpecifierIdentifier = 67; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ @@ -239,10 +235,10 @@ export class KipperParser extends Parser { "assignmentExpression", "assignmentOperator", "expression", - "typeSpecifier", - "identifierTypeSpecifier", - "genericTypeSpecifier", - "typeofTypeSpecifier", + "typeSpecifierExpression", + "identifierTypeSpecifierExpression", + "genericTypeSpecifierExpression", + "typeofTypeSpecifierExpression", "typeSpecifierIdentifier", ]; @@ -804,7 +800,7 @@ export class KipperParser extends Parser { this.state = 174; this.match(KipperParser.RetIndicator); this.state = 175; - this.typeSpecifier(); + this.typeSpecifierExpression(); this.state = 177; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { @@ -855,8 +851,8 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public storageTypeSpecifier(): StorageTypeSpecifierContext { - let _localctx: StorageTypeSpecifierContext = new StorageTypeSpecifierContext(this._ctx, this.state); + public storageTypeSpecifier(): storageTypeSpecifierContext { + let _localctx: storageTypeSpecifierContext = new storageTypeSpecifierContext(this._ctx, this.state); this.enterRule(_localctx, 16, KipperParser.RULE_storageTypeSpecifier); let _la: number; try { @@ -947,7 +943,7 @@ export class KipperParser extends Parser { this.state = 189; this.match(KipperParser.Colon); this.state = 190; - this.typeSpecifier(); + this.typeSpecifierExpression(); this.state = 193; this._errHandler.sync(this); _la = this._input.LA(1); @@ -1025,7 +1021,7 @@ export class KipperParser extends Parser { this.state = 204; this.match(KipperParser.Colon); this.state = 205; - this.typeSpecifier(); + this.typeSpecifierExpression(); } } catch (re) { if (re instanceof RecognitionException) { @@ -2543,7 +2539,7 @@ export class KipperParser extends Parser { this.state = 396; this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParserASTMapping.RULE_functionCallExpression; + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } break; default: @@ -2614,7 +2610,7 @@ export class KipperParser extends Parser { this.state = 406; this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParserASTMapping.RULE_functionCallExpression; + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } break; @@ -2630,7 +2626,7 @@ export class KipperParser extends Parser { } this.state = 409; this.dotNotation(); - _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression; + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } break; @@ -2646,7 +2642,7 @@ export class KipperParser extends Parser { } this.state = 413; this.bracketNotation(); - _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression; + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } break; @@ -2662,7 +2658,7 @@ export class KipperParser extends Parser { } this.state = 417; this.sliceNotation(); - _localctx._labelASTKind = ParserASTMapping.RULE_memberAccessExpression; + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } break; } @@ -3166,7 +3162,7 @@ export class KipperParser extends Parser { this.state = 478; this.match(KipperParser.As); this.state = 479; - this.typeSpecifier(); + this.typeSpecifierExpression(); } break; } @@ -3858,9 +3854,9 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public typeSpecifier(): TypeSpecifierContext { - let _localctx: TypeSpecifierContext = new TypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 126, KipperParser.RULE_typeSpecifier); + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 126, KipperParser.RULE_typeSpecifierExpression); try { this.state = 578; this._errHandler.sync(this); @@ -3869,7 +3865,7 @@ export class KipperParser extends Parser { this.enterOuterAlt(_localctx, 1); { this.state = 575; - this.identifierTypeSpecifier(); + this.identifierTypeSpecifierExpression(); } break; @@ -3877,7 +3873,7 @@ export class KipperParser extends Parser { this.enterOuterAlt(_localctx, 2); { this.state = 576; - this.genericTypeSpecifier(); + this.genericTypeSpecifierExpression(); } break; @@ -3885,7 +3881,7 @@ export class KipperParser extends Parser { this.enterOuterAlt(_localctx, 3); { this.state = 577; - this.typeofTypeSpecifier(); + this.typeofTypeSpecifierExpression(); } break; } @@ -3903,9 +3899,12 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public identifierTypeSpecifier(): IdentifierTypeSpecifierContext { - let _localctx: IdentifierTypeSpecifierContext = new IdentifierTypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 128, KipperParser.RULE_identifierTypeSpecifier); + public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext { + let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); + this.enterRule(_localctx, 128, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { @@ -3926,9 +3925,12 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public genericTypeSpecifier(): GenericTypeSpecifierContext { - let _localctx: GenericTypeSpecifierContext = new GenericTypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 130, KipperParser.RULE_genericTypeSpecifier); + public genericTypeSpecifierExpression(): GenericTypeSpecifierExpressionContext { + let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); + this.enterRule(_localctx, 130, KipperParser.RULE_genericTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { @@ -3955,9 +3957,12 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public typeofTypeSpecifier(): TypeofTypeSpecifierContext { - let _localctx: TypeofTypeSpecifierContext = new TypeofTypeSpecifierContext(this._ctx, this.state); - this.enterRule(_localctx, 132, KipperParser.RULE_typeofTypeSpecifier); + public typeofTypeSpecifierExpression(): TypeofTypeSpecifierExpressionContext { + let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); + this.enterRule(_localctx, 132, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { @@ -4650,8 +4655,8 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { public RetIndicator(): TerminalNode { return this.getToken(KipperParser.RetIndicator, 0); } - public typeSpecifier(): TypeSpecifierContext { - return this.getRuleContext(0, TypeSpecifierContext); + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); } public parameterList(): ParameterListContext | undefined { return this.tryGetRuleContext(0, ParameterListContext); @@ -4689,8 +4694,8 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { } export class VariableDeclarationContext extends KipperParserRuleContext { - public storageTypeSpecifier(): StorageTypeSpecifierContext { - return this.getRuleContext(0, StorageTypeSpecifierContext); + public storageTypeSpecifier(): storageTypeSpecifierContext { + return this.getRuleContext(0, storageTypeSpecifierContext); } public initDeclarator(): InitDeclaratorContext { return this.getRuleContext(0, InitDeclaratorContext); @@ -4724,7 +4729,7 @@ export class VariableDeclarationContext extends KipperParserRuleContext { } } -export class StorageTypeSpecifierContext extends KipperParserRuleContext { +export class storageTypeSpecifierContext extends KipperParserRuleContext { public Var(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Var, 0); } @@ -4833,8 +4838,8 @@ export class InitDeclaratorContext extends KipperParserRuleContext { public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } - public typeSpecifier(): TypeSpecifierContext { - return this.getRuleContext(0, TypeSpecifierContext); + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); } public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); @@ -4926,8 +4931,8 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } - public typeSpecifier(): TypeSpecifierContext { - return this.getRuleContext(0, TypeSpecifierContext); + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); @@ -6787,8 +6792,8 @@ export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressio public As(): TerminalNode { return this.getToken(KipperParser.As, 0); } - public typeSpecifier(): TypeSpecifierContext { - return this.getRuleContext(0, TypeSpecifierContext); + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); } constructor(ctx: CastOrConvertExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7561,46 +7566,46 @@ export class ExpressionContext extends KipperParserRuleContext { } } -export class TypeSpecifierContext extends KipperParserRuleContext { - public identifierTypeSpecifier(): IdentifierTypeSpecifierContext | undefined { - return this.tryGetRuleContext(0, IdentifierTypeSpecifierContext); +export class TypeSpecifierExpressionContext extends KipperParserRuleContext { + public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext | undefined { + return this.tryGetRuleContext(0, IdentifierTypeSpecifierExpressionContext); } - public genericTypeSpecifier(): GenericTypeSpecifierContext | undefined { - return this.tryGetRuleContext(0, GenericTypeSpecifierContext); + public genericTypeSpecifierExpression(): GenericTypeSpecifierExpressionContext | undefined { + return this.tryGetRuleContext(0, GenericTypeSpecifierExpressionContext); } - public typeofTypeSpecifier(): TypeofTypeSpecifierContext | undefined { - return this.tryGetRuleContext(0, TypeofTypeSpecifierContext); + public typeofTypeSpecifierExpression(): TypeofTypeSpecifierExpressionContext | undefined { + return this.tryGetRuleContext(0, TypeofTypeSpecifierExpressionContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { - return KipperParser.RULE_typeSpecifier; + return KipperParser.RULE_typeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterTypeSpecifier) { - listener.enterTypeSpecifier(this); + if (listener.enterTypeSpecifierExpression) { + listener.enterTypeSpecifierExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitTypeSpecifier) { - listener.exitTypeSpecifier(this); + if (listener.exitTypeSpecifierExpression) { + listener.exitTypeSpecifierExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitTypeSpecifier) { - return visitor.visitTypeSpecifier(this); + if (visitor.visitTypeSpecifierExpression) { + return visitor.visitTypeSpecifierExpression(this); } else { return visitor.visitChildren(this); } } } -export class IdentifierTypeSpecifierContext extends KipperParserRuleContext { +export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); } @@ -7609,31 +7614,31 @@ export class IdentifierTypeSpecifierContext extends KipperParserRuleContext { } // @Override public get ruleIndex(): number { - return KipperParser.RULE_identifierTypeSpecifier; + return KipperParser.RULE_identifierTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterIdentifierTypeSpecifier) { - listener.enterIdentifierTypeSpecifier(this); + if (listener.enterIdentifierTypeSpecifierExpression) { + listener.enterIdentifierTypeSpecifierExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitIdentifierTypeSpecifier) { - listener.exitIdentifierTypeSpecifier(this); + if (listener.exitIdentifierTypeSpecifierExpression) { + listener.exitIdentifierTypeSpecifierExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitIdentifierTypeSpecifier) { - return visitor.visitIdentifierTypeSpecifier(this); + if (visitor.visitIdentifierTypeSpecifierExpression) { + return visitor.visitIdentifierTypeSpecifierExpression(this); } else { return visitor.visitChildren(this); } } } -export class GenericTypeSpecifierContext extends KipperParserRuleContext { +export class GenericTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext[]; public typeSpecifierIdentifier(i: number): TypeSpecifierIdentifierContext; public typeSpecifierIdentifier(i?: number): TypeSpecifierIdentifierContext | TypeSpecifierIdentifierContext[] { @@ -7654,31 +7659,31 @@ export class GenericTypeSpecifierContext extends KipperParserRuleContext { } // @Override public get ruleIndex(): number { - return KipperParser.RULE_genericTypeSpecifier; + return KipperParser.RULE_genericTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterGenericTypeSpecifier) { - listener.enterGenericTypeSpecifier(this); + if (listener.enterGenericTypeSpecifierExpression) { + listener.enterGenericTypeSpecifierExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitGenericTypeSpecifier) { - listener.exitGenericTypeSpecifier(this); + if (listener.exitGenericTypeSpecifierExpression) { + listener.exitGenericTypeSpecifierExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitGenericTypeSpecifier) { - return visitor.visitGenericTypeSpecifier(this); + if (visitor.visitGenericTypeSpecifierExpression) { + return visitor.visitGenericTypeSpecifierExpression(this); } else { return visitor.visitChildren(this); } } } -export class TypeofTypeSpecifierContext extends KipperParserRuleContext { +export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContext { public Typeof(): TerminalNode { return this.getToken(KipperParser.Typeof, 0); } @@ -7696,24 +7701,24 @@ export class TypeofTypeSpecifierContext extends KipperParserRuleContext { } // @Override public get ruleIndex(): number { - return KipperParser.RULE_typeofTypeSpecifier; + return KipperParser.RULE_typeofTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterTypeofTypeSpecifier) { - listener.enterTypeofTypeSpecifier(this); + if (listener.enterTypeofTypeSpecifierExpression) { + listener.enterTypeofTypeSpecifierExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitTypeofTypeSpecifier) { - listener.exitTypeofTypeSpecifier(this); + if (listener.exitTypeofTypeSpecifierExpression) { + listener.exitTypeofTypeSpecifierExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitTypeofTypeSpecifier) { - return visitor.visitTypeofTypeSpecifier(this); + if (visitor.visitTypeofTypeSpecifierExpression) { + return visitor.visitTypeofTypeSpecifierExpression(this); } else { return visitor.visitChildren(this); } diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts index 17337df8f..923b51e5b 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts @@ -2,103 +2,104 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParserASTMapping, ASTKind } from ".."; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { PassOnLogicalAndExpressionContext } from "./KipperParser"; -import { ActualLogicalAndExpressionContext } from "./KipperParser"; -import { ExternalBlockItemContext } from "./KipperParser"; -import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; -import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; -import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; -import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; -import { PassOnAssignmentExpressionContext } from "./KipperParser"; -import { ActualAssignmentExpressionContext } from "./KipperParser"; -import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; -import { ActualCastOrConvertExpressionContext } from "./KipperParser"; -import { PassOnEqualityExpressionContext } from "./KipperParser"; -import { ActualEqualityExpressionContext } from "./KipperParser"; -import { PassOnAdditiveExpressionContext } from "./KipperParser"; -import { ActualAdditiveExpressionContext } from "./KipperParser"; -import { PassOnRelationalExpressionContext } from "./KipperParser"; -import { ActualRelationalExpressionContext } from "./KipperParser"; -import { PassOnConditionalExpressionContext } from "./KipperParser"; -import { ActualConditionalExpressionContext } from "./KipperParser"; -import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; -import { ActualMultiplicativeExpressionContext } from "./KipperParser"; -import { PassOnLogicalOrExpressionContext } from "./KipperParser"; -import { ActualLogicalOrExpressionContext } from "./KipperParser"; -import { CompilationUnitContext } from "./KipperParser"; -import { TranslationUnitContext } from "./KipperParser"; -import { ExternalItemContext } from "./KipperParser"; -import { BlockItemListContext } from "./KipperParser"; -import { BlockItemContext } from "./KipperParser"; -import { DeclarationContext } from "./KipperParser"; -import { FunctionDeclarationContext } from "./KipperParser"; -import { VariableDeclarationContext } from "./KipperParser"; -import { StorageTypeSpecifierContext } from "./KipperParser"; -import { DeclaratorContext } from "./KipperParser"; -import { DirectDeclaratorContext } from "./KipperParser"; -import { InitDeclaratorContext } from "./KipperParser"; -import { ParameterListContext } from "./KipperParser"; -import { ParameterDeclarationContext } from "./KipperParser"; -import { InitializerContext } from "./KipperParser"; -import { StatementContext } from "./KipperParser"; -import { CompoundStatementContext } from "./KipperParser"; -import { ExpressionStatementContext } from "./KipperParser"; -import { SelectionStatementContext } from "./KipperParser"; -import { IfStatementContext } from "./KipperParser"; -import { SwitchStatementContext } from "./KipperParser"; -import { SwitchLabeledStatementContext } from "./KipperParser"; -import { IterationStatementContext } from "./KipperParser"; -import { ForLoopIterationStatementContext } from "./KipperParser"; -import { WhileLoopIterationStatementContext } from "./KipperParser"; -import { DoWhileLoopIterationStatementContext } from "./KipperParser"; -import { JumpStatementContext } from "./KipperParser"; -import { ReturnStatementContext } from "./KipperParser"; -import { PrimaryExpressionContext } from "./KipperParser"; -import { TangledPrimaryExpressionContext } from "./KipperParser"; -import { BoolPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierContext } from "./KipperParser"; -import { StringPrimaryExpressionContext } from "./KipperParser"; -import { FStringPrimaryExpressionContext } from "./KipperParser"; -import { FStringSingleQuoteAtomContext } from "./KipperParser"; -import { FStringDoubleQuoteAtomContext } from "./KipperParser"; -import { NumberPrimaryExpressionContext } from "./KipperParser"; -import { ArrayLiteralPrimaryExpressionContext } from "./KipperParser"; -import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; -import { ComputedPrimaryExpressionContext } from "./KipperParser"; -import { ArgumentExpressionListContext } from "./KipperParser"; -import { DotNotationContext } from "./KipperParser"; -import { BracketNotationContext } from "./KipperParser"; -import { SliceNotationContext } from "./KipperParser"; -import { PostfixExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; -import { UnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; -import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementOperatorContext } from "./KipperParser"; -import { UnaryOperatorContext } from "./KipperParser"; -import { CastOrConvertExpressionContext } from "./KipperParser"; -import { MultiplicativeExpressionContext } from "./KipperParser"; -import { AdditiveExpressionContext } from "./KipperParser"; -import { RelationalExpressionContext } from "./KipperParser"; -import { EqualityExpressionContext } from "./KipperParser"; -import { LogicalAndExpressionContext } from "./KipperParser"; -import { LogicalOrExpressionContext } from "./KipperParser"; -import { ConditionalExpressionContext } from "./KipperParser"; -import { AssignmentExpressionContext } from "./KipperParser"; -import { AssignmentOperatorContext } from "./KipperParser"; -import { ExpressionContext } from "./KipperParser"; -import { TypeSpecifierContext } from "./KipperParser"; -import { IdentifierTypeSpecifierContext } from "./KipperParser"; -import { GenericTypeSpecifierContext } from "./KipperParser"; -import { TypeofTypeSpecifierContext } from "./KipperParser"; -import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { + ActualAdditiveExpressionContext, + ActualAssignmentExpressionContext, + ActualCastOrConvertExpressionContext, + ActualConditionalExpressionContext, + ActualEqualityExpressionContext, + ActualLogicalAndExpressionContext, + ActualLogicalOrExpressionContext, + ActualMultiplicativeExpressionContext, + ActualRelationalExpressionContext, + AdditiveExpressionContext, + ArgumentExpressionListContext, + ArrayLiteralPrimaryExpressionContext, + AssignmentExpressionContext, + AssignmentOperatorContext, + BlockItemContext, + BlockItemListContext, + BoolPrimaryExpressionContext, + BracketNotationContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + CompilationUnitContext, + CompoundStatementContext, + ComputedPrimaryExpressionContext, + ConditionalExpressionContext, + DeclarationContext, + DeclaratorContext, + DirectDeclaratorContext, + DotNotationContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExplicitCallFunctionCallExpressionContext, + ExpressionContext, + ExpressionStatementContext, + ExternalBlockItemContext, + ExternalItemContext, + ForLoopIterationStatementContext, + FStringDoubleQuoteAtomContext, + FStringPrimaryExpressionContext, + FStringSingleQuoteAtomContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementOperatorContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + InitDeclaratorContext, + InitializerContext, + IterationStatementContext, + JumpStatementContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NumberPrimaryExpressionContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParameterListContext, + PassOnAdditiveExpressionContext, + PassOnAssignmentExpressionContext, + PassOnCastOrConvertExpressionContext, + PassOncomputedPrimaryExpressionContext, + PassOnConditionalExpressionContext, + PassOnEqualityExpressionContext, + PassOnLogicalAndExpressionContext, + PassOnLogicalOrExpressionContext, + PassOnMultiplicativeExpressionContext, + PassOnRelationalExpressionContext, + PostfixExpressionContext, + PrimaryExpressionContext, + RelationalExpressionContext, + ReturnStatementContext, + SelectionStatementContext, + SliceNotationContext, + SliceNotationMemberAccessExpressionContext, + StatementContext, + storageTypeSpecifierContext, + StringPrimaryExpressionContext, + SwitchLabeledStatementContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TranslationUnitContext, + TypeofTypeSpecifierExpressionContext, + TypeSpecifierExpressionContext, + TypeSpecifierIdentifierContext, + UnaryExpressionContext, + UnaryOperatorContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext +} from "./KipperParser"; /** * This interface defines a complete listener for a parse tree produced by @@ -522,12 +523,12 @@ export interface KipperParserListener extends ParseTreeListener { * Enter a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx the parse tree */ - enterStorageTypeSpecifier?: (ctx: StorageTypeSpecifierContext) => void; + enterStorageTypeSpecifier?: (ctx: storageTypeSpecifierContext) => void; /** * Exit a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx the parse tree */ - exitStorageTypeSpecifier?: (ctx: StorageTypeSpecifierContext) => void; + exitStorageTypeSpecifier?: (ctx: storageTypeSpecifierContext) => void; /** * Enter a parse tree produced by `KipperParser.declarator`. @@ -1124,48 +1125,48 @@ export interface KipperParserListener extends ParseTreeListener { exitExpression?: (ctx: ExpressionContext) => void; /** - * Enter a parse tree produced by `KipperParser.typeSpecifier`. + * Enter a parse tree produced by `KipperParser.typeSpecifierExpression`. * @param ctx the parse tree */ - enterTypeSpecifier?: (ctx: TypeSpecifierContext) => void; + enterTypeSpecifierExpression?: (ctx: TypeSpecifierExpressionContext) => void; /** - * Exit a parse tree produced by `KipperParser.typeSpecifier`. + * Exit a parse tree produced by `KipperParser.typeSpecifierExpression`. * @param ctx the parse tree */ - exitTypeSpecifier?: (ctx: TypeSpecifierContext) => void; + exitTypeSpecifierExpression?: (ctx: TypeSpecifierExpressionContext) => void; /** - * Enter a parse tree produced by `KipperParser.identifierTypeSpecifier`. + * Enter a parse tree produced by `KipperParser.identifierTypeSpecifierExpression`. * @param ctx the parse tree */ - enterIdentifierTypeSpecifier?: (ctx: IdentifierTypeSpecifierContext) => void; + enterIdentifierTypeSpecifierExpression?: (ctx: IdentifierTypeSpecifierExpressionContext) => void; /** - * Exit a parse tree produced by `KipperParser.identifierTypeSpecifier`. + * Exit a parse tree produced by `KipperParser.identifierTypeSpecifierExpression`. * @param ctx the parse tree */ - exitIdentifierTypeSpecifier?: (ctx: IdentifierTypeSpecifierContext) => void; + exitIdentifierTypeSpecifierExpression?: (ctx: IdentifierTypeSpecifierExpressionContext) => void; /** - * Enter a parse tree produced by `KipperParser.genericTypeSpecifier`. + * Enter a parse tree produced by `KipperParser.genericTypeSpecifierExpression`. * @param ctx the parse tree */ - enterGenericTypeSpecifier?: (ctx: GenericTypeSpecifierContext) => void; + enterGenericTypeSpecifierExpression?: (ctx: GenericTypeSpecifierExpressionContext) => void; /** - * Exit a parse tree produced by `KipperParser.genericTypeSpecifier`. + * Exit a parse tree produced by `KipperParser.genericTypeSpecifierExpression`. * @param ctx the parse tree */ - exitGenericTypeSpecifier?: (ctx: GenericTypeSpecifierContext) => void; + exitGenericTypeSpecifierExpression?: (ctx: GenericTypeSpecifierExpressionContext) => void; /** - * Enter a parse tree produced by `KipperParser.typeofTypeSpecifier`. + * Enter a parse tree produced by `KipperParser.typeofTypeSpecifierExpression`. * @param ctx the parse tree */ - enterTypeofTypeSpecifier?: (ctx: TypeofTypeSpecifierContext) => void; + enterTypeofTypeSpecifierExpression?: (ctx: TypeofTypeSpecifierExpressionContext) => void; /** - * Exit a parse tree produced by `KipperParser.typeofTypeSpecifier`. + * Exit a parse tree produced by `KipperParser.typeofTypeSpecifierExpression`. * @param ctx the parse tree */ - exitTypeofTypeSpecifier?: (ctx: TypeofTypeSpecifierContext) => void; + exitTypeofTypeSpecifierExpression?: (ctx: TypeofTypeSpecifierExpressionContext) => void; /** * Enter a parse tree produced by `KipperParser.typeSpecifierIdentifier`. diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts index 5c0665386..f2d3c3418 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts @@ -2,103 +2,104 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParserASTMapping, ASTKind } from ".."; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { PassOnLogicalAndExpressionContext } from "./KipperParser"; -import { ActualLogicalAndExpressionContext } from "./KipperParser"; -import { ExternalBlockItemContext } from "./KipperParser"; -import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; -import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; -import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; -import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; -import { PassOnAssignmentExpressionContext } from "./KipperParser"; -import { ActualAssignmentExpressionContext } from "./KipperParser"; -import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; -import { ActualCastOrConvertExpressionContext } from "./KipperParser"; -import { PassOnEqualityExpressionContext } from "./KipperParser"; -import { ActualEqualityExpressionContext } from "./KipperParser"; -import { PassOnAdditiveExpressionContext } from "./KipperParser"; -import { ActualAdditiveExpressionContext } from "./KipperParser"; -import { PassOnRelationalExpressionContext } from "./KipperParser"; -import { ActualRelationalExpressionContext } from "./KipperParser"; -import { PassOnConditionalExpressionContext } from "./KipperParser"; -import { ActualConditionalExpressionContext } from "./KipperParser"; -import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; -import { ActualMultiplicativeExpressionContext } from "./KipperParser"; -import { PassOnLogicalOrExpressionContext } from "./KipperParser"; -import { ActualLogicalOrExpressionContext } from "./KipperParser"; -import { CompilationUnitContext } from "./KipperParser"; -import { TranslationUnitContext } from "./KipperParser"; -import { ExternalItemContext } from "./KipperParser"; -import { BlockItemListContext } from "./KipperParser"; -import { BlockItemContext } from "./KipperParser"; -import { DeclarationContext } from "./KipperParser"; -import { FunctionDeclarationContext } from "./KipperParser"; -import { VariableDeclarationContext } from "./KipperParser"; -import { StorageTypeSpecifierContext } from "./KipperParser"; -import { DeclaratorContext } from "./KipperParser"; -import { DirectDeclaratorContext } from "./KipperParser"; -import { InitDeclaratorContext } from "./KipperParser"; -import { ParameterListContext } from "./KipperParser"; -import { ParameterDeclarationContext } from "./KipperParser"; -import { InitializerContext } from "./KipperParser"; -import { StatementContext } from "./KipperParser"; -import { CompoundStatementContext } from "./KipperParser"; -import { ExpressionStatementContext } from "./KipperParser"; -import { SelectionStatementContext } from "./KipperParser"; -import { IfStatementContext } from "./KipperParser"; -import { SwitchStatementContext } from "./KipperParser"; -import { SwitchLabeledStatementContext } from "./KipperParser"; -import { IterationStatementContext } from "./KipperParser"; -import { ForLoopIterationStatementContext } from "./KipperParser"; -import { WhileLoopIterationStatementContext } from "./KipperParser"; -import { DoWhileLoopIterationStatementContext } from "./KipperParser"; -import { JumpStatementContext } from "./KipperParser"; -import { ReturnStatementContext } from "./KipperParser"; -import { PrimaryExpressionContext } from "./KipperParser"; -import { TangledPrimaryExpressionContext } from "./KipperParser"; -import { BoolPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierContext } from "./KipperParser"; -import { StringPrimaryExpressionContext } from "./KipperParser"; -import { FStringPrimaryExpressionContext } from "./KipperParser"; -import { FStringSingleQuoteAtomContext } from "./KipperParser"; -import { FStringDoubleQuoteAtomContext } from "./KipperParser"; -import { NumberPrimaryExpressionContext } from "./KipperParser"; -import { ArrayLiteralPrimaryExpressionContext } from "./KipperParser"; -import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; -import { ComputedPrimaryExpressionContext } from "./KipperParser"; -import { ArgumentExpressionListContext } from "./KipperParser"; -import { DotNotationContext } from "./KipperParser"; -import { BracketNotationContext } from "./KipperParser"; -import { SliceNotationContext } from "./KipperParser"; -import { PostfixExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; -import { UnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; -import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementOperatorContext } from "./KipperParser"; -import { UnaryOperatorContext } from "./KipperParser"; -import { CastOrConvertExpressionContext } from "./KipperParser"; -import { MultiplicativeExpressionContext } from "./KipperParser"; -import { AdditiveExpressionContext } from "./KipperParser"; -import { RelationalExpressionContext } from "./KipperParser"; -import { EqualityExpressionContext } from "./KipperParser"; -import { LogicalAndExpressionContext } from "./KipperParser"; -import { LogicalOrExpressionContext } from "./KipperParser"; -import { ConditionalExpressionContext } from "./KipperParser"; -import { AssignmentExpressionContext } from "./KipperParser"; -import { AssignmentOperatorContext } from "./KipperParser"; -import { ExpressionContext } from "./KipperParser"; -import { TypeSpecifierContext } from "./KipperParser"; -import { IdentifierTypeSpecifierContext } from "./KipperParser"; -import { GenericTypeSpecifierContext } from "./KipperParser"; -import { TypeofTypeSpecifierContext } from "./KipperParser"; -import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { + ActualAdditiveExpressionContext, + ActualAssignmentExpressionContext, + ActualCastOrConvertExpressionContext, + ActualConditionalExpressionContext, + ActualEqualityExpressionContext, + ActualLogicalAndExpressionContext, + ActualLogicalOrExpressionContext, + ActualMultiplicativeExpressionContext, + ActualRelationalExpressionContext, + AdditiveExpressionContext, + ArgumentExpressionListContext, + ArrayLiteralPrimaryExpressionContext, + AssignmentExpressionContext, + AssignmentOperatorContext, + BlockItemContext, + BlockItemListContext, + BoolPrimaryExpressionContext, + BracketNotationContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + CompilationUnitContext, + CompoundStatementContext, + ComputedPrimaryExpressionContext, + ConditionalExpressionContext, + DeclarationContext, + DeclaratorContext, + DirectDeclaratorContext, + DotNotationContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExplicitCallFunctionCallExpressionContext, + ExpressionContext, + ExpressionStatementContext, + ExternalBlockItemContext, + ExternalItemContext, + ForLoopIterationStatementContext, + FStringDoubleQuoteAtomContext, + FStringPrimaryExpressionContext, + FStringSingleQuoteAtomContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementOperatorContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + InitDeclaratorContext, + InitializerContext, + IterationStatementContext, + JumpStatementContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NumberPrimaryExpressionContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParameterListContext, + PassOnAdditiveExpressionContext, + PassOnAssignmentExpressionContext, + PassOnCastOrConvertExpressionContext, + PassOncomputedPrimaryExpressionContext, + PassOnConditionalExpressionContext, + PassOnEqualityExpressionContext, + PassOnLogicalAndExpressionContext, + PassOnLogicalOrExpressionContext, + PassOnMultiplicativeExpressionContext, + PassOnRelationalExpressionContext, + PostfixExpressionContext, + PrimaryExpressionContext, + RelationalExpressionContext, + ReturnStatementContext, + SelectionStatementContext, + SliceNotationContext, + SliceNotationMemberAccessExpressionContext, + StatementContext, + storageTypeSpecifierContext, + StringPrimaryExpressionContext, + SwitchLabeledStatementContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TranslationUnitContext, + TypeofTypeSpecifierExpressionContext, + TypeSpecifierExpressionContext, + TypeSpecifierIdentifierContext, + UnaryExpressionContext, + UnaryOperatorContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext +} from "./KipperParser"; /** * This interface defines a complete generic visitor for a parse tree produced @@ -369,7 +370,7 @@ export interface KipperParserVisitor extends ParseTreeVisitor { * @param ctx the parse tree * @return the visitor result */ - visitStorageTypeSpecifier?: (ctx: StorageTypeSpecifierContext) => Result; + visitStorageTypeSpecifier?: (ctx: storageTypeSpecifierContext) => Result; /** * Visit a parse tree produced by `KipperParser.declarator`. @@ -750,32 +751,32 @@ export interface KipperParserVisitor extends ParseTreeVisitor { visitExpression?: (ctx: ExpressionContext) => Result; /** - * Visit a parse tree produced by `KipperParser.typeSpecifier`. + * Visit a parse tree produced by `KipperParser.typeSpecifierExpression`. * @param ctx the parse tree * @return the visitor result */ - visitTypeSpecifier?: (ctx: TypeSpecifierContext) => Result; + visitTypeSpecifierExpression?: (ctx: TypeSpecifierExpressionContext) => Result; /** - * Visit a parse tree produced by `KipperParser.identifierTypeSpecifier`. + * Visit a parse tree produced by `KipperParser.identifierTypeSpecifierExpression`. * @param ctx the parse tree * @return the visitor result */ - visitIdentifierTypeSpecifier?: (ctx: IdentifierTypeSpecifierContext) => Result; + visitIdentifierTypeSpecifierExpression?: (ctx: IdentifierTypeSpecifierExpressionContext) => Result; /** - * Visit a parse tree produced by `KipperParser.genericTypeSpecifier`. + * Visit a parse tree produced by `KipperParser.genericTypeSpecifierExpression`. * @param ctx the parse tree * @return the visitor result */ - visitGenericTypeSpecifier?: (ctx: GenericTypeSpecifierContext) => Result; + visitGenericTypeSpecifierExpression?: (ctx: GenericTypeSpecifierExpressionContext) => Result; /** - * Visit a parse tree produced by `KipperParser.typeofTypeSpecifier`. + * Visit a parse tree produced by `KipperParser.typeofTypeSpecifierExpression`. * @param ctx the parse tree * @return the visitor result */ - visitTypeofTypeSpecifier?: (ctx: TypeofTypeSpecifierContext) => Result; + visitTypeofTypeSpecifierExpression?: (ctx: TypeofTypeSpecifierExpressionContext) => Result; /** * Visit a parse tree produced by `KipperParser.typeSpecifierIdentifier`. diff --git a/kipper/core/src/compiler/parser/index.ts b/kipper/core/src/compiler/parser/index.ts index 48ed66b92..142fd1fbb 100644 --- a/kipper/core/src/compiler/parser/index.ts +++ b/kipper/core/src/compiler/parser/index.ts @@ -3,7 +3,7 @@ * @since 0.0.2 */ export * from "./parser-rule-context"; -export * from "./parser-ast-mapping"; +export * from "./parse-rule-kind-mapping"; export * from "./antlr/"; export * from "./parse-stream"; export * from "./parse-data"; diff --git a/kipper/core/src/compiler/parser/parser-ast-mapping.ts b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts similarity index 81% rename from kipper/core/src/compiler/parser/parser-ast-mapping.ts rename to kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts index 8c9ba2265..97e7c4f31 100644 --- a/kipper/core/src/compiler/parser/parser-ast-mapping.ts +++ b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts @@ -3,6 +3,9 @@ * @since 0.10.0 */ +import { InverseMap } from "../../tools/types/inverse-map"; +import { inverseMap } from "../../tools"; + /** * A mapping object which maps the KipperParser rules to an AST syntax kind number and in extension with the * {@link ASTNodeFactory} factories to an AST node class implementation. @@ -15,7 +18,7 @@ * internal purposes inside the parser. For completion’s sake, all numbers are listed here regardless. * @since 0.10.0 */ -export const ParserASTMapping = { +export const ParseRuleKindMapping = { // Standard rules copied from KipperParser RULE_compilationUnit: 0, RULE_translationUnit: 1, @@ -80,10 +83,10 @@ export const ParserASTMapping = { RULE_assignmentExpression: 60, RULE_assignmentOperator: 61, RULE_expression: 62, - RULE_typeSpecifier: 63, - RULE_identifierTypeSpecifier: 64, - RULE_genericTypeSpecifier: 65, - RULE_typeofTypeSpecifier: 66, + RULE_typeSpecifierExpression: 63, + RULE_identifierTypeSpecifierExpression: 64, + RULE_genericTypeSpecifierExpression: 65, + RULE_typeofTypeSpecifierExpression: 66, RULE_typeSpecifierIdentifier: 67, // Labelled rules, which don't have a corresponding identifier number in KipperParser. RULE_memberAccessExpression: 68, // -> See 'computedPrimaryExpression' @@ -91,10 +94,16 @@ export const ParserASTMapping = { } as const; /** - * Union type of every possible {@link ParserASTMapping AST kind number} mapped to a KipperParser rule. + * Inverse mapping of {@link ParseRuleKindMapping} which maps the AST syntax kind number to the KipperParser rule. + * @since 0.11.0 + */ +export const KindParseRuleMapping = >inverseMap(ParseRuleKindMapping); + +/** + * Union type of every possible {@link ParseRuleKindMapping AST kind number} mapped to a KipperParser rule. * * Not every number contained here is mapped to a constructable AST node. Some may be only used for * internal purposes inside the parser. For completion’s sake, all numbers are listed here regardless. * @since 0.10.0 */ -export type ASTKind = (typeof ParserASTMapping)[keyof typeof ParserASTMapping]; +export type ASTKind = typeof ParseRuleKindMapping[keyof typeof ParseRuleKindMapping]; diff --git a/kipper/core/src/compiler/parser/parser-rule-context.ts b/kipper/core/src/compiler/parser/parser-rule-context.ts index 55f9cd96b..96452ddbf 100644 --- a/kipper/core/src/compiler/parser/parser-rule-context.ts +++ b/kipper/core/src/compiler/parser/parser-rule-context.ts @@ -1,5 +1,5 @@ import { ParserRuleContext } from "antlr4ts"; -import { ASTKind } from "./parser-ast-mapping"; +import { ASTKind } from "./parse-rule-kind-mapping"; /** * A custom implementation of the Antlr4 {@link ParserRuleContext} class, representing a node in the parse tree. @@ -31,7 +31,7 @@ export abstract class KipperParserRuleContext extends ParserRuleContext { /** * Returns the specific unique kind number of this rule ctx. This is used to map the rule ctx to the correct AST node. * - * For more info on this, see {@link ParserASTMapping} and the documentation provided. + * For more info on this, see {@link ParseRuleKindMapping} and the documentation provided. * @since 0.10.0 */ public get astSyntaxKind(): ASTKind { diff --git a/kipper/core/src/compiler/program-ctx.ts b/kipper/core/src/compiler/program-ctx.ts index df3da0c9d..5bd7570bf 100644 --- a/kipper/core/src/compiler/program-ctx.ts +++ b/kipper/core/src/compiler/program-ctx.ts @@ -11,9 +11,9 @@ import type { BuiltInFunction, BuiltInVariable, InternalFunction } from "./runti import type { KipperCompileTarget } from "./target-presets"; import type { TranslatedCodeLine } from "./const"; import type { KipperWarning } from "../warnings"; -import type { CompilableASTNode, RootASTNode, Expression } from "./ast"; -import type { EvaluatedCompileConfig } from "./compile-config"; +import type { CompilableASTNode, Expression, RootASTNode } from "./ast"; import { KipperFileASTGenerator } from "./ast"; +import type { EvaluatedCompileConfig } from "./compile-config"; import { GlobalScope, InternalReference, KipperSemanticChecker, KipperTypeChecker, Reference } from "./analysis"; import { KipperError, KipperInternalError, UndefinedSemanticsError } from "../errors"; import { KipperOptimiser, OptimisationOptions } from "./optimiser"; diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index 29b20cf4f..bc332e245 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -5,13 +5,17 @@ import type { AdditiveExpression, + AnalysableASTNode, + ArrayLiteralPrimaryExpression, AssignmentExpression, BoolPrimaryExpression, CastOrConvertExpression, CompoundStatement, ConditionalExpression, + DoWhileLoopIterationStatement, EqualityExpression, ExpressionStatement, + ForLoopIterationStatement, FStringPrimaryExpression, FunctionCallExpression, FunctionDeclaration, @@ -22,28 +26,24 @@ import type { IncrementOrDecrementPostfixExpression, IncrementOrDecrementUnaryExpression, JumpStatement, - ArrayLiteralPrimaryExpression, LogicalAndExpression, LogicalOrExpression, + MemberAccessExpression, MultiplicativeExpression, NumberPrimaryExpression, OperatorModifiedUnaryExpression, ParameterDeclaration, RelationalExpression, + ReturnStatement, + SemanticData, StringPrimaryExpression, SwitchStatement, TangledPrimaryExpression, + TypeData, TypeofTypeSpecifierExpression, VariableDeclaration, - TypeData, - SemanticData, - DoWhileLoopStatement, - ForLoopStatement, - ReturnStatement, VoidOrNullOrUndefinedPrimaryExpression, - WhileLoopStatement, - AnalysableASTNode, - MemberAccessExpression, + WhileLoopIterationStatement } from "../ast"; import { KipperSemanticErrorHandler } from "../analysis"; @@ -84,22 +84,22 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa public abstract expressionStatement?: TargetASTNodeSemanticAnalyser; /** - * Translates a {@link ForLoopStatement} into a specific language. + * Translates a {@link ForLoopIterationStatement} into a specific language. * @since 0.10.0 */ - public abstract doWhileLoopStatement?: TargetASTNodeSemanticAnalyser; + public abstract doWhileLoopIterationStatement?: TargetASTNodeSemanticAnalyser; /** - * Translates a {@link ForLoopStatement} into a specific language. + * Translates a {@link ForLoopIterationStatement} into a specific language. * @since 0.10.0 */ - public abstract whileLoopStatement?: TargetASTNodeSemanticAnalyser; + public abstract whileLoopIterationStatement?: TargetASTNodeSemanticAnalyser; /** - * Translates a {@link ForLoopStatement} into a specific language. + * Translates a {@link ForLoopIterationStatement} into a specific language. * @since 0.10.0 */ - public abstract forLoopStatement?: TargetASTNodeSemanticAnalyser; + public abstract forLoopIterationStatement?: TargetASTNodeSemanticAnalyser; /** * Performs translation-specific semantic analysis for {@link JumpStatement} instances. diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index d92cb25bc..ada344487 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -4,13 +4,17 @@ */ import type { AdditiveExpression, + ArrayLiteralPrimaryExpression, AssignmentExpression, BoolPrimaryExpression, CastOrConvertExpression, + CompilableASTNode, CompoundStatement, ConditionalExpression, + DoWhileLoopIterationStatement, EqualityExpression, ExpressionStatement, + ForLoopIterationStatement, FStringPrimaryExpression, FunctionCallExpression, FunctionDeclaration, @@ -21,26 +25,22 @@ import type { IncrementOrDecrementPostfixExpression, IncrementOrDecrementUnaryExpression, JumpStatement, - ArrayLiteralPrimaryExpression, LogicalAndExpression, LogicalOrExpression, + MemberAccessExpression, MultiplicativeExpression, NumberPrimaryExpression, OperatorModifiedUnaryExpression, ParameterDeclaration, RelationalExpression, + ReturnStatement, StringPrimaryExpression, SwitchStatement, TangledPrimaryExpression, TypeofTypeSpecifierExpression, VariableDeclaration, - DoWhileLoopStatement, - ForLoopStatement, - ReturnStatement, VoidOrNullOrUndefinedPrimaryExpression, - WhileLoopStatement, - CompilableASTNode, - MemberAccessExpression, + WhileLoopIterationStatement } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; @@ -57,7 +57,7 @@ import type { KipperProgramContext } from "../../program-ctx"; export type TargetASTNodeCodeGenerator< T extends CompilableASTNode, R extends TranslatedExpression | TranslatedCodeLine | Array, -> = (node: T) => Promise; +> = Function & ((node: T) => Promise); /** * Represents a function that generates setup code for a Kipper file. @@ -121,22 +121,31 @@ export abstract class KipperTargetCodeGenerator { public abstract expressionStatement: TargetASTNodeCodeGenerator>; /** - * Translates a {@link ForLoopStatement} into a specific language. + * Translates a {@link ForLoopIterationStatement} into a specific language. * @since 0.10.0 */ - public abstract doWhileLoopStatement: TargetASTNodeCodeGenerator>; + public abstract doWhileLoopIterationStatement: TargetASTNodeCodeGenerator< + DoWhileLoopIterationStatement, + Array + >; /** - * Translates a {@link ForLoopStatement} into a specific language. + * Translates a {@link ForLoopIterationStatement} into a specific language. * @since 0.10.0s */ - public abstract whileLoopStatement: TargetASTNodeCodeGenerator>; + public abstract whileLoopIterationStatement: TargetASTNodeCodeGenerator< + WhileLoopIterationStatement, + Array + >; /** - * Translates a {@link ForLoopStatement} into a specific language. + * Translates a {@link ForLoopIterationStatement} into a specific language. * @since 0.10.0 */ - public abstract forLoopStatement: TargetASTNodeCodeGenerator>; + public abstract forLoopIterationStatement: TargetASTNodeCodeGenerator< + ForLoopIterationStatement, + Array + >; /** * Translates a {@link JumpStatement} into a specific language. diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index a44465c88..6cfe1f6cc 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -9,7 +9,7 @@ import type { RecognitionException } from "antlr4ts/RecognitionException"; import type { Recognizer } from "antlr4ts/Recognizer"; import type { KipperParseStream } from "./compiler"; import { CompilableASTNode, KipperProgramContext } from "./compiler"; -import { getParseRuleSource } from "./utils"; +import { getParseRuleSource } from "./tools"; /** * The interface representing the traceback data for a {@link KipperError}. diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 89a4af769..f211695c3 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -7,12 +7,12 @@ export * from "./errors"; export * from "./warnings"; export * from "./compiler"; export * from "./logger"; -export * from "./utils"; +export * from "./tools"; export * from "./antlr-error-listener"; export * as compiler from "./compiler"; export * as logger from "./logger"; export * as errors from "./errors"; -export * as utils from "./utils"; +export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; diff --git a/kipper/core/src/tools/decorators/code-generator.ts b/kipper/core/src/tools/decorators/code-generator.ts new file mode 100644 index 000000000..eb7dbe851 --- /dev/null +++ b/kipper/core/src/tools/decorators/code-generator.ts @@ -0,0 +1,22 @@ +/** + * Decorators for code generators. + * @since 0.11.0 + */ +import type { ASTKind } from "../../compiler"; + +/** + * A decorator function which registers the given method as a code generator for the specified {@link target}. + * + * By applying this decorator to a method, the method will be automatically called when the compiler is generating + * code for the specified {@link target}. + * @param target The number identifier of the target for which the decorated method should be called. This number can + * be fetched from the {@link ParserASTNode.kind} property. + * @since 0.11.0 + */ +export function /* Unused */ codeGenerator(target: ASTKind) { + // TODO! May not be actually needed + return function (target: /* prototype */ any, propertyKey: string, descriptor: PropertyDescriptor) { + target.codeGenerators = target.codeGenerators ?? {}; + target.codeGenerators[target] = descriptor.value; + }; +} diff --git a/kipper/core/src/tools/decorators/index.ts b/kipper/core/src/tools/decorators/index.ts new file mode 100644 index 000000000..8461b70da --- /dev/null +++ b/kipper/core/src/tools/decorators/index.ts @@ -0,0 +1,5 @@ +/** + * Module utility decorators, which are used throughout the Kipper core package. + * @since 0.11.0 + */ +export * from "./code-generator"; diff --git a/kipper/core/src/tools/functions/index.ts b/kipper/core/src/tools/functions/index.ts new file mode 100644 index 000000000..ff4aaa92f --- /dev/null +++ b/kipper/core/src/tools/functions/index.ts @@ -0,0 +1,8 @@ +/** + * Module utility functions, which are used throughout the Kipper core package. + * @since 0.11.0 + */ +export * from "./parser-rules"; +export * from "./inverse-map"; +export * from "./replace-obj-keys"; +export * from "./other"; diff --git a/kipper/core/src/tools/functions/inverse-map.ts b/kipper/core/src/tools/functions/inverse-map.ts new file mode 100644 index 000000000..d7876084f --- /dev/null +++ b/kipper/core/src/tools/functions/inverse-map.ts @@ -0,0 +1,14 @@ +import { InverseMap } from "../types"; + +/** + * Returns a given object with its keys and value inverted. + * @param obj The object to inverse. + * @since 0.11.0 + */ +export function inverseMap>(obj: T): InverseMap { + const result: T | any = {}; + for (const key in obj) { + result[obj[key]] = key; + } + return result; +} diff --git a/kipper/core/src/tools/functions/other.ts b/kipper/core/src/tools/functions/other.ts new file mode 100644 index 000000000..6c7db4f00 --- /dev/null +++ b/kipper/core/src/tools/functions/other.ts @@ -0,0 +1,33 @@ +/** + * Utility functions that don't fit in any other category. + * @since 0.11.0 + */ + +/** + * Returns {@link num} unchanged if its positive, otherwise if its negative it will return 0. + * @since 0.4.0 + */ +export function getNaturalOrZero(num: number): number { + return num < 0 ? 0 : num; +} + +/** + * Apply title-case formatting on the specific string e.g. the first character of a word/char sequence must always be + * uppercase. + * @param str The string to modify. + * @since 0.8.0 + */ +export function titleCase(str: string): string { + return str.replace(/\b\S/g, (t) => t.toUpperCase()); +} + +/** + * Generates for the specific types the corresponding conversion function identifier that should be implemented by the + * {@link KipperTargetBuiltInGenerator}. + * @param originalType The original type. + * @param destType The type to convert to. + * @since 0.8.0 + */ +export function getConversionFunctionIdentifier(originalType: string, destType: string): string { + return `${originalType}To${titleCase(destType)}`; +} diff --git a/kipper/core/src/utils.ts b/kipper/core/src/tools/functions/parser-rules.ts similarity index 67% rename from kipper/core/src/utils.ts rename to kipper/core/src/tools/functions/parser-rules.ts index 488b7640e..bc1812d05 100644 --- a/kipper/core/src/utils.ts +++ b/kipper/core/src/tools/functions/parser-rules.ts @@ -1,12 +1,12 @@ /** - * Utility functions for the Kipper core package. - * @since 0.9.0 + * Utility functions for working with {@link KipperParserRuleContext antlr4 contexts} (also known as parse rules). + * @since 0.11.0 */ +import { KipperParserRuleContext } from "../../compiler"; +import { Interval } from "antlr4ts/misc/Interval"; +import type { CharStream } from "antlr4ts/CharStream"; import type { Token } from "antlr4ts"; import type { ParseTree } from "antlr4ts/tree"; -import type { CharStream } from "antlr4ts/CharStream"; -import type { KipperParserRuleContext } from "./compiler"; -import { Interval } from "antlr4ts/misc/Interval"; /** * Returns the token source for the passed {@link antlrCtx} instance. @@ -59,32 +59,3 @@ export function getTokenSource(inputStream: CharStream, token: Token) { export function getParseTreeSource(inputStream: CharStream, parseTree: ParseTree) { return inputStream.getText(parseTree.sourceInterval); } - -/** - * Returns {@link num} unchanged if its positive, otherwise if its negative it will return 0. - * @since 0.4.0 - */ -export function getNaturalOrZero(num: number): number { - return num < 0 ? 0 : num; -} - -/** - * Apply title-case formatting on the specific string e.g. the first character of a word/char sequence must always be - * uppercase. - * @param str The string to modify. - * @since 0.8.0 - */ -export function titleCase(str: string): string { - return str.replace(/\b\S/g, (t) => t.toUpperCase()); -} - -/** - * Generates for the specific types the corresponding conversion function identifier that should be implemented by the - * {@link KipperTargetBuiltInGenerator}. - * @param originalType The original type. - * @param destType The type to convert to. - * @since 0.8.0 - */ -export function getConversionFunctionIdentifier(originalType: string, destType: string): string { - return `${originalType}To${titleCase(destType)}`; -} diff --git a/kipper/core/src/tools/functions/replace-obj-keys.ts b/kipper/core/src/tools/functions/replace-obj-keys.ts new file mode 100644 index 000000000..a496497b6 --- /dev/null +++ b/kipper/core/src/tools/functions/replace-obj-keys.ts @@ -0,0 +1,16 @@ +/** + * Replaces the keys of an object with the result of the callback function. + * @param obj The object to replace the keys of. + * @param callback The callback function to replace the keys with. + * @since 0.11.0 + */ +export function replaceObjKeys( + obj: Record, + callback: (key: O) => N, +): Record { + const result = {} as Record; + for (const key in obj) { + result[callback(key)] = obj[key]; + } + return result; +} diff --git a/kipper/core/src/tools/index.ts b/kipper/core/src/tools/index.ts new file mode 100644 index 000000000..f6dd95345 --- /dev/null +++ b/kipper/core/src/tools/index.ts @@ -0,0 +1,6 @@ +/** + * Module for providing utility functions and decorators, which are used throughout the Kipper core package. + * @since 0.11.0 + */ +export * from "./decorators"; +export * from "./functions"; diff --git a/kipper/core/src/tools/types/index.ts b/kipper/core/src/tools/types/index.ts new file mode 100644 index 000000000..20ae2f1e6 --- /dev/null +++ b/kipper/core/src/tools/types/index.ts @@ -0,0 +1,5 @@ +/** + * TypeScript helper types, which are used throughout the Kipper codebase. + * @since 0.11.0 + */ +export * from "./inverse-map"; diff --git a/kipper/core/src/tools/types/inverse-map.ts b/kipper/core/src/tools/types/inverse-map.ts new file mode 100644 index 000000000..4f0c082e7 --- /dev/null +++ b/kipper/core/src/tools/types/inverse-map.ts @@ -0,0 +1,23 @@ +/** + * Returns a given object with its keys and values inverted. + * + * @example + * type Foo = { + * a: "A", + * b: "B", + * c: "C", + * }; + * + * type Bar = InverseMap; + * // Bar = { + * // A: "a", + * // B: "b", + * // C: "c", + * // } + * @since 0.11.0 + */ +export type InverseMap> = { + [P in T[keyof T]]: { + [K in keyof T]: T[K] extends P ? K : never; + }[keyof T]; +}; diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 62822605f..01590dcf1 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -45,8 +45,8 @@ import { TypeofTypeSpecifierExpression, VariableDeclaration, CompoundStatement, - DoWhileLoopStatement, - ForLoopStatement, + DoWhileLoopIterationStatement, + ForLoopIterationStatement, getConversionFunctionIdentifier, IfStatement, KipperTargetCodeGenerator, @@ -54,7 +54,7 @@ import { ScopeDeclaration, ScopeFunctionDeclaration, VoidOrNullOrUndefinedPrimaryExpression, - WhileLoopStatement, + WhileLoopIterationStatement, } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; @@ -230,18 +230,18 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { }; /** - * Translates a {@link DoWhileLoopStatement} into the JavaScript language. + * Translates a {@link DoWhileLoopIterationStatement} into the JavaScript language. * @since 0.10.0 */ - doWhileLoopStatement = async (node: DoWhileLoopStatement): Promise> => { + doWhileLoopIterationStatement = async (node: DoWhileLoopIterationStatement): Promise> => { return []; }; /** - * Translates a {@link WhileLoopStatement} into the JavaScript language. + * Translates a {@link WhileLoopIterationStatement} into the JavaScript language. * @since 0.10.0 */ - whileLoopStatement = async (node: WhileLoopStatement): Promise> => { + whileLoopIterationStatement = async (node: WhileLoopIterationStatement): Promise> => { const semanticData = node.getSemanticData(); const condition = await semanticData.loopCondition.translateCtxAndChildren(); const statement = await semanticData.loopBody.translateCtxAndChildren(); @@ -257,10 +257,10 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { }; /** - * Translates a {@link ForLoopStatement} into the JavaScript language. + * Translates a {@link ForLoopIterationStatement} into the JavaScript language. * @since 0.10.0 */ - forLoopStatement = async (node: ForLoopStatement): Promise> => { + forLoopIterationStatement = async (node: ForLoopIterationStatement): Promise> => { const semanticData = node.getSemanticData(); // Translate the parts of the for loop statement - Everything except the loop body is optional diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index beb3bb3f7..826467677 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -58,22 +58,22 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys expressionStatement = undefined; /** - * Performs typescript-specific semantic analysis for {@link DoWhileLoopStatement} instances. + * Performs typescript-specific semantic analysis for {@link DoWhileLoopIterationStatement} instances. * @since 0.10.0 */ - doWhileLoopStatement = undefined; + doWhileLoopIterationStatement = undefined; /** - * Performs typescript-specific semantic analysis for {@link WhileLoopStatement} instances. + * Performs typescript-specific semantic analysis for {@link WhileLoopIterationStatement} instances. * @since 0.10.0 */ - whileLoopStatement = undefined; + whileLoopIterationStatement = undefined; /** - * Performs typescript-specific semantic analysis for {@link ForLoopStatement} instances. + * Performs typescript-specific semantic analysis for {@link ForLoopIterationStatement} instances. * @since 0.10.0 */ - forLoopStatement = undefined; + forLoopIterationStatement = undefined; /** * Performs typescript-specific semantic analysis for {@link JumpStatement} instances. From 5d47919c2c55a9ac31cf25e6b81708bedf49a612 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 8 Jul 2023 19:50:16 +0200 Subject: [PATCH 058/257] Code cleanup in `kipper/cli` --- kipper/cli/README.md | 21 +++++++++++++-------- kipper/cli/src/commands/compile.ts | 1 - kipper/cli/src/commands/run.ts | 1 - 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index a609f6c27..367c3c7b1 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -21,9 +21,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/cli)](https://packagephobia.com/result?p=@kipper/cli) -* [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli`](#kipper-cli---kippercli) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -38,6 +39,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -49,16 +51,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -187,6 +191,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/version.ts)_ + ## Copyright and License diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index b478d1d6a..598114b53 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -13,7 +13,6 @@ import { KipperParseStream, LogLevel, } from "@kipper/core"; -import { IFlag } from "@oclif/command/lib/flags"; import { Logger } from "tslog"; import { CLIEmitHandler, defaultCliLogger, defaultKipperLoggerConfig } from "../logger"; import { KipperEncoding, KipperEncodings, KipperParseFile, verifyEncoding } from "../file-stream"; diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index b305eb196..7e9e95260 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -13,7 +13,6 @@ import { KipperParseStream, LogLevel, } from "@kipper/core"; -import { IFlag } from "@oclif/command/lib/flags"; import { spawn } from "child_process"; import { Logger } from "tslog"; import { CLIEmitHandler, defaultCliLogger, defaultKipperLoggerConfig } from "../logger"; From d958c3496dca96116a91b2835484d5255c4f06c6 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 8 Jul 2023 19:50:40 +0200 Subject: [PATCH 059/257] Performed minor addition to tests to fit recent changes --- test/module/core/ast-node.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/module/core/ast-node.test.ts b/test/module/core/ast-node.test.ts index 9ad30ef43..6472f6401 100644 --- a/test/module/core/ast-node.test.ts +++ b/test/module/core/ast-node.test.ts @@ -25,6 +25,7 @@ describe("AST Nodes", () => { // Example class for testing purposes class ExampleNode extends CompilableASTNode { readonly kind: number = Number.MAX_SAFE_INTEGER; + readonly ruleName: string = "RULE_exampleNode"; constructor(antlrCtx: KipperParserRuleContext, parent: CompilableNodeParent) { super(antlrCtx, parent); From 91e7696f7a852e7d2b267f513301e88143d10770 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 8 Jul 2023 19:50:49 +0200 Subject: [PATCH 060/257] Updated .gitignore --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 747cec89f..60788312b 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,10 @@ lib-cov # Coverage directory used by tools like istanbul coverage +coverage/* + +# antlr4 generated files +gen/* # nyc __tests__ coverage .nyc_output @@ -78,3 +82,6 @@ typings/ *.tsbuildinfo *.idea + +# Nyc +.nyc_output/ From c3ee71a80e95c96fee86b9f89abd4aa330263a30 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 8 Jul 2023 19:50:55 +0200 Subject: [PATCH 061/257] Updated CHANGELOG.md --- CHANGELOG.md | 66 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ecaa52e4..13538e34e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,18 +24,34 @@ To use development versions of Kipper download the - `void` to `str`. - `null` to `str`. - `undefined` to `str`. +- New modules: + - `kipper/core/tools`, which contains all tools and utilities used by the compiler. + - `kipper/core/tools/decorators`, which contains all decorators used by the compiler. + - `kipper/core/tools/functions`, which contains all functions used by the compiler. + - `kipper/core/tools/types`, which contains all types used by the compiler. + - `kipper/core/compiler/ast/common`, which contains commonly used types and functions. + - `kipper/core/compiler/ast/factories`, which replaces the old file `factories.ts` and contains all AST factory + classes and types. + - `kipper/core/compiler/ast/mapping`, which contains all AST mapping objects and the `ASTNodeMapper` class. +- New class: + - `ASTNodeMapper`, which handles the mapping between kind numbers, rule names, AST classes and parser context classes. - New parameters: - - `ignoreParams` in `genJSFunction`, which, if true makes the function signature define no parameters. - - `ignoreParams` in `createJSFunctionSignature`, which, if true makes the function signature define no parameters. - - `ignoreParams` in `genTSFunction`, which, if true makes the function signature define no parameters. - - `ignoreParams` in `createTSFunctionSignature`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `genJSFunction()`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `createJSFunctionSignature()`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `genTSFunction()`, which, if true makes the function signature define no parameters. + - `ignoreParams` in `createTSFunctionSignature()`, which, if true makes the function signature define no parameters. - New field: - `KipperError.programCtx`, which contains, if `KipperError.tracebackData.errorNode` is not undefined, the program context of the error. + - `ParserASTNode.ruleName`, which contains the rule name of the node. +- New types: + - `InverseMap`, which inverts a map by swapping the keys and values. - New functions: - - `KipperTargetBuiltInGenerator.voidToStr`, for the built-in conversion from `void` to `str`. - - `KipperTargetBuiltInGenerator.nullToStr`, for the built-in conversion from `null` to `str`. - - `KipperTargetBuiltInGenerator.undefinedToStr`, for the built-in conversion from `undefined` to `str`. + - `KipperTargetBuiltInGenerator.voidToStr()`, for the built-in conversion from `void` to `str`. + - `KipperTargetBuiltInGenerator.nullToStr()`, for the built-in conversion from `null` to `str`. + - `KipperTargetBuiltInGenerator.undefinedToStr()`, for the built-in conversion from `undefined` to `str`. + - `replaceObjKeys()`, which replaces the keys of an object with the values returned by a function. + - `inverseMap()`, which inverts a map by swapping the keys and values. ### Changed @@ -43,9 +59,35 @@ To use development versions of Kipper download the This means it's AST kind number is now also added to the `ASTConstantExpressionKind` type and its context class is also part of the `ParserConstantExpressionContext` type. - Renamed: - - `FunctionCallPostfixTypeSemantics` to `FunctionCallExpressionTypeSemantics`. - - `FStringPrimaryExpressionSemantics.items` to `atoms`. - - `getTSFunction()` to `genTSFunction()`. + - Class `FunctionCallPostfixTypeSemantics` to `FunctionCallExpressionTypeSemantics`. + - Field `FStringPrimaryExpressionSemantics.items` to `atoms`. + - Function `getTSFunction()` to `genTSFunction()`. + - Grammar Rule `typeSpecifier` to `typeSpecifierExpression` and its AST class `TypeSpecifier` to + `TypeSpecifierExpression`. This also includes changing the name in the `KipperTargetCodeGenerator`, + `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. + - Grammar Rule `identifierTypeSpecifier` to `identifierTypeSpecifierExpression` and its AST class + `IdentifierTypeSpecifier` to `IdentifierTypeSpecifierExpression`. This also includes changing the name in the + `KipperTargetCodeGenerator`, `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. + - Grammar Rule `genericTypeSpecifier` to `genericTypeSpecifierExpression` and its AST class `GenericTypeSpecifier` to + `GenericTypeSpecifierExpression`. This also includes changing the name in the `KipperTargetCodeGenerator`, + `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. + - Grammar Rule `typeofTypeSpecifier` to `typeofTypeSpecifierExpression` and its AST class `TypeofTypeSpecifier` to + `TypeofTypeSpecifierExpression`. This also includes changing the name in the `KipperTargetCodeGenerator`, + `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. + - Grammar Rule `forLoopStatement` to `forLoopIterationStatement` and its AST class `ForLoopStatement` to + `ForLoopIterationStatement`. This also includes changing the name in the `KipperTargetCodeGenerator`, + `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. + - Grammar Rule `whileLoopStatement` to `whileLoopIterationStatement` and its AST class `WhileLoopStatement` to + `WhileLoopIterationStatement`. This also includes changing the name in the `KipperTargetCodeGenerator`, + `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. + - Grammar Rule `doWhileLoopStatement` to `doWhileLoopIterationStatement` and its AST class + `DoWhileLoopStatement` to `DoWhileLoopIterationStatement`. This also includes changing the name in the + `KipperTargetCodeGenerator`, `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. + - File `kipper/core/compiler/parser/parser-ast-mapping.ts` to `parse-rule-kind-mappings.ts`. +- Moved: + - `kipper/core/utils.ts` to `kipper/core/tools` and separated it into multiple files & modules. + - `kipper/core/compiler/ast/root-ast-node.ts` to the `kipper/core/compiler/ast/nodes` module. + - `kipper/core/compiler/ast/ast-types.ts` to the new `kipper/core/compiler/ast/common` module. ### Fixed @@ -261,7 +303,7 @@ To use development versions of Kipper download the - `ConstructableASTDeclaration`, which is a union type of all possible `Declaration` AST node instances. - `ConstructableASTNode`, which is a union type of all possible `ASTNode` AST node instances. - `ASTKind`, which represents a union of all AST node kind values that can be used to map a KipperParser rule context - to an AST node. This is the type representing all values from `ParserASTMapping`. + to an AST node. This is the type representing all values from `ParseRuleKindMapping`. - `ConstructableASTKind`, which is the same as `ASTKind`, but removes any kind value that does not have a corresponding AST node class. - `KipperReferenceableFunction`, which represents a function that can be referenced by a `FunctionCallExpression`. @@ -307,7 +349,7 @@ To use development versions of Kipper download the - New constants: - `kipperNullType`, which represents the Kipper null type. - `kipperUndefinedType`, which represents the Kipper undefined type. - - `ParserASTMapping`, which is a special mapping object used to get the AST kind number for a `KipperParser` rule ctx + - `ParseRuleKindMapping`, which is a special mapping object used to get the AST kind number for a `KipperParser` rule ctx instance. - `kipperRuntimeBuiltInVariables`, which contains the built-in variables of the Kipper runtime. From 886627fd395051e67f3a0a7f4b7a737b77710f12 Mon Sep 17 00:00:00 2001 From: luna Date: Tue, 17 Oct 2023 15:54:27 +0200 Subject: [PATCH 062/257] Split up `semantic-data` and `type-data` into individual files These semantic data and type data interfaces are now grouped together with their corresponding AST node in their own directory. This is to help make the AST structure more clear and finish the AST update. --- CHANGELOG.md | 30 +- .../analysis/analyser/semantic-checker.ts | 6 +- .../analysis/analyser/type-checker.ts | 8 +- .../core/src/compiler/analysis/reference.ts | 2 +- .../entry/scope-function-declaration.ts | 2 +- .../entry/scope-parameter-declaration.ts | 2 +- kipper/core/src/compiler/ast/ast-generator.ts | 12 +- .../core/src/compiler/ast/common/ast-types.ts | 80 +-- .../src/compiler/ast/compilable-ast-node.ts | 2 +- .../ast/factories/declaration-ast-factory.ts | 2 +- .../ast/factories/expression-ast-factory.ts | 2 +- .../ast/factories/statement-ast-factory.ts | 2 +- kipper/core/src/compiler/ast/index.ts | 2 - .../compiler/ast/mapping/ast-node-mapper.ts | 34 +- .../declarations/declaration-semantics.ts | 17 + .../declaration-type-semantics.ts | 11 + .../ast/nodes/declarations/declaration.ts | 6 +- .../function-declaration-semantics.ts | 44 ++ .../function-declaration-type-semantics.ts | 18 + .../function-declaration.ts | 24 +- .../function-declaration/index.ts | 7 + .../compiler/ast/nodes/declarations/index.ts | 8 +- .../parameter-declaration/index.ts | 7 + .../parameter-declaration-semantics.ts | 34 ++ .../parameter-declaration-type-semantics.ts | 18 + .../parameter-declaration.ts | 18 +- .../variable-declaration/index.ts | 7 + .../variable-declaration-semantics.ts | 52 ++ .../variable-declaration-type-semantics.ts | 20 + .../variable-declaration.ts | 20 +- .../additive-expression-semantics.ts | 29 + .../additive-expression-type-semantics.ts | 11 + .../additive-expression.ts | 16 +- .../arithmetic/additive-expression/index.ts | 7 + .../arithmetic-expression-semantics.ts | 29 + .../arithmetic-expression-type-semantics.ts | 11 + .../arithmetic/arithmetic-expression.ts | 8 +- .../ast/nodes/expressions/arithmetic/index.ts | 7 +- .../multiplicative-expression/index.ts | 7 + .../multiplicative-expression-semantics.ts | 29 + ...ultiplicative-expression-type-semantics.ts | 11 + .../multiplicative-expression.ts | 18 +- .../assignment-expression-semantics.ts | 41 ++ .../assignment-expression-type-semantics.ts | 11 + .../assignment-expression.ts | 22 +- .../assignment-expression/index.ts | 7 + .../cast-or-convert-expression-semantics.ts | 30 + ...st-or-convert-expression-type-semantics.ts | 18 + .../cast-or-convert-expression.ts | 20 +- .../cast-or-convert-expression/index.ts | 7 + .../comparative-expression-semantics.ts | 31 + .../comparative-expression-type-semantics.ts | 13 + .../comparative-expression.ts | 11 +- .../equality-expression-semantics.ts | 29 + .../equality-expression-type-semantics.ts | 11 + .../equality-expression.ts | 18 +- .../equality-expression/index.ts | 7 + .../index.ts | 6 +- .../relational-expression/index.ts | 7 + .../relational-expression-semantics.ts | 29 + .../relational-expression-type-semantics.ts | 11 + .../relational-expression.ts | 18 +- .../conditional-expression-semantics.ts | 11 + .../conditional-expression-type-semantics.ts | 11 + .../conditional-expression.ts | 12 +- .../conditional-expression/index.ts | 7 + .../nodes/expressions/expression-semantics.ts | 11 + .../expressions/expression-type-semantics.ts | 21 + .../ast/nodes/expressions/expression.ts | 4 +- .../function-call-expression-semantics.ts | 30 + ...function-call-expression-type-semantics.ts | 19 + .../function-call-expression.ts | 17 +- .../function-call-expression/index.ts | 7 + .../compiler/ast/nodes/expressions/index.ts | 26 +- .../{logical => logical-expression}/index.ts | 6 +- .../logical-and-expression/index.ts | 7 + .../logical-and-expression-semantics.ts | 29 + .../logical-and-expression-type-semantics.ts | 11 + .../logical-and-expression.ts | 16 +- .../logical-expression-semantics.ts | 31 + .../logical-expression-type-semantics.ts | 13 + .../logical-expression.ts | 11 +- .../logical-or-expression/index.ts | 7 + .../logical-or-expression-semantics.ts | 29 + .../logical-or-expression-type-semantics.ts | 11 + .../logical-or-expression.ts | 18 +- .../member-access-expression/index.ts | 7 + .../member-access-expression-semantics.ts | 31 + ...member-access-expression-type-semantics.ts | 11 + .../member-access-expression.ts | 18 +- ...-decrement-postfix-expression-semantics.ts | 24 + ...ement-postfix-expression-type-semantics.ts | 11 + ...crement-or-decrement-postfix-expression.ts | 21 +- .../index.ts | 8 + .../expressions/postfix-expression/index.ts | 9 + .../postfix-expression-semantics.ts | 18 + .../postfix-expression-type-semantics.ts | 11 + .../postfix-expression/postfix-expression.ts | 48 ++ .../ast/nodes/expressions/postfix/index.ts | 6 - .../array-primary-expression-semantics.ts | 18 + ...array-primary-expression-type-semantics.ts | 11 + .../array-primary-expression.ts | 32 +- .../array-primary-expression/index.ts | 7 + .../bool-primary-expression-semantics.ts | 18 + .../bool-primary-expression-type-semantics.ts | 11 + .../bool-primary-expression.ts | 14 +- .../constant/bool-primary-expression/index.ts | 7 + .../constant/constant-expression-semantics.ts | 17 + .../constant-expression-type-semantics.ts | 11 + .../constant/constant-expression.ts | 14 +- .../primary-expression/constant/index.ts | 13 + .../number-primary-expression/index.ts | 7 + .../number-primary-expression-semantics.ts | 26 + ...umber-primary-expression-type-semantics.ts | 11 + .../number-primary-expression.ts | 12 +- .../string-primary-expression/index.ts | 7 + .../string-primary-expression-semantics.ts | 25 + ...tring-primary-expression-type-semantics.ts | 11 + .../string-primary-expression.ts | 12 +- .../index.ts | 8 + ...-undefined-primary-expression-semantics.ts | 18 + ...fined-primary-expression-type-semantics.ts | 11 + ...or-null-or-undefined-primary-expression.ts | 16 +- .../fstring-primary-expression-semantics.ts | 19 + ...tring-primary-expression-type-semantics.ts | 11 + .../fstring-primary-expression.ts | 16 +- .../fstring-primary-expression/index.ts | 7 + ...identifier-primary-expression-semantics.ts | 23 + ...ifier-primary-expression-type-semantics.ts | 21 + .../identifier-primary-expression.ts | 18 +- .../identifier-primary-expression/index.ts | 7 + .../expressions/primary-expression/index.ts | 12 + .../primary-expression-semantics.ts | 11 + .../primary-expression-type-semantics.ts | 11 + .../primary-expression/primary-expression.ts | 53 ++ .../tangled-primary-expression/index.ts | 7 + .../tangled-primary-expression-semantics.ts | 18 + ...ngled-primary-expression-type-semantics.ts | 11 + .../tangled-primary-expression.ts | 17 +- .../expressions/primary/constant/index.ts | 10 - .../ast/nodes/expressions/primary/index.ts | 9 - ...ric-type-specifier-expression-semantics.ts | 13 + ...ype-specifier-expression-type-semantics.ts | 13 + .../generic-type-specifier-expression.ts | 16 +- .../index.ts | 7 + ...ier-type-specifier-expression-semantics.ts | 19 + ...ype-specifier-expression-type-semantics.ts | 11 + .../identifier-type-specifier-expression.ts | 14 +- .../index.ts | 8 + .../type-specifier-expression/index.ts | 11 + .../type-specifier-expression-semantics.ts | 9 + ...ype-specifier-expression-type-semantics.ts | 19 + .../type-specifier-expression.ts | 13 +- .../typeof-type-specifier-expression/index.ts | 8 + ...eof-type-specifier-expression-semantics.ts | 13 + ...ype-specifier-expression-type-semantics.ts | 13 + .../typeof-type-specifier-expression.ts | 16 +- .../nodes/expressions/type-specifier/index.ts | 9 - ...or-decrement-unary-expression-semantics.ts | 18 + ...crement-unary-expression-type-semantics.ts | 11 + ...increment-or-decrement-unary-expression.ts | 20 +- .../index.ts | 8 + .../{unary => unary-expression}/index.ts | 6 +- .../index.ts | 8 + ...tor-modified-unary-expression-semantics.ts | 18 + ...odified-unary-expression-type-semantics.ts | 11 + .../operator-modified-unary-expression.ts | 21 +- .../unary-expression-semantics.ts | 26 + .../unary-expression-type-semantics.ts | 13 + .../unary-expression.ts | 8 +- .../src/compiler/ast/nodes/root-ast-node.ts | 2 +- .../compound-statement-semantics.ts | 11 + .../compound-statement-type-semantics.ts | 11 + .../compound-statement.ts | 18 +- .../statements/compound-statement/index.ts | 7 + .../expression-statement-semantics.ts | 11 + .../expression-statement-type-semantics.ts | 11 + .../expression-statement.ts | 13 +- .../statements/expression-statement/index.ts | 7 + .../if-statement/if-statement-semantics.ts | 34 ++ .../if-statement-type-semantics.ts | 11 + .../{ => if-statement}/if-statement.ts | 16 +- .../nodes/statements/if-statement/index.ts | 7 + .../compiler/ast/nodes/statements/index.ts | 14 +- ...hile-loop-iteration-statement-semantics.ts | 11 + ...loop-iteration-statement-type-semantics.ts | 11 + .../do-while-loop-iteration-statement.ts | 20 +- .../index.ts | 8 + .../for-loop-iteration-statement-semantics.ts | 39 ++ ...loop-iteration-statement-type-semantics.ts | 11 + .../for-loop-iteration-statement.ts | 22 +- .../for-loop-iteration-statement/index.ts | 8 + .../statements/iteration-statement/index.ts | 10 + .../iteration-statement-semantics.ts | 25 + .../iteration-statement-type-semantics.ts | 11 + .../iteration-statement.ts | 24 +- .../while-loop-iteration-statement/index.ts | 7 + ...hile-loop-iteration-statement-semantics.ts | 24 + ...loop-iteration-statement-type-semantics.ts | 11 + .../while-loop-iteration-statement.ts | 18 +- .../ast/nodes/statements/iteration/index.ts | 4 - .../nodes/statements/jump-statement/index.ts | 7 + .../jump-statement-semantics.ts | 24 + .../jump-statement-type-semantics.ts | 7 + .../{ => jump-statement}/jump-statement.ts | 14 +- .../statements/return-statement/index.ts | 7 + .../return-statement-semantics.ts | 24 + .../return-statement-type-semantics.ts | 18 + .../return-statement.ts | 14 +- .../nodes/statements/statement-semantics.ts | 11 + .../statements/statement-type-semantics.ts | 11 + .../ast/nodes/statements/statement.ts | 8 +- .../statements/switch-statement/index.ts | 7 + .../switch-statement-semantics.ts | 11 + .../switch-statement-type-semantics.ts | 11 + .../switch-statement.ts | 13 +- .../compiler/ast/semantic-data/definitions.ts | 131 ---- .../compiler/ast/semantic-data/expressions.ts | 563 ------------------ .../src/compiler/ast/semantic-data/index.ts | 7 - .../compiler/ast/semantic-data/statements.ts | 141 ----- .../src/compiler/ast/type-data/definitions.ts | 50 -- .../src/compiler/ast/type-data/expressions.ts | 238 -------- .../core/src/compiler/ast/type-data/index.ts | 7 - .../src/compiler/ast/type-data/statements.ts | 18 - kipper/core/src/compiler/compile-config.ts | 4 +- kipper/core/src/compiler/const.ts | 2 +- .../src/compiler/parser/antlr/KipperParser.ts | 25 +- .../parser/antlr/KipperParserListener.ts | 8 +- .../parser/antlr/KipperParserVisitor.ts | 6 +- .../parser/parse-rule-kind-mapping.ts | 2 +- .../target-presets/semantic-analyser.ts | 8 +- .../translation/code-generator.ts | 11 +- kipper/target-js/src/code-generator.ts | 6 +- kipper/target-js/src/semantic-analyser.ts | 2 +- 234 files changed, 2756 insertions(+), 1710 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/declaration-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/declaration-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/declarations/{ => function-declaration}/function-declaration.ts (91%) create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/function-declaration/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/declarations/{ => parameter-declaration}/parameter-declaration.ts (91%) create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/declarations/{ => variable-declaration}/variable-declaration.ts (94%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/arithmetic/{ => additive-expression}/additive-expression.ts (91%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/arithmetic/{ => multiplicative-expression}/multiplicative-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{ => assignment-expression}/assignment-expression.ts (91%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{ => cast-or-convert-expression}/cast-or-convert-expression.ts (88%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{comparative => comparative-expression}/comparative-expression.ts (79%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{comparative => comparative-expression/equality-expression}/equality-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/index.ts rename kipper/core/src/compiler/ast/nodes/expressions/{comparative => comparative-expression}/index.ts (50%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{comparative => comparative-expression/relational-expression}/relational-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{ => conditional-expression}/conditional-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{ => function-call-expression}/function-call-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/index.ts rename kipper/core/src/compiler/ast/nodes/expressions/{logical => logical-expression}/index.ts (55%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{logical => logical-expression/logical-and-expression}/logical-and-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{logical => logical-expression}/logical-expression.ts (80%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{logical => logical-expression/logical-or-expression}/logical-or-expression.ts (88%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{ => member-access-expression}/member-access-expression.ts (92%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{postfix => postfix-expression/increment-or-decrement-postfix-expression}/increment-or-decrement-postfix-expression.ts (89%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary/constant => primary-expression/constant/array-primary-expression}/array-primary-expression.ts (75%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary/constant => primary-expression/constant/bool-primary-expression}/bool-primary-expression.ts (87%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary => primary-expression}/constant/constant-expression.ts (76%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary/constant => primary-expression/constant/number-primary-expression}/number-primary-expression.ts (89%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary/constant => primary-expression/constant/string-primary-expression}/string-primary-expression.ts (89%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary/constant => primary-expression/constant/void-or-null-or-undefined-primary-expression}/void-or-null-or-undefined-primary-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary => primary-expression/fstring-primary-expression}/fstring-primary-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{primary => primary-expression/identifier-primary-expression}/identifier-primary-expression.ts (89%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{ => primary-expression/tangled-primary-expression}/tangled-primary-expression.ts (88%) delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{type-specifier => type-specifier-expression/generic-type-specifier-expression}/generic-type-specifier-expression.ts (88%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{type-specifier => type-specifier-expression/identifier-type-specifier-expression}/identifier-type-specifier-expression.ts (91%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{type-specifier => type-specifier-expression}/type-specifier-expression.ts (75%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{type-specifier => type-specifier-expression/typeof-type-specifier-expression}/typeof-type-specifier-expression.ts (87%) delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{unary => unary-expression/increment-or-decrement-unary-expression}/increment-or-decrement-unary-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/index.ts rename kipper/core/src/compiler/ast/nodes/expressions/{unary => unary-expression}/index.ts (51%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{unary => unary-expression/operator-modified-unary-expression}/operator-modified-unary-expression.ts (88%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/{unary => unary-expression}/unary-expression.ts (84%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{ => compound-statement}/compound-statement.ts (87%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/compound-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{ => expression-statement}/expression-statement.ts (87%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/expression-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{ => if-statement}/if-statement.ts (91%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/if-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{iteration => iteration-statement/do-while-loop-iteration-statement}/do-while-loop-iteration-statement.ts (86%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{iteration => iteration-statement/for-loop-iteration-statement}/for-loop-iteration-statement.ts (87%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{iteration => iteration-statement}/iteration-statement.ts (55%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{iteration => iteration-statement/while-loop-iteration-statement}/while-loop-iteration-statement.ts (88%) delete mode 100644 kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/jump-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{ => jump-statement}/jump-statement.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/return-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{ => return-statement}/return-statement.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/statements/statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/statement-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/switch-statement/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/statements/{ => switch-statement}/switch-statement.ts (88%) delete mode 100644 kipper/core/src/compiler/ast/semantic-data/definitions.ts delete mode 100644 kipper/core/src/compiler/ast/semantic-data/expressions.ts delete mode 100644 kipper/core/src/compiler/ast/semantic-data/index.ts delete mode 100644 kipper/core/src/compiler/ast/semantic-data/statements.ts delete mode 100644 kipper/core/src/compiler/ast/type-data/definitions.ts delete mode 100644 kipper/core/src/compiler/ast/type-data/expressions.ts delete mode 100644 kipper/core/src/compiler/ast/type-data/index.ts delete mode 100644 kipper/core/src/compiler/ast/type-data/statements.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 13538e34e..0e513f02f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,27 @@ To use development versions of Kipper download the - `kipper/core/compiler/ast/mapping`, which contains all AST mapping objects and the `ASTNodeMapper` class. - New class: - `ASTNodeMapper`, which handles the mapping between kind numbers, rule names, AST classes and parser context classes. + - `PrimaryExpression`, which is an abstract base class for all primary expressions. + - `PostfixExpression`, which is an abstract base class for all postfix expressions. +- New interfaces: + - `PrimaryExpressionSemantics`, which represents the semantics of a primary expression. + - `PrimaryExpressionTypeSemantics`, which represents the type semantics of a primary expression. + - `PostfixExpressionSemantics`, which represents the semantics of a postfix expression. + - `PostfixExpressionTypeSemantics`, which represents the type semantics of a postfix expression. + - `IterationStatementTypeSemantics`, which represents the type semantics of an iteration statement. + - `ExpressionStatementSemantics`, which represents the semantics of an expression statement. + - `ExpressionStatementTypeSemantics`, which represents the type semantics of an expression statement. + - `StatementSemantics`, which represents the semantics of a statement. + - `StatementTypeSemantics`, which represents the type semantics of a statement. + - `IfStatementTypeSemantics`, which represents the type semantics of an if statement. + - `CompoundStatementSemantics`, which represents the semantics of a compound statement. + - `CompoundStatementTypeSemantics`, which represents the type semantics of a compound statement. + - `ForLoopStatementTypeSemantics`, which represents the type semantics of a for loop statement. + - `DoWhileLoopIterationStatementTypeSemantics`, which represents the type semantics of a do-while loop statement. + - `WhileLoopStatementTypeSemantics`, which represents the type semantics of a while loop statement. + - `JumpStatementTypeSemantics`, which represents the type semantics of a jump statement. + - `SwitchStatementSemantics`, which represents the semantics of a switch statement. + - `SwitchStatementTypeSemantics`, which represents the type semantics of a switch statement. - New parameters: - `ignoreParams` in `genJSFunction()`, which, if true makes the function signature define no parameters. - `ignoreParams` in `createJSFunctionSignature()`, which, if true makes the function signature define no parameters. @@ -84,9 +105,14 @@ To use development versions of Kipper download the `DoWhileLoopStatement` to `DoWhileLoopIterationStatement`. This also includes changing the name in the `KipperTargetCodeGenerator`, `KipperTargetSemanticAnalyser` and `KipperTargetBuiltInGenerator` classes. - File `kipper/core/compiler/parser/parser-ast-mapping.ts` to `parse-rule-kind-mappings.ts`. + - Class `ArrayLiteralPrimaryExpression` to `ArrayPrimaryExpression`. + - Interface `ArrayLiteralPrimaryExpressionSemantics` to `ArrayPrimaryExpressionSemantics`. + - Interface `ArrayLiteralPrimaryExpressionTypeSemantics` to `ArrayPrimaryExpressionTypeSemantics`. + - Interface `TangledPrimaryTypeSemantics` to `TangledPrimaryExpressionTypeSemantics`. + - Interface `DoWhileLoopStatementSemantics` to `DoWhileLoopIterationStatementSemantics`. - Moved: - - `kipper/core/utils.ts` to `kipper/core/tools` and separated it into multiple files & modules. - - `kipper/core/compiler/ast/root-ast-node.ts` to the `kipper/core/compiler/ast/nodes` module. + - `kipper/core/utils.ts` to `kipper/core/tools` and separated it into multiple files & modules. + - `kipper/core/compiler/ast/root-ast-node.ts` to the `kipper/core/compiler/ast/nodes` module. - `kipper/core/compiler/ast/ast-types.ts` to the new `kipper/core/compiler/ast/common` module. ### Fixed diff --git a/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts b/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts index 71cc590c7..a5ec7d07e 100644 --- a/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts @@ -14,7 +14,7 @@ import { IterationStatement, JumpStatement, ReturnStatement, - VariableDeclaration + VariableDeclaration, } from "../../ast"; import { KipperSemanticsAsserter } from "./err-handler"; import { @@ -22,7 +22,7 @@ import { Scope, ScopeDeclaration, ScopeFunctionDeclaration, - ScopeVariableDeclaration + ScopeVariableDeclaration, } from "../symbol-table"; import { BuiltInOrInternalGeneratorFunctionNotFoundError, @@ -37,7 +37,7 @@ import { MissingFunctionBodyError, UndefinedConstantError, UndefinedReferenceError, - UnknownReferenceError + UnknownReferenceError, } from "../../../errors"; /** diff --git a/kipper/core/src/compiler/analysis/analyser/type-checker.ts b/kipper/core/src/compiler/analysis/analyser/type-checker.ts index d5cc3f62f..dffcdd1a5 100644 --- a/kipper/core/src/compiler/analysis/analyser/type-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/type-checker.ts @@ -8,7 +8,7 @@ import type { KipperProgramContext } from "../../program-ctx"; import type { IncrementOrDecrementPostfixExpressionSemantics, ParameterDeclarationSemantics, - UnaryExpressionSemantics + UnaryExpressionSemantics, } from "../../ast"; import { AssignmentExpression, @@ -24,7 +24,7 @@ import { ReturnStatement, Statement, TangledPrimaryExpression, - UnaryExpression + UnaryExpression, } from "../../ast"; import { KipperSemanticsAsserter } from "./err-handler"; import { ScopeDeclaration, ScopeParameterDeclaration, ScopeVariableDeclaration } from "../symbol-table"; @@ -37,7 +37,7 @@ import { KipperReferenceable, KipperReferenceableFunction, kipperStrType, - kipperSupportedConversions + kipperSupportedConversions, } from "../../const"; import { ArgumentTypeError, @@ -55,7 +55,7 @@ import { KipperNotImplementedError, ReadOnlyWriteTypeError, UnknownTypeError, - ValueNotIndexableTypeError + ValueNotIndexableTypeError, } from "../../../errors"; import { CheckedType, UncheckedType, UndefinedCustomType } from "../type"; diff --git a/kipper/core/src/compiler/analysis/reference.ts b/kipper/core/src/compiler/analysis/reference.ts index e2df74711..e36cf92fe 100644 --- a/kipper/core/src/compiler/analysis/reference.ts +++ b/kipper/core/src/compiler/analysis/reference.ts @@ -13,7 +13,7 @@ import { InternalFunction } from "../runtime-built-ins"; * identifier's metadata and reference expression. * @since 0.8.0 */ -export interface Reference { +export interface Reference { /** * The target that this reference points to. * @since 0.8.0 diff --git a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts index 2b9176e3b..c6f89146f 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts @@ -6,7 +6,7 @@ import { FunctionDeclaration, FunctionDeclarationSemantics, FunctionDeclarationTypeSemantics, - ParameterDeclaration + ParameterDeclaration, } from "../../../ast"; import { ScopeDeclaration } from "./scope-declaration"; import { CheckedType } from "../../type"; diff --git a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts index 2934ad14a..5f55743e3 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-parameter-declaration.ts @@ -7,7 +7,7 @@ import type { FunctionDeclaration, ParameterDeclaration, ParameterDeclarationSemantics, - ParameterDeclarationTypeSemantics + ParameterDeclarationTypeSemantics, } from "../../../ast"; import type { LocalScope } from "../index"; import type { CheckedType } from "../../type"; diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 7fb8ec135..54fa9ada6 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -6,7 +6,7 @@ import type { ASTNodeParserContext, ParserDeclarationContext, ParserExpressionContext, - ParserStatementContext + ParserStatementContext, } from "./common"; import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; import type { @@ -19,7 +19,7 @@ import type { ActualLogicalOrExpressionContext, ActualMultiplicativeExpressionContext, ActualRelationalExpressionContext, - ArrayLiteralPrimaryExpressionContext, + ArrayPrimaryExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, CompilationUnitContext, @@ -65,7 +65,7 @@ import type { TypeSpecifierExpressionContext, VariableDeclarationContext, VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext + WhileLoopIterationStatementContext, } from "../parser"; import type { KipperProgramContext } from "../program-ctx"; import type { CompilableASTNode } from "./compilable-ast-node"; @@ -356,15 +356,13 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi * Enter a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public enterArrayLiteralPrimaryExpression: (ctx: ArrayLiteralPrimaryExpressionContext) => void = - this.handleEnteringTreeNode; + public enterArrayPrimaryExpression: (ctx: ArrayPrimaryExpressionContext) => void = this.handleEnteringTreeNode; /** * Exit a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public exitArrayLiteralPrimaryExpression: (ctx: ArrayLiteralPrimaryExpressionContext) => void = - this.handleExitingTreeNode; + public exitArrayPrimaryExpression: (ctx: ArrayPrimaryExpressionContext) => void = this.handleExitingTreeNode; /** * Enter a parse tree produced by `KipperParser.boolPrimaryExpression`. diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index 2f871a55f..17f5aea7d 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -4,7 +4,7 @@ */ import type { AdditiveExpressionContext, - ArrayLiteralPrimaryExpressionContext, + ArrayPrimaryExpressionContext, AssignmentExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, @@ -41,7 +41,7 @@ import type { TypeofTypeSpecifierExpressionContext, VariableDeclarationContext, VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext + WhileLoopIterationStatementContext, } from "../../parser"; import { KindParseRuleMapping } from "../../parser"; @@ -51,7 +51,7 @@ import { KindParseRuleMapping } from "../../parser"; */ export type ParserExpressionContext = | NumberPrimaryExpressionContext - | ArrayLiteralPrimaryExpressionContext + | ArrayPrimaryExpressionContext | IdentifierPrimaryExpressionContext | VoidOrNullOrUndefinedPrimaryExpressionContext | BoolPrimaryExpressionContext @@ -185,9 +185,9 @@ export type ConstructableASTKind = ASTDeclarationKind | ASTStatementKind | ASTEx * @since 0.11.0 */ export type ASTDeclarationRuleName = - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_functionDeclaration] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_parameterDeclaration] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_variableDeclaration]; + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_functionDeclaration] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_parameterDeclaration] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_variableDeclaration]; /** * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link Statement} AST @@ -195,15 +195,15 @@ export type ASTDeclarationRuleName = * @since 0.11.0 */ export type ASTStatementRuleName = - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_compoundStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_ifStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_switchStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_expressionStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_doWhileLoopIterationStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_whileLoopIterationStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_forLoopIterationStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_jumpStatement] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_returnStatement]; + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_compoundStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_ifStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_switchStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_expressionStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_doWhileLoopIterationStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_whileLoopIterationStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_forLoopIterationStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_jumpStatement] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_returnStatement]; /** * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link Expression} AST @@ -211,31 +211,31 @@ export type ASTStatementRuleName = * @since 0.11.0 */ export type ASTExpressionRuleName = - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_numberPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_boolPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_stringPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_fStringPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_tangledPrimaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_functionCallExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_castOrConvertExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_multiplicativeExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_additiveExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_relationalExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_equalityExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_logicalAndExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_logicalOrExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_conditionalExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_assignmentExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression] - | typeof KindParseRuleMapping[typeof ParseRuleKindMapping.RULE_memberAccessExpression]; + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_numberPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_boolPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_stringPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_fStringPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_tangledPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_functionCallExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_incrementOrDecrementUnaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_operatorModifiedUnaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_castOrConvertExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_multiplicativeExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_additiveExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_relationalExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_equalityExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_logicalAndExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_logicalOrExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_conditionalExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_assignmentExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_memberAccessExpression]; /** * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link CompilableASTNode}. diff --git a/kipper/core/src/compiler/ast/compilable-ast-node.ts b/kipper/core/src/compiler/ast/compilable-ast-node.ts index 5bcbedbb8..a6dde576e 100644 --- a/kipper/core/src/compiler/ast/compilable-ast-node.ts +++ b/kipper/core/src/compiler/ast/compilable-ast-node.ts @@ -7,7 +7,7 @@ import type { KipperCompileTarget, KipperTargetCodeGenerator, KipperTargetSemanticAnalyser, - TargetASTNodeCodeGenerator + TargetASTNodeCodeGenerator, } from "../target-presets"; import type { KipperParser, KipperParserRuleContext } from "../parser"; import type { TypeData } from "./ast-node"; diff --git a/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts b/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts index 3a5415ea1..ffb2acd82 100644 --- a/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts +++ b/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts @@ -57,7 +57,7 @@ export class DeclarationASTNodeFactory extends ASTNodeFactory( kind: T, - ): typeof ASTNodeMapper.declarationKindToClassMap[T] { + ): (typeof ASTNodeMapper.declarationKindToClassMap)[T] { return this.declarationKindToClassMap[kind]; } @@ -314,7 +314,7 @@ export class ASTNodeMapper { */ public static mapExpressionKindToClass( kind: T, - ): typeof ASTNodeMapper.expressionKindToClassMap[T] { + ): (typeof ASTNodeMapper.expressionKindToClassMap)[T] { return this.expressionKindToClassMap[kind]; } @@ -328,7 +328,7 @@ export class ASTNodeMapper { */ public static mapStatementKindToClass( kind: T, - ): typeof ASTNodeMapper.statementKindToClassMap[T] { + ): (typeof ASTNodeMapper.statementKindToClassMap)[T] { return this.statementKindToClassMap[kind]; } @@ -341,7 +341,7 @@ export class ASTNodeMapper { */ public static mapDeclarationKindToRuleContext( kind: T, - ): typeof ASTNodeMapper.declarationKindToRuleContextMap[T] { + ): (typeof ASTNodeMapper.declarationKindToRuleContextMap)[T] { return this.declarationKindToRuleContextMap[kind]; } @@ -354,7 +354,7 @@ export class ASTNodeMapper { */ public static mapExpressionKindToRuleContext( kind: T, - ): typeof ASTNodeMapper.expressionKindToRuleContextMap[T] { + ): (typeof ASTNodeMapper.expressionKindToRuleContextMap)[T] { return this.expressionKindToRuleContextMap[kind]; } @@ -367,7 +367,7 @@ export class ASTNodeMapper { */ public static mapStatementKindToRuleContext( kind: T, - ): typeof ASTNodeMapper.statementKindToRuleContextMap[T] { + ): (typeof ASTNodeMapper.statementKindToRuleContextMap)[T] { return this.statementKindToRuleContextMap[kind]; } @@ -380,7 +380,7 @@ export class ASTNodeMapper { */ public static mapDeclarationRuleNameToClass( name: T, - ): typeof ASTNodeMapper.declarationRuleNameToClassMap[T] { + ): (typeof ASTNodeMapper.declarationRuleNameToClassMap)[T] { return this.declarationRuleNameToClassMap[name]; } @@ -393,7 +393,7 @@ export class ASTNodeMapper { */ public static mapExpressionRuleNameToClass( name: T, - ): typeof ASTNodeMapper.expressionRuleNameToClassMap[T] { + ): (typeof ASTNodeMapper.expressionRuleNameToClassMap)[T] { return this.expressionRuleNameToClassMap[name]; } @@ -406,7 +406,7 @@ export class ASTNodeMapper { */ public static mapStatementRuleNameToClass( name: T, - ): typeof ASTNodeMapper.statementRuleNameToClassMap[T] { + ): (typeof ASTNodeMapper.statementRuleNameToClassMap)[T] { return this.statementRuleNameToClassMap[name]; } } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration-semantics.ts new file mode 100644 index 000000000..5932142fc --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration-semantics.ts @@ -0,0 +1,17 @@ +/** + * Semantics for a {@link Declaration}. + * @since 0.5.0 + */ +import type { SemanticData } from "../../ast-node"; + +/** + * Semantics for a {@link Declaration}. + * @since 0.5.0 + */ +export interface DeclarationSemantics extends SemanticData { + /** + * The identifier of the declaration. + * @since 0.5.0 + */ + identifier: string; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration-type-semantics.ts new file mode 100644 index 000000000..8e9572914 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for a {@link Declaration}. + * @since 0.10.0 + */ +import type { TypeData } from "../../ast-node"; + +/** + * Type semantics for a {@link Declaration}. + * @since 0.10.0 + */ +export interface DeclarationTypeSemantics extends TypeData {} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts index ed935d782..45afea8bd 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -9,8 +9,8 @@ * function and its local scope. * @since 0.1.0 */ -import type { DeclarationSemantics } from "../../semantic-data"; -import type { DeclarationTypeData } from "../../type-data"; +import type { DeclarationSemantics } from "./declaration-semantics"; +import type { DeclarationTypeSemantics } from "./declaration-type-semantics"; import type { TranslatedCodeLine } from "../../../const"; import type { ASTDeclarationKind, ASTDeclarationRuleName, ParserDeclarationContext } from "../../common"; import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; @@ -31,7 +31,7 @@ import { MissingRequiredSemanticDataError, UndefinedDeclarationCtxError } from " */ export abstract class Declaration< Semantics extends DeclarationSemantics = DeclarationSemantics, - TypeData extends DeclarationTypeData = DeclarationTypeData, + TypeData extends DeclarationTypeSemantics = DeclarationTypeSemantics, > extends CompilableASTNode { /** * The private field '_antlrRuleCtx' that actually stores the variable data, diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts new file mode 100644 index 000000000..7c5d20d73 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts @@ -0,0 +1,44 @@ +/** + * Semantics for AST Node {@link FunctionDeclaration}. + * @since 0.3.0 + */ +import type { UncheckedType } from "../../../../analysis"; +import type { CompoundStatement, IdentifierTypeSpecifierExpression, ParameterDeclaration } from "../../../nodes"; +import type { DeclarationSemantics } from "../declaration-semantics"; + +/** + * Semantics for AST Node {@link FunctionDeclaration}. + * @since 0.3.0 + */ +export interface FunctionDeclarationSemantics extends DeclarationSemantics { + /** + * The identifier of the function. + * @since 0.5.0 + */ + identifier: string; + /** + * The {@link KipperType return type} of the function. + * @since 0.5.0 + */ + returnType: UncheckedType; + /** + * The type specifier expression for the return type. + * @since 0.10.0 + */ + returnTypeSpecifier: IdentifierTypeSpecifierExpression; + /** + * Returns true if this declaration defines the function body for the function. + * @since 0.5.0 + */ + isDefined: boolean; + /** + * The available {@link ParameterDeclaration parameter} for the function invocation. + * @since 0.10.0 + */ + params: Array; + /** + * The body of the function. + * @since 0.10.0 + */ + functionBody: CompoundStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts new file mode 100644 index 000000000..b1a6fb123 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts @@ -0,0 +1,18 @@ +/** + * Type semantics for AST Node {@link FunctionDeclaration}. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../../analysis"; +import { DeclarationTypeSemantics } from "../declaration-type-semantics"; + +/** + * Type semantics for AST Node {@link FunctionDeclaration}. + * @since 0.10.0 + */ +export interface FunctionDeclarationTypeSemantics extends DeclarationTypeSemantics { + /** + * The {@link KipperType return type} of the function. + * @since 0.10.0 + */ + returnType: CheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts similarity index 91% rename from kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts rename to kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts index af63aeec4..eec33d445 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts @@ -3,23 +3,23 @@ * language and is compilable using {@link translateCtxAndChildren}. * @since 0.1.2 */ -import type { ScopeNode } from "../../scope-node"; -import type { FunctionDeclarationSemantics } from "../../semantic-data"; -import type { FunctionDeclarationTypeSemantics } from "../../type-data"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import type { CompoundStatement, Statement } from "../statements"; -import type { IdentifierTypeSpecifierExpression } from "../expressions"; -import { FunctionScope, ScopeFunctionDeclaration, UncheckedType } from "../../../analysis"; +import type { ScopeNode } from "../../../scope-node"; +import type { FunctionDeclarationSemantics } from "./function-declaration-semantics"; +import type { FunctionDeclarationTypeSemantics } from "./function-declaration-type-semantics"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { CompoundStatement, Statement } from "../../statements"; +import type { IdentifierTypeSpecifierExpression } from "../../expressions"; +import { FunctionScope, ScopeFunctionDeclaration, UncheckedType } from "../../../../analysis"; import { CompoundStatementContext, DeclaratorContext, FunctionDeclarationContext, KindParseRuleMapping, - ParseRuleKindMapping -} from "../../../parser"; -import { Declaration } from "./declaration"; -import { ParameterDeclaration } from "./parameter-declaration"; -import { UnableToDetermineSemanticDataError } from "../../../../errors"; + ParseRuleKindMapping, +} from "../../../../parser"; +import { Declaration } from "../declaration"; +import { ParameterDeclaration } from "../parameter-declaration"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; /** * Function definition class, which represents the definition of a function in the Kipper diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/index.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/index.ts new file mode 100644 index 000000000..5ab3e9922 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link FunctionDeclaration} and the related {@link FunctionDeclarationSemantics semantics} and + * {@link FunctionDeclarationTypeSemantics type semantics}. + */ +export * from "./function-declaration"; +export * from "./function-declaration-semantics"; +export * from "./function-declaration-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/index.ts b/kipper/core/src/compiler/ast/nodes/declarations/index.ts index 51654fb51..e782ff02e 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/index.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/index.ts @@ -4,6 +4,8 @@ * @since 0.11.0 */ export * from "./declaration"; -export * from "./parameter-declaration"; -export * from "./function-declaration"; -export * from "./variable-declaration"; +export * from "./declaration-semantics"; +export * from "./declaration-type-semantics"; +export * from "./parameter-declaration/"; +export * from "./function-declaration/"; +export * from "./variable-declaration/"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/index.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/index.ts new file mode 100644 index 000000000..a8f320996 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link ParameterDeclaration} and the related {@link ParameterDeclarationSemantics semantics} and + * {@link ParameterDeclarationTypeSemantics type semantics}. + */ +export * from "./parameter-declaration"; +export * from "./parameter-declaration-semantics"; +export * from "./parameter-declaration-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-semantics.ts new file mode 100644 index 000000000..2e4118c63 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-semantics.ts @@ -0,0 +1,34 @@ +/** + * Semantics for AST Node {@link FunctionDeclaration}. + * @since 0.3.0 + */ +import type { UncheckedType } from "../../../../analysis"; +import type { FunctionDeclaration, IdentifierTypeSpecifierExpression } from "../../../nodes"; +import type { DeclarationSemantics } from "../declaration-semantics"; + +/** + * Semantics for AST Node {@link ParameterDeclaration}. + * @since 0.5.0 + */ +export interface ParameterDeclarationSemantics extends DeclarationSemantics { + /** + * The identifier of the parameter. + * @since 0.5.0 + */ + identifier: string; + /** + * The {@link KipperType type} of the parameter. + * @since 0.5.0 + */ + valueType: UncheckedType; + /** + * The type specifier expression for the parameter type. + * @since 0.10.0 + */ + valueTypeSpecifier: IdentifierTypeSpecifierExpression; + /** + * The parent function of this parameter. + * @since 0.10.0 + */ + func: FunctionDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-type-semantics.ts new file mode 100644 index 000000000..49170ea1d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration-type-semantics.ts @@ -0,0 +1,18 @@ +/** + * Type semantics for AST Node {@link FunctionDeclaration}. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../../analysis"; +import type { DeclarationTypeSemantics } from "../declaration-type-semantics"; + +/** + * Type semantics for AST Node {@link ParameterDeclaration}. + * @since 0.10.0 + */ +export interface ParameterDeclarationTypeSemantics extends DeclarationTypeSemantics { + /** + * The {@link KipperType type} of the parameter. + * @since 0.10.0 + */ + valueType: CheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts similarity index 91% rename from kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts rename to kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts index d88225858..9982e285c 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts @@ -2,15 +2,15 @@ * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. * @since 0.1.2 */ -import type { ParameterDeclarationSemantics } from "../../semantic-data"; -import type { ParameterDeclarationTypeSemantics } from "../../type-data"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import type { FunctionScope, ScopeParameterDeclaration } from "../../../analysis"; -import type { FunctionDeclaration } from "./function-declaration"; -import type { IdentifierTypeSpecifierExpression } from "../expressions"; -import { Declaration } from "./declaration"; -import { KindParseRuleMapping, ParameterDeclarationContext, ParseRuleKindMapping } from "../../../parser"; -import { getParseTreeSource } from "../../../../tools"; +import type { ParameterDeclarationSemantics } from "./parameter-declaration-semantics"; +import type { ParameterDeclarationTypeSemantics } from "./parameter-declaration-type-semantics"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { FunctionScope, ScopeParameterDeclaration } from "../../../../analysis"; +import type { FunctionDeclaration } from "../function-declaration"; +import type { IdentifierTypeSpecifierExpression } from "../../expressions"; +import { Declaration } from "../declaration"; +import { KindParseRuleMapping, ParameterDeclarationContext, ParseRuleKindMapping } from "../../../../parser"; +import { getParseTreeSource } from "../../../../../tools"; /** * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/index.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/index.ts new file mode 100644 index 000000000..6f76c8c0d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link VariableDeclaration} and the related {@link VariableDeclarationSemantics semantics} and + * {@link VariableDeclarationTypeSemantics type semantics}. + */ +export * from "./variable-declaration"; +export * from "./variable-declaration-semantics"; +export * from "./variable-declaration-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-semantics.ts new file mode 100644 index 000000000..f2f46ef42 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-semantics.ts @@ -0,0 +1,52 @@ +/** + * Semantics for AST Node {@link FunctionDeclaration}. + * @since 0.3.0 + */ +import type { KipperStorageType } from "../../../../const"; +import type { Scope, UncheckedType } from "../../../../analysis"; +import type { Expression, IdentifierTypeSpecifierExpression } from "../../../nodes"; +import type { DeclarationSemantics } from "../declaration-semantics"; + +/** + * Semantics for AST Node {@link VariableDeclaration}. + * @since 0.3.0 + */ +export interface VariableDeclarationSemantics extends DeclarationSemantics { + /** + * The identifier of this variable. + * @since 0.5.0 + */ + identifier: string; + /** + * The storage type option for this variable. + * @since 0.5.0 + */ + storageType: KipperStorageType; + /** + * The type of the value as a string. + * + * The identifier of the {@link valueTypeSpecifier.semanticData.identifier typeSpecifier}. + * @since 0.5.0 + */ + valueType: UncheckedType; + /** + * The type specifier expression for the variable type. + * @since 0.10.0 + */ + valueTypeSpecifier: IdentifierTypeSpecifierExpression; + /** + * If this is true then the variable has a defined value. + * @since 0.5.0 + */ + isDefined: boolean; + /** + * The scope of this variable. + * @since 0.5.0 + */ + scope: Scope; + /** + * The assigned value to this variable. If {@link isDefined} is false, then this value is undefined. + * @since 0.7.0 + */ + value: Expression | undefined; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts new file mode 100644 index 000000000..52756c66b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts @@ -0,0 +1,20 @@ +/** + * Type semantics for AST Node {@link FunctionDeclaration}. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../../analysis"; +import { DeclarationTypeSemantics } from "../declaration-type-semantics"; + +/** + * Type semantics for AST Node {@link VariableDeclaration}. + * @since 0.10.0 + */ +export interface VariableDeclarationTypeSemantics extends DeclarationTypeSemantics { + /** + * The type of the value that may be stored in this variable. + * + * This is the type evaluated using the {@link VariableDeclarationSemantics.valueType valueType identifier}. + * @since 0.10.0 + */ + valueType: CheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts similarity index 94% rename from kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts rename to kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts index b25ce863c..162d80f3b 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts @@ -5,23 +5,23 @@ * In case that {@link scope} is of type {@link KipperProgramContext}, then the scope is defined as global * (accessible for the entire program). */ -import type { VariableDeclarationSemantics } from "../../semantic-data"; -import type { VariableDeclarationTypeSemantics } from "../../type-data"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import type { ScopeVariableDeclaration, UncheckedType } from "../../../analysis"; -import type { Expression, IdentifierTypeSpecifierExpression } from "../expressions"; +import type { VariableDeclarationSemantics } from "./variable-declaration-semantics"; +import type { VariableDeclarationTypeSemantics } from "./variable-declaration-type-semantics"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { ScopeVariableDeclaration, UncheckedType } from "../../../../analysis"; +import type { Expression, IdentifierTypeSpecifierExpression } from "../../expressions"; import type { ParseTree } from "antlr4ts/tree"; -import type { KipperStorageType } from "../../../const"; -import { Declaration } from "./declaration"; +import type { KipperStorageType } from "../../../../const"; +import { Declaration } from "../declaration"; import { DeclaratorContext, InitDeclaratorContext, KindParseRuleMapping, ParseRuleKindMapping, storageTypeSpecifierContext, - VariableDeclarationContext -} from "../../../parser"; -import { UnableToDetermineSemanticDataError } from "../../../../errors"; + VariableDeclarationContext, +} from "../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; /** * Variable declaration class, which represents the declaration and or definition of a variable in the Kipper diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-semantics.ts new file mode 100644 index 000000000..99446bab0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-semantics.ts @@ -0,0 +1,29 @@ +/** + * Semantics for AST Node {@link AdditiveExpression}. + * @since 0.5.0 + */ +import type { ArithmeticExpressionSemantics } from "../arithmetic-expression-semantics"; +import type { Expression } from "../../expression"; +import type { KipperAdditiveOperator } from "../../../../../const"; + +/** + * Semantics for AST Node {@link AdditiveExpression}. + * @since 0.5.0 + */ +export interface AdditiveExpressionSemantics extends ArithmeticExpressionSemantics { + /** + * The first expression. The left side of the expression. + * @since 0.6.0 + */ + leftOp: Expression; + /** + * The second expression. The right side of the expression. + * @since 0.6.0 + */ + rightOp: Expression; + /** + * The operator using the two values {@link this.leftOp leftOp} and {@link this.rightOp rightOp} to generate a result. + * @since 0.6.0 + */ + operator: KipperAdditiveOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-type-semantics.ts new file mode 100644 index 000000000..a2e60e879 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link AdditiveExpression}. + * @since 0.10.0 + */ +import type { ArithmeticExpressionTypeSemantics } from "../arithmetic-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link AdditiveExpression}. + * @since 0.10.0 + */ +export interface AdditiveExpressionTypeSemantics extends ArithmeticExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression.ts similarity index 91% rename from kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression.ts index f872c4ae6..6e9c2cc86 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression.ts @@ -7,15 +7,15 @@ * 4 + 4 // 8 * 9 - 3 // 6 */ -import type { AdditiveExpressionSemantics } from "../../../semantic-data"; -import type { AdditiveExpressionTypeSemantics } from "../../../type-data"; -import type { Expression } from "../expression"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { AdditiveExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { KipperAdditiveOperator, kipperAdditiveOperators } from "../../../../const"; +import type { AdditiveExpressionSemantics } from "./additive-expression-semantics"; +import type { AdditiveExpressionTypeSemantics } from "./additive-expression-type-semantics"; +import type { Expression } from "../../expression"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { AdditiveExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { KipperAdditiveOperator, kipperAdditiveOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { ArithmeticExpression } from "./arithmetic-expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { ArithmeticExpression } from "../arithmetic-expression"; /** * Additive expression, which can be used add together or concatenate two expressions. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/index.ts new file mode 100644 index 000000000..f15a3c75c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link AdditiveExpression} and the related {@link AdditiveExpressionSemantics semantics} and + * {@link AdditiveExpressionTypeSemantics type semantics}. + */ +export * from "./additive-expression"; +export * from "./additive-expression-semantics"; +export * from "./additive-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-semantics.ts new file mode 100644 index 000000000..a1eac0d5b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-semantics.ts @@ -0,0 +1,29 @@ +/** + * Semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). + * @since 0.6.0 + */ +import type { ExpressionSemantics } from "../expression-semantics"; +import type { Expression } from "../expression"; +import type { KipperArithmeticOperator } from "../../../../const"; + +/** + * Semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). + * @since 0.6.0 + */ +export interface ArithmeticExpressionSemantics extends ExpressionSemantics { + /** + * The left operand of the expression. + * @since 0.10.0 + */ + leftOp: Expression; + /** + * The right operand of the expression. + * @since 0.10.0 + */ + rightOp: Expression; + /** + * The operator using the two values {@link this.leftOp leftOp} and {@link this.rightOp rightOp} to generate a result. + * @since 0.6.0 + */ + operator: KipperArithmeticOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts new file mode 100644 index 000000000..acdcf5c64 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). + * @since 0.10.0 + */ +import { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). + * @since 0.10.0 + */ +export interface ArithmeticExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts index 0009d727d..32ed0d7e5 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts @@ -4,8 +4,8 @@ * comparative expressions. * @since 0.9.0 */ -import type { ArithmeticExpressionSemantics } from "../../../semantic-data"; -import type { ArithmeticExpressionTypeSemantics } from "../../../type-data"; +import type { ArithmeticExpressionSemantics } from "./arithmetic-expression-semantics"; +import type { ArithmeticExpressionTypeSemantics } from "./arithmetic-expression-type-semantics"; import type { ParseRuleKindMapping } from "../../../../parser"; import { KindParseRuleMapping } from "../../../../parser"; import { Expression } from "../expression"; @@ -24,7 +24,7 @@ export type ASTArithmeticExpressionKind = * @since 0.10.0 */ export type ParserArithmeticExpressionContext = InstanceType< - typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTArithmeticExpressionKind] + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTArithmeticExpressionKind] >; /** @@ -32,7 +32,7 @@ export type ParserArithmeticExpressionContext = InstanceType< * AST node. * @since 0.11.0 */ -export type ParserArithmeticExpressionRuleName = typeof KindParseRuleMapping[ASTArithmeticExpressionKind]; +export type ParserArithmeticExpressionRuleName = (typeof KindParseRuleMapping)[ASTArithmeticExpressionKind]; /** * Abstract arithmetic expression class representing an arithmetic expression, which can be used to perform calculations diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts index c5aeffb12..4a26af6d8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/index.ts @@ -3,5 +3,8 @@ * calculations based on two expressions. * @since 0.11.0 */ -export * from "./additive-expression"; -export * from "./multiplicative-expression"; +export * from "./arithmetic-expression"; +export * from "./arithmetic-expression-semantics"; +export * from "./arithmetic-expression-type-semantics"; +export * from "./additive-expression/"; +export * from "./multiplicative-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/index.ts new file mode 100644 index 000000000..61d34d5e3 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link MultiplicativeExpression} and the related {@link MultiplicativeExpressionSemantics semantics} and + * {@link MultiplicativeExpressionTypeSemantics type semantics}. + */ +export * from "./multiplicative-expression"; +export * from "./multiplicative-expression-semantics"; +export * from "./multiplicative-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-semantics.ts new file mode 100644 index 000000000..7cf74d3dd --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-semantics.ts @@ -0,0 +1,29 @@ +/** + * Semantics for AST Node {@link MultiplicativeExpression}. + * @since 0.5.0 + */ +import type { Expression } from "../../expression"; +import type { KipperMultiplicativeOperator } from "../../../../../const"; +import type { ArithmeticExpressionSemantics } from "../arithmetic-expression-semantics"; + +/** + * Semantics for AST Node {@link MultiplicativeExpression}. + * @since 0.5.0 + */ +export interface MultiplicativeExpressionSemantics extends ArithmeticExpressionSemantics { + /** + * The first expression. The left side of the expression. + * @since 0.6.0 + */ + leftOp: Expression; + /** + * The second expression. The right side of the expression. + * @since 0.6.0 + */ + rightOp: Expression; + /** + * The operator using the two values {@link this.leftOp leftOp} and {@link this.rightOp rightOp} to generate a result. + * @since 0.6.0 + */ + operator: KipperMultiplicativeOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-type-semantics.ts new file mode 100644 index 000000000..bf2e612fb --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link MultiplicativeExpression}. + * @since 0.10.0 + */ +import type { ArithmeticExpressionTypeSemantics } from "../arithmetic-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link MultiplicativeExpression}. + * @since 0.10.0 + */ +export interface MultiplicativeTypeSemantics extends ArithmeticExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts index 56fb22733..77c087d85 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts @@ -9,16 +9,16 @@ * 96 % 15 // 6 * 2 ** 8 // 256 */ -import type { MultiplicativeExpressionSemantics } from "../../../semantic-data"; -import type { MultiplicativeTypeSemantics } from "../../../type-data"; -import type { Expression } from "../expression"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { KindParseRuleMapping, MultiplicativeExpressionContext, ParseRuleKindMapping } from "../../../../parser"; -import { KipperMultiplicativeOperator, kipperMultiplicativeOperators } from "../../../../const"; +import type { MultiplicativeExpressionSemantics } from "./multiplicative-expression-semantics"; +import type { MultiplicativeTypeSemantics } from "./multiplicative-expression-type-semantics"; +import type { Expression } from "../../expression"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { KindParseRuleMapping, MultiplicativeExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; +import { KipperMultiplicativeOperator, kipperMultiplicativeOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { CheckedType } from "../../../../analysis"; -import { ArithmeticExpression } from "./arithmetic-expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; +import { ArithmeticExpression } from "../arithmetic-expression"; /** * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-semantics.ts new file mode 100644 index 000000000..eec8fbd28 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-semantics.ts @@ -0,0 +1,41 @@ +/** + * Semantics for AST Node {@link AssignmentExpression}. + * @since 0.5.0 + */ +import type { Reference } from "../../../../analysis"; +import type { KipperAssignOperator } from "../../../../const"; +import type { Expression } from "../expression"; +import type { ExpressionSemantics } from "../expression-semantics"; +import type { IdentifierPrimaryExpression } from "../primary-expression"; + +/** + * Semantics for AST Node {@link AssignmentExpression}. + * @since 0.5.0 + */ +export interface AssignmentExpressionSemantics extends ExpressionSemantics { + /** + * The identifier expression that is being assigned to. + * @since 0.7.0 + */ + identifier: string; + /** + * The identifier AST node context that the {@link AssignmentExpressionSemantics.identifier identifier} points to. + * @since 0.10.0 + */ + identifierCtx: IdentifierPrimaryExpression; + /** + * The reference that is being assigned to. + * @since 0.10.0 + */ + assignTarget: Reference; + /** + * The assigned value to this variable. + * @since 0.7.0 + */ + value: Expression; + /** + * The operator of the assignment expression. + * @since 0.10.0 + */ + operator: KipperAssignOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-type-semantics.ts new file mode 100644 index 000000000..4ff450fac --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link AssignmentExpression}. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link AssignmentExpression}. + * @since 0.10.0 + */ +export interface AssignmentExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression.ts similarity index 91% rename from kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression.ts index 0ebecfbaa..3f6a12548 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression.ts @@ -12,21 +12,21 @@ * x /= 5 * x %= 55 */ -import type { CompilableASTNode } from "../../compilable-ast-node"; -import type { AssignmentExpressionSemantics } from "../../semantic-data"; -import type { AssignmentExpressionTypeSemantics } from "../../type-data"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { AssignmentExpressionSemantics } from "./assignment-expression-semantics"; +import type { AssignmentExpressionTypeSemantics } from "./assignment-expression-type-semantics"; import { AssignmentExpressionContext, KindParseRuleMapping, KipperParserRuleContext, - ParseRuleKindMapping -} from "../../../parser"; -import { Expression } from "./expression"; -import { IdentifierPrimaryExpression } from "./primary"; -import { UnableToDetermineSemanticDataError } from "../../../../errors"; -import { kipperArithmeticAssignOperators, KipperAssignOperator } from "../../../const"; -import { getParseRuleSource } from "../../../../tools"; -import { ScopeVariableDeclaration } from "../../../analysis"; + ParseRuleKindMapping, +} from "../../../../parser"; +import { Expression } from "../expression"; +import { IdentifierPrimaryExpression } from "../primary-expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { kipperArithmeticAssignOperators, KipperAssignOperator } from "../../../../const"; +import { getParseRuleSource } from "../../../../../tools"; +import { ScopeVariableDeclaration } from "../../../../analysis"; /** * Assignment expression, which assigns an expression to a variable. This class only represents assigning a value to diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/index.ts new file mode 100644 index 000000000..6e6a7298b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link AssignmentExpression} and the related {@link AssignmentExpressionSemantics semantics} and + * {@link AssignmentExpressionTypeSemantics type semantics}. + */ +export * from "./assignment-expression"; +export * from "./assignment-expression-semantics"; +export * from "./assignment-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-semantics.ts new file mode 100644 index 000000000..b789929d9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-semantics.ts @@ -0,0 +1,30 @@ +/** + * Semantics for AST Node {@link CastOrConvertExpression}. + * @since 0.5.0 + */ +import type { ExpressionSemantics } from "../expression-semantics"; +import type { Expression } from "../expression"; +import type { UncheckedType } from "../../../../analysis"; +import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; + +/** + * Semantics for AST Node {@link CastOrConvertExpression}. + * @since 0.5.0 + */ +export interface CastOrConvertExpressionSemantics extends ExpressionSemantics { + /** + * The expression to convert. + * @since 0.8.0 + */ + exp: Expression; + /** + * The type the {@link exp} should be converted to. + * @since 0.10.0 + */ + castType: UncheckedType; + /** + * The type specifier that determined {@link castType}. + * @since 0.10.0 + */ + castTypeSpecifier: IdentifierTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-type-semantics.ts new file mode 100644 index 000000000..c8518ff3b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression-type-semantics.ts @@ -0,0 +1,18 @@ +/** + * Type semantics for AST Node {@link CastOrConvertExpression}. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../../analysis"; +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link CastOrConvertExpression}. + * @since 0.10.0 + */ +export interface CastOrConvertExpressionTypeSemantics extends ExpressionTypeSemantics { + /** + * The type the {@link CastOrConvertExpressionSemantics.exp} should be converted to. + * @since 0.10.0 + */ + castType: CheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts index 40c7c09bd..0c403daea 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts @@ -7,16 +7,16 @@ * "4" as num // 4 * 39 as str // "39" */ -import type { CastOrConvertExpressionSemantics } from "../../semantic-data"; -import type { CastOrConvertExpressionTypeSemantics } from "../../type-data"; -import type { CompilableASTNode } from "../../compilable-ast-node"; -import type { IdentifierTypeSpecifierExpression } from "./type-specifier"; -import { Expression } from "./expression"; -import { CastOrConvertExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; -import { UncheckedType } from "../../../analysis"; -import { UnableToDetermineSemanticDataError } from "../../../../errors"; -import { getConversionFunctionIdentifier } from "../../../../tools"; -import { kipperInternalBuiltInFunctions } from "../../../runtime-built-ins"; +import type { CastOrConvertExpressionSemantics } from "./cast-or-convert-expression-semantics"; +import type { CastOrConvertExpressionTypeSemantics } from "./cast-or-convert-expression-type-semantics"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; +import { Expression } from "../expression"; +import { CastOrConvertExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { UncheckedType } from "../../../../analysis"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { getConversionFunctionIdentifier } from "../../../../../tools"; +import { kipperInternalBuiltInFunctions } from "../../../../runtime-built-ins"; /** * Convert expressions, which are used to convert a value to a different type. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/index.ts new file mode 100644 index 000000000..3ac767805 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link CastOrConvertExpression} and the related {@link CastOrConvertExpressionSemantics semantics} and + * {@link CastOrConvertExpressionTypeSemantics type semantics}. + */ +export * from "./cast-or-convert-expression"; +export * from "./cast-or-convert-expression-semantics"; +export * from "./cast-or-convert-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-semantics.ts new file mode 100644 index 000000000..fcd57bdca --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-semantics.ts @@ -0,0 +1,31 @@ +/** + * Semantics for a comparative expression, which compares two operands against each other using a specified + * operator. + * @since 0.9.0 + */ +import type { KipperComparativeOperator } from "../../../../const"; +import type { ExpressionSemantics } from "../expression-semantics"; +import type { Expression } from "../expression"; + +/** + * Semantics for a comparative expression, which compares two operands against each other using a specified + * operator. + * @since 0.9.0 + */ +export interface ComparativeExpressionSemantics extends ExpressionSemantics { + /** + * The operator used to compare the two expressions of this comparative expression. + * @since 0.9.0 + */ + operator: KipperComparativeOperator; + /** + * The left expression (left-hand side) used in this comparative expression. + * @since 0.9.0 + */ + leftOp: Expression; + /** + * The right expression (right-hand side) used in this comparative expression. + * @since 0.9.0 + */ + rightOp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-type-semantics.ts new file mode 100644 index 000000000..44c5f850f --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression-type-semantics.ts @@ -0,0 +1,13 @@ +/** + * Type semantics for a comparative expression, which compares two operands against each other using a specified + * operator. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for a comparative expression, which compares two operands against each other using a specified + * operator. + * @since 0.10.0 + */ +export interface ComparativeExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression.ts similarity index 79% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression.ts index 347df2c44..11633b8c9 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative/comparative-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression.ts @@ -3,10 +3,9 @@ * expressions. This abstract class only exists to provide the commonality between the different comparative expressions. * @since 0.9.0 */ -import type { ParseRuleKindMapping } from "../../../../parser"; -import { KindParseRuleMapping } from "../../../../parser"; -import type { ComparativeExpressionSemantics } from "../../../semantic-data"; -import type { ComparativeExpressionTypeSemantics } from "../../../type-data"; +import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { ComparativeExpressionSemantics } from "./comparative-expression-semantics"; +import type { ComparativeExpressionTypeSemantics } from "./comparative-expression-type-semantics"; import { Expression } from "../expression"; import { ASTNodeMapper } from "../../../mapping"; @@ -23,7 +22,7 @@ export type ASTComparativeExpressionKind = * @since 0.10.0 */ export type ParserComparativeExpressionContext = InstanceType< - typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTComparativeExpressionKind] + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTComparativeExpressionKind] >; /** @@ -31,7 +30,7 @@ export type ParserComparativeExpressionContext = InstanceType< * AST node. * @since 0.11.0 */ -export type ParserComparativeExpressionRuleName = typeof KindParseRuleMapping[ASTComparativeExpressionKind]; +export type ParserComparativeExpressionRuleName = (typeof KindParseRuleMapping)[ASTComparativeExpressionKind]; /** * Abstract comparative expression class representing a comparative expression, which can be used to compare two diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-semantics.ts new file mode 100644 index 000000000..e014a380e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-semantics.ts @@ -0,0 +1,29 @@ +/** + * Semantics for AST Node {@link EqualityExpressionSemantics}. + * @since 0.5.0 + */ +import type { KipperEqualityOperator } from "../../../../../const"; +import type { Expression } from "../../expression"; +import type { ComparativeExpressionSemantics } from "../comparative-expression-semantics"; + +/** + * Semantics for AST Node {@link EqualityExpressionSemantics}. + * @since 0.5.0 + */ +export interface EqualityExpressionSemantics extends ComparativeExpressionSemantics { + /** + * The operator used to compare the two expressions of this equality expression. + * @since 0.9.0 + */ + operator: KipperEqualityOperator; + /** + * The first expression (left-hand side) used in this equality expression. + * @since 0.9.0 + */ + leftOp: Expression; + /** + * The second expression (right-hand side) used in this equality expression. + * @since 0.9.0 + */ + rightOp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-type-semantics.ts new file mode 100644 index 000000000..d264f13f1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link EqualityExpressionSemantics}. + * @since 0.10.0 + */ +import type { ComparativeExpressionTypeSemantics } from "../comparative-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link EqualityExpressionSemantics}. + * @since 0.10.0 + */ +export interface EqualityExpressionTypeSemantics extends ComparativeExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression.ts index c487acc13..b8298dfb8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative/equality-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression.ts @@ -7,16 +7,16 @@ * 32 != 9 // true * 59 != 59 // false */ -import type { EqualityExpressionSemantics } from "../../../semantic-data"; -import type { EqualityExpressionTypeSemantics } from "../../../type-data"; -import type { Expression } from "../expression"; -import { ComparativeExpression } from "./comparative-expression"; -import { CheckedType } from "../../../../analysis"; -import { EqualityExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { KipperEqualityOperator, kipperEqualityOperators } from "../../../../const"; +import type { EqualityExpressionSemantics } from "./equality-expression-semantics"; +import type { EqualityExpressionTypeSemantics } from "./equality-expression-type-semantics"; +import type { Expression } from "../../expression"; +import { ComparativeExpression } from "../comparative-expression"; +import { CheckedType } from "../../../../../analysis"; +import { EqualityExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { KipperEqualityOperator, kipperEqualityOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { CompilableASTNode } from "../../../compilable-ast-node"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; /** * Equality expression, which can be used to compare two expressions for equality. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/index.ts new file mode 100644 index 000000000..193019ba6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link EqualityExpression} and the related {@link EqualityExpressionSemantics semantics} and + * {@link EqualityExpressionTypeSemantics type semantics}. + */ +export * from "./equality-expression"; +export * from "./equality-expression-semantics"; +export * from "./equality-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/index.ts similarity index 50% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/index.ts index e36344d23..63117053e 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/index.ts @@ -4,5 +4,7 @@ * @since 0.11.0 */ export * from "./comparative-expression"; -export * from "./equality-expression"; -export * from "./relational-expression"; +export * from "./comparative-expression-semantics"; +export * from "./comparative-expression-type-semantics"; +export * from "./equality-expression/"; +export * from "./relational-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts new file mode 100644 index 000000000..15d259d3d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link RelationalExpression} and the related {@link RelationalExpressionSemantics semantics} and + * {@link RelationalExpressionTypeSemantics type semantics}. + */ +export * from "./relational-expression"; +export * from "./relational-expression-semantics"; +export * from "./relational-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-semantics.ts new file mode 100644 index 000000000..2181dc6ca --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-semantics.ts @@ -0,0 +1,29 @@ +/** + * Semantics for AST Node {@link RelationalExpression}. + * @since 0.5.0 + */ +import type { KipperRelationalOperator } from "../../../../../const"; +import type { Expression } from "../../expression"; +import type { ComparativeExpressionSemantics } from "../comparative-expression-semantics"; + +/** + * Semantics for AST Node {@link RelationalExpression}. + * @since 0.5.0 + */ +export interface RelationalExpressionSemantics extends ComparativeExpressionSemantics { + /** + * The operator used to compare the two expressions of this relational expression. + * @since 0.9.0 + */ + operator: KipperRelationalOperator; + /** + * The first expression (left-hand side) used in this relational expression. + * @since 0.9.0 + */ + leftOp: Expression; + /** + * The second expression (right-hand side) used in this relational expression. + * @since 0.9.0 + */ + rightOp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-type-semantics.ts new file mode 100644 index 000000000..1a78942ff --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link RelationalExpression}. + * @since 0.10.0 + */ +import type { ComparativeExpressionTypeSemantics } from "../comparative-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link RelationalExpression}. + * @since 0.10.0 + */ +export interface RelationalExpressionTypeSemantics extends ComparativeExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression.ts index 50c6870cb..171542f92 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative/relational-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression.ts @@ -13,16 +13,16 @@ * 77 <= 77 // true * 36 <= 12 // false */ -import type { RelationalExpressionSemantics } from "../../../semantic-data"; -import type { RelationalExpressionTypeSemantics } from "../../../type-data"; -import type { Expression } from "../expression"; -import { ComparativeExpression } from "./comparative-expression"; -import { KindParseRuleMapping, ParseRuleKindMapping, RelationalExpressionContext } from "../../../../parser"; -import { CompilableASTNode } from "../../../compilable-ast-node"; -import { KipperRelationalOperator, kipperRelationalOperators } from "../../../../const"; +import type { RelationalExpressionSemantics } from "./relational-expression-semantics"; +import type { RelationalExpressionTypeSemantics } from "./relational-expression-type-semantics"; +import type { Expression } from "../../expression"; +import { ComparativeExpression } from "../comparative-expression"; +import { KindParseRuleMapping, ParseRuleKindMapping, RelationalExpressionContext } from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { KipperRelationalOperator, kipperRelationalOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { CheckedType } from "../../../../analysis"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; /** * Relational expression, which can be used to compare two numeric expressions. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-semantics.ts new file mode 100644 index 000000000..792e0f15a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link ConditionalExpression}. + * @since 0.5.0 + */ +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for AST Node {@link ConditionalExpression}. + * @since 0.5.0 + */ +export interface ConditionalExpressionSemantics extends ExpressionSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-type-semantics.ts new file mode 100644 index 000000000..99a1c45d6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link ConditionalExpression}. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link ConditionalExpression}. + * @since 0.10.0 + */ +export interface ConditionalExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression.ts index 261db0428..d2c98b8fc 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression.ts @@ -6,12 +6,12 @@ * true ? 3 : 4; // 3 * false ? 3 : 4; // 4 */ -import type { ConditionalExpressionSemantics } from "../../semantic-data"; -import type { CompilableASTNode } from "../../compilable-ast-node"; -import type { ConditionalExpressionTypeSemantics } from "../../type-data"; -import { Expression } from "./expression"; -import { ConditionalExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; -import { KipperNotImplementedError } from "../../../../errors"; +import type { ConditionalExpressionSemantics } from "./conditional-expression-semantics"; +import type { ConditionalExpressionTypeSemantics } from "./conditional-expression-type-semantics"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { Expression } from "../expression"; +import { ConditionalExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; /** * Conditional expression, which evaluates a condition and evaluates the left expression if it is true, or the right diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/index.ts new file mode 100644 index 000000000..3e320efee --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link ConditionalExpression} and the related {@link ConditionalExpressionSemantics semantics} and + * {@link ConditionalExpressionTypeSemantics type semantics}. + */ +export * from "./conditional-expression"; +export * from "./conditional-expression-semantics"; +export * from "./conditional-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/expression-semantics.ts new file mode 100644 index 000000000..8afe06645 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/expression-semantics.ts @@ -0,0 +1,11 @@ +/** + * Static semantics for an expression class that must be evaluated during the Semantic Analysis. + * @since 0.10.0 + */ +import type { SemanticData } from "../../ast-node"; + +/** + * Static semantics for an expression class that must be evaluated during the Semantic Analysis. + * @since 0.10.0 + */ +export interface ExpressionSemantics extends SemanticData {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/expression-type-semantics.ts new file mode 100644 index 000000000..f0320c47c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/expression-type-semantics.ts @@ -0,0 +1,21 @@ +/** + * Type semantics for an expression class that must be evaluated during Type Checking. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../analysis"; +import type { TypeData } from "../../ast-node"; + +/** + * Type semantics for an expression class that must be evaluated during Type Checking. + * @since 0.10.0 + */ +export interface ExpressionTypeSemantics extends TypeData { + /** + * The value type that this expression evaluates to. This is used to properly represent the evaluated type of + * expressions that do not explicitly show their type. + * + * This will always evaluate to "type", as a type specifier will always be a type. + * @since 0.10.0 + */ + evaluatedType: CheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts index 5f9715e78..88e016b35 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts @@ -6,8 +6,8 @@ * @since 0.1.0 */ import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; -import type { ExpressionSemantics } from "../../semantic-data"; -import type { ExpressionTypeSemantics } from "../../type-data"; +import type { ExpressionSemantics } from "./expression-semantics"; +import type { ExpressionTypeSemantics } from "./expression-type-semantics"; import { TranslatedExpression } from "../../../const"; import { MissingRequiredSemanticDataError } from "../../../../errors"; import { CompilableASTNode } from "../../compilable-ast-node"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-semantics.ts new file mode 100644 index 000000000..498b27686 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-semantics.ts @@ -0,0 +1,30 @@ +/** + * Semantics for AST Node {@link FunctionCallExpression}. + * @since 0.5.0 + */ +import type { Reference } from "../../../../analysis"; +import type { KipperReferenceable } from "../../../../const"; +import type { Expression } from "../expression"; +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for AST Node {@link FunctionCallExpression}. + * @since 0.5.0 + */ +export interface FunctionCallExpressionSemantics extends ExpressionSemantics { + /** + * The identifier of the function that is called. + * @since 0.5.0 + */ + identifier: string; + /** + * The function that is called by this expression. + * @since 0.5.0 + */ + callTarget: Reference; + /** + * The arguments that were passed to this function. + * @since 0.6.0 + */ + args: Array; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-type-semantics.ts new file mode 100644 index 000000000..ef16b155b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression-type-semantics.ts @@ -0,0 +1,19 @@ +/** + * Type semantics for AST Node {@link FunctionCallExpression}. + * @since 0.5.0 + */ +import type { KipperFunction } from "../../../../const"; +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link FunctionCallExpression}. + * @since 0.5.0 + */ +export interface FunctionCallExpressionTypeSemantics extends ExpressionTypeSemantics { + /** + * The function that this expression calls. Can be either a {@link ScopeFunctionDeclaration function declaration} or + * a {@link ScopeVariableDeclaration function in a variable}. + * @since 0.10.0 + */ + func: KipperFunction; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression.ts index 3b8592a13..51131bf78 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression.ts @@ -1,4 +1,3 @@ -import type { FunctionCallExpressionSemantics, IdentifierPrimaryExpressionSemantics } from "../../semantic-data"; /** * Function call class, which represents a function call expression in the Kipper language. * @since 0.1.0 @@ -7,13 +6,15 @@ import type { FunctionCallExpressionSemantics, IdentifierPrimaryExpressionSemant * // or * print("Hello world!") */ -import type { FunctionCallExpressionTypeSemantics } from "../../type-data"; -import type { CompilableASTNode } from "../../compilable-ast-node"; -import type { KipperReferenceableFunction } from "../../../const"; -import { Expression } from "./expression"; -import { FunctionCallExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; -import { UnableToDetermineSemanticDataError } from "../../../../errors"; -import { CheckedType } from "../../../analysis"; +import type { FunctionCallExpressionSemantics } from "./function-call-expression-semantics"; +import type { FunctionCallExpressionTypeSemantics } from "./function-call-expression-type-semantics"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { KipperReferenceableFunction } from "../../../../const"; +import type { IdentifierPrimaryExpressionSemantics } from "../primary-expression"; +import { Expression } from "../expression"; +import { FunctionCallExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { CheckedType } from "../../../../analysis"; /** * Function call class, which represents a function call expression in the Kipper language. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/index.ts new file mode 100644 index 000000000..5cdd05792 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link FunctionCallExpression} and the related {@link FunctionCallExpressionSemantics semantics} and + * {@link FunctionCallExpressionTypeSemantics type semantics}. + */ +export * from "./function-call-expression"; +export * from "./function-call-expression-semantics"; +export * from "./function-call-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/index.ts index 7eedf43f6..b845a0109 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/index.ts @@ -4,16 +4,18 @@ * @since 0.11.0 */ export * from "./expression"; +export * from "./expression-semantics"; +export * from "./expression-type-semantics"; +export * from "./primary-expression/"; export * from "./arithmetic/"; -export * from "./comparative/"; -export * from "./logical/"; -export * from "./postfix/"; -export * from "./primary/"; -export * from "./type-specifier/"; -export * from "./unary/"; -export * from "./assignment-expression"; -export * from "./cast-or-convert-expression"; -export * from "./conditional-expression"; -export * from "./function-call-expression"; -export * from "./member-access-expression"; -export * from "./tangled-primary-expression"; +export * from "./comparative-expression/"; +export * from "./logical-expression/"; +export * from "./postfix-expression/"; +export * from "./primary-expression/"; +export * from "./type-specifier-expression/"; +export * from "./unary-expression/"; +export * from "./assignment-expression/"; +export * from "./cast-or-convert-expression/"; +export * from "./conditional-expression/"; +export * from "./function-call-expression/"; +export * from "./member-access-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/index.ts similarity index 55% rename from kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/logical-expression/index.ts index f1d70947f..707594763 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/index.ts @@ -4,5 +4,7 @@ * @since 0.11.0 */ export * from "./logical-expression"; -export * from "./logical-and-expression"; -export * from "./logical-or-expression"; +export * from "./logical-expression-semantics"; +export * from "./logical-expression-type-semantics"; +export * from "./logical-and-expression/"; +export * from "./logical-or-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/index.ts new file mode 100644 index 000000000..cdfb5ba76 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link LogicalAndExpression} and the related {@link LogicalAndExpressionSemantics semantics} and + * {@link LogicalAndExpressionTypeSemantics type semantics}. + */ +export * from "./logical-and-expression"; +export * from "./logical-and-expression-semantics"; +export * from "./logical-and-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-semantics.ts new file mode 100644 index 000000000..fdc6227f5 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-semantics.ts @@ -0,0 +1,29 @@ +/** + * Semantics for AST Node {@link LogicalAndExpression}. + * @since 0.5.0 + */ +import type { KipperLogicalAndOperator } from "../../../../../const"; +import type { Expression } from "../../expression"; +import type { LogicalExpressionSemantics } from "../logical-expression-semantics"; + +/** + * Semantics for AST Node {@link LogicalAndExpression}. + * @since 0.5.0 + */ +export interface LogicalAndExpressionSemantics extends LogicalExpressionSemantics { + /** + * The operator used to combine the two expressions of this logical-and expression. + * @since 0.9.0 + */ + operator: KipperLogicalAndOperator; + /** + * The first expression (left-hand side) used in this logical-and expression. + * @since 0.9.0 + */ + leftOp: Expression; + /** + * The second expression (right-hand side) used in this logical-and expression. + * @since 0.9.0 + */ + rightOp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts new file mode 100644 index 000000000..d228318d1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link LogicalAndExpression}. + * @since 0.10.0 + */ +import { LogicalExpressionTypeSemantics } from "../logical-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link LogicalAndExpression}. + * @since 0.10.0 + */ +export interface LogicalAndExpressionTypeSemantics extends LogicalExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression.ts index e1efe4186..41a704297 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-and-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression.ts @@ -8,14 +8,14 @@ * false && true // false * true && true // true */ -import type { LogicalAndExpressionSemantics } from "../../../semantic-data"; -import type { LogicalAndExpressionTypeSemantics } from "../../../type-data"; -import type { Expression } from "../expression"; -import { LogicalExpression } from "./logical-expression"; -import { KindParseRuleMapping, LogicalAndExpressionContext, ParseRuleKindMapping } from "../../../../parser"; -import { CompilableASTNode } from "../../../compilable-ast-node"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { CheckedType } from "../../../../analysis"; +import type { LogicalAndExpressionSemantics } from "./logical-and-expression-semantics"; +import type { LogicalAndExpressionTypeSemantics } from "./logical-and-expression-type-semantics"; +import type { Expression } from "../../expression"; +import { LogicalExpression } from "../logical-expression"; +import { KindParseRuleMapping, LogicalAndExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; /** * Logical-and expression, representing an expression which can be used to combine multiple conditions. It will diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-semantics.ts new file mode 100644 index 000000000..6f03d5d47 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-semantics.ts @@ -0,0 +1,31 @@ +/** + * Semantics for logical expressions, which combine two expressions/conditions and evaluate based on the input to a + * boolean value. + * @since 0.9.0 + */ +import type { KipperLogicalAndOperator, KipperLogicalOrOperator } from "../../../../const"; +import type { Expression } from "../expression"; +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for logical expressions, which combine two expressions/conditions and evaluate based on the input to a + * boolean value. + * @since 0.9.0 + */ +export interface LogicalExpressionSemantics extends ExpressionSemantics { + /** + * The operator used to combine the two expressions of this logical expression. + * @since 0.9.0 + */ + operator: KipperLogicalAndOperator | KipperLogicalOrOperator; + /** + * The first expression (left-hand side) used in this logical expression. + * @since 0.9.0 + */ + leftOp: Expression; + /** + * The second expression (right-hand side) used in this logical expression. + * @since 0.9.0 + */ + rightOp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-type-semantics.ts new file mode 100644 index 000000000..7dcc42f2e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression-type-semantics.ts @@ -0,0 +1,13 @@ +/** + * Type semantics for logical expressions, which combine two expressions/conditions and evaluate based on the input to a + * boolean value. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for logical expressions, which combine two expressions/conditions and evaluate based on the input to a + * boolean value. + * @since 0.10.0 + */ +export interface LogicalExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression.ts similarity index 80% rename from kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression.ts index 97885d643..249a6b18b 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression.ts @@ -4,10 +4,9 @@ * abstract class only exists to provide the commonality between the different logical expressions. * @abstract */ -import type { ParseRuleKindMapping } from "../../../../parser"; -import { KindParseRuleMapping } from "../../../../parser"; -import type { LogicalExpressionSemantics } from "../../../semantic-data"; -import type { LogicalExpressionTypeSemantics } from "../../../type-data"; +import type { LogicalExpressionSemantics } from "./logical-expression-semantics"; +import type { LogicalExpressionTypeSemantics } from "./logical-expression-type-semantics"; +import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { Expression } from "../expression"; import { ASTNodeMapper } from "../../../mapping"; @@ -25,7 +24,7 @@ export type ASTLogicalExpressionKind = * @since 0.10.0 */ export type ParserLogicalExpressionContext = InstanceType< - typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTLogicalExpressionKind] + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTLogicalExpressionKind] >; /** @@ -33,7 +32,7 @@ export type ParserLogicalExpressionContext = InstanceType< * AST node. * @since 0.11.0 */ -export type ParserLogicalExpressionRuleName = typeof KindParseRuleMapping[ASTLogicalExpressionKind]; +export type ParserLogicalExpressionRuleName = (typeof KindParseRuleMapping)[ASTLogicalExpressionKind]; /** * Logical expression, representing an expression which can be used to combine two expressions/conditions using diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/index.ts new file mode 100644 index 000000000..297e9131e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link LogicalOrExpression} and the related {@link LogicalOrExpressionSemantics semantics} and + * {@link LogicalOrExpressionTypeSemantics type semantics}. + */ +export * from "./logical-or-expression"; +export * from "./logical-or-expression-semantics"; +export * from "./logical-or-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-semantics.ts new file mode 100644 index 000000000..85ae2e09e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-semantics.ts @@ -0,0 +1,29 @@ +/** + * Semantics for AST Node {@link LogicalOrExpression}. + * @since 0.5.0 + */ +import type { KipperLogicalOrOperator } from "../../../../../const"; +import type { Expression } from "../../expression"; +import type { LogicalExpressionSemantics } from "../logical-expression-semantics"; + +/** + * Semantics for AST Node {@link LogicalOrExpression}. + * @since 0.5.0 + */ +export interface LogicalOrExpressionSemantics extends LogicalExpressionSemantics { + /** + * The operator used to combine the two expressions of this logical-or expression. + * @since 0.9.0 + */ + operator: KipperLogicalOrOperator; + /** + * The first expression (left-hand side) used in this logical-or expression. + * @since 0.9.0 + */ + leftOp: Expression; + /** + * The second expression (right-hand side) used in this logical-or expression. + * @since 0.9.0 + */ + rightOp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-type-semantics.ts new file mode 100644 index 000000000..ee68a4313 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link LogicalOrExpression}. + * @since 0.10.0 + */ +import type { LogicalExpressionTypeSemantics } from "../logical-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link LogicalOrExpression}. + * @since 0.10.0 + */ +export interface LogicalOrExpressionTypeSemantics extends LogicalExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression.ts index 7c3309749..4f06369ce 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical/logical-or-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression.ts @@ -8,15 +8,15 @@ * false || true // true * true || true // true */ -import type { LogicalOrExpressionSemantics } from "../../../semantic-data"; -import type { LogicalOrExpressionTypeSemantics } from "../../../type-data"; -import type { Expression } from "../expression"; -import { LogicalExpression } from "./logical-expression"; -import { KindParseRuleMapping, LogicalOrExpressionContext, ParseRuleKindMapping } from "../../../../parser"; -import { CompilableASTNode } from "../../../compilable-ast-node"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { kipperLogicalOrOperator } from "../../../../const"; -import { CheckedType } from "../../../../analysis"; +import type { LogicalOrExpressionSemantics } from "./logical-or-expression-semantics"; +import type { LogicalOrExpressionTypeSemantics } from "./logical-or-expression-type-semantics"; +import type { Expression } from "../../expression"; +import { LogicalExpression } from "../logical-expression"; +import { KindParseRuleMapping, LogicalOrExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { kipperLogicalOrOperator } from "../../../../../const"; +import { CheckedType } from "../../../../../analysis"; /** * Logical-or expression, representing an expression which can be used to combine multiple conditions. It returns true diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/index.ts new file mode 100644 index 000000000..2bdc91352 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link MemberAccessExpression} and the related {@link MemberAccessExpressionSemantics semantics} and + * {@link MemberAccessExpressionTypeSemantics type semantics}. + */ +export * from "./member-access-expression"; +export * from "./member-access-expression-semantics"; +export * from "./member-access-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-semantics.ts new file mode 100644 index 000000000..fe4e87bc6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-semantics.ts @@ -0,0 +1,31 @@ +/** + * Semantics for AST Node {@link MemberAccessExpression}. + * @since 0.10.0 + */ +import type { Expression } from "../expression"; +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for AST Node {@link MemberAccessExpression}. + * @since 0.10.0 + */ +export interface MemberAccessExpressionSemantics extends ExpressionSemantics { + /** + * The object or array that is accessed. + * @since 0.10.0 + */ + objectLike: Expression; + /** + * The member that is accessed. This can be in three different forms: + * - Dot Notation: object.member + * - Bracket Notation: object["member"] + * - Slice Notation: object[1:3] + * @since 0.10.0 + */ + propertyIndexOrKeyOrSlice: string | Expression | { start?: Expression; end?: Expression }; + /** + * The type of the member access expression. Represented using strings. + * @since 0.10.0 + */ + accessType: "dot" | "bracket" | "slice"; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-type-semantics.ts new file mode 100644 index 000000000..bfb15287d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link MemberAccessExpression}. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link MemberAccessExpression}. + * @since 0.10.0 + */ +export interface MemberAccessExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression.ts similarity index 92% rename from kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression.ts index 11f2eb0ac..f9054f55a 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression.ts @@ -3,19 +3,19 @@ * object or array. * @since 0.10.0 */ -import type { SliceNotationContext, SliceNotationMemberAccessExpressionContext } from "../../../parser"; +import type { MemberAccessExpressionSemantics } from "./member-access-expression-semantics"; +import type { MemberAccessExpressionTypeSemantics } from "./member-access-expression-type-semantics"; +import type { SliceNotationContext, SliceNotationMemberAccessExpressionContext } from "../../../../parser"; import { BracketNotationMemberAccessExpressionContext, DotNotationMemberAccessExpressionContext, KindParseRuleMapping, - ParseRuleKindMapping -} from "../../../parser"; -import type { MemberAccessExpressionSemantics } from "../../semantic-data"; -import type { MemberAccessExpressionTypeSemantics } from "../../type-data"; -import type { CompilableASTNode } from "../../compilable-ast-node"; -import { Expression } from "./expression"; -import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../errors"; -import { kipperInternalBuiltInFunctions } from "../../../runtime-built-ins"; + ParseRuleKindMapping, +} from "../../../../parser"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import { Expression } from "../expression"; +import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { kipperInternalBuiltInFunctions } from "../../../../runtime-built-ins"; /** * A union of all possible {@link KipperParserRuleContext} rule contexts that {@link MemberAccessExpression} implements. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-semantics.ts new file mode 100644 index 000000000..90f607193 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-semantics.ts @@ -0,0 +1,24 @@ +/** + * Semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. + * @since 0.5.0 + */ +import type { KipperIncrementOrDecrementOperator } from "../../../../../const"; +import type { Expression } from "../../expression"; +import type { PostfixExpressionSemantics } from "../postfix-expression-semantics"; + +/** + * Semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. + * @since 0.5.0 + */ +export interface IncrementOrDecrementPostfixExpressionSemantics extends PostfixExpressionSemantics { + /** + * The operator that is used to modify the {@link operand}. + * @since 0.10.0 + */ + operator: KipperIncrementOrDecrementOperator; + /** + * The operand that is modified by the operator. + * @since 0.10.0 + */ + operand: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-type-semantics.ts new file mode 100644 index 000000000..a6ecae8dc --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. + * @since 0.10.0 + */ +import type { PostfixExpressionTypeSemantics } from "../postfix-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. + * @since 0.10.0 + */ +export interface IncrementOrDecrementPostfixExpressionTypeSemantics extends PostfixExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression.ts similarity index 89% rename from kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression.ts index ef375381d..b07e261cd 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/postfix/increment-or-decrement-postfix-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression.ts @@ -1,4 +1,3 @@ -import type { IncrementOrDecrementPostfixExpressionSemantics } from "../../../semantic-data"; /** * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. * @since 0.1.0 @@ -6,17 +5,19 @@ import type { IncrementOrDecrementPostfixExpressionSemantics } from "../../../se * 49++; // 49 will be incremented by 1 * 11--; // 11 will be decremented by 1 */ -import type { IncrementOrDecrementPostfixExpressionTypeSemantics } from "../../../type-data"; -import type { KipperIncrementOrDecrementOperator } from "../../../../const"; -import { Expression } from "../expression"; +import type { IncrementOrDecrementPostfixExpressionSemantics } from "./increment-or-decrement-postfix-expression-semantics"; +import type { IncrementOrDecrementPostfixExpressionTypeSemantics } from "./increment-or-decrement-postfix-expression-type-semantics"; +import type { KipperIncrementOrDecrementOperator } from "../../../../../const"; +import type { Expression } from "../../expression"; +import { PostfixExpression } from "../postfix-expression"; import { IncrementOrDecrementPostfixExpressionContext, KindParseRuleMapping, - ParseRuleKindMapping -} from "../../../../parser"; -import { CompilableASTNode } from "../../../compilable-ast-node"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { CheckedType } from "../../../../analysis"; + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; /** * Increment or Decrement expression, which represents a right-side -- or ++ expression modifying a numeric value. @@ -25,7 +26,7 @@ import { CheckedType } from "../../../../analysis"; * 49++; // 49 will be incremented by 1 * 11--; // 11 will be decremented by 1 */ -export class IncrementOrDecrementPostfixExpression extends Expression< +export class IncrementOrDecrementPostfixExpression extends PostfixExpression< IncrementOrDecrementPostfixExpressionSemantics, IncrementOrDecrementPostfixExpressionTypeSemantics > { diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/index.ts new file mode 100644 index 000000000..80107be5b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link IncrementOrDecrementPostfixExpression} and the related + * {@link IncrementOrDecrementPostfixExpressionSemantics semantics} and + * {@link IncrementOrDecrementPostfixExpressionTypeSemantics type semantics}. + */ +export * from "./increment-or-decrement-postfix-expression"; +export * from "./increment-or-decrement-postfix-expression-semantics"; +export * from "./increment-or-decrement-postfix-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/index.ts new file mode 100644 index 000000000..34b2b32cc --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/index.ts @@ -0,0 +1,9 @@ +/** + * Postfix expression module containing the classes representing expressions, which can be used to perform specific + * postfix operations using a specific operator. + * @since 0.11.0 + */ +export * from "./postfix-expression"; +export * from "./postfix-expression-semantics"; +export * from "./postfix-expression-type-semantics"; +export * from "./increment-or-decrement-postfix-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-semantics.ts new file mode 100644 index 000000000..efc247154 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-semantics.ts @@ -0,0 +1,18 @@ +/** + * Semantics for AST Node {@link PostfixExpression}. + * @since 0.11.0 + */ +import type { KipperIncrementOrDecrementOperator } from "../../../../const"; +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for AST Node {@link PostfixExpression}. + * @since 0.11.0 + */ +export interface PostfixExpressionSemantics extends ExpressionSemantics { + /** + * The operator that is used to modify the {@link operand}. + * @since 0.11.0 + */ + operator: KipperIncrementOrDecrementOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-type-semantics.ts new file mode 100644 index 000000000..d3fe3f877 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link PostfixExpression}. + * @since 0.11.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link PostfixExpression}. + * @since 0.11.0 + */ +export interface PostfixExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts new file mode 100644 index 000000000..da4f6024e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts @@ -0,0 +1,48 @@ +/** + * Postfix expression, representing an expression which has a postfix operator modifying one or more operands. This + * abstract class only exists to provide the commonality between the different logical expressions. + * @abstract + * @since 0.11.0 + */ +import type { PostfixExpressionSemantics } from "./postfix-expression-semantics"; +import type { PostfixExpressionTypeSemantics } from "./postfix-expression-type-semantics"; +import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { Expression } from "../expression"; +import { ASTNodeMapper } from "../../../mapping"; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link PostfixExpression} AST node. + * @since 0.10.0 + */ +export type ASTPostfixExpressionKind = typeof ParseRuleKindMapping.RULE_incrementOrDecrementPostfixExpression; + +/** + * Union type of all possible {@link ParserASTNode.kind} context classes for a constructable + * {@link PostfixExpression} AST node. + * @since 0.10.0 + */ +export type ParserPostfixExpressionContext = InstanceType< + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTPostfixExpressionKind] +>; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link PostfixExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserPostfixExpressionRuleName = (typeof KindParseRuleMapping)[ASTPostfixExpressionKind]; + +/** + * Postfix expression, representing an expression which has a postfix operator modifying one or more operands. This + * abstract class only exists to provide the commonality between the different logical expressions. + * @abstract + * @since 0.11.0 + */ +export abstract class PostfixExpression< + Semantics extends PostfixExpressionSemantics = PostfixExpressionSemantics, + TypeSemantics extends PostfixExpressionTypeSemantics = PostfixExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserPostfixExpressionContext; + public abstract get kind(): ASTPostfixExpressionKind; + public abstract get ruleName(): ParserPostfixExpressionRuleName; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts deleted file mode 100644 index e6b736a55..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/postfix/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Postfix expression module containing the classes representing expressions, which can be used to perform specific - * postfix operations using a specific operator. - * @since 0.11.0 - */ -export * from "./increment-or-decrement-postfix-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-semantics.ts new file mode 100644 index 000000000..fec82d789 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-semantics.ts @@ -0,0 +1,18 @@ +/** + * Semantics for AST Node {@link ArrayPrimaryExpression}. + * @since 0.5.0 + */ +import type { Expression } from "../../../expression"; +import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; + +/** + * Semantics for AST Node {@link ArrayPrimaryExpression}. + * @since 0.5.0 + */ +export interface ArrayPrimaryExpressionSemantics extends ConstantExpressionSemantics { + /** + * The value of the constant list expression. + * @since 0.5.0 + */ + value: Array; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts new file mode 100644 index 000000000..782c21158 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link ArrayPrimaryExpression}. + * @since 0.10.0 + */ +import { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link ArrayPrimaryExpression}. + * @since 0.10.0 + */ +export interface ArrayPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts similarity index 75% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts index 565021d11..f3decb468 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/array-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts @@ -2,31 +2,27 @@ * List constant expression, which represents a list constant that was defined in the source code. * @since 0.1.0 */ -import type { ArrayLiteralPrimaryExpressionSemantics } from "../../../../semantic-data"; -import type { ArrayLiteralPrimaryExpressionTypeSemantics } from "../../../../type-data"; -import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import { ConstantExpression } from "./constant-expression"; -import { - ArrayLiteralPrimaryExpressionContext, - KindParseRuleMapping, - ParseRuleKindMapping -} from "../../../../../parser"; -import { CheckedType } from "../../../../../analysis"; +import type { ArrayPrimaryExpressionSemantics } from "./array-primary-expression-semantics"; +import type { ArrayPrimaryExpressionTypeSemantics } from "./array-primary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import { ConstantExpression } from "../constant-expression"; +import { ArrayPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; +import { CheckedType } from "../../../../../../analysis"; /** * List constant expression, which represents a list constant that was defined in the source code. * @since 0.1.0 */ -export class ArrayLiteralPrimaryExpression extends ConstantExpression< - ArrayLiteralPrimaryExpressionSemantics, - ArrayLiteralPrimaryExpressionTypeSemantics +export class ArrayPrimaryExpression extends ConstantExpression< + ArrayPrimaryExpressionSemantics, + ArrayPrimaryExpressionTypeSemantics > { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. * @private */ - protected override readonly _antlrRuleCtx: ArrayLiteralPrimaryExpressionContext; + protected override readonly _antlrRuleCtx: ArrayPrimaryExpressionContext; /** * The static kind for this AST Node. @@ -43,7 +39,7 @@ export class ArrayLiteralPrimaryExpression extends ConstantExpression< * @since 0.10.0 */ public override get kind() { - return ArrayLiteralPrimaryExpression.kind; + return ArrayPrimaryExpression.kind; } /** @@ -61,10 +57,10 @@ export class ArrayLiteralPrimaryExpression extends ConstantExpression< * @since 0.11.0 */ public override get ruleName() { - return ArrayLiteralPrimaryExpression.ruleName; + return ArrayPrimaryExpression.ruleName; } - constructor(antlrRuleCtx: ArrayLiteralPrimaryExpressionContext, parent: CompilableASTNode) { + constructor(antlrRuleCtx: ArrayPrimaryExpressionContext, parent: CompilableASTNode) { super(antlrRuleCtx, parent); this._antlrRuleCtx = antlrRuleCtx; } @@ -108,7 +104,7 @@ export class ArrayLiteralPrimaryExpression extends ConstantExpression< /** * The antlr context containing the antlr4 metadata for this expression. */ - public override get antlrRuleCtx(): ArrayLiteralPrimaryExpressionContext { + public override get antlrRuleCtx(): ArrayPrimaryExpressionContext { return this._antlrRuleCtx; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/index.ts new file mode 100644 index 000000000..e11cae76d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link ArrayPrimaryExpression} and the related {@link ArrayPrimaryExpressionSemantics semantics} and + * {@link ArrayPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./array-primary-expression"; +export * from "./array-primary-expression-semantics"; +export * from "./array-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-semantics.ts new file mode 100644 index 000000000..4aed9c3ff --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-semantics.ts @@ -0,0 +1,18 @@ +/** + * Semantics for AST Node {@link BoolPrimaryExpression}. + * @since 0.8.0 + */ +import type { KipperBoolTypeLiterals } from "../../../../../../const"; +import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; + +/** + * Semantics for AST Node {@link BoolPrimaryExpression}. + * @since 0.8.0 + */ +export interface BoolPrimaryExpressionSemantics extends ConstantExpressionSemantics { + /** + * The value of this boolean constant expression. + * @since 0.8.0 + */ + value: KipperBoolTypeLiterals; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts new file mode 100644 index 000000000..ff425f30a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link BoolPrimaryExpression}. + * @since 0.10.0 + */ +import type { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link BoolPrimaryExpression}. + * @since 0.10.0 + */ +export interface BoolPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression.ts similarity index 87% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression.ts index 7a4bff027..45683cd39 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/bool-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression.ts @@ -2,13 +2,13 @@ * Boolean constant expression representing the built-in constants {@link true} and {@link false}. * @since 0.8.0 */ -import type { BoolPrimaryExpressionSemantics } from "../../../../semantic-data"; -import type { BoolPrimaryExpressionTypeSemantics } from "../../../../type-data"; -import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import type { KipperBoolTypeLiterals } from "../../../../../const"; -import { ConstantExpression } from "./constant-expression"; -import { BoolPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; -import { CheckedType } from "../../../../../analysis"; +import type { BoolPrimaryExpressionSemantics } from "./bool-primary-expression-semantics"; +import type { BoolPrimaryExpressionTypeSemantics } from "./bool-primary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import type { KipperBoolTypeLiterals } from "../../../../../../const"; +import { ConstantExpression } from "../constant-expression"; +import { BoolPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; +import { CheckedType } from "../../../../../../analysis"; /** * Boolean constant expression representing the built-in constants {@link true} and {@link false}. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/index.ts new file mode 100644 index 000000000..dfdd262e3 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link BoolPrimaryExpression} and the related {@link BoolPrimaryExpressionSemantics semantics} and + * {@link BoolPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./bool-primary-expression"; +export * from "./bool-primary-expression-semantics"; +export * from "./bool-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts new file mode 100644 index 000000000..016a5f15c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts @@ -0,0 +1,17 @@ +/** + * Semantics for AST Node {@link ConstantExpression}. + * @since 0.5.0 + */ +import type { ExpressionSemantics } from "../../expression-semantics"; + +/** + * Semantics for AST Node {@link ConstantExpression}. + * @since 0.5.0 + */ +export interface ConstantExpressionSemantics extends ExpressionSemantics { + /** + * The value of the constant expression. This is usually either a {@link String} or {@link Number}. + * @since 0.5.0 + */ + value: any; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts new file mode 100644 index 000000000..f8649f9db --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link ConstantExpression}. + * @since 0.11.0 + */ +import type { ExpressionTypeSemantics } from "../../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link ConstantExpression}. + * @since 0.11.0 + */ +export interface ConstantExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts similarity index 76% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts index a8161ed95..a02d0bb21 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/constant-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts @@ -3,12 +3,12 @@ * abstract class only exists to provide the commonality between the different constant expressions. * @since 0.10.0 */ -import type { ConstantExpressionSemantics } from "../../../../semantic-data"; -import type { ExpressionTypeSemantics } from "../../../../type-data"; +import type { ConstantExpressionTypeSemantics } from "./constant-expression-type-semantics"; +import type { ConstantExpressionSemantics } from "./constant-expression-semantics"; import type { ParseRuleKindMapping } from "../../../../../parser"; import { KindParseRuleMapping } from "../../../../../parser"; -import { Expression } from "../../expression"; import { ASTNodeMapper } from "../../../../mapping"; +import { PrimaryExpression } from "../primary-expression"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. @@ -26,7 +26,7 @@ export type ASTConstantExpressionKind = * @since 0.10.0 */ export type ParserConstantExpressionContext = InstanceType< - typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTConstantExpressionKind] + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTConstantExpressionKind] >; /** @@ -34,7 +34,7 @@ export type ParserConstantExpressionContext = InstanceType< * AST node. * @since 0.11.0 */ -export type ParserConstantExpressionRuleName = typeof KindParseRuleMapping[ASTConstantExpressionKind]; +export type ParserConstantExpressionRuleName = (typeof KindParseRuleMapping)[ASTConstantExpressionKind]; /** * Abstract constant expression class representing a constant expression, which was defined in the source code. This @@ -43,8 +43,8 @@ export type ParserConstantExpressionRuleName = typeof KindParseRuleMapping[ASTCo */ export abstract class ConstantExpression< Semantics extends ConstantExpressionSemantics = ConstantExpressionSemantics, - TypeSemantics extends ExpressionTypeSemantics = ExpressionTypeSemantics, -> extends Expression { + TypeSemantics extends ConstantExpressionTypeSemantics = ConstantExpressionTypeSemantics, +> extends PrimaryExpression { protected abstract readonly _antlrRuleCtx: ParserConstantExpressionContext; public abstract get kind(): ASTConstantExpressionKind; public abstract get ruleName(): ParserConstantExpressionRuleName; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts new file mode 100644 index 000000000..ca19b3cf9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts @@ -0,0 +1,13 @@ +/** + * Constant expression module containing the classes representing expressions, which represent a constant value in a + * specific data structure. + * @since 0.11.0 + */ +export * from "./constant-expression"; +export * from "./constant-expression-semantics"; +export * from "./constant-expression-type-semantics"; +export * from "./array-primary-expression/"; +export * from "./bool-primary-expression/"; +export * from "./number-primary-expression/"; +export * from "./string-primary-expression/"; +export * from "./void-or-null-or-undefined-primary-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/index.ts new file mode 100644 index 000000000..bb939297d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link NumberPrimaryExpression} and the related {@link NumberPrimaryExpressionSemantics semantics} and + * {@link NumberPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./number-primary-expression"; +export * from "./number-primary-expression-semantics"; +export * from "./number-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-semantics.ts new file mode 100644 index 000000000..4e4e3e2c9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-semantics.ts @@ -0,0 +1,26 @@ +/** + * Semantics for AST Node {@link NumberPrimaryExpression}. + * @since 0.5.0 + */ +import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; + +/** + * Semantics for AST Node {@link NumberPrimaryExpression}. + * @since 0.5.0 + */ +export interface NumberPrimaryExpressionSemantics extends ConstantExpressionSemantics { + /** + * The value of the constant number expression. + * + * This can be either: + * - A Default 10-base number (N) + * - A Float 10-base number (N.N) + * - A Hex 16-base number (0xN) + * - A Octal 8-base number (0oN) + * - A Binary 2-base number (0bN) + * - An Exponent 10-base number (NeN) + * - An Exponent Float 10-base number (N.NeN) + * @since 0.5.0 + */ + value: string; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts new file mode 100644 index 000000000..ef9fab12c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link NumberPrimaryExpression}. + * @since 0.10.0 + */ +import type { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link NumberPrimaryExpression}. + * @since 0.10.0 + */ +export interface NumberPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression.ts similarity index 89% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression.ts index d61b819f7..0923f9378 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/number-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression.ts @@ -2,12 +2,12 @@ * Integer constant expression, which represents a number constant that was defined in the source code. * @since 0.1.0 */ -import type { NumberPrimaryExpressionSemantics } from "../../../../semantic-data"; -import type { NumberPrimaryExpressionTypeSemantics } from "../../../../type-data"; -import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import { ConstantExpression } from "./constant-expression"; -import { KindParseRuleMapping, NumberPrimaryExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; -import { CheckedType } from "../../../../../analysis"; +import type { NumberPrimaryExpressionSemantics } from "./number-primary-expression-semantics"; +import type { NumberPrimaryExpressionTypeSemantics } from "./number-primary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import { ConstantExpression } from "../constant-expression"; +import { KindParseRuleMapping, NumberPrimaryExpressionContext, ParseRuleKindMapping } from "../../../../../../parser"; +import { CheckedType } from "../../../../../../analysis"; /** * Number constant expression, which represents a number constant that was defined in the source code. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/index.ts new file mode 100644 index 000000000..e9982d1b0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link StringPrimaryExpression} and the related {@link StringPrimaryExpressionSemantics semantics} and + * {@link StringPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./string-primary-expression"; +export * from "./string-primary-expression-semantics"; +export * from "./string-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-semantics.ts new file mode 100644 index 000000000..54bf8a186 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-semantics.ts @@ -0,0 +1,25 @@ +/** + * Semantics for AST Node {@link StringPrimaryExpression}. + * @since 0.5.0 + */ +import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; + +/** + * Semantics for AST Node {@link StringPrimaryExpression}. + * @since 0.5.0 + */ +export interface StringPrimaryExpressionSemantics extends ConstantExpressionSemantics { + /** + * The value of the constant string expression. + * @since 0.5.0 + */ + value: string; + /** + * The quotation marks that this string has used. + * + * This is important to keep track of, so that the translated string is valid and does not produce a syntax error + * due to unescaped quotation marks inside it. + * @since 0.10.0 + */ + quotationMarks: `"` | `'`; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts new file mode 100644 index 000000000..6aed112b0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link StringPrimaryExpression}. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../../../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link StringPrimaryExpression}. + * @since 0.10.0 + */ +export interface StringPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression.ts similarity index 89% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression.ts index 25955dd8d..67dc82442 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/string-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression.ts @@ -2,12 +2,12 @@ * String constant expression, which represents a string constant that was defined in the source code. * @since 0.1.0 */ -import type { StringPrimaryExpressionSemantics } from "../../../../semantic-data"; -import type { StringPrimaryExpressionTypeSemantics } from "../../../../type-data"; -import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import { ConstantExpression } from "./constant-expression"; -import { KindParseRuleMapping, ParseRuleKindMapping, StringPrimaryExpressionContext } from "../../../../../parser"; -import { CheckedType } from "../../../../../analysis"; +import type { StringPrimaryExpressionSemantics } from "./string-primary-expression-semantics"; +import type { StringPrimaryExpressionTypeSemantics } from "./string-primary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import { ConstantExpression } from "../constant-expression"; +import { KindParseRuleMapping, ParseRuleKindMapping, StringPrimaryExpressionContext } from "../../../../../../parser"; +import { CheckedType } from "../../../../../../analysis"; /** * String constant expression, which represents a string constant that was defined in the source code. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/index.ts new file mode 100644 index 000000000..87058d6ad --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link VoidOrNullOrUndefinedPrimaryExpression} and the related + * {@link VoidOrNullOrUndefinedPrimaryExpressionSemantics semantics} and + * {@link VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./void-or-null-or-undefined-primary-expression"; +export * from "./void-or-null-or-undefined-primary-expression-semantics"; +export * from "./void-or-null-or-undefined-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts new file mode 100644 index 000000000..77e836ac7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts @@ -0,0 +1,18 @@ +/** + * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. + * @since 0.10.0 + */ +import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../../const"; +import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; + +/** + * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. + * @since 0.10.0 + */ +export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends ConstantExpressionSemantics { + /** + * The constant identifier of this expression. + * @since 0.10.0 + */ + constantIdentifier: KipperVoidType | KipperNullType | KipperUndefinedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts new file mode 100644 index 000000000..8cdd3f789 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../../../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. + * @since 0.10.0 + */ +export interface VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts index 427909023..fd37f2947 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/void-or-null-or-undefined-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts @@ -1,18 +1,18 @@ -import type { VoidOrNullOrUndefinedPrimaryExpressionSemantics } from "../../../../semantic-data"; -import type { VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics } from "../../../../type-data"; /** * Constant expression, representing the void, null or undefined keyword. * @since 0.10.0 */ -import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../const"; -import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../../const"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import type { VoidOrNullOrUndefinedPrimaryExpressionSemantics } from "./void-or-null-or-undefined-primary-expression-semantics"; +import type { VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics } from "./void-or-null-or-undefined-primary-expression-type-semantics"; import { KindParseRuleMapping, ParseRuleKindMapping, - VoidOrNullOrUndefinedPrimaryExpressionContext -} from "../../../../../parser"; -import { CheckedType } from "../../../../../analysis"; -import { ConstantExpression } from "./constant-expression"; + VoidOrNullOrUndefinedPrimaryExpressionContext, +} from "../../../../../../parser"; +import { CheckedType } from "../../../../../../analysis"; +import { ConstantExpression } from "../constant-expression"; /** * Constant expression, representing the void, null or undefined keyword. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-semantics.ts new file mode 100644 index 000000000..c10cdb9df --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-semantics.ts @@ -0,0 +1,19 @@ +/** + * Semantics for AST Node {@link FStringPrimaryExpression}. + * @since 0.5.0 + */ +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; +import type { Expression } from "../../expression"; + +/** + * Semantics for AST Node {@link FStringPrimaryExpression}. + * @since 0.5.0 + */ +export interface FStringPrimaryExpressionSemantics extends PrimaryExpressionSemantics { + /** + * Returns the items of the f-strings, where each item represents one section of the string. The section may either be + * a {@link StringPrimaryExpression constant string} or {@link Expression evaluable runtime expression}. + * @since 0.10.0 + */ + atoms: Array; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-type-semantics.ts new file mode 100644 index 000000000..e9fb0ea4a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link FStringPrimaryExpression}. + * @since 0.5.0 + */ +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link FStringPrimaryExpression}. + * @since 0.10.0 + */ +export interface FStringPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression.ts index 7963ef9c2..5752b9ff8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/fstring-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression.ts @@ -2,20 +2,20 @@ * F-String class, which represents an f-string expression in the Kipper language. * @since 0.1.0 */ -import type { FStringPrimaryExpressionSemantics } from "../../../semantic-data"; -import type { FStringPrimaryExpressionTypeSemantics } from "../../../type-data"; -import { Expression } from "../expression"; +import type { FStringPrimaryExpressionSemantics } from "./fstring-primary-expression-semantics"; +import type { FStringPrimaryExpressionTypeSemantics } from "./fstring-primary-expression-type-semantics"; +import { Expression } from "../../expression"; import { ExpressionContext, FStringDoubleQuoteAtomContext, FStringPrimaryExpressionContext, FStringSingleQuoteAtomContext, KindParseRuleMapping, - ParseRuleKindMapping -} from "../../../../parser"; -import { CompilableASTNode } from "../../../compilable-ast-node"; -import { CheckedType } from "../../../../analysis"; -import { getParseRuleSource } from "../../../../../tools"; + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { CheckedType } from "../../../../../analysis"; +import { getParseRuleSource } from "../../../../../../tools"; /** * F-String class, which represents an f-string expression in the Kipper language. F-Strings are a way to automatically diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/index.ts new file mode 100644 index 000000000..2e6c6b181 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link FStringPrimaryExpression} and the related {@link FStringPrimaryExpressionSemantics semantics} and + * {@link FStringPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./fstring-primary-expression"; +export * from "./fstring-primary-expression-semantics"; +export * from "./fstring-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-semantics.ts new file mode 100644 index 000000000..3d739a4c5 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-semantics.ts @@ -0,0 +1,23 @@ +/** + * Semantics for AST Node {@link IdentifierPrimaryExpression}. + * @since 0.5.0 + */ +import type { Reference } from "../../../../../analysis"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; + +/** + * Semantics for AST Node {@link IdentifierPrimaryExpression}. + * @since 0.5.0 + */ +export interface IdentifierPrimaryExpressionSemantics extends PrimaryExpressionSemantics { + /** + * The identifier of the {@link IdentifierPrimaryExpressionSemantics.ref reference}. + * @since 0.5.0 + */ + identifier: string; + /** + * The reference that the {@link IdentifierPrimaryExpressionSemantics.identifier identifier} points to. + * @since 0.10.0 + */ + ref: Reference; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-type-semantics.ts new file mode 100644 index 000000000..d75c90fdd --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression-type-semantics.ts @@ -0,0 +1,21 @@ +/** + * Type semantics for AST Node {@link IdentifierPrimaryExpression}. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../../../analysis"; +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link IdentifierPrimaryExpression}. + * @since 0.10.0 + */ +export interface IdentifierPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics { + /** + * The value type that this expression evaluates to. + * + * This will always be the value type of the reference that the + * {@link IdentifierPrimaryExpressionSemantics.identifier identifier} points to. + * @since 0.10.0 + */ + evaluatedType: CheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts similarity index 89% rename from kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts index 0790a04d3..61b53c919 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/identifier-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts @@ -4,13 +4,13 @@ * This is only represents a reference and not a declaration/definition. * @since 0.1.0 */ -import type { IdentifierPrimaryExpressionSemantics } from "../../../semantic-data"; -import type { IdentifierPrimaryExpressionTypeSemantics } from "../../../type-data"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { Expression } from "../expression"; -import { IdentifierPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { CheckedType, ScopeDeclaration } from "../../../../analysis"; -import { AssignmentExpression } from "../assignment-expression"; +import type { IdentifierPrimaryExpressionSemantics } from "./identifier-primary-expression-semantics"; +import type { IdentifierPrimaryExpressionTypeSemantics } from "./identifier-primary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { IdentifierPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { CheckedType, ScopeDeclaration } from "../../../../../analysis"; +import { AssignmentExpression } from "../../assignment-expression/assignment-expression"; +import { PrimaryExpression } from "../primary-expression"; /** * Identifier expression, which represents an identifier referencing a variable, function or built-in identifier. @@ -18,7 +18,7 @@ import { AssignmentExpression } from "../assignment-expression"; * This is only represents a reference and not a declaration/definition. * @since 0.1.0 */ -export class IdentifierPrimaryExpression extends Expression< +export class IdentifierPrimaryExpression extends PrimaryExpression< IdentifierPrimaryExpressionSemantics, IdentifierPrimaryExpressionTypeSemantics > { @@ -33,7 +33,7 @@ export class IdentifierPrimaryExpression extends Expression< * The static kind for this AST Node. * @since 0.11.0 */ - public static readonly kind = ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression; + public static readonly kind = ParseRuleKindMapping.RULE_identifierPrimaryExpression; /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/index.ts new file mode 100644 index 000000000..186b41b93 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link IdentifierPrimaryExpression} and the related {@link IdentifierPrimaryExpressionSemantics semantics} + * and {@link IdentifierPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./identifier-primary-expression"; +export * from "./identifier-primary-expression-semantics"; +export * from "./identifier-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts new file mode 100644 index 000000000..9d134f70f --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts @@ -0,0 +1,12 @@ +/** + * Primary expression module containing the classes representing expressions, which build up the fundamental building + * blocks of the language, such as constants and identifiers. + * @since 0.11.0 + */ +export * from "./primary-expression"; +export * from "./primary-expression-semantics"; +export * from "./primary-expression-type-semantics"; +export * from "./constant/"; +export * from "./fstring-primary-expression/"; +export * from "./identifier-primary-expression/"; +export * from "./tangled-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-semantics.ts new file mode 100644 index 000000000..6326a5308 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link PrimaryExpression}. + * @since 0.11.0 + */ +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for AST Node {@link PrimaryExpression}. + * @since 0.11.0 + */ +export interface PrimaryExpressionSemantics extends ExpressionSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-type-semantics.ts new file mode 100644 index 000000000..ff0e26b30 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link PrimaryExpression}. + * @since 0.11.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link PrimaryExpression}. + * @since 0.11.0 + */ +export interface PrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts new file mode 100644 index 000000000..f00e1a8c3 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts @@ -0,0 +1,53 @@ +/** + * Primary expression, which represents the most basic expressions in the language, such as constants, f-strings, + * identifiers and tangled expressions. + * @abstract + * @since 0.11.0 + */ +import type { PrimaryExpressionSemantics } from "./primary-expression-semantics"; +import type { PrimaryExpressionTypeSemantics } from "./primary-expression-type-semantics"; +import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { Expression } from "../expression"; +import { ASTNodeMapper } from "../../../mapping"; +import { ASTConstantExpressionKind } from "./constant"; + +/** + * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link PrimaryExpression} AST node. + * @since 0.10.0 + */ +export type ASTPrimaryExpressionKind = + | ASTConstantExpressionKind + | typeof ParseRuleKindMapping.RULE_fStringPrimaryExpression + | typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression + | typeof ParseRuleKindMapping.RULE_tangledPrimaryExpression; + +/** + * Union type of all possible {@link ParserASTNode.kind} context classes for a constructable + * {@link PrimaryExpression} AST node. + * @since 0.10.0 + */ +export type ParserPrimaryExpressionContext = InstanceType< + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTPrimaryExpressionKind] +>; + +/** + * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link PrimaryExpression} + * AST node. + * @since 0.11.0 + */ +export type ParserPrimaryExpressionRuleName = (typeof KindParseRuleMapping)[ASTPrimaryExpressionKind]; + +/** + * Primary expression, which represents the most basic expressions in the language, such as constants, f-strings and + * tangled expressions. + * @abstract + * @since 0.11.0 + */ +export abstract class PrimaryExpression< + Semantics extends PrimaryExpressionSemantics = PrimaryExpressionSemantics, + TypeSemantics extends PrimaryExpressionTypeSemantics = PrimaryExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserPrimaryExpressionContext; + public abstract get kind(): ASTPrimaryExpressionKind; + public abstract get ruleName(): ParserPrimaryExpressionRuleName; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/index.ts new file mode 100644 index 000000000..e70b34d25 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link TangledPrimaryExpression} and the related {@link TangledPrimaryExpressionSemantics semantics} and + * {@link TangledPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./tangled-primary-expression"; +export * from "./tangled-primary-expression-semantics"; +export * from "./tangled-primary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-semantics.ts new file mode 100644 index 000000000..829b818d4 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-semantics.ts @@ -0,0 +1,18 @@ +/** + * Semantics for AST Node {@link TangledPrimaryExpression}. + * @since 0.5.0 + */ +import type { Expression } from "../../expression"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; + +/** + * Semantics for AST Node {@link TangledPrimaryExpression}. + * @since 0.5.0 + */ +export interface TangledPrimaryExpressionSemantics extends PrimaryExpressionSemantics { + /** + * The child expression contained in this tangled expression. + * @since 0.10.0 + */ + childExp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-type-semantics.ts new file mode 100644 index 000000000..f80faf782 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link TangledPrimaryExpression}. + * @since 0.5.0 + */ +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link TangledPrimaryExpression}. + * @since 0.5.0 + */ +export interface TangledPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression.ts index 964e3c1ae..82c70614d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/tangled-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression.ts @@ -5,12 +5,13 @@ * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed * @since 0.1.0 */ -import type { TangledPrimaryExpressionSemantics } from "../../semantic-data"; -import type { TangledPrimaryTypeSemantics } from "../../type-data"; -import type { CompilableASTNode } from "../../compilable-ast-node"; -import { Expression } from "./expression"; -import { KindParseRuleMapping, ParseRuleKindMapping, TangledPrimaryExpressionContext } from "../../../parser"; -import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import type { TangledPrimaryExpressionSemantics } from "./tangled-primary-expression-semantics"; +import type { TangledPrimaryExpressionTypeSemantics } from "./tangled-primary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { Expression } from "../../expression"; +import { KindParseRuleMapping, ParseRuleKindMapping, TangledPrimaryExpressionContext } from "../../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { PrimaryExpression } from "../primary-expression"; /** * Tangled/Parenthesised expression, which represents a parenthesised expression that wraps another expression and @@ -19,9 +20,9 @@ import { UnableToDetermineSemanticDataError } from "../../../../errors"; * (4 + 5) * 5; // 4 + 5 will be evaluated first, then the multiplication will be performed * @since 0.1.0 */ -export class TangledPrimaryExpression extends Expression< +export class TangledPrimaryExpression extends PrimaryExpression< TangledPrimaryExpressionSemantics, - TangledPrimaryTypeSemantics + TangledPrimaryExpressionTypeSemantics > { /** * The private field '_antlrRuleCtx' that actually stores the variable data, diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts deleted file mode 100644 index f16c94616..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/constant/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Constant expression module containing the classes representing expressions, which represent a constant value in a - * specific data structure. - * @since 0.11.0 - */ -export * from "./constant-expression"; -export * from "./array-primary-expression"; -export * from "./bool-primary-expression"; -export * from "./number-primary-expression"; -export * from "./string-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts deleted file mode 100644 index 65978fb02..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Primary expression module containing the classes representing expressions, which build up the fundamental building - * blocks of the language, such as constants and identifiers. - * @since 0.11.0 - */ -export * from "./constant/"; -export * from "./fstring-primary-expression"; -export * from "./identifier-primary-expression"; -export * from "./constant/void-or-null-or-undefined-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-semantics.ts new file mode 100644 index 000000000..395aa87f7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-semantics.ts @@ -0,0 +1,13 @@ +/** + * Semantics for AST Node {@link GenericTypeSpecifierExpression}. + * @since 0.8.0 + */ +import type { TypeSpecifierExpressionSemantics } from "../type-specifier-expression-semantics"; + +/** + * Semantics for AST Node {@link GenericTypeSpecifierExpression}. + * @since 0.8.0 + */ +export interface GenericTypeSpecifierExpressionSemantics extends TypeSpecifierExpressionSemantics { + // Not implemented. +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-type-semantics.ts new file mode 100644 index 000000000..259dc3bd6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression-type-semantics.ts @@ -0,0 +1,13 @@ +/** + * Semantics for AST Node {@link GenericTypeSpecifierExpression}. + * @since 0.10.0 + */ +import type { TypeSpecifierExpressionTypeSemantics } from "../type-specifier-expression-type-semantics"; + +/** + * Semantics for AST Node {@link GenericTypeSpecifierExpression}. + * @since 0.10.0 + */ +export interface GenericTypeSpecifierExpressionTypeSemantics extends TypeSpecifierExpressionTypeSemantics { + // Not implemented. +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts index 31951ce20..fdb7b10eb 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/generic-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts @@ -1,15 +1,19 @@ -import type { GenericTypeSpecifierExpressionSemantics } from "../../../semantic-data"; /** * Generic type specifier expression, which represents a generic type specifier. * @example * list // List type with number as generic type * @since 0.8.0 */ -import type { GenericTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { TypeSpecifierExpression } from "./type-specifier-expression"; -import { GenericTypeSpecifierExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { KipperNotImplementedError } from "../../../../../errors"; +import type { GenericTypeSpecifierExpressionSemantics } from "./generic-type-specifier-expression-semantics"; +import type { GenericTypeSpecifierExpressionTypeSemantics } from "./generic-type-specifier-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "../type-specifier-expression"; +import { + GenericTypeSpecifierExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping, +} from "../../../../../parser"; +import { KipperNotImplementedError } from "../../../../../../errors"; /** * Generic type specifier expression, which represents a generic type specifier. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/index.ts new file mode 100644 index 000000000..62a0924f5 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link GenericTypeSpecifierExpression} and the related {@link GenericTypeSpecifierExpressionSemantics + * semantics} and {@link GenericTypeSpecifierExpressionTypeSemantics type semantics}. + */ +export * from "./generic-type-specifier-expression"; +export * from "./generic-type-specifier-expression-semantics"; +export * from "./generic-type-specifier-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-semantics.ts new file mode 100644 index 000000000..e48b6bf06 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-semantics.ts @@ -0,0 +1,19 @@ +/** + * Semantics for AST Node {@link IdentifierTypeSpecifierExpression}. + * @since 0.8.0 + */ +import type { UncheckedType } from "../../../../../analysis"; +import type { TypeSpecifierExpressionSemantics } from "../type-specifier-expression-semantics"; + +/** + * Semantics for AST Node {@link IdentifierTypeSpecifierExpression}. + * @since 0.8.0 + */ +export interface IdentifierTypeSpecifierExpressionSemantics extends TypeSpecifierExpressionSemantics { + /** + * The type specified by this expression, which per default is an unchecked type as the type is not yet known and + * therefore may be invalid/undefined. + * @since 0.8.0 + */ + typeIdentifier: UncheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-type-semantics.ts new file mode 100644 index 000000000..aa361091a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link IdentifierTypeSpecifierExpression}. + * @since 0.10.0 + */ +import type { TypeSpecifierExpressionTypeSemantics } from "../type-specifier-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link IdentifierTypeSpecifierExpression}. + * @since 0.10.0 + */ +export interface IdentifierTypeSpecifierExpressionTypeSemantics extends TypeSpecifierExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts similarity index 91% rename from kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts index e33562a57..bf2e15295 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/identifier-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts @@ -7,16 +7,16 @@ * bool // Boolean type * @since 0.8.0 */ -import type { IdentifierTypeSpecifierExpressionSemantics } from "../../../semantic-data"; -import type { IdentifierTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { TypeSpecifierExpression } from "./type-specifier-expression"; +import type { IdentifierTypeSpecifierExpressionSemantics } from "./identifier-type-specifier-expression-semantics"; +import type { IdentifierTypeSpecifierExpressionTypeSemantics } from "./identifier-type-specifier-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "../type-specifier-expression"; import { IdentifierTypeSpecifierExpressionContext, KindParseRuleMapping, - ParseRuleKindMapping -} from "../../../../parser"; -import { CheckedType, UncheckedType } from "../../../../analysis"; + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CheckedType, UncheckedType } from "../../../../../analysis"; /** * Type specifier expression, which represents a simple identifier type specifier. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/index.ts new file mode 100644 index 000000000..127cbff4d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link IdentifierTypeSpecifierExpression} and the related + * {@link IdentifierTypeSpecifierExpressionSemantics semantics} and + * {@link IdentifierTypeSpecifierExpressionTypeSemantics type semantics}. + */ +export * from "./identifier-type-specifier-expression"; +export * from "./identifier-type-specifier-expression-semantics"; +export * from "./identifier-type-specifier-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/index.ts new file mode 100644 index 000000000..fe9517cb9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/index.ts @@ -0,0 +1,11 @@ +/** + * Type specifier expression module containing the classes representing expressions, which are used in declaration + * and type references, where a type specifier is required. + * @since 0.11.0 + */ +export * from "./type-specifier-expression"; +export * from "./type-specifier-expression-semantics"; +export * from "./type-specifier-expression-type-semantics"; +export * from "./identifier-type-specifier-expression/"; +export * from "./typeof-type-specifier-expression/"; +export * from "./generic-type-specifier-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-semantics.ts new file mode 100644 index 000000000..1703316c9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-semantics.ts @@ -0,0 +1,9 @@ +/** + * Semantics for AST Node {@link TypeSpecifierExpression}. + */ +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for AST Node {@link TypeSpecifierExpression}. + */ +export interface TypeSpecifierExpressionSemantics extends ExpressionSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-type-semantics.ts new file mode 100644 index 000000000..284abeb1c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression-type-semantics.ts @@ -0,0 +1,19 @@ +/** + * Type semantics for AST Node {@link TypeSpecifierExpression}. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../../analysis"; +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for AST Node {@link TypeSpecifierExpression}. + * @since 0.10.0 + */ +export interface TypeSpecifierExpressionTypeSemantics extends ExpressionTypeSemantics { + /** + * The type that is being stored by this type specifier. This is the type that would be used to determine what + * values should be stored in a variable. + * @since 0.10.0 + */ + storedType: CheckedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression.ts similarity index 75% rename from kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression.ts index 762e4fbef..7ae60d42f 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/type-specifier-expression.ts @@ -3,12 +3,11 @@ * different type specifier expressions. * @since 0.9.0 */ -import type { TypeSpecifierExpressionSemantics } from "../../../semantic-data"; -import type { ParseRuleKindMapping } from "../../../../parser"; -import { KindParseRuleMapping } from "../../../../parser"; -import type { TypeSpecifierExpressionTypeSemantics } from "../../../type-data"; +import type { TypeSpecifierExpressionSemantics } from "./type-specifier-expression-semantics"; +import type { TypeSpecifierExpressionTypeSemantics } from "./type-specifier-expression-type-semantics"; +import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { ASTNodeMapper } from "../../../mapping"; import { Expression } from "../expression"; -import { ASTNodeMapper } from "../../../mapping"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link TypeSpecifierExpression} AST node. @@ -25,7 +24,7 @@ export type ASTTypeSpecifierExpressionKind = * @since 0.10.0 */ export type ParserTypeSpecifierExpressionContext = InstanceType< - typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTTypeSpecifierExpressionKind] + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTTypeSpecifierExpressionKind] >; /** @@ -33,7 +32,7 @@ export type ParserTypeSpecifierExpressionContext = InstanceType< * AST node. * @since 0.11.0 */ -export type ParserTypeSpecifierExpressionRuleName = typeof KindParseRuleMapping[ASTTypeSpecifierExpressionKind]; +export type ParserTypeSpecifierExpressionRuleName = (typeof KindParseRuleMapping)[ASTTypeSpecifierExpressionKind]; /** * Abstract type class representing a type specifier. This abstract class only exists to provide the commonality between the diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/index.ts new file mode 100644 index 000000000..e1d9adc83 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link TypeofTypeSpecifierExpression} and the related + * {@link TypeofTypeSpecifierExpressionSemantics semantics} and + * {@link TypeofTypeSpecifierExpressionTypeSemantics type semantics}. + */ +export * from "./typeof-type-specifier-expression"; +export * from "./typeof-type-specifier-expression-semantics"; +export * from "./typeof-type-specifier-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-semantics.ts new file mode 100644 index 000000000..ad479f29e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-semantics.ts @@ -0,0 +1,13 @@ +/** + * Semantics for AST Node {@link TypeofTypeSpecifierExpression}. + * @since 0.8.0 + */ +import type { TypeSpecifierExpressionSemantics } from "../type-specifier-expression-semantics"; + +/** + * Semantics for AST Node {@link TypeofTypeSpecifierExpression}. + * @since 0.8.0 + */ +export interface TypeofTypeSpecifierExpressionSemantics extends TypeSpecifierExpressionSemantics { + // Not implemented. +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-type-semantics.ts new file mode 100644 index 000000000..570bc7741 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression-type-semantics.ts @@ -0,0 +1,13 @@ +/** + * Type semantics for AST Node {@link TypeofTypeSpecifierExpression}. + * @since 0.8.0 + */ +import type { TypeSpecifierExpressionTypeSemantics } from "../type-specifier-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link TypeofTypeSpecifierExpression}. + * @since 0.8.0 + */ +export interface TypeofTypeSpecifierExpressionTypeSemantics extends TypeSpecifierExpressionTypeSemantics { + // Not implemented. +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts similarity index 87% rename from kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts index 46da4f391..d8b9c9d64 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/typeof-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts @@ -2,12 +2,16 @@ * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. * @since 0.8.0 */ -import type { TypeofTypeSpecifierExpressionSemantics } from "../../../semantic-data"; -import type { TypeofTypeSpecifierExpressionTypeSemantics } from "../../../type-data"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import { TypeSpecifierExpression } from "./type-specifier-expression"; -import { KindParseRuleMapping, ParseRuleKindMapping, TypeofTypeSpecifierExpressionContext } from "../../../../parser"; -import { KipperNotImplementedError } from "../../../../../errors"; +import type { TypeofTypeSpecifierExpressionSemantics } from "./typeof-type-specifier-expression-semantics"; +import type { TypeofTypeSpecifierExpressionTypeSemantics } from "./typeof-type-specifier-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import { TypeSpecifierExpression } from "../type-specifier-expression"; +import { + KindParseRuleMapping, + ParseRuleKindMapping, + TypeofTypeSpecifierExpressionContext, +} from "../../../../../parser"; +import { KipperNotImplementedError } from "../../../../../../errors"; /** * Typeof type specifier expression, which represents a runtime typeof expression evaluating the type of a value. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts deleted file mode 100644 index fbd06eaa7..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Type specifier expression module containing the classes representing expressions, which are used in declaration - * and type references, where a type specifier is required. - * @since 0.11.0 - */ -export * from "./type-specifier-expression"; -export * from "./identifier-type-specifier-expression"; -export * from "./typeof-type-specifier-expression"; -export * from "./generic-type-specifier-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-semantics.ts new file mode 100644 index 000000000..e3c11e180 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-semantics.ts @@ -0,0 +1,18 @@ +/** + * Semantics for AST Node {@link IncrementOrDecrementUnaryExpression}. + * @since 0.5.0 + */ +import type { KipperIncrementOrDecrementOperator } from "../../../../../const"; +import type { UnaryExpressionSemantics } from "../unary-expression-semantics"; + +/** + * Semantics for AST Node {@link IncrementOrDecrementUnaryExpression}. + * @since 0.5.0 + */ +export interface IncrementOrDecrementUnaryExpressionSemantics extends UnaryExpressionSemantics { + /** + * The operator that is used to modify the {@link operand}. + * @since 0.9.0 + */ + operator: KipperIncrementOrDecrementOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-type-semantics.ts new file mode 100644 index 000000000..d1b4ec7a0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link IncrementOrDecrementUnaryExpression}. + * @since 0.10.0 + */ +import type { UnaryExpressionTypeSemantics } from "../unary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link IncrementOrDecrementUnaryExpression}. + * @since 0.10.0 + */ +export interface IncrementOrDecrementUnaryTypeSemantics extends UnaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression.ts index 6aaa95090..551a2799c 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary/increment-or-decrement-unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression.ts @@ -5,19 +5,19 @@ * ++49; // 49 will be incremented by 1 * --11; // 11 will be decremented by 1 */ -import type { IncrementOrDecrementUnaryExpressionSemantics } from "../../../semantic-data"; -import type { IncrementOrDecrementUnaryTypeSemantics } from "../../../type-data"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import type { Expression } from "../expression"; -import type { KipperIncrementOrDecrementOperator } from "../../../../const"; -import { UnaryExpression } from "./unary-expression"; +import type { IncrementOrDecrementUnaryExpressionSemantics } from "./increment-or-decrement-unary-expression-semantics"; +import type { IncrementOrDecrementUnaryTypeSemantics } from "./increment-or-decrement-unary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { Expression } from "../../expression"; +import type { KipperIncrementOrDecrementOperator } from "../../../../../const"; +import { UnaryExpression } from "../unary-expression"; import { IncrementOrDecrementUnaryExpressionContext, KindParseRuleMapping, - ParseRuleKindMapping -} from "../../../../parser"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { CheckedType } from "../../../../analysis"; + ParseRuleKindMapping, +} from "../../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; /** * Increment or decrement expression class, which represents a left-side -- or ++ expression modifying a numeric value. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/index.ts new file mode 100644 index 000000000..a1b23ccef --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link IncrementOrDecrementUnaryExpression} and the related + * {@link IncrementOrDecrementUnaryExpressionSemantics semantics} and + * {@link IncrementOrDecrementUnaryExpressionTypeSemantics type semantics}. + */ +export * from "./increment-or-decrement-unary-expression"; +export * from "./increment-or-decrement-unary-expression-semantics"; +export * from "./increment-or-decrement-unary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/index.ts similarity index 51% rename from kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/unary-expression/index.ts index 67817a3c9..18ee585e0 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/index.ts @@ -4,5 +4,7 @@ * @since 0.11.0 */ export * from "./unary-expression"; -export * from "./operator-modified-unary-expression"; -export * from "./increment-or-decrement-unary-expression"; +export * from "./unary-expression-semantics"; +export * from "./unary-expression-type-semantics"; +export * from "./operator-modified-unary-expression/"; +export * from "./increment-or-decrement-unary-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/index.ts new file mode 100644 index 000000000..c6ad51689 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link OperatorModifiedUnaryExpression} and the related + * {@link OperatorModifiedUnaryExpressionSemantics semantics} and + * {@link OperatorModifiedUnaryExpressionTypeSemantics type semantics}. + */ +export * from "./operator-modified-unary-expression"; +export * from "./operator-modified-unary-expression-semantics"; +export * from "./operator-modified-unary-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-semantics.ts new file mode 100644 index 000000000..470bb7551 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-semantics.ts @@ -0,0 +1,18 @@ +/** + * Semantics for AST Node {@link OperatorModifiedUnaryExpression}. + * @since 0.5.0 + */ +import type { KipperUnaryModifierOperator } from "../../../../../const"; +import type { UnaryExpressionSemantics } from "../unary-expression-semantics"; + +/** + * Semantics for AST Node {@link OperatorModifiedUnaryExpression}. + * @since 0.5.0 + */ +export interface OperatorModifiedUnaryExpressionSemantics extends UnaryExpressionSemantics { + /** + * The operator that is used to modify the {@link operand}. + * @since 0.9.0 + */ + operator: KipperUnaryModifierOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-type-semantics.ts new file mode 100644 index 000000000..d7bf35941 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link OperatorModifiedUnaryExpression}. + * @since 0.10.0 + */ +import type { UnaryExpressionTypeSemantics } from "../unary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link OperatorModifiedUnaryExpression}. + * @since 0.10.0 + */ +export interface OperatorModifiedUnaryTypeSemantics extends UnaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression.ts index 92eb22024..e42e17531 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary/operator-modified-unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression.ts @@ -6,20 +6,21 @@ * -41 // -41 * +59 // 59 */ -import type { OperatorModifiedUnaryExpressionSemantics } from "../../../semantic-data"; -import type { OperatorModifiedUnaryTypeSemantics } from "../../../type-data"; -import type { CompilableASTNode } from "../../../compilable-ast-node"; -import type { Expression } from "../expression"; -import { UnaryExpression } from "./unary-expression"; +import type { OperatorModifiedUnaryExpressionSemantics } from "./operator-modified-unary-expression-semantics"; +import type { OperatorModifiedUnaryTypeSemantics } from "./operator-modified-unary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { Expression } from "../../expression"; +import type { KipperNegateOperator, KipperSignOperator } from "../../../../../const"; +import { kipperUnaryModifierOperators } from "../../../../../const"; +import { UnaryExpression } from "../unary-expression"; import { KindParseRuleMapping, OperatorModifiedUnaryExpressionContext, ParseRuleKindMapping, - UnaryOperatorContext -} from "../../../../parser"; -import { KipperNegateOperator, KipperSignOperator, kipperUnaryModifierOperators } from "../../../../const"; -import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { CheckedType } from "../../../../analysis"; + UnaryOperatorContext, +} from "../../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; /** * Operator modified expressions, which are used to modify the value of an expression based on an diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-semantics.ts new file mode 100644 index 000000000..21a884b70 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-semantics.ts @@ -0,0 +1,26 @@ +/** + * Semantics for unary expressions, which can be used to modify an expression with + * a specified operator. + * @since 0.9.0 + */ +import type { KipperUnaryOperator } from "../../../../const"; +import type { Expression } from "../expression"; +import type { ExpressionSemantics } from "../expression-semantics"; + +/** + * Semantics for unary expressions, which can be used to modify an expression with + * a specified operator. + * @since 0.9.0 + */ +export interface UnaryExpressionSemantics extends ExpressionSemantics { + /** + * The operator that is used to modify the {@link operand}. + * @since 0.9.0 + */ + operator: KipperUnaryOperator; + /** + * The operand that is modified by the {@link operator}. + * @since 0.9.0 + */ + operand: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-type-semantics.ts new file mode 100644 index 000000000..e8ebf669b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression-type-semantics.ts @@ -0,0 +1,13 @@ +/** + * Semantics for {@link UnaryExpression unary expressions}, which can be used to modify an expression with + * a specified operator. + * @since 0.10.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +/** + * Type semantics for {@link UnaryExpression unary expressions}, which can be used to modify an expression with + * a specified operator. + * @since 0.10.0 + */ +export interface UnaryExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression.ts similarity index 84% rename from kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression.ts index f46bfeecd..02bab51e6 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary/unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression.ts @@ -4,8 +4,8 @@ * expressions. * @since 0.9.0 */ -import type { UnaryExpressionSemantics } from "../../../semantic-data"; -import type { UnaryExpressionTypeSemantics } from "../../../type-data"; +import type { UnaryExpressionSemantics } from "./unary-expression-semantics"; +import type { UnaryExpressionTypeSemantics } from "./unary-expression-type-semantics"; import type { ParseRuleKindMapping } from "../../../../parser"; import { KindParseRuleMapping } from "../../../../parser"; import { Expression } from "../expression"; @@ -24,7 +24,7 @@ export type ASTUnaryExpressionKind = * @since 0.10.0 */ export type ParserUnaryExpressionContext = InstanceType< - typeof ASTNodeMapper.expressionKindToRuleContextMap[ASTUnaryExpressionKind] + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTUnaryExpressionKind] >; /** @@ -32,7 +32,7 @@ export type ParserUnaryExpressionContext = InstanceType< * AST node. * @since 0.11.0 */ -export type ParserUnaryExpressionRuleName = typeof KindParseRuleMapping[ASTUnaryExpressionKind]; +export type ParserUnaryExpressionRuleName = (typeof KindParseRuleMapping)[ASTUnaryExpressionKind]; /** * Abstract unary expression class representing a unary expression, which can be used to modify an expression with diff --git a/kipper/core/src/compiler/ast/nodes/root-ast-node.ts b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts index b2260cee7..4f6e87ebe 100644 --- a/kipper/core/src/compiler/ast/nodes/root-ast-node.ts +++ b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts @@ -9,7 +9,7 @@ import type { KipperTargetCodeGenerator, KipperTargetSemanticAnalyser, TargetSetUpCodeGenerator, - TargetWrapUpCodeGenerator + TargetWrapUpCodeGenerator, } from "../../target-presets"; import type { EvaluatedCompileConfig } from "../../compile-config"; import type { KipperProgramContext } from "../../program-ctx"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-semantics.ts new file mode 100644 index 000000000..164f3bc1d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link CompoundStatement}. + * @since 0.11.0 + */ +import type { StatementSemantics } from "../statement-semantics"; + +/** + * Semantics for AST Node {@link CompoundStatement}. + * @since 0.11.0 + */ +export interface CompoundStatementSemantics extends StatementSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-type-semantics.ts new file mode 100644 index 000000000..5055f172a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link CompoundStatement}. + * @since 0.11.0 + */ +import type { StatementTypeSemantics } from "../statement-type-semantics"; + +/** + * Type semantics for AST Node {@link CompoundStatement}. + * @since 0.11.0 + */ +export interface CompoundStatementTypeSemantics extends StatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement.ts similarity index 87% rename from kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement.ts index aa17d79e4..5ee8d72a6 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/compound-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement.ts @@ -2,18 +2,22 @@ * Compound statement class, which represents a compound statement containing other items in the Kipper * language and is compilable using {@link translateCtxAndChildren}. */ -import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; -import type { ScopeNode } from "../../scope-node"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import { Statement } from "./statement"; -import { LocalScope } from "../../../analysis"; -import { CompoundStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; +import type { ScopeNode } from "../../../scope-node"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { CompoundStatementSemantics } from "./compound-statement-semantics"; +import type { CompoundStatementTypeSemantics } from "./compound-statement-type-semantics"; +import { Statement } from "../statement"; +import { LocalScope } from "../../../../analysis"; +import { CompoundStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; /** * Compound statement class, which represents a compound statement containing other items in the Kipper * language and is compilable using {@link translateCtxAndChildren}. */ -export class CompoundStatement extends Statement implements ScopeNode { +export class CompoundStatement + extends Statement + implements ScopeNode +{ /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/index.ts new file mode 100644 index 000000000..cf87daffb --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link CompoundStatement} and the related {@link CompoundStatementSemantics semantics} and + * {@link CompoundStatementTypeSemantics type semantics}. + */ +export * from "./compound-statement"; +export * from "./compound-statement-semantics"; +export * from "./compound-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-semantics.ts new file mode 100644 index 000000000..12ceb06ce --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link ExpressionStatement}. + * @since 0.11.0 + */ +import type { StatementSemantics } from "../statement-semantics"; + +/** + * Semantics for AST Node {@link ExpressionStatement}. + * @since 0.11.0 + */ +export interface ExpressionStatementSemantics extends StatementSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-type-semantics.ts new file mode 100644 index 000000000..a0f5e2d2e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link ExpressionStatement}. + * @since 0.11.0 + */ +import type { StatementTypeSemantics } from "../statement-type-semantics"; + +/** + * Type semantics for AST Node {@link ExpressionStatement}. + * @since 0.11.0 + */ +export interface ExpressionStatementTypeSemantics extends StatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement.ts similarity index 87% rename from kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement.ts index 6658cec0b..74fed1820 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/expression-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement.ts @@ -1,16 +1,17 @@ /** * Expression statement class, which represents a statement made up of an expression in the Kipper language. */ -import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import { Statement } from "./statement"; -import { ExpressionStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; -import { Expression } from "../expressions"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { ExpressionStatementSemantics } from "./expression-statement-semantics"; +import type { ExpressionStatementTypeSemantics } from "./expression-statement-type-semantics"; +import { Statement } from "../statement"; +import { ExpressionStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { Expression } from "../../expressions"; /** * Expression statement class, which represents a statement made up of an expression in the Kipper language. */ -export class ExpressionStatement extends Statement { +export class ExpressionStatement extends Statement { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/index.ts new file mode 100644 index 000000000..8b90ec0c6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link ExpressionStatement} and the related {@link ExpressionStatementSemantics semantics} and + * {@link ExpressionStatementTypeSemantics type semantics}. + */ +export * from "./expression-statement"; +export * from "./expression-statement-semantics"; +export * from "./expression-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-semantics.ts new file mode 100644 index 000000000..8909b1283 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-semantics.ts @@ -0,0 +1,34 @@ +/** + * Semantics for AST Node {@link IfStatement}. + * @since 0.9.0 + */ +import type { SemanticData } from "../../../ast-node"; +import type { Expression } from "../../expressions"; +import type { Statement } from "../statement"; +import type { IfStatement } from "./if-statement"; + +/** + * Semantics for AST Node {@link IfStatement}. + * @since 0.9.0 + */ +export interface IfStatementSemantics extends SemanticData { + /** + * The condition of the if-statement. + * @since 0.9.0 + */ + condition: Expression; + /** + * The body of the if-statement. + * @since 0.9.0 + */ + ifBranch: Statement; + /** + * The alternative (optional) branch of the if-statement. This alternative branch can either be: + * - An else branch, if the type is a regular {@link Statement} (the statement that should be + * evaluated in the else branch). + * - An else-if branch, if the type is another {@link IfStatement}. + * - Nothing (undefined), if it wasn't specified and the if statement does not have any more branches. + * @since 0.9.0 + */ + elseBranch?: IfStatement | Statement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-type-semantics.ts new file mode 100644 index 000000000..c5a30ddc3 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link IfStatement}. + * @since 0.11.0 + */ +import type { StatementTypeSemantics } from "../statement-type-semantics"; + +/** + * Type semantics for AST Node {@link IfStatement}. + * @since 0.11.0 + */ +export interface IfStatementTypeSemantics extends StatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement.ts similarity index 91% rename from kipper/core/src/compiler/ast/nodes/statements/if-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement.ts index 81a666ed4..ddf790db9 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/if-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement.ts @@ -2,19 +2,19 @@ * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using * {@link translateCtxAndChildren}. */ -import type { NoTypeSemantics } from "../../ast-node"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import type { IfStatementSemantics } from "../../semantic-data"; -import { Statement } from "./statement"; -import { IfStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; -import { Expression } from "../expressions"; -import { UnableToDetermineSemanticDataError } from "../../../../errors"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { IfStatementSemantics } from "./if-statement-semantics"; +import type { IfStatementTypeSemantics } from "./if-statement-type-semantics"; +import type { Expression } from "../../expressions"; +import { Statement } from "../statement"; +import { IfStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; /** * If statement class, which represents if, else-if and else statements in the Kipper language and is compilable using * {@link translateCtxAndChildren}. */ -export class IfStatement extends Statement { +export class IfStatement extends Statement { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement/index.ts new file mode 100644 index 000000000..bf7b67cb2 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link IfStatement} and the related {@link IfStatementSemantics semantics} and + * {@link IfStatementTypeSemantics type semantics}. + */ +export * from "./if-statement"; +export * from "./if-statement-semantics"; +export * from "./if-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/index.ts b/kipper/core/src/compiler/ast/nodes/statements/index.ts index ac4d8249e..f912b8241 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/index.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/index.ts @@ -4,10 +4,10 @@ * @since 0.11.0 */ export * from "./statement"; -export * from "./iteration/"; -export * from "./compound-statement"; -export * from "./expression-statement"; -export * from "./if-statement"; -export * from "./jump-statement"; -export * from "./return-statement"; -export * from "./switch-statement"; +export * from "./iteration-statement/"; +export * from "./compound-statement/"; +export * from "./expression-statement/"; +export * from "./if-statement/"; +export * from "./jump-statement/"; +export * from "./return-statement/"; +export * from "./switch-statement/"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts new file mode 100644 index 000000000..19ad872be --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link DoWhileLoopIterationStatement}. + * @since 0.10.0 + */ +import type { IterationStatementSemantics } from "../iteration-statement-semantics"; + +/** + * Semantics for AST Node {@link DoWhileLoopIterationStatement}. + * @since 0.10.0 + */ +export interface DoWhileLoopIterationStatementSemantics extends IterationStatementSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-type-semantics.ts new file mode 100644 index 000000000..ed219991f --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link DoWhileLoopIterationStatement}. + * @since 0.10.0 + */ +import type { IterationStatementTypeSemantics } from "../iteration-statement-type-semantics"; + +/** + * Type semantics for AST Node {@link DoWhileLoopIterationStatement}. + * @since 0.11.0 + */ +export interface DoWhileLoopIterationStatementTypeSemantics extends IterationStatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts similarity index 86% rename from kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-iteration-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts index b58ad3868..0d1dbc27f 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/do-while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts @@ -2,17 +2,25 @@ * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -import type { DoWhileLoopStatementSemantics } from "../../../semantic-data"; -import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; -import { IterationStatement } from "./iteration-statement"; -import { DoWhileLoopIterationStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { KipperNotImplementedError } from "../../../../../errors"; +import type { DoWhileLoopIterationStatementSemantics } from "./do-while-loop-iteration-statement-semantics"; +import type { DoWhileLoopIterationStatementTypeSemantics } from "./do-while-loop-iteration-statement-type-semantics"; +import type { CompilableNodeChild, CompilableNodeParent } from "../../../../compilable-ast-node"; +import { IterationStatement } from "../iteration-statement"; +import { + DoWhileLoopIterationStatementContext, + KindParseRuleMapping, + ParseRuleKindMapping, +} from "../../../../../parser"; +import { KipperNotImplementedError } from "../../../../../../errors"; /** * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -export class DoWhileLoopIterationStatement extends IterationStatement { +export class DoWhileLoopIterationStatement extends IterationStatement< + DoWhileLoopIterationStatementSemantics, + DoWhileLoopIterationStatementTypeSemantics +> { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/index.ts new file mode 100644 index 000000000..b0c46b64b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link DoWhileLoopIterationStatement} and the related + * {@link DoWhileLoopIterationStatementSemantics semantics} and + * {@link DoWhileLoopIterationStatementTypeSemantics type semantics}. + */ +export * from "./do-while-loop-iteration-statement"; +export * from "./do-while-loop-iteration-statement-semantics"; +export * from "./do-while-loop-iteration-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-semantics.ts new file mode 100644 index 000000000..8a024e9b7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-semantics.ts @@ -0,0 +1,39 @@ +/** + * Semantics for AST Node {@link ForLoopIterationStatement}. + * @since 0.10.0 + */ +import type { IterationStatementSemantics } from "../iteration-statement-semantics"; +import type { VariableDeclaration } from "../../../declarations"; +import type { Expression } from "../../../expressions"; +import type { Statement } from "../../statement"; + +/** + * Semantics for AST Node {@link ForLoopIterationStatement}. + * @since 0.10.0 + */ +export interface ForLoopStatementSemantics extends IterationStatementSemantics { + /** + * The declaration/first statement of the loop, which is executed before the loop condition is evaluated. + * + * This may also simply be a single expression, if the loop does not have a declaration. + * @since 0.10.0 + */ + forDeclaration: VariableDeclaration | Expression | undefined; + /** + * The for iteration expression of the loop, which is executed after the loop body is executed. This is used to + * update the loop variable or execute any other code that should be executed after each loop iteration. + * @since 0.10.0 + */ + forIterationExp: Expression | undefined; + /** + * The for condition of the loop, which is evaluated after the loop body is executed. If this evaluates to true, + * the loop will continue executing. + * @since 0.10.0 + */ + loopCondition: Expression | undefined; + /** + * The body of the loop, which is executed as long as {@link loopCondition} is true. + * @since 0.10.0 + */ + loopBody: Statement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-type-semantics.ts new file mode 100644 index 000000000..8ad0cbe4d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link ForLoopIterationStatement}. + * @since 0.11.0 + */ +import type { IterationStatementTypeSemantics } from "../iteration-statement-type-semantics"; + +/** + * Type semantics for AST Node {@link ForLoopIterationStatement}. + * @since 0.11.0 + */ +export interface ForLoopStatementTypeSemantics extends IterationStatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement.ts similarity index 87% rename from kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-iteration-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement.ts index c86000ad0..59e061bb2 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/for-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement.ts @@ -1,24 +1,24 @@ -import type { ForLoopStatementSemantics } from "../../../semantic-data"; -import type { NoTypeSemantics } from "../../../ast-node"; -import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; /** * For loop statement class, which represents a for loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -import type { ScopeNode } from "../../../scope-node"; -import type { Statement } from "../statement"; -import type { VariableDeclaration } from "../../declarations"; -import { IterationStatement } from "./iteration-statement"; -import { ForLoopIterationStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { Expression } from "../../expressions"; -import { LocalScope } from "../../../../analysis"; +import type { ScopeNode } from "../../../../scope-node"; +import type { Statement } from "../../statement"; +import type { VariableDeclaration } from "../../../declarations"; +import type { ForLoopStatementSemantics } from "./for-loop-iteration-statement-semantics"; +import type { ForLoopStatementTypeSemantics } from "./for-loop-iteration-statement-type-semantics"; +import type { CompilableNodeChild, CompilableNodeParent } from "../../../../compilable-ast-node"; +import { IterationStatement } from "../iteration-statement"; +import { ForLoopIterationStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { Expression } from "../../../expressions"; +import { LocalScope } from "../../../../../analysis"; /** * For loop statement class, which represents a for loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ export class ForLoopIterationStatement - extends IterationStatement + extends IterationStatement implements ScopeNode { /** diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/index.ts new file mode 100644 index 000000000..cb929a9f0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link ForLoopIterationStatement} and the related + * {@link ForLoopIterationStatementSemantics semantics} and + * {@link ForLoopIterationStatementTypeSemantics type semantics}. + */ +export * from "./for-loop-iteration-statement"; +export * from "./for-loop-iteration-statement-semantics"; +export * from "./for-loop-iteration-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/index.ts new file mode 100644 index 000000000..44d3646f7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/index.ts @@ -0,0 +1,10 @@ +/** + * Iteration statement AST nodes, which are statements that execute a block of code repeatedly until a given + * condition is met. + */ +export * from "./iteration-statement"; +export * from "./iteration-statement-semantics"; +export * from "./iteration-statement-type-semantics"; +export * from "./while-loop-iteration-statement/"; +export * from "./do-while-loop-iteration-statement/"; +export * from "./for-loop-iteration-statement/"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-semantics.ts new file mode 100644 index 000000000..83a53c234 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-semantics.ts @@ -0,0 +1,25 @@ +/** + * Semantics for AST Node {@link IterationStatement}. + * @since 0.10.0 + */ +import type { Expression } from "../../expressions"; +import type { Statement } from "../statement"; +import type { StatementSemantics } from "../statement-semantics"; + +/** + * Semantics for AST Node {@link IterationStatement}. + * @since 0.10.0 + */ +export interface IterationStatementSemantics extends StatementSemantics { + /** + * The loop condition, which, if it evaluates to true will trigger the loop to continue executing. + * @since 0.10.0 + */ + loopCondition: Expression | undefined; + /** + * The body of the loop, which is handled and executed depending on the loop type and the value of + * {@link loopCondition}. + * @since 0.10.0 + */ + loopBody: Statement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-type-semantics.ts new file mode 100644 index 000000000..52e8aa3b6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link IterationStatement}. + * @since 0.10.0 + */ +import type { StatementTypeSemantics } from "../statement-type-semantics"; + +/** + * Type semantics for AST Node {@link IterationStatement}. + * @since 0.10.0 + */ +export interface IterationStatementTypeSemantics extends StatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement.ts similarity index 55% rename from kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement.ts index efb66e57e..40bab5da0 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/iteration-statement.ts @@ -1,12 +1,13 @@ /** - * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. + * Iteration statement class, which represents an iteration statement that repeats a statement until a condition is + * met. Provides the base class for all iteration statements. + * @abstract */ -import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { IterationStatementSemantics } from "../../../semantic-data"; -import { NoTypeSemantics } from "../../../ast-node"; +import type { IterationStatementSemantics } from "./iteration-statement-semantics"; +import type { IterationStatementTypeSemantics } from "./iteration-statement-type-semantics"; +import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { ASTNodeMapper } from "../../../mapping"; import { Statement } from "../statement"; -import { ASTNodeMapper } from "../../../mapping/ast-node-mapper"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link MemberAccessExpression} AST @@ -24,7 +25,7 @@ export type ParserIterationStatementKind = * @since 0.10.0 */ export type ParserIterationStatementContext = InstanceType< - typeof ASTNodeMapper.statementKindToRuleContextMap[ParserIterationStatementKind] + (typeof ASTNodeMapper.statementKindToRuleContextMap)[ParserIterationStatementKind] >; /** @@ -32,15 +33,16 @@ export type ParserIterationStatementContext = InstanceType< * AST node. * @since 0.11.0 */ -export type ParserIterationStatementRuleName = typeof KindParseRuleMapping[ParserIterationStatementKind]; +export type ParserIterationStatementRuleName = (typeof KindParseRuleMapping)[ParserIterationStatementKind]; /** - * Iteration statement class, which represents an iteration/loop statement in the Kipper language and is compilable - * using {@link translateCtxAndChildren}. + * Iteration statement class, which represents an iteration statement that repeats a statement until a condition is + * met. Provides the base class for all iteration statements. + * @abstract */ export abstract class IterationStatement< Semantics extends IterationStatementSemantics = IterationStatementSemantics, - TypeSemantics extends NoTypeSemantics = NoTypeSemantics, + TypeSemantics extends IterationStatementTypeSemantics = IterationStatementTypeSemantics, > extends Statement { protected abstract readonly _antlrRuleCtx: ParserIterationStatementContext; public abstract get kind(): ParserIterationStatementKind; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/index.ts new file mode 100644 index 000000000..117d7bb1a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link WhileLoopIterationStatement} and the related {@link WhileLoopIterationStatementSemantics semantics} + * and {@link WhileLoopIterationStatementTypeSemantics type semantics}. + */ +export * from "./while-loop-iteration-statement"; +export * from "./while-loop-iteration-statement-semantics"; +export * from "./while-loop-iteration-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-semantics.ts new file mode 100644 index 000000000..7e7cb2707 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-semantics.ts @@ -0,0 +1,24 @@ +/** + * Semantics for AST Node {@link WhileLoopIterationStatement}. + * @since 0.10.0 + */ +import type { IterationStatementSemantics } from "../iteration-statement-semantics"; +import type { Statement } from "../../statement"; +import type { Expression } from "../../../expressions"; + +/** + * Semantics for AST Node {@link WhileLoopIterationStatement}. + * @since 0.10.0 + */ +export interface WhileLoopStatementSemantics extends IterationStatementSemantics { + /** + * The loop condition, which, if it evaluates to true will trigger the loop to continue executing. + * @since 0.10.0 + */ + loopCondition: Expression; + /** + * The body of the loop, which is executed as long as {@link loopCondition} is true. + * @since 0.10.0 + */ + loopBody: Statement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-type-semantics.ts new file mode 100644 index 000000000..7cd34d21e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link WhileLoopIterationStatement}. + * @since 0.11.0 + */ +import type { IterationStatementTypeSemantics } from "../iteration-statement-type-semantics"; + +/** + * Type semantics for AST Node {@link WhileLoopIterationStatement}. + * @since 0.11.0 + */ +export interface WhileLoopStatementTypeSemantics extends IterationStatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-iteration-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts index 7df65aa13..9ae089c37 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts @@ -2,18 +2,22 @@ * While loop statement class, which represents a while loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -import type { CompilableNodeChild, CompilableNodeParent } from "../../../compilable-ast-node"; -import type { WhileLoopStatementSemantics } from "../../../semantic-data"; -import { IterationStatement } from "./iteration-statement"; -import { KindParseRuleMapping, ParseRuleKindMapping, WhileLoopIterationStatementContext } from "../../../../parser"; -import { Expression } from "../../expressions"; -import { Statement } from "../statement"; +import type { CompilableNodeChild, CompilableNodeParent } from "../../../../compilable-ast-node"; +import type { WhileLoopStatementSemantics } from "./while-loop-iteration-statement-semantics"; +import type { WhileLoopStatementTypeSemantics } from "./while-loop-iteration-statement-type-semantics"; +import type { Expression } from "../../../expressions"; +import { IterationStatement } from "../iteration-statement"; +import { KindParseRuleMapping, ParseRuleKindMapping, WhileLoopIterationStatementContext } from "../../../../../parser"; +import { Statement } from "../../statement"; /** * While loop statement class, which represents a while loop statement in the Kipper language and is compilable * using {@link translateCtxAndChildren}. */ -export class WhileLoopIterationStatement extends IterationStatement { +export class WhileLoopIterationStatement extends IterationStatement< + WhileLoopStatementSemantics, + WhileLoopStatementTypeSemantics +> { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts deleted file mode 100644 index 8044cfb86..000000000 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./iteration-statement"; -export * from "./while-loop-iteration-statement"; -export * from "./do-while-loop-iteration-statement"; -export * from "./for-loop-iteration-statement"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/index.ts new file mode 100644 index 000000000..48671ee4b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link JumpStatement} and the related {@link JumpStatementSemantics semantics} and + * {@link JumpStatementTypeSemantics type semantics}. + */ +export * from "./jump-statement"; +export * from "./jump-statement-semantics"; +export * from "./jump-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-semantics.ts new file mode 100644 index 000000000..b419e2c81 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-semantics.ts @@ -0,0 +1,24 @@ +/** + * Semantics for AST Node {@link JumpStatement}. + * @since 0.10.0 + */ +import type { SemanticData } from "../../../ast-node"; +import type { JmpStatementType } from "../../../../const"; +import type { IterationStatement } from "../iteration-statement"; + +/** + * Semantics for AST Node {@link JumpStatement}. + * @since 0.10.0 + */ +export interface JumpStatementSemantics extends SemanticData { + /** + * The type of the {@link JumpStatement jump statement}. + * @since 0.10.0 + */ + jmpType: JmpStatementType; + /** + * The parent statement of the {@link JumpStatement jump statement}. + * @since 0.10.0 + */ + parent: IterationStatement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts new file mode 100644 index 000000000..838cb5e5d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts @@ -0,0 +1,7 @@ +import { StatementTypeSemantics } from "../statement-type-semantics"; + +/** + * Type semantics for AST Node {@link JumpStatement}. + * @since 0.10.0 + */ +export interface JumpStatementTypeSemantics extends StatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement.ts index e76c12b11..f599b75b8 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/jump-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement.ts @@ -2,18 +2,18 @@ * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using * {@link translateCtxAndChildren}. */ -import type { NoTypeSemantics } from "../../ast-node"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import type { JumpStatementSemantics } from "../../semantic-data"; -import { Statement } from "./statement"; -import { JumpStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../parser"; -import { Expression } from "../expressions"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { JumpStatementSemantics } from "./jump-statement-semantics"; +import type { JumpStatementTypeSemantics } from "./jump-statement-type-semantics"; +import { Statement } from "../statement"; +import { JumpStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { Expression } from "../../expressions"; /** * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using * {@link translateCtxAndChildren}. */ -export class JumpStatement extends Statement { +export class JumpStatement extends Statement { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement/index.ts new file mode 100644 index 000000000..320da2e9d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link ReturnStatement} and the related {@link ReturnStatementSemantics semantics} and + * {@link ReturnStatementTypeSemantics type semantics}. + */ +export * from "./return-statement"; +export * from "./return-statement-semantics"; +export * from "./return-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts new file mode 100644 index 000000000..a9833ebeb --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts @@ -0,0 +1,24 @@ +/** + * Semantics for AST Node {@link ReturnStatement}. + * @since 0.10.0 + */ +import type { SemanticData } from "../../../ast-node"; +import type { Expression } from "../../expressions"; +import type { FunctionDeclaration } from "../../declarations"; + +/** + * Semantics for AST Node {@link ReturnStatement}. + * @since 0.10.0 + */ +export interface ReturnStatementSemantics extends SemanticData { + /** + * The value of the {@link ReturnStatement}, which is optional, if the return type is void. + * @since 0.10.0 + */ + returnValue: Expression | undefined; + /** + * The function that this return statement is in. + * @since 0.10.0 + */ + function: FunctionDeclaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-type-semantics.ts new file mode 100644 index 000000000..37d842f7b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-type-semantics.ts @@ -0,0 +1,18 @@ +/** + * Type semantics for a {@link ReturnStatement}. + * @since 0.10.0 + */ +import type { CheckedType } from "../../../../analysis"; +import type { StatementTypeSemantics } from "../statement-type-semantics"; + +/** + * Type semantics for a {@link ReturnStatement}. + * @since 0.10.0 + */ +export interface ReturnStatementTypeSemantics extends StatementTypeSemantics { + /** + * The type of value returned by this return statement. + * @since 0.10.0 + */ + returnType: CheckedType | undefined; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/statements/return-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement.ts index 93567f71c..258700801 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/return-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement.ts @@ -2,13 +2,13 @@ * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using * {@link translateCtxAndChildren}. */ -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import type { ReturnStatementSemantics } from "../../semantic-data"; -import type { ReturnStatementTypeSemantics } from "../../type-data"; -import { Statement } from "./statement"; -import { CheckedType } from "../../../analysis"; -import { KindParseRuleMapping, ParseRuleKindMapping, ReturnStatementContext } from "../../../parser"; -import { Expression } from "../expressions"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { ReturnStatementSemantics } from "./return-statement-semantics"; +import type { ReturnStatementTypeSemantics } from "./return-statement-type-semantics"; +import type { Expression } from "../../expressions"; +import { Statement } from "../statement"; +import { CheckedType } from "../../../../analysis"; +import { KindParseRuleMapping, ParseRuleKindMapping, ReturnStatementContext } from "../../../../parser"; /** * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using diff --git a/kipper/core/src/compiler/ast/nodes/statements/statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/statement-semantics.ts new file mode 100644 index 000000000..dee574abe --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/statement-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link Statement}. + * @since 0.11.0 + */ +import type { SemanticData } from "../../ast-node"; + +/** + * Semantics for AST Node {@link Statement}. + * @since 0.11.0 + */ +export interface StatementSemantics extends SemanticData {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/statement-type-semantics.ts new file mode 100644 index 000000000..4489d60d1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link Statement}. + * @since 0.11.0 + */ +import type { TypeData } from "../../ast-node"; + +/** + * Type semantics for AST Node {@link Statement}. + * @since 0.11.0 + */ +export interface StatementTypeSemantics extends TypeData {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/statement.ts b/kipper/core/src/compiler/ast/nodes/statements/statement.ts index f4bb98d0a..a05fcca8b 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/statement.ts @@ -2,10 +2,12 @@ * AST Node Statement classes of the Kipper language. * @since 0.1.0 */ -import type { CompilableNodeParent, SemanticData, TypeData } from "../../index"; +import type { CompilableNodeParent } from "../../index"; import type { ASTStatementKind, ASTStatementRuleName, ParserStatementContext } from "../../common"; import type { TranslatedCodeLine } from "../../../const"; import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; +import type { StatementSemantics } from "./statement-semantics"; +import type { StatementTypeSemantics } from "./statement-type-semantics"; import { CompilableASTNode } from "../../compilable-ast-node"; /** @@ -16,8 +18,8 @@ import { CompilableASTNode } from "../../compilable-ast-node"; * @since 0.1.0 */ export abstract class Statement< - Semantics extends SemanticData = SemanticData, - TypeSemantics extends TypeData = TypeData, + Semantics extends StatementSemantics = StatementSemantics, + TypeSemantics extends StatementTypeSemantics = StatementTypeSemantics, > extends CompilableASTNode { /** * The private field '_antlrRuleCtx' that actually stores the variable data, diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement/index.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/index.ts new file mode 100644 index 000000000..f883e5a80 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link SwitchStatement} and the related {@link SwitchStatementSemantics semantics} and + * {@link SwitchStatementTypeSemantics type semantics}. + */ +export * from "./switch-statement"; +export * from "./switch-statement-semantics"; +export * from "./switch-statement-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-semantics.ts new file mode 100644 index 000000000..e887087df --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-semantics.ts @@ -0,0 +1,11 @@ +/** + * Semantics for AST Node {@link SwitchStatement}. + * @since 0.11.0 + */ +import type { StatementSemantics } from "../statement-semantics"; + +/** + * Semantics for AST Node {@link SwitchStatement}. + * @since 0.11.0 + */ +export interface SwitchStatementSemantics extends StatementSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts new file mode 100644 index 000000000..7dfd5da84 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link SwitchStatement}. + * @since 0.11.0 + */ +import { StatementTypeSemantics } from "../statement-type-semantics"; + +/** + * Type semantics for AST Node {@link SwitchStatement}. + * @since 0.11.0 + */ +export interface SwitchStatementTypeSemantics extends StatementTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts rename to kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement.ts index e9e9e5c8e..33c255ba1 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/switch-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement.ts @@ -1,16 +1,17 @@ /** * Switch statement class, which represents a switch selection statement in the Kipper language. */ -import type { NoSemantics, NoTypeSemantics } from "../../ast-node"; -import type { CompilableNodeParent } from "../../compilable-ast-node"; -import { Statement } from "./statement"; -import { KindParseRuleMapping, ParseRuleKindMapping, SwitchStatementContext } from "../../../parser"; -import { KipperNotImplementedError } from "../../../../errors"; +import type { CompilableNodeParent } from "../../../compilable-ast-node"; +import type { SwitchStatementSemantics } from "./switch-statement-semantics"; +import type { SwitchStatementTypeSemantics } from "./switch-statement-type-semantics"; +import { Statement } from "../statement"; +import { KindParseRuleMapping, ParseRuleKindMapping, SwitchStatementContext } from "../../../../parser"; +import { KipperNotImplementedError } from "../../../../../errors"; /** * Switch statement class, which represents a switch selection statement in the Kipper language. */ -export class SwitchStatement extends Statement { +export class SwitchStatement extends Statement { /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. diff --git a/kipper/core/src/compiler/ast/semantic-data/definitions.ts b/kipper/core/src/compiler/ast/semantic-data/definitions.ts deleted file mode 100644 index 53cdfc8bd..000000000 --- a/kipper/core/src/compiler/ast/semantic-data/definitions.ts +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Semantic data declarations for all definition AST nodes. - * @since 0.10.0 - */ -import type { SemanticData } from "../ast-node"; -import type { KipperStorageType } from "../../const"; -import type { Scope } from "../../analysis"; -import { UncheckedType } from "../../analysis"; -import type { CompoundStatement, Expression } from "../nodes"; -import { IdentifierTypeSpecifierExpression } from "../nodes"; -import type { FunctionDeclaration, ParameterDeclaration } from "../nodes"; - -/** - * Semantics for a {@link Declaration}. - * @since 0.5.0 - */ -export interface DeclarationSemantics extends SemanticData { - /** - * The identifier of the declaration. - * @since 0.5.0 - */ - identifier: string; -} - -/** - * Semantics for AST Node {@link FunctionDeclaration}. - * @since 0.3.0 - */ -export interface FunctionDeclarationSemantics extends SemanticData { - /** - * The identifier of the function. - * @since 0.5.0 - */ - identifier: string; - /** - * The {@link KipperType return type} of the function. - * @since 0.5.0 - */ - returnType: UncheckedType; - /** - * The type specifier expression for the return type. - * @since 0.10.0 - */ - returnTypeSpecifier: IdentifierTypeSpecifierExpression; - /** - * Returns true if this declaration defines the function body for the function. - * @since 0.5.0 - */ - isDefined: boolean; - /** - * The available {@link ParameterDeclaration parameter} for the function invocation. - * @since 0.10.0 - */ - params: Array; - /** - * The body of the function. - * @since 0.10.0 - */ - functionBody: CompoundStatement; -} - -/** - * Semantics for AST Node {@link VariableDeclaration}. - * @since 0.3.0 - */ -export interface VariableDeclarationSemantics extends SemanticData { - /** - * The identifier of this variable. - * @since 0.5.0 - */ - identifier: string; - /** - * The storage type option for this variable. - * @since 0.5.0 - */ - storageType: KipperStorageType; - /** - * The type of the value as a string. - * - * The identifier of the {@link valueTypeSpecifier.semanticData.identifier typeSpecifier}. - * @since 0.5.0 - */ - valueType: UncheckedType; - /** - * The type specifier expression for the variable type. - * @since 0.10.0 - */ - valueTypeSpecifier: IdentifierTypeSpecifierExpression; - /** - * If this is true then the variable has a defined value. - * @since 0.5.0 - */ - isDefined: boolean; - /** - * The scope of this variable. - * @since 0.5.0 - */ - scope: Scope; - /** - * The assigned value to this variable. If {@link isDefined} is false, then this value is undefined. - * @since 0.7.0 - */ - value: Expression | undefined; -} - -/** - * Semantics for AST Node {@link ParameterDeclaration}. - * @since 0.5.0 - */ -export interface ParameterDeclarationSemantics extends DeclarationSemantics { - /** - * The identifier of the parameter. - * @since 0.5.0 - */ - identifier: string; - /** - * The {@link KipperType type} of the parameter. - * @since 0.5.0 - */ - valueType: UncheckedType; - /** - * The type specifier expression for the parameter type. - * @since 0.10.0 - */ - valueTypeSpecifier: IdentifierTypeSpecifierExpression; - /** - * The parent function of this parameter. - * @since 0.10.0 - */ - func: FunctionDeclaration; -} diff --git a/kipper/core/src/compiler/ast/semantic-data/expressions.ts b/kipper/core/src/compiler/ast/semantic-data/expressions.ts deleted file mode 100644 index bb706f3fc..000000000 --- a/kipper/core/src/compiler/ast/semantic-data/expressions.ts +++ /dev/null @@ -1,563 +0,0 @@ -/** - * Semantic data declarations for all expression AST nodes. - * @since 0.10.0 - */ -import type { - KipperAdditiveOperator, - KipperArithmeticOperator, - KipperAssignOperator, - KipperBoolTypeLiterals, - KipperComparativeOperator, - KipperEqualityOperator, - KipperIncrementOrDecrementOperator, - KipperLogicalAndOperator, - KipperLogicalOrOperator, - KipperMultiplicativeOperator, - KipperNullType, - KipperReferenceable, - KipperRelationalOperator, - KipperUnaryModifierOperator, - KipperUnaryOperator, - KipperUndefinedType, - KipperVoidType -} from "../../const"; -import type { SemanticData } from "../ast-node"; -import type { Expression, IdentifierPrimaryExpression } from "../nodes"; -import { IdentifierTypeSpecifierExpression } from "../nodes"; -import type { Reference, UncheckedType } from "../../analysis"; - -/** - * Static semantics for an expression class that must be evaluated during the Semantic Analysis. - * @since 0.10.0 - */ -export interface ExpressionSemantics extends SemanticData {} - -/** - * Semantics for AST Node {@link ConstantExpression}. - * @since 0.5.0 - */ -export interface ConstantExpressionSemantics extends ExpressionSemantics { - /** - * The value of the constant expression. This is usually either a {@link String} or {@link Number}. - * @since 0.5.0 - */ - value: any; -} - -/** - * Semantics for AST Node {@link NumberPrimaryExpression}. - * @since 0.5.0 - */ -export interface NumberPrimaryExpressionSemantics extends ConstantExpressionSemantics { - /** - * The value of the constant number expression. - * - * This can be either: - * - A Default 10-base number (N) - * - A Float 10-base number (N.N) - * - A Hex 16-base number (0xN) - * - A Octal 8-base number (0oN) - * - A Binary 2-base number (0bN) - * - An Exponent 10-base number (NeN) - * - An Exponent Float 10-base number (N.NeN) - * @since 0.5.0 - */ - value: string; -} - -/** - * Semantics for AST Node {@link ArrayLiteralPrimaryExpression}. - * @since 0.5.0 - */ -export interface ArrayLiteralPrimaryExpressionSemantics extends ConstantExpressionSemantics { - /** - * The value of the constant list expression. - * @since 0.5.0 - */ - value: Array; -} - -/** - * Semantics for AST Node {@link StringPrimaryExpression}. - * @since 0.5.0 - */ -export interface StringPrimaryExpressionSemantics extends ConstantExpressionSemantics { - /** - * The value of the constant string expression. - * @since 0.5.0 - */ - value: string; - /** - * The quotation marks that this string has used. - * - * This is important to keep track of, so that the translated string is valid and does not produce a syntax error - * due to unescaped quotation marks inside it. - * @since 0.10.0 - */ - quotationMarks: `"` | `'`; -} - -/** - * Semantics for AST Node {@link BoolPrimaryExpression}. - * @since 0.8.0 - */ -export interface BoolPrimaryExpressionSemantics extends ConstantExpressionSemantics { - /** - * The value of this boolean constant expression. - * @since 0.8.0 - */ - value: KipperBoolTypeLiterals; -} - -/** - * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. - * @since 0.10.0 - */ -export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends ConstantExpressionSemantics { - /** - * The constant identifier of this expression. - * @since 0.10.0 - */ - constantIdentifier: KipperVoidType | KipperNullType | KipperUndefinedType; -} - -/** - * Semantics for AST Node {@link FStringPrimaryExpression}. - * @since 0.5.0 - */ -export interface FStringPrimaryExpressionSemantics extends ExpressionSemantics { - /** - * Returns the items of the f-strings, where each item represents one section of the string. The section may either be - * a {@link StringPrimaryExpression constant string} or {@link Expression evaluable runtime expression}. - * @since 0.10.0 - */ - atoms: Array; -} - -/** - * Semantics for AST Node {@link IdentifierPrimaryExpression}. - * @since 0.5.0 - */ -export interface IdentifierPrimaryExpressionSemantics extends ExpressionSemantics { - /** - * The identifier of the {@link IdentifierPrimaryExpressionSemantics.ref reference}. - * @since 0.5.0 - */ - identifier: string; - /** - * The reference that the {@link IdentifierPrimaryExpressionSemantics.identifier identifier} points to. - * @since 0.10.0 - */ - ref: Reference; -} - -/** - * Semantics for AST Node {@link TypeSpecifierExpression}. - */ -export interface TypeSpecifierExpressionSemantics extends ExpressionSemantics {} - -/** - * Semantics for AST Node {@link IdentifierTypeSpecifierExpression}. - * @since 0.8.0 - */ -export interface IdentifierTypeSpecifierExpressionSemantics extends TypeSpecifierExpressionSemantics { - /** - * The type specified by this expression. - * @since 0.8.0 - */ - typeIdentifier: UncheckedType; -} - -/** - * Semantics for AST Node {@link GenericTypeSpecifierExpression}. - * @since 0.8.0 - */ -export interface GenericTypeSpecifierExpressionSemantics extends TypeSpecifierExpressionSemantics { - // Not implemented. -} - -/** - * Semantics for AST Node {@link TypeofTypeSpecifierExpression}. - * @since 0.8.0 - */ -export interface TypeofTypeSpecifierExpressionSemantics extends TypeSpecifierExpressionSemantics { - // Not implemented. -} - -/** - * Semantics for AST Node {@link TangledPrimaryExpression}. - * @since 0.5.0 - */ -export interface TangledPrimaryExpressionSemantics extends ExpressionSemantics { - /** - * The child expression contained in this tangled expression. - * @since 0.10.0 - */ - childExp: Expression; -} - -/** - * Semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. - * @since 0.5.0 - */ -export interface IncrementOrDecrementPostfixExpressionSemantics extends ExpressionSemantics { - /** - * The operator that is used to modify the {@link operand}. - * @since 0.10.0 - */ - operator: KipperIncrementOrDecrementOperator; - /** - * The operand that is modified by the operator. - * @since 0.10.0 - */ - operand: Expression; -} - -/** - * Semantics for AST Node {@link MemberAccessExpression}. - * @since 0.10.0 - */ -export interface MemberAccessExpressionSemantics extends ExpressionSemantics { - /** - * The object or array that is accessed. - * @since 0.10.0 - */ - objectLike: Expression; - /** - * The member that is accessed. This can be in three different forms: - * - Dot Notation: object.member - * - Bracket Notation: object["member"] - * - Slice Notation: object[1:3] - * @since 0.10.0 - */ - propertyIndexOrKeyOrSlice: string | Expression | { start?: Expression; end?: Expression }; - /** - * The type of the member access expression. Represented using strings. - * @since 0.10.0 - */ - accessType: "dot" | "bracket" | "slice"; -} - -/** - * Semantics for AST Node {@link FunctionCallExpression}. - * @since 0.5.0 - */ -export interface FunctionCallExpressionSemantics extends ExpressionSemantics { - /** - * The identifier of the function that is called. - * @since 0.5.0 - */ - identifier: string; - /** - * The function that is called by this expression. - * @since 0.5.0 - */ - callTarget: Reference; - /** - * The arguments that were passed to this function. - * @since 0.6.0 - */ - args: Array; -} - -/** - * Semantics for unary expressions, which can be used to modify an expression with - * a specified operator. - * @since 0.9.0 - */ -export interface UnaryExpressionSemantics extends ExpressionSemantics { - /** - * The operator that is used to modify the {@link operand}. - * @since 0.9.0 - */ - operator: KipperUnaryOperator; - /** - * The operand that is modified by the {@link operator}. - * @since 0.9.0 - */ - operand: Expression; -} - -/** - * Semantics for AST Node {@link IncrementOrDecrementUnaryExpression}. - * @since 0.5.0 - */ -export interface IncrementOrDecrementUnaryExpressionSemantics extends UnaryExpressionSemantics { - /** - * The operator that is used to modify the {@link operand}. - * @since 0.9.0 - */ - operator: KipperIncrementOrDecrementOperator; -} - -/** - * Semantics for AST Node {@link OperatorModifiedUnaryExpression}. - * @since 0.5.0 - */ -export interface OperatorModifiedUnaryExpressionSemantics extends UnaryExpressionSemantics { - /** - * The operator that is used to modify the {@link operand}. - * @since 0.9.0 - */ - operator: KipperUnaryModifierOperator; -} - -/** - * Semantics for AST Node {@link CastOrConvertExpression}. - * @since 0.5.0 - */ -export interface CastOrConvertExpressionSemantics extends ExpressionSemantics { - /** - * The expression to convert. - * @since 0.8.0 - */ - exp: Expression; - /** - * The type the {@link exp} should be converted to. - * @since 0.10.0 - */ - castType: UncheckedType; - /** - * The type specifier that determined {@link castType}. - * @since 0.10.0 - */ - castTypeSpecifier: IdentifierTypeSpecifierExpression; -} - -/** - * Semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). - * @since 0.6.0 - */ -export interface ArithmeticExpressionSemantics extends ExpressionSemantics { - /** - * The left operand of the expression. - * @since 0.10.0 - */ - leftOp: Expression; - /** - * The right operand of the expression. - * @since 0.10.0 - */ - rightOp: Expression; - /** - * The operator using the two values {@link this.leftOp leftOp} and {@link this.rightOp rightOp} to generate a result. - * @since 0.6.0 - */ - operator: KipperArithmeticOperator; -} - -/** - * Semantics for AST Node {@link MultiplicativeExpression}. - * @since 0.5.0 - */ -export interface MultiplicativeExpressionSemantics extends ArithmeticExpressionSemantics { - /** - * The first expression. The left side of the expression. - * @since 0.6.0 - */ - leftOp: Expression; - /** - * The second expression. The right side of the expression. - * @since 0.6.0 - */ - rightOp: Expression; - /** - * The operator using the two values {@link this.leftOp leftOp} and {@link this.rightOp rightOp} to generate a result. - * @since 0.6.0 - */ - operator: KipperMultiplicativeOperator; -} - -/** - * Semantics for AST Node {@link AdditiveExpression}. - * @since 0.5.0 - */ -export interface AdditiveExpressionSemantics extends ArithmeticExpressionSemantics { - /** - * The first expression. The left side of the expression. - * @since 0.6.0 - */ - leftOp: Expression; - /** - * The second expression. The right side of the expression. - * @since 0.6.0 - */ - rightOp: Expression; - /** - * The operator using the two values {@link this.leftOp leftOp} and {@link this.rightOp rightOp} to generate a result. - * @since 0.6.0 - */ - operator: KipperAdditiveOperator; -} - -/** - * Semantics for a comparative expression, which compares two operands against each other using a specified - * operator. - * @since 0.9.0 - */ -export interface ComparativeExpressionSemantics extends ExpressionSemantics { - /** - * The operator used to compare the two expressions of this comparative expression. - * @since 0.9.0 - */ - operator: KipperComparativeOperator; - /** - * The left expression (left-hand side) used in this comparative expression. - * @since 0.9.0 - */ - leftOp: Expression; - /** - * The right expression (right-hand side) used in this comparative expression. - * @since 0.9.0 - */ - rightOp: Expression; -} - -/** - * Semantics for AST Node {@link RelationalExpression}. - * @since 0.5.0 - */ -export interface RelationalExpressionSemantics extends ComparativeExpressionSemantics { - /** - * The operator used to compare the two expressions of this relational expression. - * @since 0.9.0 - */ - operator: KipperRelationalOperator; - /** - * The first expression (left-hand side) used in this relational expression. - * @since 0.9.0 - */ - leftOp: Expression; - /** - * The second expression (right-hand side) used in this relational expression. - * @since 0.9.0 - */ - rightOp: Expression; -} - -/** - * Semantics for AST Node {@link EqualityExpressionSemantics}. - * @since 0.5.0 - */ -export interface EqualityExpressionSemantics extends ComparativeExpressionSemantics { - /** - * The operator used to compare the two expressions of this equality expression. - * @since 0.9.0 - */ - operator: KipperEqualityOperator; - /** - * The first expression (left-hand side) used in this equality expression. - * @since 0.9.0 - */ - leftOp: Expression; - /** - * The second expression (right-hand side) used in this equality expression. - * @since 0.9.0 - */ - rightOp: Expression; -} - -/** - * Semantics for logical expressions, which combine two expressions/conditions and evaluate based on the input to a - * boolean value. - * @since 0.9.0 - */ -export interface LogicalExpressionSemantics extends ExpressionSemantics { - /** - * The operator used to combine the two expressions of this logical expression. - * @since 0.9.0 - */ - operator: KipperLogicalAndOperator | KipperLogicalOrOperator; - /** - * The first expression (left-hand side) used in this logical expression. - * @since 0.9.0 - */ - leftOp: Expression; - /** - * The second expression (right-hand side) used in this logical expression. - * @since 0.9.0 - */ - rightOp: Expression; -} - -/** - * Semantics for AST Node {@link LogicalAndExpression}. - * @since 0.5.0 - */ -export interface LogicalAndExpressionSemantics extends LogicalExpressionSemantics { - /** - * The operator used to combine the two expressions of this logical-and expression. - * @since 0.9.0 - */ - operator: KipperLogicalAndOperator; - /** - * The first expression (left-hand side) used in this logical-and expression. - * @since 0.9.0 - */ - leftOp: Expression; - /** - * The second expression (right-hand side) used in this logical-and expression. - * @since 0.9.0 - */ - rightOp: Expression; -} - -/** - * Semantics for AST Node {@link LogicalOrExpression}. - * @since 0.5.0 - */ -export interface LogicalOrExpressionSemantics extends LogicalExpressionSemantics { - /** - * The operator used to combine the two expressions of this logical-or expression. - * @since 0.9.0 - */ - operator: KipperLogicalOrOperator; - /** - * The first expression (left-hand side) used in this logical-or expression. - * @since 0.9.0 - */ - leftOp: Expression; - /** - * The second expression (right-hand side) used in this logical-or expression. - * @since 0.9.0 - */ - rightOp: Expression; -} - -/** - * Semantics for AST Node {@link ConditionalExpression}. - * @since 0.5.0 - */ -export interface ConditionalExpressionSemantics extends ExpressionSemantics {} - -/** - * Semantics for AST Node {@link AssignmentExpression}. - * @since 0.5.0 - */ -export interface AssignmentExpressionSemantics extends ExpressionSemantics { - /** - * The identifier expression that is being assigned to. - * @since 0.7.0 - */ - identifier: string; - /** - * The identifier AST node context that the {@link AssignmentExpressionSemantics.identifier identifier} points to. - * @since 0.10.0 - */ - identifierCtx: IdentifierPrimaryExpression; - /** - * The reference that is being assigned to. - * @since 0.10.0 - */ - assignTarget: Reference; - /** - * The assigned value to this variable. - * @since 0.7.0 - */ - value: Expression; - /** - * The operator of the assignment expression. - * @since 0.10.0 - */ - operator: KipperAssignOperator; -} diff --git a/kipper/core/src/compiler/ast/semantic-data/index.ts b/kipper/core/src/compiler/ast/semantic-data/index.ts deleted file mode 100644 index e2a5d1e3c..000000000 --- a/kipper/core/src/compiler/ast/semantic-data/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Semantic data declarations for all AST nodes. - * @since 0.10.0 - */ -export * from "./definitions"; -export * from "./expressions"; -export * from "./statements"; diff --git a/kipper/core/src/compiler/ast/semantic-data/statements.ts b/kipper/core/src/compiler/ast/semantic-data/statements.ts deleted file mode 100644 index c8aee2d0d..000000000 --- a/kipper/core/src/compiler/ast/semantic-data/statements.ts +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Semantic data declarations for all statement AST nodes. - * @since 0.10.0 - */ -import type { SemanticData } from "../ast-node"; -import type { Expression, IfStatement, Statement } from "../nodes"; -import { IterationStatement } from "../nodes"; -import type { JmpStatementType } from "../../const"; -import type { FunctionDeclaration, VariableDeclaration } from "../nodes"; - -/** - * Semantics for AST Node {@link IfStatement}. - * @since 0.9.0 - */ -export interface IfStatementSemantics extends SemanticData { - /** - * The condition of the if-statement. - * @since 0.9.0 - */ - condition: Expression; - /** - * The body of the if-statement. - * @since 0.9.0 - */ - ifBranch: Statement; - /** - * The alternative (optional) branch of the if-statement. This alternative branch can either be: - * - An else branch, if the type is a regular {@link Statement} (the statement that should be - * evaluated in the else branch). - * - An else-if branch, if the type is another {@link IfStatement}. - * - Nothing (undefined), if it wasn't specified and the if statement does not have any more branches. - * @since 0.9.0 - */ - elseBranch?: IfStatement | Statement; -} - -/** - * Semantics for AST Node {@link IterationStatement}. - * @since 0.10.0 - */ -export interface IterationStatementSemantics extends SemanticData { - /** - * The loop condition, which, if it evaluates to true will trigger the loop to continue executing. - * @since 0.10.0 - */ - loopCondition: Expression | undefined; - /** - * The body of the loop, which is handled and executed depending on the loop type and the value of - * {@link loopCondition}. - * @since 0.10.0 - */ - loopBody: Statement; -} - -/** - * Semantics for AST Node {@link DoWhileLoopStatement}. - * @since 0.10.0 - */ -export interface DoWhileLoopStatementSemantics extends IterationStatementSemantics {} - -/** - * Semantics for AST Node {@link WhileLoopStatement}. - * @since 0.10.0 - */ -export interface WhileLoopStatementSemantics extends IterationStatementSemantics { - /** - * The loop condition, which, if it evaluates to true will trigger the loop to continue executing. - * @since 0.10.0 - */ - loopCondition: Expression; - /** - * The body of the loop, which is executed as long as {@link loopCondition} is true. - * @since 0.10.0 - */ - loopBody: Statement; -} - -/** - * Semantics for AST Node {@link ForLoopStatement}. - * @since 0.10.0 - */ -export interface ForLoopStatementSemantics extends IterationStatementSemantics { - /** - * The declaration/first statement of the loop, which is executed before the loop condition is evaluated. - * - * This may also simply be a single expression, if the loop does not have a declaration. - * @since 0.10.0 - */ - forDeclaration: VariableDeclaration | Expression | undefined; - /** - * The for iteration expression of the loop, which is executed after the loop body is executed. This is used to - * update the loop variable or execute any other code that should be executed after each loop iteration. - * @since 0.10.0 - */ - forIterationExp: Expression | undefined; - /** - * The for condition of the loop, which is evaluated after the loop body is executed. If this evaluates to true, - * the loop will continue executing. - * @since 0.10.0 - */ - loopCondition: Expression | undefined; - /** - * The body of the loop, which is executed as long as {@link loopCondition} is true. - * @since 0.10.0 - */ - loopBody: Statement; -} - -/** - * Semantics for AST Node {@link JumpStatement}. - * @since 0.10.0 - */ -export interface JumpStatementSemantics extends SemanticData { - /** - * The type of the {@link JumpStatement jump statement}. - * @since 0.10.0 - */ - jmpType: JmpStatementType; - /** - * The parent statement of the {@link JumpStatement jump statement}. - * @since 0.10.0 - */ - parent: IterationStatement; -} - -/** - * Semantics for AST Node {@link ReturnStatement}. - * @since 0.10.0 - */ -export interface ReturnStatementSemantics extends SemanticData { - /** - * The value of the {@link ReturnStatement}, which is optional, if the return type is void. - * @since 0.10.0 - */ - returnValue: Expression | undefined; - /** - * The function that this return statement is in. - * @since 0.10.0 - */ - function: FunctionDeclaration; -} diff --git a/kipper/core/src/compiler/ast/type-data/definitions.ts b/kipper/core/src/compiler/ast/type-data/definitions.ts deleted file mode 100644 index b4271a9ba..000000000 --- a/kipper/core/src/compiler/ast/type-data/definitions.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Semantic type data declarations for all definition AST nodes. - * @since 0.10.0 - */ -import type { TypeData } from "../../ast"; -import type { CheckedType } from "../../analysis"; - -/** - * Type Semantics for a {@link Declaration}. - * @since 0.10.0 - */ -export interface DeclarationTypeData extends TypeData {} - -/** - * Type Semantics for AST Node {@link FunctionDeclaration}. - * @since 0.10.0 - */ -export interface FunctionDeclarationTypeSemantics extends TypeData { - /** - * The {@link KipperType return type} of the function. - * @since 0.10.0 - */ - returnType: CheckedType; -} - -/** - * Type Semantics for AST Node {@link ParameterDeclaration}. - * @since 0.10.0 - */ -export interface ParameterDeclarationTypeSemantics extends TypeData { - /** - * The {@link KipperType type} of the parameter. - * @since 0.10.0 - */ - valueType: CheckedType; -} - -/** - * Type Semantics for AST Node {@link VariableDeclaration}. - * @since 0.10.0 - */ -export interface VariableDeclarationTypeSemantics extends TypeData { - /** - * The type of the value that may be stored in this variable. - * - * This is the type evaluated using the {@link VariableDeclarationSemantics.valueType valueType identifier}. - * @since 0.10.0 - */ - valueType: CheckedType; -} diff --git a/kipper/core/src/compiler/ast/type-data/expressions.ts b/kipper/core/src/compiler/ast/type-data/expressions.ts deleted file mode 100644 index 74934211b..000000000 --- a/kipper/core/src/compiler/ast/type-data/expressions.ts +++ /dev/null @@ -1,238 +0,0 @@ -/** - * Semantic type data declarations for all expression AST nodes. - * @since 0.10.0 - */ -import type { KipperFunction } from "../../const"; -import type { TypeData } from "../../ast"; -import type { CheckedType } from "../../analysis"; - -/** - * Type semantics for an expression class that must be evaluated during Type Checking. - * @since 0.10.0 - */ -export interface ExpressionTypeSemantics extends TypeData { - /** - * The value type that this expression evaluates to. This is used to properly represent the evaluated type of - * expressions that do not explicitly show their type. - * - * This will always evaluate to "type", as a type specifier will always be a type. - * @since 0.10.0 - */ - evaluatedType: CheckedType; -} - -/** - * Type Semantics for AST Node {@link NumberPrimaryExpression}. - * @since 0.10.0 - */ -export interface NumberPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link ArrayLiteralPrimaryExpression}. - * @since 0.10.0 - */ -export interface ArrayLiteralPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link StringPrimaryExpression}. - * @since 0.10.0 - */ -export interface StringPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link BoolPrimaryExpression}. - * @since 0.10.0 - */ -export interface BoolPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link FStringPrimaryExpression}. - * @since 0.10.0 - */ -export interface FStringPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link IdentifierPrimaryExpression}. - * @since 0.10.0 - */ -export interface IdentifierPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics { - /** - * The value type that this expression evaluates to. - * - * This will always be the value type of the reference that the - * {@link IdentifierPrimaryExpressionSemantics.identifier identifier} points to. - * @since 0.10.0 - */ - evaluatedType: CheckedType; -} - -/** - * Type Semantics for AST Node {@link TypeSpecifierExpression}. - * @since 0.10.0 - */ -export interface TypeSpecifierExpressionTypeSemantics extends ExpressionTypeSemantics { - /** - * The type that is being stored by this type specifier. This is the type that would be used to determine what - * values should be stored in a variable. - * @since 0.10.0 - */ - storedType: CheckedType; -} - -/** - * Type Semantics for AST Node {@link IdentifierTypeSpecifierExpression}. - * @since 0.10.0 - */ -export interface IdentifierTypeSpecifierExpressionTypeSemantics extends TypeSpecifierExpressionTypeSemantics {} - -/** - * Semantics for AST Node {@link GenericTypeSpecifierExpression}. - * @since 0.10.0 - */ -export interface GenericTypeSpecifierExpressionTypeSemantics extends TypeSpecifierExpressionTypeSemantics { - // Not implemented. -} - -/** - * Type Semantics for AST Node {@link TypeofTypeSpecifierExpression}. - * @since 0.8.0 - */ -export interface TypeofTypeSpecifierExpressionTypeSemantics extends TypeSpecifierExpressionTypeSemantics { - // Not implemented. -} - -/** - * Type Semantics for AST Node {@link TangledPrimaryExpression}. - * @since 0.5.0 - */ -export interface TangledPrimaryTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. - * @since 0.10.0 - */ -export interface VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link IncrementOrDecrementPostfixExpression}. - * @since 0.10.0 - */ -export interface IncrementOrDecrementPostfixExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link MemberAccessExpression}. - * @since 0.10.0 - */ -export interface MemberAccessExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link FunctionCallExpression}. - * @since 0.5.0 - */ -export interface FunctionCallExpressionTypeSemantics extends ExpressionTypeSemantics { - /** - * The function that this expression calls. Can be either a {@link ScopeFunctionDeclaration function declaration} or - * a {@link ScopeVariableDeclaration function in a variable}. - * @since 0.10.0 - */ - func: KipperFunction; -} - -/** - * Semantics for unary expressions, which can be used to modify an expression with - * a specified operator. - * @since 0.10.0 - */ -export interface UnaryExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link IncrementOrDecrementUnaryExpression}. - * @since 0.10.0 - */ -export interface IncrementOrDecrementUnaryTypeSemantics extends UnaryExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link OperatorModifiedUnaryExpression}. - * @since 0.10.0 - */ -export interface OperatorModifiedUnaryTypeSemantics extends UnaryExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link CastOrConvertExpression}. - * @since 0.10.0 - */ -export interface CastOrConvertExpressionTypeSemantics extends ExpressionTypeSemantics { - /** - * The type the {@link CastOrConvertExpressionSemantics.exp} should be converted to. - * @since 0.10.0 - */ - castType: CheckedType; -} - -/** - * Type Semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). - * @since 0.10.0 - */ -export interface ArithmeticExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link MultiplicativeExpression}. - * @since 0.10.0 - */ -export interface MultiplicativeTypeSemantics extends ArithmeticExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link AdditiveExpression}. - * @since 0.10.0 - */ -export interface AdditiveExpressionTypeSemantics extends ArithmeticExpressionTypeSemantics {} - -/** - * Type Semantics for a comparative expression, which compares two operands against each other using a specified - * operator. - * @since 0.10.0 - */ -export interface ComparativeExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link RelationalExpression}. - * @since 0.10.0 - */ -export interface RelationalExpressionTypeSemantics extends ComparativeExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link EqualityExpressionSemantics}. - * @since 0.10.0 - */ -export interface EqualityExpressionTypeSemantics extends ComparativeExpressionTypeSemantics {} - -/** - * Type Semantics for logical expressions, which combine two expressions/conditions and evaluate based on the input to a - * boolean value. - * @since 0.10.0 - */ -export interface LogicalExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link LogicalAndExpression}. - * @since 0.10.0 - */ -export interface LogicalAndExpressionTypeSemantics extends LogicalExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link LogicalOrExpression}. - * @since 0.10.0 - */ -export interface LogicalOrExpressionTypeSemantics extends LogicalExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link ConditionalExpression}. - * @since 0.10.0 - */ -export interface ConditionalExpressionTypeSemantics extends ExpressionTypeSemantics {} - -/** - * Type Semantics for AST Node {@link AssignmentExpression}. - * @since 0.10.0 - */ -export interface AssignmentExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/type-data/index.ts b/kipper/core/src/compiler/ast/type-data/index.ts deleted file mode 100644 index e2a5d1e3c..000000000 --- a/kipper/core/src/compiler/ast/type-data/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Semantic data declarations for all AST nodes. - * @since 0.10.0 - */ -export * from "./definitions"; -export * from "./expressions"; -export * from "./statements"; diff --git a/kipper/core/src/compiler/ast/type-data/statements.ts b/kipper/core/src/compiler/ast/type-data/statements.ts deleted file mode 100644 index 635780729..000000000 --- a/kipper/core/src/compiler/ast/type-data/statements.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Semantic type data declarations for all statement AST nodes. - * @since 0.10.0 - */ -import type { TypeData } from "../../ast"; -import type { CheckedType } from "../../analysis"; - -/** - * Type Semantics for a {@link ReturnStatement}. - * @since 0.10.0 - */ -export interface ReturnStatementTypeSemantics extends TypeData { - /** - * The type of value returned by this return statement. - * @since 0.10.0 - */ - returnType: CheckedType | undefined; -} diff --git a/kipper/core/src/compiler/compile-config.ts b/kipper/core/src/compiler/compile-config.ts index 8a3feba8e..655a3f48a 100644 --- a/kipper/core/src/compiler/compile-config.ts +++ b/kipper/core/src/compiler/compile-config.ts @@ -6,7 +6,7 @@ import { BuiltInFunction, BuiltInVariable, kipperRuntimeBuiltInFunctions, - kipperRuntimeBuiltInVariables + kipperRuntimeBuiltInVariables, } from "./runtime-built-ins"; import { KipperCompileTarget } from "./target-presets"; import { defaultOptimisationOptions, OptimisationOptions } from "./optimiser"; @@ -217,7 +217,7 @@ export class EvaluatedCompileConfig implements CompileConfig { * @since 0.10.0 * @private */ - private getConfigOption(option: keyof typeof EvaluatedCompileConfig["defaults"], rawConfig: CompileConfig): T { + private getConfigOption(option: keyof (typeof EvaluatedCompileConfig)["defaults"], rawConfig: CompileConfig): T { if (rawConfig[option] !== undefined) { return rawConfig[option] as T; } diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index b22d0d803..5018e01bb 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -7,7 +7,7 @@ import type { ScopeFunctionDeclaration, ScopeParameterDeclaration, ScopeVariableDeclaration, - UndefinedCustomType + UndefinedCustomType, } from "./analysis"; import type { BuiltInFunction, BuiltInVariable } from "./runtime-built-ins"; import { InternalFunction } from "./runtime-built-ins"; diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.ts b/kipper/core/src/compiler/parser/antlr/KipperParser.ts index 284a17991..f42932edd 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.ts @@ -2320,11 +2320,8 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public arrayLiteralPrimaryExpression(): ArrayLiteralPrimaryExpressionContext { - let _localctx: ArrayLiteralPrimaryExpressionContext = new ArrayLiteralPrimaryExpressionContext( - this._ctx, - this.state, - ); + public arrayLiteralPrimaryExpression(): ArrayPrimaryExpressionContext { + let _localctx: ArrayPrimaryExpressionContext = new ArrayPrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 76, KipperParser.RULE_arrayLiteralPrimaryExpression); let _la: number; try { @@ -5609,8 +5606,8 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { public numberPrimaryExpression(): NumberPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, NumberPrimaryExpressionContext); } - public arrayLiteralPrimaryExpression(): ArrayLiteralPrimaryExpressionContext | undefined { - return this.tryGetRuleContext(0, ArrayLiteralPrimaryExpressionContext); + public arrayLiteralPrimaryExpression(): ArrayPrimaryExpressionContext | undefined { + return this.tryGetRuleContext(0, ArrayPrimaryExpressionContext); } public voidOrNullOrUndefinedPrimaryExpression(): VoidOrNullOrUndefinedPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, VoidOrNullOrUndefinedPrimaryExpressionContext); @@ -6001,7 +5998,7 @@ export class NumberPrimaryExpressionContext extends KipperParserRuleContext { } } -export class ArrayLiteralPrimaryExpressionContext extends KipperParserRuleContext { +export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } @@ -6035,20 +6032,20 @@ export class ArrayLiteralPrimaryExpressionContext extends KipperParserRuleContex } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterArrayLiteralPrimaryExpression) { - listener.enterArrayLiteralPrimaryExpression(this); + if (listener.enterArrayPrimaryExpression) { + listener.enterArrayPrimaryExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitArrayLiteralPrimaryExpression) { - listener.exitArrayLiteralPrimaryExpression(this); + if (listener.exitArrayPrimaryExpression) { + listener.exitArrayPrimaryExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitArrayLiteralPrimaryExpression) { - return visitor.visitArrayLiteralPrimaryExpression(this); + if (visitor.visitArrayPrimaryExpression) { + return visitor.visitArrayPrimaryExpression(this); } else { return visitor.visitChildren(this); } diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts index 923b51e5b..13856ea89 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts @@ -17,7 +17,7 @@ import { ActualRelationalExpressionContext, AdditiveExpressionContext, ArgumentExpressionListContext, - ArrayLiteralPrimaryExpressionContext, + ArrayPrimaryExpressionContext, AssignmentExpressionContext, AssignmentOperatorContext, BlockItemContext, @@ -98,7 +98,7 @@ import { UnaryOperatorContext, VariableDeclarationContext, VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext + WhileLoopIterationStatementContext, } from "./KipperParser"; /** @@ -853,12 +853,12 @@ export interface KipperParserListener extends ParseTreeListener { * Enter a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. * @param ctx the parse tree */ - enterArrayLiteralPrimaryExpression?: (ctx: ArrayLiteralPrimaryExpressionContext) => void; + enterArrayPrimaryExpression?: (ctx: ArrayPrimaryExpressionContext) => void; /** * Exit a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. * @param ctx the parse tree */ - exitArrayLiteralPrimaryExpression?: (ctx: ArrayLiteralPrimaryExpressionContext) => void; + exitArrayPrimaryExpression?: (ctx: ArrayPrimaryExpressionContext) => void; /** * Enter a parse tree produced by `KipperParser.voidOrNullOrUndefinedPrimaryExpression`. diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts index f2d3c3418..4801f1c0f 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts @@ -17,7 +17,7 @@ import { ActualRelationalExpressionContext, AdditiveExpressionContext, ArgumentExpressionListContext, - ArrayLiteralPrimaryExpressionContext, + ArrayPrimaryExpressionContext, AssignmentExpressionContext, AssignmentOperatorContext, BlockItemContext, @@ -98,7 +98,7 @@ import { UnaryOperatorContext, VariableDeclarationContext, VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext + WhileLoopIterationStatementContext, } from "./KipperParser"; /** @@ -580,7 +580,7 @@ export interface KipperParserVisitor extends ParseTreeVisitor { * @param ctx the parse tree * @return the visitor result */ - visitArrayLiteralPrimaryExpression?: (ctx: ArrayLiteralPrimaryExpressionContext) => Result; + visitArrayPrimaryExpression?: (ctx: ArrayPrimaryExpressionContext) => Result; /** * Visit a parse tree produced by `KipperParser.voidOrNullOrUndefinedPrimaryExpression`. diff --git a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts index 97e7c4f31..bca0c11f7 100644 --- a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts @@ -106,4 +106,4 @@ export const KindParseRuleMapping = >inv * internal purposes inside the parser. For completion’s sake, all numbers are listed here regardless. * @since 0.10.0 */ -export type ASTKind = typeof ParseRuleKindMapping[keyof typeof ParseRuleKindMapping]; +export type ASTKind = (typeof ParseRuleKindMapping)[keyof typeof ParseRuleKindMapping]; diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index bc332e245..b868139e5 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -6,7 +6,7 @@ import type { AdditiveExpression, AnalysableASTNode, - ArrayLiteralPrimaryExpression, + ArrayPrimaryExpression, AssignmentExpression, BoolPrimaryExpression, CastOrConvertExpression, @@ -43,7 +43,7 @@ import type { TypeofTypeSpecifierExpression, VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, - WhileLoopIterationStatement + WhileLoopIterationStatement, } from "../ast"; import { KipperSemanticErrorHandler } from "../analysis"; @@ -134,9 +134,9 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa public abstract numberPrimaryExpression?: TargetASTNodeSemanticAnalyser; /** - * Performs translation-specific semantic analysis for {@link ArrayLiteralPrimaryExpression} instances. + * Performs translation-specific semantic analysis for {@link ArrayPrimaryExpression} instances. */ - public abstract listPrimaryExpression?: TargetASTNodeSemanticAnalyser; + public abstract listPrimaryExpression?: TargetASTNodeSemanticAnalyser; /** * Performs translation-specific semantic analysis for {@link IdentifierPrimaryExpression} instances. diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index ada344487..37267cfe1 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -4,7 +4,7 @@ */ import type { AdditiveExpression, - ArrayLiteralPrimaryExpression, + ArrayPrimaryExpression, AssignmentExpression, BoolPrimaryExpression, CastOrConvertExpression, @@ -40,7 +40,7 @@ import type { TypeofTypeSpecifierExpression, VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, - WhileLoopIterationStatement + WhileLoopIterationStatement, } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; @@ -180,13 +180,10 @@ export abstract class KipperTargetCodeGenerator { public abstract numberPrimaryExpression: TargetASTNodeCodeGenerator; /** - * Translates a {@link ArrayLiteralPrimaryExpression} into a specific language. + * Translates a {@link ArrayPrimaryExpression} into a specific language. * @since 0.10.0 */ - public abstract arrayLiteralExpression: TargetASTNodeCodeGenerator< - ArrayLiteralPrimaryExpression, - TranslatedExpression - >; + public abstract arrayLiteralExpression: TargetASTNodeCodeGenerator; /** * Translates a {@link IdentifierPrimaryExpression} into a specific language. diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 01590dcf1..2f82c2945 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -29,7 +29,7 @@ import { IncrementOrDecrementUnaryExpression, JumpStatement, KipperProgramContext, - ArrayLiteralPrimaryExpression, + ArrayPrimaryExpression, LogicalAndExpression, LogicalExpression, LogicalOrExpression, @@ -374,9 +374,9 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { }; /** - * Translates a {@link ArrayLiteralPrimaryExpression} into the JavaScript language. + * Translates a {@link ArrayPrimaryExpression} into the JavaScript language. */ - arrayLiteralExpression = async (node: ArrayLiteralPrimaryExpression): Promise => { + arrayLiteralExpression = async (node: ArrayPrimaryExpression): Promise => { return []; }; diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index 826467677..2e86f7572 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -114,7 +114,7 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys numberPrimaryExpression = undefined; /** - * Performs typescript-specific semantic analysis for {@link ArrayLiteralPrimaryExpression} instances. + * Performs typescript-specific semantic analysis for {@link ArrayPrimaryExpression} instances. */ listPrimaryExpression = undefined; From c9698c61a7d3296c0393bee3815e8fc760a0bb8c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 21 Oct 2023 14:07:27 +0200 Subject: [PATCH 063/257] [#435, #451, #491] Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0a545990..5b03cc2a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -76,6 +76,9 @@ To use development versions of Kipper download the ### Changed +- Standardised error output for the CLI as described in [#435](https://github.com/Luna-Klatzer/Kipper/issues/435). + (This is the same change as in `0.10.3`, but was only added to the dev branch with the release of `0.11.0-alpha.1` + i.e. `0.11.0-alpha.0` does *not* have this change). - Made `VoidOrNullOrUndefinedPrimaryExpression` a constant expression and inherit from the `ConstantExpression` class. This means it's AST kind number is now also added to the `ASTConstantExpressionKind` type and its context class is also part of the `ParserConstantExpressionContext` type. @@ -123,6 +126,9 @@ To use development versions of Kipper download the of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). - Bug of invalid underline indent in error traceback. ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). +- CLI bug where the `-t` shortcut flag was incorrectly shown for the command `help compile`. + ([#451](https://github.com/Luna-Klatzer/Kipper/issues/451)) (This is the same fix as in `0.10.3`, but was only + added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). - CLI error handling bug as described in [#491](https://github.com/Luna-Klatzer/Kipper/issues/491). This includes multiple bugs where errors were reported as "Unexpected CLI Error". (This is the same fix as in `0.10.4`, but was only added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). From 889ab3a7195d7ac58da8027f502f492dc027d8f3 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 21 Oct 2023 14:59:27 +0200 Subject: [PATCH 064/257] [#491] Fixed additional edge case not being covered by decorator `prettifiedErrors()` Explanation here: https://github.com/Kipper-Lang/Kipper/issues/491#issuecomment-1773780758 --- kipper/cli/src/decorators.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kipper/cli/src/decorators.ts b/kipper/cli/src/decorators.ts index 9961ef108..24001493a 100644 --- a/kipper/cli/src/decorators.ts +++ b/kipper/cli/src/decorators.ts @@ -21,11 +21,13 @@ export function prettifiedErrors() { try { await originalFunc.call(this); } catch (error) { - const cliError = error instanceof KipperCLIError; + const cliError = + error instanceof KipperCLIError || + error instanceof OclifCLIError; const internalError = error instanceof KipperInternalError; // Error configuration - const name: string = cliError ? "Error" : internalError ? "Unexpected Internal Error" : "Unexpected CLI Error"; + const name: string = cliError ? "Error" : internalError ? "Unexpected Internal Error" : "CLI Error"; const msg: string = error && typeof error === "object" && "message" in error && typeof error.message === "string" ? error.message From 97ddff188c9e733d2df5ba6317fdc03c64c79471 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 21 Oct 2023 14:59:42 +0200 Subject: [PATCH 065/257] [#491] Updated CHANGELOG.md --- CHANGELOG.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b03cc2a0..5816033a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,8 +77,8 @@ To use development versions of Kipper download the ### Changed - Standardised error output for the CLI as described in [#435](https://github.com/Luna-Klatzer/Kipper/issues/435). - (This is the same change as in `0.10.3`, but was only added to the dev branch with the release of `0.11.0-alpha.1` - i.e. `0.11.0-alpha.0` does *not* have this change). + (This is the same change as in `0.10.3`, but was only added to the dev branch with the release of `0.11.0-alpha.1` + i.e. `0.11.0-alpha.0` does _not_ have this change). - Made `VoidOrNullOrUndefinedPrimaryExpression` a constant expression and inherit from the `ConstantExpression` class. This means it's AST kind number is now also added to the `ASTConstantExpressionKind` type and its context class is also part of the `ParserConstantExpressionContext` type. @@ -127,11 +127,12 @@ To use development versions of Kipper download the - Bug of invalid underline indent in error traceback. ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). - CLI bug where the `-t` shortcut flag was incorrectly shown for the command `help compile`. - ([#451](https://github.com/Luna-Klatzer/Kipper/issues/451)) (This is the same fix as in `0.10.3`, but was only - added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). + ([#451](https://github.com/Luna-Klatzer/Kipper/issues/451)) (This is the same fix as in `0.10.3`, but was only + added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). - CLI error handling bug as described in [#491](https://github.com/Luna-Klatzer/Kipper/issues/491). This includes - multiple bugs where errors were reported as "Unexpected CLI Error". (This is the same fix as in `0.10.4`, but was - only added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). + multiple bugs where errors were reported as "Unexpected CLI Error". (This is the same fix as in `0.10.4`, but with one + additional edge-case covered. This fix was only added to the dev branch with the release of `0.11.0-alpha.1` i.e. + `0.11.0-alpha.0` still has this bug). ### Deprecated From b22362d5cae0f8710a0a8b9aa6ccca14c9a65af5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 21 Oct 2023 15:05:27 +0200 Subject: [PATCH 066/257] [#435, #451, #491] Updated pnpm-lock.yaml --- kipper/target-js/pnpm-lock.yaml | 8 ++++---- kipper/target-ts/pnpm-lock.yaml | 8 ++++---- kipper/web/pnpm-lock.yaml | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/kipper/target-js/pnpm-lock.yaml b/kipper/target-js/pnpm-lock.yaml index a78463131..1b11ba22d 100644 --- a/kipper/target-js/pnpm-lock.yaml +++ b/kipper/target-js/pnpm-lock.yaml @@ -208,9 +208,9 @@ packages: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: + JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 - JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 @@ -282,6 +282,7 @@ packages: engines: {node: '>= 0.8'} hasBin: true dependencies: + JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -303,7 +304,6 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 - JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -776,11 +776,11 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: + JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 - JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -1007,6 +1007,7 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true dependencies: + JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1014,7 +1015,6 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 - JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 diff --git a/kipper/target-ts/pnpm-lock.yaml b/kipper/target-ts/pnpm-lock.yaml index 8d8e69eca..fda430c16 100644 --- a/kipper/target-ts/pnpm-lock.yaml +++ b/kipper/target-ts/pnpm-lock.yaml @@ -211,9 +211,9 @@ packages: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: + JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 - JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 @@ -285,6 +285,7 @@ packages: engines: {node: '>= 0.8'} hasBin: true dependencies: + JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -306,7 +307,6 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 - JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -779,11 +779,11 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: + JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 - JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -1010,6 +1010,7 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true dependencies: + JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1017,7 +1018,6 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 - JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 diff --git a/kipper/web/pnpm-lock.yaml b/kipper/web/pnpm-lock.yaml index 7865734f9..ffcd1a5c1 100644 --- a/kipper/web/pnpm-lock.yaml +++ b/kipper/web/pnpm-lock.yaml @@ -218,9 +218,9 @@ packages: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: + JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 - JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 @@ -292,6 +292,7 @@ packages: engines: {node: '>= 0.8'} hasBin: true dependencies: + JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -313,7 +314,6 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 - JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -786,11 +786,11 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: + JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 - JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -1017,6 +1017,7 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true dependencies: + JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1024,7 +1025,6 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 - JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 From 096f22108e0b852013fbf6e0572af681d2415225 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 21 Oct 2023 15:23:41 +0200 Subject: [PATCH 067/257] Cleaned up size-limit.yml --- .github/workflows/size-limit.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/size-limit.yml b/.github/workflows/size-limit.yml index 80b804a84..d709c29ab 100644 --- a/.github/workflows/size-limit.yml +++ b/.github/workflows/size-limit.yml @@ -1,7 +1,7 @@ name: "Size Limit" on: pull_request jobs: - size: + size-limit: runs-on: ubuntu-latest strategy: matrix: @@ -15,16 +15,16 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - - uses: pnpm/action-setup@v2.2.4 + - name: Install PNPM & dev dependencies + uses: pnpm/action-setup@v2.2.4 with: version: 8.x.x run_install: | - recursive: true - - name: Build project + - name: Build project to allow for browserify to run run: pnpm build - - name: Setup size-limit - run: pnpm i - - uses: andresz1/size-limit-action@v1.7.0 + - name: Run size-limit + uses: andresz1/size-limit-action@v1.7.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} script: pnpm exec size-limit --json From 330ed6fd9ff91c8e596313f971641c6adc03987d Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 21 Oct 2023 17:20:04 +0200 Subject: [PATCH 068/257] Removed unneeded .badge-config files --- .badge-config | 11 ----------- kipper/cli/.badge-config | 11 ----------- kipper/core/.badge-config | 11 ----------- kipper/target-js/.badge-config | 10 ---------- kipper/target-ts/.badge-config | 10 ---------- kipper/web/.badge-config | 10 ---------- 6 files changed, 63 deletions(-) delete mode 100644 .badge-config delete mode 100644 kipper/cli/.badge-config delete mode 100644 kipper/core/.badge-config delete mode 100644 kipper/target-js/.badge-config delete mode 100644 kipper/target-ts/.badge-config delete mode 100644 kipper/web/.badge-config diff --git a/.badge-config b/.badge-config deleted file mode 100644 index 70d865359..000000000 --- a/.badge-config +++ /dev/null @@ -1,11 +0,0 @@ -{ - "coverage_file_path": "./coverage/coverage-summary.json", - "badges": { - "coverage": { - "style": "flat", - "logo": "github", - "logoColor": "white", - "color": "blue" - } - } -} diff --git a/kipper/cli/.badge-config b/kipper/cli/.badge-config deleted file mode 100644 index f47df10f2..000000000 --- a/kipper/cli/.badge-config +++ /dev/null @@ -1,11 +0,0 @@ -{ - "coverage_file_path": "../../coverage/coverage-summary.json", - "badges": { - "coverage": { - "style": "flat", - "logo": "github", - "logoColor": "white", - "color": "blue" - } - } -} diff --git a/kipper/core/.badge-config b/kipper/core/.badge-config deleted file mode 100644 index f47df10f2..000000000 --- a/kipper/core/.badge-config +++ /dev/null @@ -1,11 +0,0 @@ -{ - "coverage_file_path": "../../coverage/coverage-summary.json", - "badges": { - "coverage": { - "style": "flat", - "logo": "github", - "logoColor": "white", - "color": "blue" - } - } -} diff --git a/kipper/target-js/.badge-config b/kipper/target-js/.badge-config deleted file mode 100644 index b1b6b3de4..000000000 --- a/kipper/target-js/.badge-config +++ /dev/null @@ -1,10 +0,0 @@ -{ - "coverage_file_path": "../../coverage/coverage-summary.json", - "badges": { - "coverage": { - "style": "flat", - "logoColor": "white", - "color": "blue" - } - } -} diff --git a/kipper/target-ts/.badge-config b/kipper/target-ts/.badge-config deleted file mode 100644 index b1b6b3de4..000000000 --- a/kipper/target-ts/.badge-config +++ /dev/null @@ -1,10 +0,0 @@ -{ - "coverage_file_path": "../../coverage/coverage-summary.json", - "badges": { - "coverage": { - "style": "flat", - "logoColor": "white", - "color": "blue" - } - } -} diff --git a/kipper/web/.badge-config b/kipper/web/.badge-config deleted file mode 100644 index b1b6b3de4..000000000 --- a/kipper/web/.badge-config +++ /dev/null @@ -1,10 +0,0 @@ -{ - "coverage_file_path": "../../coverage/coverage-summary.json", - "badges": { - "coverage": { - "style": "flat", - "logoColor": "white", - "color": "blue" - } - } -} From f6b15c319470b31fef3d559f862a7f9add55456b Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 5 Nov 2023 13:03:13 +0100 Subject: [PATCH 069/257] Fixed outdated URLs in README.md Signed-off-by: Luna --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb5dd3713..da0f02dab 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ # The Kipper programming language - `kipper` 🦊✨ [![Version](https://img.shields.io/npm/v/kipper?label=npm%20stable&color=%23cd2620&logo=npm)](https://npmjs.org/package/kipper) -[![Dev Version](https://img.shields.io/github/v/tag/Luna-Klatzer/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) -[![codecov](https://codecov.io/gh/Luna-Klatzer/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) [![Issues](https://img.shields.io/github/issues/Luna-Klatzer/Kipper)](https://github.com/Luna-Klatzer/Kipper/issues) [![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan)](https://github.com/Luna-Klatzer/Kipper/blob/main/LICENSE) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) From 16cb772048546e3a1ad697f7ac3220f102fe47af Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 10 Feb 2024 20:12:35 +0100 Subject: [PATCH 070/257] Fixed invalid instructions in PULL_REQUEST_TEMPLATE.md Signed-off-by: Luna --- .github/PULL_REQUEST_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 496186306..5bb2ab62a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ ## What type of change does this PR perform? From 3537ac0766ff854fc39b46b863dd619362aadf55 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 20:36:19 +0100 Subject: [PATCH 071/257] other (#513): Updated pnpm-lock.yaml --- kipper/cli/pnpm-lock.yaml | 1414 ++++++++++++++-------------- kipper/core/pnpm-lock.yaml | 866 ++++++++--------- kipper/target-js/pnpm-lock.yaml | 518 ++++++----- kipper/target-ts/pnpm-lock.yaml | 523 ++++++----- kipper/web/pnpm-lock.yaml | 540 +++++------ pnpm-lock.yaml | 1529 ++++++++++++++++--------------- 6 files changed, 2750 insertions(+), 2640 deletions(-) diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index beee1db1d..30fd41ed8 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -1,70 +1,94 @@ -lockfileVersion: 5.4 - -specifiers: - '@kipper/core': workspace:~ - '@kipper/target-js': workspace:~ - '@kipper/target-ts': workspace:~ - '@oclif/command': 1.8.26 - '@oclif/config': 1.18.8 - '@oclif/errors': 1.3.6 - '@oclif/parser': 3.8.10 - '@oclif/plugin-help': 3.3.1 - '@oclif/plugin-warn-if-update-available': 2.0.37 - '@oclif/test': 2.3.21 - '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.16.16 - '@types/sinon': 10.0.15 - json-parse-even-better-errors: 2.3.1 - oclif: 3.4.6 - os-tmpdir: 1.0.2 - pseudomap: 1.0.2 - rimraf: 5.0.1 - semver: 7.5.1 - ts-node: 10.9.1 - tslog: 3.3.4 - typescript: 5.1.3 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - '@kipper/core': link:../core - '@kipper/target-js': link:../target-js - '@kipper/target-ts': link:../target-ts - '@oclif/command': 1.8.26 - '@oclif/config': 1.18.8 - '@oclif/errors': 1.3.6 - '@oclif/parser': 3.8.10 - '@oclif/plugin-help': 3.3.1 - '@oclif/plugin-warn-if-update-available': 2.0.37_sz2hep2ld4tbz4lvm5u3llauiu - tslog: 3.3.4 + '@kipper/core': + specifier: workspace:~ + version: link:../core + '@kipper/target-js': + specifier: workspace:~ + version: link:../target-js + '@kipper/target-ts': + specifier: workspace:~ + version: link:../target-ts + '@oclif/command': + specifier: 1.8.26 + version: 1.8.26(@oclif/config@1.18.8) + '@oclif/config': + specifier: 1.18.8 + version: 1.18.8 + '@oclif/errors': + specifier: 1.3.6 + version: 1.3.6 + '@oclif/parser': + specifier: 3.8.10 + version: 3.8.10 + '@oclif/plugin-help': + specifier: 3.3.1 + version: 3.3.1 + '@oclif/plugin-warn-if-update-available': + specifier: 2.0.37 + version: 2.0.37(@types/node@18.16.16)(typescript@5.1.3) + tslog: + specifier: 3.3.4 + version: 3.3.4 devDependencies: - '@oclif/test': 2.3.21_sz2hep2ld4tbz4lvm5u3llauiu - '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.16.16 - '@types/sinon': 10.0.15 - json-parse-even-better-errors: 2.3.1 - oclif: 3.4.6_sz2hep2ld4tbz4lvm5u3llauiu - os-tmpdir: 1.0.2 - pseudomap: 1.0.2 - rimraf: 5.0.1 - semver: 7.5.1 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu - typescript: 5.1.3 + '@oclif/test': + specifier: 2.3.21 + version: 2.3.21(@types/node@18.16.16)(typescript@5.1.3) + '@sinonjs/fake-timers': + specifier: 10.0.2 + version: 10.0.2 + '@types/node': + specifier: 18.16.16 + version: 18.16.16 + '@types/sinon': + specifier: 10.0.15 + version: 10.0.15 + json-parse-even-better-errors: + specifier: 2.3.1 + version: 2.3.1 + oclif: + specifier: 3.4.6 + version: 3.4.6(@types/node@18.16.16)(mem-fs-editor@9.6.0)(mem-fs@2.2.1)(typescript@5.1.3) + os-tmpdir: + specifier: 1.0.2 + version: 1.0.2 + pseudomap: + specifier: 1.0.2 + version: 1.0.2 + rimraf: + specifier: 5.0.1 + version: 5.0.1 + semver: + specifier: 7.5.1 + version: 7.5.1 + ts-node: + specifier: 10.9.1 + version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + typescript: + specifier: 5.1.3 + version: 5.1.3 packages: - /@babel/code-frame/7.18.6: + /@babel/code-frame@7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/helper-validator-identifier/7.19.1: + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true - /@babel/highlight/7.18.6: + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -73,64 +97,64 @@ packages: js-tokens: 4.0.0 dev: true - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@gar/promisify/1.1.3: + /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true - /@isaacs/cliui/8.0.2: + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} dependencies: string-width: 5.1.2 - string-width-cjs: /string-width/4.2.3 + string-width-cjs: /string-width@4.2.3 strip-ansi: 7.0.1 - strip-ansi-cjs: /strip-ansi/6.0.1 + strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi/7.0.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@isaacs/string-locale-compare/1.1.0: + /@isaacs/string-locale-compare@1.1.0: resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 - /@npmcli/arborist/4.3.1: + /@npmcli/arborist@4.3.1: resolution: {integrity: sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} hasBin: true @@ -172,14 +196,14 @@ packages: - supports-color dev: true - /@npmcli/fs/1.1.1: + /@npmcli/fs@1.1.1: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 semver: 7.5.1 dev: true - /@npmcli/fs/2.1.2: + /@npmcli/fs@2.1.2: resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -187,7 +211,7 @@ packages: semver: 7.5.1 dev: true - /@npmcli/git/2.1.0: + /@npmcli/git@2.1.0: resolution: {integrity: sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==} dependencies: '@npmcli/promise-spawn': 1.3.2 @@ -202,7 +226,7 @@ packages: - bluebird dev: true - /@npmcli/installed-package-contents/1.0.7: + /@npmcli/installed-package-contents@1.0.7: resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} engines: {node: '>= 10'} hasBin: true @@ -211,7 +235,7 @@ packages: npm-normalize-package-bin: 1.0.1 dev: true - /@npmcli/map-workspaces/2.0.4: + /@npmcli/map-workspaces@2.0.4: resolution: {integrity: sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -221,7 +245,7 @@ packages: read-package-json-fast: 2.0.3 dev: true - /@npmcli/metavuln-calculator/2.0.0: + /@npmcli/metavuln-calculator@2.0.0: resolution: {integrity: sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} dependencies: @@ -234,7 +258,7 @@ packages: - supports-color dev: true - /@npmcli/move-file/1.1.2: + /@npmcli/move-file@1.1.2: resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs @@ -243,7 +267,7 @@ packages: rimraf: 3.0.2 dev: true - /@npmcli/move-file/2.0.1: + /@npmcli/move-file@2.0.1: resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This functionality has been moved to @npmcli/fs @@ -252,27 +276,27 @@ packages: rimraf: 3.0.2 dev: true - /@npmcli/name-from-folder/1.0.1: + /@npmcli/name-from-folder@1.0.1: resolution: {integrity: sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==} dev: true - /@npmcli/node-gyp/1.0.3: + /@npmcli/node-gyp@1.0.3: resolution: {integrity: sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==} dev: true - /@npmcli/package-json/1.0.1: + /@npmcli/package-json@1.0.1: resolution: {integrity: sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==} dependencies: json-parse-even-better-errors: 2.3.1 dev: true - /@npmcli/promise-spawn/1.3.2: + /@npmcli/promise-spawn@1.3.2: resolution: {integrity: sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==} dependencies: infer-owner: 1.0.4 dev: true - /@npmcli/run-script/2.0.0: + /@npmcli/run-script@2.0.0: resolution: {integrity: sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==} dependencies: '@npmcli/node-gyp': 1.0.3 @@ -284,7 +308,7 @@ packages: - supports-color dev: true - /@oclif/color/1.0.4: + /@oclif/color@1.0.4: resolution: {integrity: sha512-HEcVnSzpQkjskqWJyVN3tGgR0H0F8GrBmDjgQ1N0ZwwktYa4y9kfV07P/5vt5BjPXNyslXHc4KAO8Bt7gmErCA==} engines: {node: '>=12.0.0'} dependencies: @@ -295,27 +319,45 @@ packages: tslib: 2.5.2 dev: true - /@oclif/command/1.8.26: + /@oclif/command@1.8.26(@oclif/config@1.18.2): resolution: {integrity: sha512-IT9kOLFRMc3s6KJ1FymsNjbHShI211eVgAg+JMiDVl8LXwOJxYe8ybesgL1kpV9IUFByOBwZKNG2mmrVeNBHPg==} engines: {node: '>=12.0.0'} + peerDependencies: + '@oclif/config': ^1 + dependencies: + '@oclif/config': 1.18.2 + '@oclif/errors': 1.3.6 + '@oclif/help': 1.0.5 + '@oclif/parser': 3.8.11 + debug: 4.3.4(supports-color@8.1.1) + semver: 7.5.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@oclif/command@1.8.26(@oclif/config@1.18.8): + resolution: {integrity: sha512-IT9kOLFRMc3s6KJ1FymsNjbHShI211eVgAg+JMiDVl8LXwOJxYe8ybesgL1kpV9IUFByOBwZKNG2mmrVeNBHPg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@oclif/config': ^1 dependencies: '@oclif/config': 1.18.8 '@oclif/errors': 1.3.6 '@oclif/help': 1.0.5 '@oclif/parser': 3.8.11 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) semver: 7.5.1 transitivePeerDependencies: - supports-color dev: false - /@oclif/config/1.18.2: + /@oclif/config@1.18.2: resolution: {integrity: sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA==} engines: {node: '>=8.0.0'} dependencies: '@oclif/errors': 1.3.6 '@oclif/parser': 3.8.10 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-wsl: 2.2.0 tslib: 2.5.2 @@ -323,13 +365,13 @@ packages: - supports-color dev: false - /@oclif/config/1.18.6: + /@oclif/config@1.18.6: resolution: {integrity: sha512-OWhCpdu4QqggOPX1YPZ4XVmLLRX+lhGjXV6RNA7sogOwLqlEmSslnN/lhR5dkhcWZbKWBQH29YCrB3LDPRu/IA==} engines: {node: '>=8.0.0'} dependencies: '@oclif/errors': 1.3.6 '@oclif/parser': 3.8.10 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-wsl: 2.2.0 tslib: 2.5.0 @@ -337,13 +379,13 @@ packages: - supports-color dev: false - /@oclif/config/1.18.8: + /@oclif/config@1.18.8: resolution: {integrity: sha512-FetS52+emaZQui0roFSdbBP8ddBkIezEoH2NcjLJRjqkMGdE9Z1V+jsISVqTYXk2KJ1gAI0CHDXFjJlNBYbJBg==} engines: {node: '>=8.0.0'} dependencies: '@oclif/errors': 1.3.6 '@oclif/parser': 3.8.10 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-wsl: 2.2.0 tslib: 2.5.0 @@ -351,7 +393,7 @@ packages: - supports-color dev: false - /@oclif/core/1.26.2: + /@oclif/core@1.26.2: resolution: {integrity: sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==} engines: {node: '>=14.0.0'} dependencies: @@ -363,7 +405,7 @@ packages: chalk: 4.1.2 clean-stack: 3.0.1 cli-progress: 3.12.0 - debug: 4.3.4_supports-color@8.1.1 + debug: 4.3.4(supports-color@8.1.1) ejs: 3.1.8 fs-extra: 9.1.0 get-package-type: 0.1.0 @@ -385,7 +427,7 @@ packages: wrap-ansi: 7.0.0 dev: true - /@oclif/core/2.8.5_sz2hep2ld4tbz4lvm5u3llauiu: + /@oclif/core@2.8.5(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==} engines: {node: '>=14.0.0'} dependencies: @@ -396,7 +438,7 @@ packages: chalk: 4.1.2 clean-stack: 3.0.1 cli-progress: 3.12.0 - debug: 4.3.4_supports-color@8.1.1 + debug: 4.3.4(supports-color@8.1.1) ejs: 3.1.8 fs-extra: 9.1.0 get-package-type: 0.1.0 @@ -413,7 +455,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.2.0 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu + ts-node: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) tslib: 2.5.0 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -424,7 +466,7 @@ packages: - '@types/node' - typescript - /@oclif/errors/1.3.5: + /@oclif/errors@1.3.5: resolution: {integrity: sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==} engines: {node: '>=8.0.0'} dependencies: @@ -435,7 +477,7 @@ packages: wrap-ansi: 7.0.0 dev: false - /@oclif/errors/1.3.6: + /@oclif/errors@1.3.6: resolution: {integrity: sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ==} engines: {node: '>=8.0.0'} dependencies: @@ -446,7 +488,7 @@ packages: wrap-ansi: 7.0.0 dev: false - /@oclif/help/1.0.5: + /@oclif/help@1.0.5: resolution: {integrity: sha512-77ZXqVXcd+bQ6EafN56KbL4PbNtZM/Lq4GQElekNav+CPIgPNKT3AtMTQrc0fWke6bb/BTLB+1Fu1gWgx643jQ==} engines: {node: '>=8.0.0'} dependencies: @@ -463,10 +505,10 @@ packages: - supports-color dev: false - /@oclif/linewrap/1.0.0: + /@oclif/linewrap@1.0.0: resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} - /@oclif/parser/3.8.10: + /@oclif/parser@3.8.10: resolution: {integrity: sha512-J4l/NcnfbIU84+NNdy6bxq9yJt4joFWNvpk59hq+uaQPUNtjmNJDVGuRvf6GUOxHNgRsVK1JRmd/Ez+v7Z9GqQ==} engines: {node: '>=8.0.0'} dependencies: @@ -476,7 +518,7 @@ packages: tslib: 2.5.0 dev: false - /@oclif/parser/3.8.11: + /@oclif/parser@3.8.11: resolution: {integrity: sha512-B3NweRn1yZw2g7xaF10Zh/zwlqTJJINfU+CRkqll+LaTisSNvZbW0RR9WGan26EqqLp4qzNjzX/e90Ew8l9NLw==} engines: {node: '>=8.0.0'} dependencies: @@ -486,11 +528,11 @@ packages: tslib: 2.5.2 dev: false - /@oclif/plugin-help/3.3.1: + /@oclif/plugin-help@3.3.1: resolution: {integrity: sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ==} engines: {node: '>=8.0.0'} dependencies: - '@oclif/command': 1.8.26 + '@oclif/command': 1.8.26(@oclif/config@1.18.2) '@oclif/config': 1.18.2 '@oclif/errors': 1.3.5 '@oclif/help': 1.0.5 @@ -505,11 +547,11 @@ packages: - supports-color dev: false - /@oclif/plugin-help/5.2.4_sz2hep2ld4tbz4lvm5u3llauiu: + /@oclif/plugin-help@5.2.4(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-7fVB/M1cslwHJTmyNGGDYBizi54NHcKCxHAbDSD16EbjosKxFwncRylVC/nsMgKZEufMDKZaVYI2lYRY3GHlSQ==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.8.5_sz2hep2ld4tbz4lvm5u3llauiu + '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -517,12 +559,12 @@ packages: - typescript dev: true - /@oclif/plugin-not-found/2.3.18_sz2hep2ld4tbz4lvm5u3llauiu: + /@oclif/plugin-not-found@2.3.18(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-yUXgdPwjE/JIuWZ23Ge6G5gM+qiw7Baq/26oBq3eusIP6hZuHYeCpwQ96Zy5aHcjm2NSZcMjkZG1jARyr9BzkQ==} engines: {node: '>=12.0.0'} dependencies: '@oclif/color': 1.0.4 - '@oclif/core': 2.8.5_sz2hep2ld4tbz4lvm5u3llauiu + '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -532,13 +574,13 @@ packages: - typescript dev: true - /@oclif/plugin-warn-if-update-available/2.0.37_sz2hep2ld4tbz4lvm5u3llauiu: + /@oclif/plugin-warn-if-update-available@2.0.37(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-rfDNvplwgiwV+QSV4JU96ypmWgNJ6Hk5FEAEAKzqF0v0J8AHwZGpwwYO/MCZSkbc7bfYpkqLx/sxjpMO6j6PmQ==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.8.5_sz2hep2ld4tbz4lvm5u3llauiu + '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) chalk: 4.1.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) fs-extra: 9.1.0 http-call: 5.3.0 lodash: 4.17.21 @@ -550,17 +592,17 @@ packages: - supports-color - typescript - /@oclif/screen/3.0.4: + /@oclif/screen@3.0.4: resolution: {integrity: sha512-IMsTN1dXEXaOSre27j/ywGbBjrzx0FNd1XmuhCWCB9NTPrhWI1Ifbz+YLSEcstfQfocYsrbrIessxXb2oon4lA==} engines: {node: '>=12.0.0'} deprecated: Deprecated in favor of @oclif/core dev: true - /@oclif/test/2.3.21_sz2hep2ld4tbz4lvm5u3llauiu: + /@oclif/test@2.3.21(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-RaFNf3/PMwBLrL9yu8aFsONsUSpyI16AGC6HiAabDyu534Rh+jBtqy/dPZ53/SOCBOholhZmVs7jT0UE5Utwew==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.8.5_sz2hep2ld4tbz4lvm5u3llauiu + '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) fancy-test: 2.0.23 transitivePeerDependencies: - '@swc/core' @@ -570,13 +612,13 @@ packages: - typescript dev: true - /@octokit/auth-token/2.5.0: + /@octokit/auth-token@2.5.0: resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} dependencies: '@octokit/types': 6.41.0 dev: true - /@octokit/core/3.6.0: + /@octokit/core@3.6.0: resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} dependencies: '@octokit/auth-token': 2.5.0 @@ -590,7 +632,7 @@ packages: - encoding dev: true - /@octokit/endpoint/6.0.12: + /@octokit/endpoint@6.0.12: resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} dependencies: '@octokit/types': 6.41.0 @@ -598,7 +640,7 @@ packages: universal-user-agent: 6.0.0 dev: true - /@octokit/graphql/4.8.0: + /@octokit/graphql@4.8.0: resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} dependencies: '@octokit/request': 5.6.3 @@ -608,11 +650,11 @@ packages: - encoding dev: true - /@octokit/openapi-types/12.11.0: + /@octokit/openapi-types@12.11.0: resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} dev: true - /@octokit/plugin-paginate-rest/2.21.3_@octokit+core@3.6.0: + /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} peerDependencies: '@octokit/core': '>=2' @@ -621,7 +663,7 @@ packages: '@octokit/types': 6.41.0 dev: true - /@octokit/plugin-request-log/1.0.4_@octokit+core@3.6.0: + /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} peerDependencies: '@octokit/core': '>=3' @@ -629,7 +671,7 @@ packages: '@octokit/core': 3.6.0 dev: true - /@octokit/plugin-rest-endpoint-methods/5.16.2_@octokit+core@3.6.0: + /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} peerDependencies: '@octokit/core': '>=3' @@ -639,7 +681,7 @@ packages: deprecation: 2.3.1 dev: true - /@octokit/request-error/2.1.0: + /@octokit/request-error@2.1.0: resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} dependencies: '@octokit/types': 6.41.0 @@ -647,7 +689,7 @@ packages: once: 1.4.0 dev: true - /@octokit/request/5.6.3: + /@octokit/request@5.6.3: resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} dependencies: '@octokit/endpoint': 6.0.12 @@ -660,77 +702,77 @@ packages: - encoding dev: true - /@octokit/rest/18.12.0: + /@octokit/rest@18.12.0: resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} dependencies: '@octokit/core': 3.6.0 - '@octokit/plugin-paginate-rest': 2.21.3_@octokit+core@3.6.0 - '@octokit/plugin-request-log': 1.0.4_@octokit+core@3.6.0 - '@octokit/plugin-rest-endpoint-methods': 5.16.2_@octokit+core@3.6.0 + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) transitivePeerDependencies: - encoding dev: true - /@octokit/types/6.41.0: + /@octokit/types@6.41.0: resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} dependencies: '@octokit/openapi-types': 12.11.0 dev: true - /@pkgjs/parseargs/0.11.0: + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true dev: true optional: true - /@sindresorhus/is/4.6.0: + /@sindresorhus/is@4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} dev: true - /@sinonjs/commons/2.0.0: + /@sinonjs/commons@2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/10.0.2: + /@sinonjs/fake-timers@10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 dev: true - /@szmarczak/http-timer/4.0.6: + /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 dev: true - /@tootallnate/once/1.1.2: + /@tootallnate/once@1.1.2: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} dev: true - /@tootallnate/once/2.0.0: + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - /@types/cacheable-request/6.0.3: + /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: '@types/http-cache-semantics': 4.0.1 @@ -739,105 +781,105 @@ packages: '@types/responselike': 1.0.0 dev: true - /@types/chai/4.3.3: + /@types/chai@4.3.3: resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} dev: true - /@types/cli-progress/3.11.0: + /@types/cli-progress@3.11.0: resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} dependencies: '@types/node': 18.16.16 - /@types/expect/1.20.4: + /@types/expect@1.20.4: resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} dev: true - /@types/http-cache-semantics/4.0.1: + /@types/http-cache-semantics@4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: true - /@types/keyv/3.1.4: + /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 18.16.16 dev: true - /@types/lodash/4.14.182: + /@types/lodash@4.14.182: resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==} dev: true - /@types/minimatch/3.0.5: + /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true - /@types/node/15.14.9: + /@types/node@15.14.9: resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} dev: true - /@types/node/18.16.16: + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} - /@types/normalize-package-data/2.4.1: + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/responselike/1.0.0: + /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: '@types/node': 18.16.16 dev: true - /@types/sinon/10.0.15: + /@types/sinon@10.0.15: resolution: {integrity: sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==} dependencies: '@types/sinonjs__fake-timers': 8.1.2 dev: true - /@types/sinonjs__fake-timers/8.1.2: + /@types/sinonjs__fake-timers@8.1.2: resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} dev: true - /@types/vinyl/2.0.7: + /@types/vinyl@2.0.7: resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} dependencies: '@types/expect': 1.20.4 '@types/node': 18.16.16 dev: true - /abbrev/1.1.1: + /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - /acorn/8.8.2: + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /agentkeepalive/4.2.1: + /agentkeepalive@4.2.1: resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} engines: {node: '>= 8.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) depd: 1.1.2 humanize-ms: 1.2.1 transitivePeerDependencies: - supports-color dev: true - /aggregate-error/3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -845,66 +887,66 @@ packages: indent-string: 4.0.0 dev: true - /ansi-escapes/3.2.0: + /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - /ansi-regex/2.1.1: + /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-regex/3.0.1: + /ansi-regex@3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} engines: {node: '>=4'} dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /ansi-styles/2.2.1: + /ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles/6.2.1: + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /ansicolors/0.3.2: + /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - /aproba/2.0.0: + /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: true - /are-we-there-yet/2.0.0: + /are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} dependencies: @@ -912,7 +954,7 @@ packages: readable-stream: 3.6.0 dev: true - /are-we-there-yet/3.0.1: + /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -920,45 +962,45 @@ packages: readable-stream: 3.6.0 dev: true - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - /array-differ/3.0.0: + /array-differ@3.0.0: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - /arrify/2.0.1: + /arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} dev: true - /asap/2.0.6: + /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true - /async/3.2.4: + /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - /at-least-node/1.0.0: + /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /aws-sdk/2.1311.0: + /aws-sdk@2.1311.0: resolution: {integrity: sha512-X3cFNsfs3HUfz6LKiLqvDTO4EsqO5DnNssh9SOoxhwmoMyJ2et3dEmigO6TaA44BjVNdLW98+sXJVPTGvINY1Q==} engines: {node: '>= 10.0.0'} dependencies: @@ -974,18 +1016,18 @@ packages: xml2js: 0.4.19 dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /before-after-hook/2.2.3: + /before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true - /bin-links/3.0.3: + /bin-links@3.0.3: resolution: {integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -997,12 +1039,12 @@ packages: write-file-atomic: 4.0.2 dev: true - /binaryextensions/4.18.0: + /binaryextensions@4.18.0: resolution: {integrity: sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw==} engines: {node: '>=0.8'} dev: true - /bl/4.1.0: + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 @@ -1010,28 +1052,28 @@ packages: readable-stream: 3.6.0 dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion/2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false - /buffer/4.9.2: + /buffer@4.9.2: resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} dependencies: base64-js: 1.5.1 @@ -1039,18 +1081,18 @@ packages: isarray: 1.0.0 dev: true - /buffer/5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /builtins/1.0.3: + /builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} dev: true - /cacache/15.3.0: + /cacache@15.3.0: resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} engines: {node: '>= 10'} dependencies: @@ -1076,7 +1118,7 @@ packages: - bluebird dev: true - /cacache/16.1.3: + /cacache@16.1.3: resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -1102,12 +1144,12 @@ packages: - bluebird dev: true - /cacheable-lookup/5.0.4: + /cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} dev: true - /cacheable-request/7.0.2: + /cacheable-request@7.0.2: resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} engines: {node: '>=8'} dependencies: @@ -1120,21 +1162,21 @@ packages: responselike: 2.0.1 dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 dev: true - /cardinal/2.1.1: + /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 - /chalk/1.1.3: + /chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} dependencies: @@ -1145,7 +1187,7 @@ packages: supports-color: 2.0.0 dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -1154,69 +1196,69 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chardet/0.7.0: + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /chownr/2.0.0: + /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} dev: true - /clean-stack/2.2.0: + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /clean-stack/3.0.1: + /clean-stack@3.0.1: resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} engines: {node: '>=10'} dependencies: escape-string-regexp: 4.0.0 - /cli-boxes/1.0.0: + /cli-boxes@1.0.0: resolution: {integrity: sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==} engines: {node: '>=0.10.0'} dev: true - /cli-cursor/3.1.0: + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 dev: true - /cli-progress/3.12.0: + /cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} dependencies: string-width: 4.2.3 - /cli-spinners/2.7.0: + /cli-spinners@2.7.0: resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} engines: {node: '>=6'} dev: true - /cli-table/0.3.11: + /cli-table@0.3.11: resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} engines: {node: '>= 0.2.0'} dependencies: colors: 1.0.3 dev: true - /cli-width/3.0.0: + /cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} dev: true - /cliui/8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -1225,32 +1267,32 @@ packages: wrap-ansi: 7.0.0 dev: true - /clone-buffer/1.0.0: + /clone-buffer@1.0.0: resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} engines: {node: '>= 0.10'} dev: true - /clone-response/1.0.3: + /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 dev: true - /clone-stats/1.0.0: + /clone-stats@1.0.0: resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} dev: true - /clone/1.0.4: + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} dev: true - /clone/2.1.2: + /clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} dev: true - /cloneable-readable/1.1.3: + /cloneable-readable@1.1.3: resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} dependencies: inherits: 2.0.4 @@ -1258,64 +1300,64 @@ packages: readable-stream: 2.3.7 dev: true - /cmd-shim/5.0.0: + /cmd-shim@5.0.0: resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: mkdirp-infer-owner: 2.0.0 dev: true - /code-point-at/1.1.0: + /code-point-at@1.1.0: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} dev: true - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /color-support/1.1.3: + /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true dev: true - /colors/1.0.3: + /colors@1.0.3: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} dev: true - /commander/7.1.0: + /commander@7.1.0: resolution: {integrity: sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==} engines: {node: '>= 10'} dev: true - /common-ancestor-path/1.0.1: + /common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} dev: true - /commondir/1.0.1: + /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /concurrently/7.6.0: + /concurrently@7.6.0: resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true @@ -1331,22 +1373,22 @@ packages: yargs: 17.6.2 dev: true - /console-control-strings/1.1.0: + /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: true - /content-type/1.0.4: + /content-type@1.0.4: resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} engines: {node: '>= 0.6'} - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - /cross-spawn/6.0.5: + /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -1356,7 +1398,7 @@ packages: shebang-command: 1.2.0 which: 1.3.1 - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -1365,32 +1407,21 @@ packages: which: 2.0.2 dev: true - /dargs/7.0.0: + /dargs@7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /date-fns/2.29.3: + /date-fns@2.29.3: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} engines: {node: '>=0.11'} dev: true - /dateformat/4.6.3: + /dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /debug/4.3.4_supports-color@8.1.1: + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -1402,87 +1433,87 @@ packages: ms: 2.1.2 supports-color: 8.1.1 - /debuglog/1.0.1: + /debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} dev: true - /decompress-response/6.0.0: + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 dev: true - /deep-extend/0.6.0: + /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} dev: true - /defaults/1.0.4: + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 dev: true - /defer-to-connect/2.0.1: + /defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} dev: true - /delegates/1.0.0: + /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd/1.1.2: + /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true - /deprecation/2.3.1: + /deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} dev: true - /dezalgo/1.0.4: + /dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} dependencies: asap: 2.0.6 wrappy: 1.0.2 dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - /diff/5.1.0: + /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} dev: true - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 - /eastasianwidth/0.2.0: + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ejs/3.1.8: + /ejs@3.1.8: resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} engines: {node: '>=0.10.0'} hasBin: true dependencies: jake: 10.8.5 - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /emoji-regex/9.2.2: + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /encoding/0.1.13: + /encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} requiresBuild: true dependencies: @@ -1490,59 +1521,59 @@ packages: dev: true optional: true - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /env-paths/2.2.1: + /env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} dev: true - /err-code/2.0.3: + /err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - /error/10.4.0: + /error@10.4.0: resolution: {integrity: sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==} dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} dev: true - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /esprima/4.0.1: + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - /eventemitter3/4.0.7: + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true - /events/1.1.1: + /events@1.1.1: resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} engines: {node: '>=0.4.x'} dev: true - /execa/5.1.1: + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -1557,7 +1588,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /external-editor/3.1.0: + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: @@ -1566,7 +1597,7 @@ packages: tmp: 0.0.33 dev: true - /fancy-test/2.0.23: + /fancy-test@2.0.23: resolution: {integrity: sha512-RPX4iAzAioH9nxkqk2yrcunBLBmnMLxtIsw3Pjgj2PGPHTdT3wZ6asKv9U332+UQyZwZWWc4bP64JOa6DcVhnQ==} engines: {node: '>=12.0.0'} dependencies: @@ -1582,7 +1613,7 @@ packages: - supports-color dev: true - /fast-glob/3.2.11: + /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} engines: {node: '>=8.6.0'} dependencies: @@ -1592,41 +1623,41 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 - /fast-levenshtein/3.0.0: + /fast-levenshtein@3.0.0: resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} dependencies: fastest-levenshtein: 1.0.16 dev: true - /fastest-levenshtein/1.0.16: + /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} dev: true - /fastq/1.13.0: + /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 - /figures/3.2.0: + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 dev: true - /filelist/1.0.4: + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.0 - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -1634,7 +1665,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -1642,33 +1673,33 @@ packages: path-exists: 4.0.0 dev: true - /find-yarn-workspace-root/2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: micromatch: 4.0.5 + pkg-dir: 4.2.0 dev: true - /find-yarn-workspace-root2/1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + /find-yarn-workspace-root@2.0.0: + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} dependencies: micromatch: 4.0.5 - pkg-dir: 4.2.0 dev: true - /first-chunk-stream/2.0.0: + /first-chunk-stream@2.0.0: resolution: {integrity: sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==} engines: {node: '>=0.10.0'} dependencies: readable-stream: 2.3.7 dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /foreground-child/3.1.1: + /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} dependencies: @@ -1676,7 +1707,7 @@ packages: signal-exit: 4.0.2 dev: true - /fs-extra/8.1.0: + /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: @@ -1684,7 +1715,7 @@ packages: jsonfile: 4.0.0 universalify: 0.1.2 - /fs-extra/9.1.0: + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -1693,22 +1724,22 @@ packages: jsonfile: 6.1.0 universalify: 2.0.0 - /fs-minipass/2.1.0: + /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /gauge/3.0.2: + /gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} dependencies: @@ -1723,7 +1754,7 @@ packages: wide-align: 1.1.5 dev: true - /gauge/4.0.4: + /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -1737,12 +1768,12 @@ packages: wide-align: 1.1.5 dev: true - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic/1.2.0: + /get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 @@ -1750,32 +1781,32 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - /get-stdin/4.0.1: + /get-stdin@4.0.1: resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} engines: {node: '>=0.10.0'} dev: true - /get-stream/5.2.0: + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 dev: true - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /github-slugger/1.5.0: + /github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} dev: true - /github-username/6.0.0: + /github-username@6.0.0: resolution: {integrity: sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ==} engines: {node: '>=10'} dependencies: @@ -1784,13 +1815,13 @@ packages: - encoding dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob/10.2.5: + /glob@10.2.5: resolution: {integrity: sha512-Gj+dFYPZ5hc5dazjXzB0iHg2jKWJZYMjITXYPBRQ/xc2Buw7H0BINknRTwURJ6IC6MEFpYbLvtgVb3qD+DwyuA==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true @@ -1802,7 +1833,7 @@ packages: path-scurry: 1.9.2 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -1813,7 +1844,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/8.1.0: + /glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} dependencies: @@ -1824,7 +1855,7 @@ packages: once: 1.4.0 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -1835,13 +1866,13 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /gopd/1.0.1: + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 dev: true - /got/11.8.6: + /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} dependencies: @@ -1858,74 +1889,74 @@ packages: responselike: 2.0.1 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - /grouped-queue/2.0.0: + /grouped-queue@2.0.0: resolution: {integrity: sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw==} engines: {node: '>=8.0.0'} dev: true - /has-ansi/2.0.0: + /has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has-unicode/2.0.1: + /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /hosted-git-info/2.8.9: + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info/4.1.0: + /hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /http-cache-semantics/4.1.1: + /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true - /http-call/5.3.0: + /http-call@5.3.0: resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} engines: {node: '>=8.0.0'} dependencies: content-type: 1.0.4 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) is-retry-allowed: 1.2.0 is-stream: 2.0.1 parse-json: 4.0.0 @@ -1933,29 +1964,29 @@ packages: transitivePeerDependencies: - supports-color - /http-proxy-agent/4.0.1: + /http-proxy-agent@4.0.1: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /http-proxy-agent/5.0.0: + /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /http2-wrapper/1.0.3: + /http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} dependencies: @@ -1963,90 +1994,91 @@ packages: resolve-alpn: 1.2.1 dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /human-signals/2.1.0: + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /humanize-ms/1.2.1: + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.2 dev: true - /hyperlinker/1.0.0: + /hyperlinker@1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} - /iconv-lite/0.4.24: + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /iconv-lite/0.6.3: + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: safer-buffer: 2.1.2 dev: true optional: true - /ieee754/1.1.13: + /ieee754@1.1.13: resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore-walk/4.0.1: + /ignore-walk@4.0.1: resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} engines: {node: '>=10'} dependencies: minimatch: 3.1.2 dev: true - /ignore/5.2.0: + /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string/4.0.0: + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - /infer-owner/1.0.4: + /infer-owner@1.0.4: resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inquirer/8.2.5: + /inquirer@8.2.5: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} dependencies: @@ -2067,16 +2099,16 @@ packages: wrap-ansi: 7.0.0 dev: true - /interpret/1.4.0: + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} dev: true - /ip/2.0.0: + /ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -2084,97 +2116,97 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.11.0: + /is-core-module@2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 dev: true - /is-docker/2.2.1: + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point/1.0.0: + /is-fullwidth-code-point@1.0.0: resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 dev: true - /is-fullwidth-code-point/2.0.0: + /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-interactive/1.0.0: + /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} dev: true - /is-lambda/1.0.1: + /is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-plain-obj/2.1.0: + /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} dev: true - /is-plain-object/5.0.0: + /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} dev: true - /is-retry-allowed/1.2.0: + /is-retry-allowed@1.2.0: resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} engines: {node: '>=0.10.0'} - /is-scoped/2.1.0: + /is-scoped@2.1.0: resolution: {integrity: sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==} engines: {node: '>=8'} dependencies: scoped-regex: 2.1.0 dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - /is-typed-array/1.1.10: + /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -2185,34 +2217,34 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-unicode-supported/0.1.0: + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true - /is-utf8/0.2.1: + /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-wsl/2.2.0: + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isbinaryfile/4.0.10: + /isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /jackspeak/2.2.0: + /jackspeak@2.2.0: resolution: {integrity: sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==} engines: {node: '>=14'} dependencies: @@ -2221,7 +2253,7 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true - /jake/10.8.5: + /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} hasBin: true @@ -2231,77 +2263,77 @@ packages: filelist: 1.0.4 minimatch: 3.1.2 - /jmespath/0.16.0: + /jmespath@0.16.0: resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} engines: {node: '>= 0.6.0'} dev: true - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 - /json-buffer/3.0.1: + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true - /json-parse-better-errors/1.0.2: + /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-stringify-nice/1.1.4: + /json-stringify-nice@1.1.4: resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} dev: true - /json-stringify-safe/5.0.1: + /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /jsonfile/4.0.0: + /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.10 - /jsonfile/6.1.0: + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.10 - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /just-diff-apply/5.5.0: + /just-diff-apply@5.5.0: resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} dev: true - /just-diff/5.2.0: + /just-diff@5.2.0: resolution: {integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==} dev: true - /keyv/4.5.2: + /keyv@4.5.2: resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} dependencies: json-buffer: 3.0.1 dev: true - /lines-and-columns/1.2.4: + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /load-yaml-file/0.2.0: + /load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} dependencies: @@ -2311,24 +2343,24 @@ packages: strip-bom: 3.0.0 dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path/6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols/4.1.0: + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: @@ -2336,31 +2368,31 @@ packages: is-unicode-supported: 0.1.0 dev: true - /lowercase-keys/2.0.0: + /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} dev: true - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - /lru-cache/7.14.1: + /lru-cache@7.14.1: resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==} engines: {node: '>=12'} dev: true - /lru-cache/9.1.1: + /lru-cache@9.1.1: resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} engines: {node: 14 || >=16.14} dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - /make-fetch-happen/10.2.1: + /make-fetch-happen@10.2.1: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -2385,7 +2417,7 @@ packages: - supports-color dev: true - /make-fetch-happen/9.1.0: + /make-fetch-happen@9.1.0: resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} engines: {node: '>= 10'} dependencies: @@ -2410,28 +2442,7 @@ packages: - supports-color dev: true - /mem-fs-editor/9.6.0: - resolution: {integrity: sha512-CsuAd+s0UPZnGzm3kQ5X7gGmVmwiX9XXRAmXj9Mbq0CJa8YWUkPqneelp0aG2g+7uiwCBHlJbl30FYtToLT3VQ==} - engines: {node: '>=12.10.0'} - peerDependencies: - mem-fs: ^2.1.0 - peerDependenciesMeta: - mem-fs: - optional: true - dependencies: - binaryextensions: 4.18.0 - commondir: 1.0.1 - deep-extend: 0.6.0 - ejs: 3.1.8 - globby: 11.1.0 - isbinaryfile: 4.0.10 - minimatch: 3.1.2 - multimatch: 5.0.0 - normalize-path: 3.0.0 - textextensions: 5.15.0 - dev: true - - /mem-fs-editor/9.6.0_mem-fs@2.2.1: + /mem-fs-editor@9.6.0(mem-fs@2.2.1): resolution: {integrity: sha512-CsuAd+s0UPZnGzm3kQ5X7gGmVmwiX9XXRAmXj9Mbq0CJa8YWUkPqneelp0aG2g+7uiwCBHlJbl30FYtToLT3VQ==} engines: {node: '>=12.10.0'} peerDependencies: @@ -2453,7 +2464,7 @@ packages: textextensions: 5.15.0 dev: true - /mem-fs/2.2.1: + /mem-fs@2.2.1: resolution: {integrity: sha512-yiAivd4xFOH/WXlUi6v/nKopBh1QLzwjFi36NK88cGt/PRXI8WeBASqY+YSjIVWvQTx3hR8zHKDBMV6hWmglNA==} engines: {node: '>=12'} dependencies: @@ -2463,66 +2474,66 @@ packages: vinyl-file: 3.0.0 dev: true - /merge-stream/2.0.0: + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: true - /mimic-response/1.0.1: + /mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} dev: true - /mimic-response/3.1.0: + /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - /minimatch/5.1.0: + /minimatch@5.1.0: resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - /minimatch/9.0.0: + /minimatch@9.0.0: resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist/1.2.7: + /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true - /minipass-collect/1.0.2: + /minipass-collect@1.0.2: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true - /minipass-fetch/1.4.1: + /minipass-fetch@1.4.1: resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} engines: {node: '>=8'} dependencies: @@ -2533,7 +2544,7 @@ packages: encoding: 0.1.13 dev: true - /minipass-fetch/2.1.2: + /minipass-fetch@2.1.2: resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -2544,52 +2555,52 @@ packages: encoding: 0.1.13 dev: true - /minipass-flush/1.0.5: + /minipass-flush@1.0.5: resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true - /minipass-json-stream/1.0.1: + /minipass-json-stream@1.0.1: resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} dependencies: jsonparse: 1.3.1 minipass: 3.3.6 dev: true - /minipass-pipeline/1.2.4: + /minipass-pipeline@1.2.4: resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} dependencies: minipass: 3.3.6 dev: true - /minipass-sized/1.0.3: + /minipass-sized@1.0.3: resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} engines: {node: '>=8'} dependencies: minipass: 3.3.6 dev: true - /minipass/3.3.6: + /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 dev: true - /minipass/4.0.3: + /minipass@4.0.3: resolution: {integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==} engines: {node: '>=8'} dev: true - /minipass/6.0.2: + /minipass@6.0.2: resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} engines: {node: '>=16 || 14 >=14.17'} dev: true - /minizlib/2.1.2: + /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} dependencies: @@ -2597,7 +2608,7 @@ packages: yallist: 4.0.0 dev: true - /mkdirp-infer-owner/2.0.0: + /mkdirp-infer-owner@2.0.0: resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} engines: {node: '>=10'} dependencies: @@ -2606,20 +2617,20 @@ packages: mkdirp: 1.0.4 dev: true - /mkdirp/1.0.4: + /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true dev: true - /mock-stdin/1.0.0: + /mock-stdin@1.0.0: resolution: {integrity: sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /multimatch/5.0.0: + /multimatch@5.0.0: resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} engines: {node: '>=10'} dependencies: @@ -2630,26 +2641,26 @@ packages: minimatch: 3.1.2 dev: true - /mute-stream/0.0.8: + /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true - /natural-orderby/2.0.3: + /natural-orderby@2.0.3: resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} - /negotiator/0.6.3: + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: true - /nice-try/1.0.5: + /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - /nock/13.3.1: + /nock@13.3.1: resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} engines: {node: '>= 10.13'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) json-stringify-safe: 5.0.1 lodash: 4.17.21 propagate: 2.0.1 @@ -2657,7 +2668,7 @@ packages: - supports-color dev: true - /node-fetch/2.6.9: + /node-fetch@2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -2669,7 +2680,7 @@ packages: whatwg-url: 5.0.0 dev: true - /node-gyp/8.4.1: + /node-gyp@8.4.1: resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} engines: {node: '>= 10.12.0'} hasBin: true @@ -2689,7 +2700,7 @@ packages: - supports-color dev: true - /nopt/5.0.0: + /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} hasBin: true @@ -2697,7 +2708,7 @@ packages: abbrev: 1.1.1 dev: true - /normalize-package-data/2.5.0: + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -2706,7 +2717,7 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data/3.0.3: + /normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: @@ -2716,39 +2727,39 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /normalize-url/6.1.0: + /normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} dev: true - /npm-bundled/1.1.2: + /npm-bundled@1.1.2: resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} dependencies: npm-normalize-package-bin: 1.0.1 dev: true - /npm-install-checks/4.0.0: + /npm-install-checks@4.0.0: resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} engines: {node: '>=10'} dependencies: semver: 7.5.1 dev: true - /npm-normalize-package-bin/1.0.1: + /npm-normalize-package-bin@1.0.1: resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} dev: true - /npm-normalize-package-bin/2.0.0: + /npm-normalize-package-bin@2.0.0: resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true - /npm-package-arg/8.1.5: + /npm-package-arg@8.1.5: resolution: {integrity: sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==} engines: {node: '>=10'} dependencies: @@ -2757,7 +2768,7 @@ packages: validate-npm-package-name: 3.0.0 dev: true - /npm-packlist/3.0.0: + /npm-packlist@3.0.0: resolution: {integrity: sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==} engines: {node: '>=10'} hasBin: true @@ -2768,7 +2779,7 @@ packages: npm-normalize-package-bin: 1.0.1 dev: true - /npm-pick-manifest/6.1.1: + /npm-pick-manifest@6.1.1: resolution: {integrity: sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==} dependencies: npm-install-checks: 4.0.0 @@ -2777,7 +2788,7 @@ packages: semver: 7.5.1 dev: true - /npm-registry-fetch/12.0.2: + /npm-registry-fetch@12.0.2: resolution: {integrity: sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} dependencies: @@ -2792,14 +2803,14 @@ packages: - supports-color dev: true - /npm-run-path/4.0.1: + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /npmlog/5.0.1: + /npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} dependencies: are-we-there-yet: 2.0.0 @@ -2808,7 +2819,7 @@ packages: set-blocking: 2.0.0 dev: true - /npmlog/6.0.2: + /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -2818,32 +2829,32 @@ packages: set-blocking: 2.0.0 dev: true - /number-is-nan/1.0.1: + /number-is-nan@1.0.1: resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} engines: {node: '>=0.10.0'} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-treeify/1.1.33: + /object-treeify@1.1.33: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} - /oclif/3.4.6_sz2hep2ld4tbz4lvm5u3llauiu: + /oclif@3.4.6(@types/node@18.16.16)(mem-fs-editor@9.6.0)(mem-fs@2.2.1)(typescript@5.1.3): resolution: {integrity: sha512-YyGMDil2JpfC9OcB76Gtcd5LqwwOeAgb8S7mVHf/6Qecjqor8QbbvcSwZvB1e1TqjlD1JUhDPqBiFeVe/WOdWg==} engines: {node: '>=12.0.0'} hasBin: true dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-help': 5.2.4_sz2hep2ld4tbz4lvm5u3llauiu - '@oclif/plugin-not-found': 2.3.18_sz2hep2ld4tbz4lvm5u3llauiu - '@oclif/plugin-warn-if-update-available': 2.0.37_sz2hep2ld4tbz4lvm5u3llauiu + '@oclif/plugin-help': 5.2.4(@types/node@18.16.16)(typescript@5.1.3) + '@oclif/plugin-not-found': 2.3.18(@types/node@18.16.16)(typescript@5.1.3) + '@oclif/plugin-warn-if-update-available': 2.0.37(@types/node@18.16.16)(typescript@5.1.3) aws-sdk: 2.1311.0 concurrently: 7.6.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) find-yarn-workspace-root: 2.0.0 fs-extra: 8.1.0 github-slugger: 1.5.0 @@ -2852,8 +2863,8 @@ packages: normalize-package-data: 3.0.3 semver: 7.5.1 tslib: 2.5.2 - yeoman-environment: 3.15.1 - yeoman-generator: 5.8.0_yeoman-environment@3.15.1 + yeoman-environment: 3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1) + yeoman-generator: 5.8.0(mem-fs@2.2.1)(yeoman-environment@3.15.1) yosay: 2.0.2 transitivePeerDependencies: - '@swc/core' @@ -2862,24 +2873,25 @@ packages: - bluebird - encoding - mem-fs + - mem-fs-editor - supports-color - typescript dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 dev: true - /ora/5.4.1: + /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} dependencies: @@ -2894,57 +2906,57 @@ packages: wcwidth: 1.0.1 dev: true - /os-tmpdir/1.0.2: + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} dev: true - /p-cancelable/2.1.1: + /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} dev: true - /p-finally/1.0.0: + /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map/4.0.0: + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true - /p-queue/6.6.2: + /p-queue@6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} dependencies: @@ -2952,29 +2964,29 @@ packages: p-timeout: 3.2.0 dev: true - /p-timeout/3.2.0: + /p-timeout@3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} dependencies: p-finally: 1.0.0 dev: true - /p-transform/1.3.0: + /p-transform@1.3.0: resolution: {integrity: sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg==} engines: {node: '>=12.10.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) p-queue: 6.6.2 transitivePeerDependencies: - supports-color dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /pacote/12.0.3: + /pacote@12.0.3: resolution: {integrity: sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} hasBin: true @@ -3003,11 +3015,11 @@ packages: - supports-color dev: true - /pad-component/0.0.1: + /pad-component@0.0.1: resolution: {integrity: sha512-8EKVBxCRSvLnsX1p2LlSFSH3c2/wuhY9/BXXWu8boL78FbVKqn2L5SpURt1x5iw6Gq8PTqJ7MdPoe5nCtX3I+g==} dev: true - /parse-conflict-json/2.0.2: + /parse-conflict-json@2.0.2: resolution: {integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -3016,14 +3028,14 @@ packages: just-diff-apply: 5.5.0 dev: true - /parse-json/4.0.0: + /parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -3033,36 +3045,36 @@ packages: lines-and-columns: 1.2.4 dev: true - /password-prompt/1.1.2: + /password-prompt@1.1.2: resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} dependencies: ansi-escapes: 3.2.0 cross-spawn: 6.0.5 - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-key/2.0.1: + /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry/1.9.2: + /path-scurry@1.9.2: resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -3070,32 +3082,32 @@ packages: minipass: 6.0.2 dev: true - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pify/2.3.0: + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pify/4.0.1: + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /preferred-pm/3.0.3: + /preferred-pm@3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} engines: {node: '>=10'} dependencies: @@ -3105,28 +3117,28 @@ packages: which-pm: 2.0.0 dev: true - /pretty-bytes/5.6.0: + /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} dev: true - /proc-log/1.0.0: + /proc-log@1.0.0: resolution: {integrity: sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==} dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /promise-all-reject-late/1.0.1: + /promise-all-reject-late@1.0.1: resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} dev: true - /promise-call-limit/1.0.1: + /promise-call-limit@1.0.1: resolution: {integrity: sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==} dev: true - /promise-inflight/1.0.1: + /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: bluebird: '*' @@ -3135,7 +3147,7 @@ packages: optional: true dev: true - /promise-retry/2.0.1: + /promise-retry@2.0.1: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} dependencies: @@ -3143,46 +3155,46 @@ packages: retry: 0.12.0 dev: true - /propagate/2.0.1: + /propagate@2.0.1: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} dev: true - /pseudomap/1.0.2: + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /quick-lru/5.1.1: + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} dev: true - /read-cmd-shim/3.0.1: + /read-cmd-shim@3.0.1: resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true - /read-package-json-fast/2.0.3: + /read-package-json-fast@2.0.3: resolution: {integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==} engines: {node: '>=10'} dependencies: @@ -3190,7 +3202,7 @@ packages: npm-normalize-package-bin: 1.0.1 dev: true - /read-pkg-up/7.0.1: + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -3199,7 +3211,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg/5.2.0: + /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -3209,7 +3221,7 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.7: + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 @@ -3221,7 +3233,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -3230,7 +3242,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readdir-scoped-modules/1.1.0: + /readdir-scoped-modules@1.1.0: resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} deprecated: This functionality has been moved to @npmcli/fs dependencies: @@ -3240,37 +3252,37 @@ packages: once: 1.4.0 dev: true - /rechoir/0.6.2: + /rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: resolve: 1.22.1 dev: true - /redeyed/2.1.1: + /redeyed@2.1.1: resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} dependencies: esprima: 4.0.1 - /remove-trailing-separator/1.1.0: + /remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: true - /replace-ext/1.0.1: + /replace-ext@1.0.1: resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} engines: {node: '>= 0.10'} dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true - /resolve-alpn/1.2.1: + /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -3279,13 +3291,13 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /responselike/2.0.1: + /responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} dependencies: lowercase-keys: 2.0.0 dev: true - /restore-cursor/3.1.0: + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: @@ -3293,23 +3305,23 @@ packages: signal-exit: 3.0.7 dev: true - /retry/0.12.0: + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rimraf/5.0.1: + /rimraf@5.0.1: resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} engines: {node: '>=14'} hasBin: true @@ -3317,84 +3329,84 @@ packages: glob: 10.2.5 dev: true - /run-async/2.4.1: + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} dev: true - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - /rxjs/7.8.0: + /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.2 dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sax/1.2.1: + /sax@1.2.1: resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} dev: true - /scoped-regex/2.1.0: + /scoped-regex@2.1.0: resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} engines: {node: '>=8'} dev: true - /semver/5.7.1: + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true - /semver/7.5.1: + /semver@7.5.1: resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 - /set-blocking/2.0.0: + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /shebang-command/1.2.0: + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex/1.0.0: + /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /shell-quote/1.8.0: + /shell-quote@1.8.0: resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} dev: true - /shelljs/0.8.5: + /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} hasBin: true @@ -3404,47 +3416,47 @@ packages: rechoir: 0.6.2 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /signal-exit/4.0.2: + /signal-exit@4.0.2: resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} engines: {node: '>=14'} dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /smart-buffer/4.2.0: + /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true - /socks-proxy-agent/6.2.1: + /socks-proxy-agent@6.2.1: resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color dev: true - /socks-proxy-agent/7.0.0: + /socks-proxy-agent@7.0.0: resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color dev: true - /socks/2.7.1: + /socks@2.7.1: resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} dependencies: @@ -3452,79 +3464,79 @@ packages: smart-buffer: 4.2.0 dev: true - /sort-keys/4.2.0: + /sort-keys@4.2.0: resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} engines: {node: '>=8'} dependencies: is-plain-obj: 2.1.0 dev: true - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: false - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: false - /spawn-command/0.0.2-1: + /spawn-command@0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} dev: true - /spdx-correct/3.1.1: + /spdx-correct@3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.12 dev: true - /spdx-exceptions/2.3.0: + /spdx-exceptions@2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true - /spdx-expression-parse/3.0.1: + /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.12 dev: true - /spdx-license-ids/3.0.12: + /spdx-license-ids@3.0.12: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - /ssri/8.0.1: + /ssri@8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true - /ssri/9.0.1: + /ssri@9.0.1: resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: minipass: 3.3.6 dev: true - /stdout-stderr/0.1.13: + /stdout-stderr@0.1.13: resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} engines: {node: '>=8.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) strip-ansi: 6.0.1 transitivePeerDependencies: - supports-color dev: true - /string-width/1.0.2: + /string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} dependencies: @@ -3533,7 +3545,7 @@ packages: strip-ansi: 3.0.1 dev: true - /string-width/2.1.1: + /string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} engines: {node: '>=4'} dependencies: @@ -3541,7 +3553,7 @@ packages: strip-ansi: 4.0.0 dev: true - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -3549,7 +3561,7 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width/5.1.2: + /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: @@ -3558,53 +3570,53 @@ packages: strip-ansi: 7.0.1 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /strip-ansi/3.0.1: + /strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /strip-ansi/4.0.0: + /strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} dependencies: ansi-regex: 3.0.1 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-ansi/7.0.1: + /strip-ansi@7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 dev: true - /strip-bom-buf/1.0.0: + /strip-bom-buf@1.0.0: resolution: {integrity: sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==} engines: {node: '>=4'} dependencies: is-utf8: 0.2.1 dev: true - /strip-bom-stream/2.0.0: + /strip-bom-stream@2.0.0: resolution: {integrity: sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==} engines: {node: '>=0.10.0'} dependencies: @@ -3612,69 +3624,69 @@ packages: strip-bom: 2.0.0 dev: true - /strip-bom/2.0.0: + /strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} dependencies: is-utf8: 0.2.1 dev: true - /strip-bom/3.0.0: + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} dependencies: is-utf8: 0.2.1 dev: true - /strip-final-newline/2.0.0: + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /supports-color/2.0.0: + /supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} dev: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - /supports-hyperlinks/2.2.0: + /supports-hyperlinks@2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 supports-color: 7.2.0 - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /taketalk/1.0.0: + /taketalk@1.0.0: resolution: {integrity: sha512-kS7E53It6HA8S1FVFBWP7HDwgTiJtkmYk7TsowGlizzVrivR1Mf9mgjXHY1k7rOfozRVMZSfwjB3bevO4QEqpg==} dependencies: get-stdin: 4.0.1 minimist: 1.2.7 dev: true - /tar/6.1.13: + /tar@6.1.13: resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} engines: {node: '>=10'} dependencies: @@ -3686,46 +3698,46 @@ packages: yallist: 4.0.0 dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /textextensions/5.15.0: + /textextensions@5.15.0: resolution: {integrity: sha512-MeqZRHLuaGamUXGuVn2ivtU3LA3mLCCIO5kUGoohTCoGmCBg/+8yPhWVX9WSl9telvVd8erftjFk9Fwb2dD6rw==} engines: {node: '>=0.8'} dev: true - /through/2.3.8: + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /tmp/0.0.33: + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /tree-kill/1.2.2: + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /treeverse/1.0.4: + /treeverse@1.0.4: resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} dev: true - /ts-node/10.9.1_sz2hep2ld4tbz4lvm5u3llauiu: + /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -3755,104 +3767,103 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tslib/2.5.2: + /tslib@2.5.2: resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} - /tslog/3.3.4: + /tslog@3.3.4: resolution: {integrity: sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==} engines: {node: '>=10'} dependencies: source-map-support: 0.5.21 dev: false - /tunnel-agent/0.6.0: + /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest/0.6.0: + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest/0.8.1: + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /typescript/5.1.3: + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true - dev: true - /unique-filename/1.1.1: + /unique-filename@1.1.1: resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} dependencies: unique-slug: 2.0.2 dev: true - /unique-filename/2.0.1: + /unique-filename@2.0.1: resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: unique-slug: 3.0.0 dev: true - /unique-slug/2.0.2: + /unique-slug@2.0.2: resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} dependencies: imurmurhash: 0.1.4 dev: true - /unique-slug/3.0.0: + /unique-slug@3.0.0: resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 dev: true - /universal-user-agent/6.0.0: + /universal-user-agent@6.0.0: resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} dev: true - /universalify/0.1.2: + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - /universalify/2.0.0: + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - /untildify/4.0.0: + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} dev: true - /url/0.10.3: + /url@0.10.3: resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util/0.12.5: + /util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} dependencies: inherits: 2.0.4 @@ -3862,28 +3873,28 @@ packages: which-typed-array: 1.1.9 dev: true - /uuid/8.0.0: + /uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - /validate-npm-package-license/3.0.4: + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 dev: true - /validate-npm-package-name/3.0.0: + /validate-npm-package-name@3.0.0: resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} dependencies: builtins: 1.0.3 dev: true - /vinyl-file/3.0.0: + /vinyl-file@3.0.0: resolution: {integrity: sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==} engines: {node: '>=4'} dependencies: @@ -3894,7 +3905,7 @@ packages: vinyl: 2.2.1 dev: true - /vinyl/2.2.1: + /vinyl@2.2.1: resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} engines: {node: '>= 0.10'} dependencies: @@ -3906,28 +3917,28 @@ packages: replace-ext: 1.0.1 dev: true - /walk-up-path/1.0.0: + /walk-up-path@1.0.0: resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==} dev: true - /wcwidth/1.0.1: + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 dev: true - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: true - /which-pm/2.0.0: + /which-pm@2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} engines: {node: '>=8.15'} dependencies: @@ -3935,7 +3946,7 @@ packages: path-exists: 4.0.0 dev: true - /which-typed-array/1.1.9: + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -3947,13 +3958,13 @@ packages: is-typed-array: 1.1.10 dev: true - /which/1.3.1: + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -3961,22 +3972,22 @@ packages: isexe: 2.0.0 dev: true - /wide-align/1.1.5: + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 4.2.3 dev: true - /widest-line/3.1.0: + /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} dependencies: string-width: 4.2.3 - /wordwrap/1.0.0: + /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - /wrap-ansi/2.1.0: + /wrap-ansi@2.1.0: resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} engines: {node: '>=0.10.0'} dependencies: @@ -3984,7 +3995,7 @@ packages: strip-ansi: 3.0.1 dev: true - /wrap-ansi/6.2.0: + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -3993,7 +4004,7 @@ packages: strip-ansi: 6.0.1 dev: false - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -4001,7 +4012,7 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi/8.1.0: + /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} dependencies: @@ -4010,11 +4021,11 @@ packages: strip-ansi: 7.0.1 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic/4.0.2: + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -4022,32 +4033,32 @@ packages: signal-exit: 3.0.7 dev: true - /xml2js/0.4.19: + /xml2js@0.4.19: resolution: {integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==} dependencies: sax: 1.2.1 xmlbuilder: 9.0.7 dev: true - /xmlbuilder/9.0.7: + /xmlbuilder@9.0.7: resolution: {integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==} engines: {node: '>=4.0'} dev: true - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yargs-parser/21.1.1: + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: true - /yargs/17.6.2: + /yargs@17.6.2: resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} engines: {node: '>=12'} dependencies: @@ -4060,10 +4071,13 @@ packages: yargs-parser: 21.1.1 dev: true - /yeoman-environment/3.15.1: + /yeoman-environment@3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1): resolution: {integrity: sha512-P4DTQxqCxNTBD7gph+P+dIckBdx0xyHmvOYgO3vsc9/Sl67KJ6QInz5Qv6tlXET3CFFJ/YxPIdl9rKb0XwTRLg==} engines: {node: '>=12.10.0'} hasBin: true + peerDependencies: + mem-fs: ^1.2.0 || ^2.0.0 + mem-fs-editor: ^8.1.2 || ^9.0.0 dependencies: '@npmcli/arborist': 4.3.1 are-we-there-yet: 2.0.0 @@ -4073,7 +4087,7 @@ packages: cli-table: 0.3.11 commander: 7.1.0 dateformat: 4.6.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) diff: 5.1.0 error: 10.4.0 escape-string-regexp: 4.0.0 @@ -4087,7 +4101,7 @@ packages: lodash: 4.17.21 log-symbols: 4.1.0 mem-fs: 2.2.1 - mem-fs-editor: 9.6.0_mem-fs@2.2.1 + mem-fs-editor: 9.6.0(mem-fs@2.2.1) minimatch: 3.1.2 npmlog: 5.0.1 p-queue: 6.6.2 @@ -4106,7 +4120,7 @@ packages: - supports-color dev: true - /yeoman-generator/5.8.0_yeoman-environment@3.15.1: + /yeoman-generator@5.8.0(mem-fs@2.2.1)(yeoman-environment@3.15.1): resolution: {integrity: sha512-dsrwFn9/c2/MOe80sa2nKfbZd/GaPTgmmehdgkFifs1VN/I7qPsW2xcBfvSkHNGK+PZly7uHyH8kaVYSFNUDhQ==} engines: {node: '>=12.10.0'} peerDependencies: @@ -4117,11 +4131,11 @@ packages: dependencies: chalk: 4.1.2 dargs: 7.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) execa: 5.1.1 github-username: 6.0.0 lodash: 4.17.21 - mem-fs-editor: 9.6.0 + mem-fs-editor: 9.6.0(mem-fs@2.2.1) minimist: 1.2.7 read-pkg-up: 7.0.1 run-async: 2.4.1 @@ -4129,23 +4143,23 @@ packages: shelljs: 0.8.5 sort-keys: 4.2.0 text-table: 0.2.0 - yeoman-environment: 3.15.1 + yeoman-environment: 3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1) transitivePeerDependencies: - encoding - mem-fs - supports-color dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - /yosay/2.0.2: + /yosay@2.0.2: resolution: {integrity: sha512-avX6nz2esp7IMXGag4gu6OyQBsMh/SEn+ZybGu3yKPlOTE6z9qJrzG/0X5vCq/e0rPFy0CUYCze0G5hL310ibA==} engines: {node: '>=4'} hasBin: true diff --git a/kipper/core/pnpm-lock.yaml b/kipper/core/pnpm-lock.yaml index 0539070c3..46594f651 100644 --- a/kipper/core/pnpm-lock.yaml +++ b/kipper/core/pnpm-lock.yaml @@ -1,57 +1,77 @@ -lockfileVersion: 5.4 - -specifiers: - '@size-limit/preset-big-lib': 8.2.4 - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - antlr4ts: ^0.5.0-alpha.4 - antlr4ts-cli: 0.5.0-alpha.4 - browserify: 17.0.0 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - size-limit: 8.2.4 - ts-node: 10.9.1 - tsify: 5.0.4 - tslib: ~2.5.0 - typescript: 5.1.3 - uuid: 9.0.0 - watchify: 4.0.0 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - antlr4ts: 0.5.0-alpha.4 - tslib: 2.5.0 + antlr4ts: + specifier: ^0.5.0-alpha.4 + version: 0.5.0-alpha.4 + tslib: + specifier: ~2.5.0 + version: 2.5.0 devDependencies: - '@size-limit/preset-big-lib': 8.2.4_size-limit@8.2.4 - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - antlr4ts-cli: 0.5.0-alpha.4 - browserify: 17.0.0 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - size-limit: 8.2.4 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu - tsify: 5.0.4_4yjx665a5l6j7n3wjjaet7t3dm - typescript: 5.1.3 - uuid: 9.0.0 - watchify: 4.0.0 + '@size-limit/preset-big-lib': + specifier: 8.2.4 + version: 8.2.4(size-limit@8.2.4) + '@types/node': + specifier: 18.16.16 + version: 18.16.16 + ansi-regex: + specifier: 6.0.1 + version: 6.0.1 + antlr4ts-cli: + specifier: 0.5.0-alpha.4 + version: 0.5.0-alpha.4 + browserify: + specifier: 17.0.0 + version: 17.0.0 + json-parse-even-better-errors: + specifier: 3.0.0 + version: 3.0.0 + minimist: + specifier: 1.2.8 + version: 1.2.8 + mkdirp: + specifier: 3.0.1 + version: 3.0.1 + prettier: + specifier: 2.8.8 + version: 2.8.8 + run-script-os: + specifier: 1.1.6 + version: 1.1.6 + size-limit: + specifier: 8.2.4 + version: 8.2.4 + ts-node: + specifier: 10.9.1 + version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + tsify: + specifier: 5.0.4 + version: 5.0.4(browserify@17.0.0)(typescript@5.1.3) + typescript: + specifier: 5.1.3 + version: 5.1.3 + uuid: + specifier: 9.0.0 + version: 9.0.0 + watchify: + specifier: 4.0.0 + version: 4.0.0 packages: - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@jridgewell/gen-mapping/0.3.2: + /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: @@ -60,42 +80,42 @@ packages: '@jridgewell/trace-mapping': 0.3.15 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array/1.1.2: + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map/0.3.2: + /@jridgewell/source-map@0.3.2: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.15 dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.15: + /@jridgewell/trace-mapping@0.3.15: resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -103,12 +123,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -116,7 +136,7 @@ packages: fastq: 1.13.0 dev: true - /@sitespeed.io/tracium/0.3.3: + /@sitespeed.io/tracium@0.3.3: resolution: {integrity: sha512-dNZafjM93Y+F+sfwTO5gTpsGXlnc/0Q+c2+62ViqP3gkMWvHEMSKkaEHgVJLcLg3i/g19GSIPziiKpgyne07Bw==} engines: {node: '>=8'} dependencies: @@ -125,7 +145,7 @@ packages: - supports-color dev: true - /@size-limit/file/8.2.4_size-limit@8.2.4: + /@size-limit/file@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-xLuF97W7m7lxrRJvqXRlxO/4t7cpXtfxOnjml/t4aRVUCMXLdyvebRr9OM4jjoK8Fmiz8jomCbETUCI3jVhLzA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: @@ -135,14 +155,14 @@ packages: size-limit: 8.2.4 dev: true - /@size-limit/preset-big-lib/8.2.4_size-limit@8.2.4: + /@size-limit/preset-big-lib@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-J4PTiJATEO/zoXF3tsSUy4KztvVuCw1g9ukRuDHYA+p1YYVViO4fDiSlnw4nBLN2lZoGdfQVOg12G7ta3+WwSA==} peerDependencies: size-limit: 8.2.4 dependencies: - '@size-limit/file': 8.2.4_size-limit@8.2.4 - '@size-limit/time': 8.2.4_size-limit@8.2.4 - '@size-limit/webpack': 8.2.4_size-limit@8.2.4 + '@size-limit/file': 8.2.4(size-limit@8.2.4) + '@size-limit/time': 8.2.4(size-limit@8.2.4) + '@size-limit/webpack': 8.2.4(size-limit@8.2.4) size-limit: 8.2.4 transitivePeerDependencies: - '@swc/core' @@ -155,7 +175,7 @@ packages: - webpack-cli dev: true - /@size-limit/time/8.2.4_size-limit@8.2.4: + /@size-limit/time@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-tQ5EFlN/AY8RLIJxURVfiwJpO4Q9UihtfE6c14fXL9Jy/wl2hZEhkFrUhRayNDvnZW8HWNko1Hmt7dLsY3iF8A==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: @@ -171,7 +191,7 @@ packages: - utf-8-validate dev: true - /@size-limit/webpack/8.2.4_size-limit@8.2.4: + /@size-limit/webpack@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-L6TSQpX89cSeWQ1BL31BsaYucao0MGNW1xySHVO7jlgmOwnHC7j5zq91QRN9G6eMG84W+F3uRV4AiyCdZxKz9g==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: @@ -187,49 +207,49 @@ packages: - webpack-cli dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/eslint-scope/3.7.4: + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.4.5 '@types/estree': 0.0.51 dev: true - /@types/eslint/8.4.5: + /@types/eslint@8.4.5: resolution: {integrity: sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==} dependencies: '@types/estree': 0.0.51 '@types/json-schema': 7.0.11 dev: true - /@types/estree/0.0.51: + /@types/estree@0.0.51: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/json-schema/7.0.11: + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/node/18.16.16: + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /@types/yauzl/2.10.0: + /@types/yauzl@2.10.0: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: @@ -237,26 +257,26 @@ packages: dev: true optional: true - /@webassemblyjs/ast/1.11.1: + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 dev: true - /@webassemblyjs/floating-point-hex-parser/1.11.1: + /@webassemblyjs/floating-point-hex-parser@1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} dev: true - /@webassemblyjs/helper-api-error/1.11.1: + /@webassemblyjs/helper-api-error@1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} dev: true - /@webassemblyjs/helper-buffer/1.11.1: + /@webassemblyjs/helper-buffer@1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} dev: true - /@webassemblyjs/helper-numbers/1.11.1: + /@webassemblyjs/helper-numbers@1.11.1: resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 @@ -264,11 +284,11 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode/1.11.1: + /@webassemblyjs/helper-wasm-bytecode@1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} dev: true - /@webassemblyjs/helper-wasm-section/1.11.1: + /@webassemblyjs/helper-wasm-section@1.11.1: resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -277,23 +297,23 @@ packages: '@webassemblyjs/wasm-gen': 1.11.1 dev: true - /@webassemblyjs/ieee754/1.11.1: + /@webassemblyjs/ieee754@1.11.1: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128/1.11.1: + /@webassemblyjs/leb128@1.11.1: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8/1.11.1: + /@webassemblyjs/utf8@1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} dev: true - /@webassemblyjs/wasm-edit/1.11.1: + /@webassemblyjs/wasm-edit@1.11.1: resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -306,7 +326,7 @@ packages: '@webassemblyjs/wast-printer': 1.11.1 dev: true - /@webassemblyjs/wasm-gen/1.11.1: + /@webassemblyjs/wasm-gen@1.11.1: resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -316,7 +336,7 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wasm-opt/1.11.1: + /@webassemblyjs/wasm-opt@1.11.1: resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -325,7 +345,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 dev: true - /@webassemblyjs/wasm-parser/1.11.1: + /@webassemblyjs/wasm-parser@1.11.1: resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -336,22 +356,22 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wast-printer/1.11.1: + /@webassemblyjs/wast-printer@1.11.1: resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 dev: true - /@xtuc/ieee754/1.2.0: + /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true - /@xtuc/long/4.2.2: + /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -359,7 +379,7 @@ packages: through: 2.3.8 dev: true - /acorn-import-assertions/1.8.0_acorn@8.8.0: + /acorn-import-assertions@1.8.0(acorn@8.8.0): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 @@ -367,7 +387,7 @@ packages: acorn: 8.8.0 dev: true - /acorn-node/1.8.2: + /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 @@ -375,29 +395,29 @@ packages: xtend: 4.0.2 dev: true - /acorn-walk/7.2.0: + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.0: + /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: @@ -406,7 +426,7 @@ packages: - supports-color dev: true - /ajv-keywords/3.5.2_ajv@6.12.6: + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 @@ -414,7 +434,7 @@ packages: ajv: 6.12.6 dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -423,25 +443,25 @@ packages: uri-js: 4.4.1 dev: true - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /antlr4ts-cli/0.5.0-alpha.4: + /antlr4ts-cli@0.5.0-alpha.4: resolution: {integrity: sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==} hasBin: true dev: true - /antlr4ts/0.5.0-alpha.4: + /antlr4ts@0.5.0-alpha.4: resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} dev: false - /any-promise/1.3.0: + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch/3.1.2: + /anymatch@3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: @@ -449,16 +469,16 @@ packages: picomatch: 2.3.1 dev: true - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /asn1.js/5.4.1: + /asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 @@ -467,32 +487,32 @@ packages: safer-buffer: 2.1.2 dev: true - /assert/1.5.0: + /assert@1.5.0: resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} dependencies: object-assign: 4.1.1 util: 0.10.3 dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /bl/4.1.0: + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 @@ -500,33 +520,33 @@ packages: readable-stream: 3.6.0 dev: true - /bn.js/4.12.0: + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true - /bn.js/5.2.1: + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /brorand/1.1.0: + /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true - /browser-pack/6.1.0: + /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: @@ -538,13 +558,13 @@ packages: umd: 3.0.3 dev: true - /browser-resolve/2.0.0: + /browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: resolve: 1.22.1 dev: true - /browserify-aes/1.2.0: + /browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 @@ -555,7 +575,7 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-cipher/1.0.1: + /browserify-cipher@1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 @@ -563,7 +583,7 @@ packages: evp_bytestokey: 1.0.3 dev: true - /browserify-des/1.0.2: + /browserify-des@1.0.2: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 @@ -572,14 +592,14 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-rsa/4.1.0: + /browserify-rsa@4.1.0: resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 dev: true - /browserify-sign/4.2.1: + /browserify-sign@4.2.1: resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} dependencies: bn.js: 5.2.1 @@ -593,13 +613,13 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-zlib/0.2.0: + /browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 dev: true - /browserify/17.0.0: + /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} hasBin: true @@ -654,7 +674,7 @@ packages: xtend: 4.0.2 dev: true - /browserslist/4.21.3: + /browserslist@4.21.3: resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -662,60 +682,60 @@ packages: caniuse-lite: 1.0.30001377 electron-to-chromium: 1.4.221 node-releases: 2.0.6 - update-browserslist-db: 1.0.5_browserslist@4.21.3 + update-browserslist-db: 1.0.5(browserslist@4.21.3) dev: true - /buffer-crc32/0.2.13: + /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-xor/1.0.3: + /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true - /buffer/5.2.1: + /buffer@5.2.1: resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /buffer/5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /builtin-status-codes/3.0.0: + /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true - /bytes-iec/3.1.1: + /bytes-iec@3.1.1: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} dev: true - /cached-path-relative/1.1.0: + /cached-path-relative@1.1.0: resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.2 dev: true - /caniuse-lite/1.0.30001377: + /caniuse-lite@1.0.30001377: resolution: {integrity: sha512-I5XeHI1x/mRSGl96LFOaSk528LA/yZG3m3iQgImGujjO8gotd/DL8QaI1R1h1dg5ATeI2jqPblMpKq4Tr5iKfQ==} dev: true - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -730,23 +750,23 @@ packages: fsevents: 2.3.2 dev: true - /chownr/1.1.4: + /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true - /chrome-trace-event/1.0.3: + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /cipher-base/1.0.4: + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 dev: true - /combine-source-map/0.8.0: + /combine-source-map@0.8.0: resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} dependencies: convert-source-map: 1.1.3 @@ -755,20 +775,20 @@ packages: source-map: 0.5.7 dev: true - /commander/2.20.3: + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander/9.4.0: + /commander@9.4.0: resolution: {integrity: sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==} engines: {node: ^12.20.0 || >=14} dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream/1.6.2: + /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: @@ -778,36 +798,36 @@ packages: typedarray: 0.0.6 dev: true - /console-browserify/1.2.0: + /console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true - /constants-browserify/1.0.0: + /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true - /convert-source-map/1.1.3: + /convert-source-map@1.1.3: resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} dev: true - /convert-source-map/1.8.0: + /convert-source-map@1.8.0: resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} dependencies: safe-buffer: 5.1.2 dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /create-ecdh/4.0.4: + /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 elliptic: 6.5.4 dev: true - /create-hash/1.2.0: + /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 @@ -817,7 +837,7 @@ packages: sha.js: 2.4.11 dev: true - /create-hmac/1.1.7: + /create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 @@ -828,11 +848,11 @@ packages: sha.js: 2.4.11 dev: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-fetch/3.1.5: + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 @@ -840,7 +860,7 @@ packages: - encoding dev: true - /crypto-browserify/3.12.0: + /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 @@ -856,11 +876,11 @@ packages: randomfill: 1.0.4 dev: true - /dash-ast/1.0.0: + /dash-ast@1.0.0: resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} dev: true - /debug/4.3.4: + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -872,7 +892,7 @@ packages: ms: 2.1.2 dev: true - /define-properties/1.1.4: + /define-properties@1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} dependencies: @@ -880,11 +900,11 @@ packages: object-keys: 1.1.1 dev: true - /defined/1.0.0: + /defined@1.0.0: resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} dev: true - /deps-sort/2.0.1: + /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} hasBin: true dependencies: @@ -894,14 +914,14 @@ packages: through2: 2.0.5 dev: true - /des.js/1.0.1: + /des.js@1.0.1: resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /detective/5.2.1: + /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true @@ -911,16 +931,16 @@ packages: minimist: 1.2.8 dev: true - /devtools-protocol/0.0.981744: + /devtools-protocol@0.0.981744: resolution: {integrity: sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==} dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /diffie-hellman/5.0.3: + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.0 @@ -928,29 +948,29 @@ packages: randombytes: 2.1.0 dev: true - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /domain-browser/1.2.0: + /domain-browser@1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.7 dev: true - /electron-to-chromium/1.4.221: + /electron-to-chromium@1.4.221: resolution: {integrity: sha512-aWg2mYhpxZ6Q6Xvyk7B2ziBca4YqrCDlXzmcD7wuRs65pVEVkMT1u2ifdjpAQais2O2o0rW964ZWWWYRlAL/kw==} dev: true - /elliptic/6.5.4: + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 @@ -962,13 +982,13 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /enhanced-resolve/5.10.0: + /enhanced-resolve@5.10.0: resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} engines: {node: '>=10.13.0'} dependencies: @@ -976,13 +996,13 @@ packages: tapable: 2.2.1 dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract/1.20.1: + /es-abstract@1.20.1: resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} engines: {node: '>= 0.4'} dependencies: @@ -1011,11 +1031,11 @@ packages: unbox-primitive: 1.0.2 dev: true - /es-module-lexer/0.9.3: + /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -1024,12 +1044,12 @@ packages: is-symbol: 1.0.4 dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -1037,14 +1057,14 @@ packages: estraverse: 4.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estimo/2.3.6: + /estimo@2.3.6: resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} engines: {node: '>=12'} hasBin: true @@ -1061,29 +1081,29 @@ packages: - utf-8-validate dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /evp_bytestokey/1.0.3: + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 dev: true - /extract-zip/2.0.1: + /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} hasBin: true @@ -1097,11 +1117,11 @@ packages: - supports-color dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob/3.2.11: + /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} engines: {node: '>=8.6.0'} dependencies: @@ -1112,39 +1132,39 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq/1.13.0: + /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 dev: true - /fd-slicer/1.1.0: + /fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /find-chrome-bin/0.1.0: + /find-chrome-bin@0.1.0: resolution: {integrity: sha512-XoFZwaEn1R3pE6zNG8kH64l2e093hgB9+78eEKPmJK0o1EXEou+25cEWdtu2qq4DBQPDSe90VJAWVI2Sz9pX6Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -1152,21 +1172,21 @@ packages: path-exists: 4.0.0 dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.4 dev: true - /fs-constants/1.0.0: + /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -1174,11 +1194,11 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -1188,15 +1208,15 @@ packages: functions-have-names: 1.2.3 dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /get-assigned-identifiers/1.2.0: + /get-assigned-identifiers@1.2.0: resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} dev: true - /get-intrinsic/1.1.2: + /get-intrinsic@1.1.2: resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} dependencies: function-bind: 1.1.1 @@ -1204,14 +1224,14 @@ packages: has-symbols: 1.0.3 dev: true - /get-stream/5.2.0: + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 dev: true - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -1219,18 +1239,18 @@ packages: get-intrinsic: 1.1.2 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob-to-regexp/0.4.1: + /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -1241,7 +1261,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -1253,45 +1273,45 @@ packages: slash: 3.0.0 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.1.2 dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /hash-base/3.1.0: + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} dependencies: @@ -1300,14 +1320,14 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js/1.1.7: + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hmac-drbg/1.0.1: + /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 @@ -1315,16 +1335,16 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /htmlescape/1.1.1: + /htmlescape@1.1.1: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} engines: {node: '>=0.10'} dev: true - /https-browserify/1.0.0: + /https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: @@ -1334,37 +1354,37 @@ packages: - supports-color dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore/5.2.0: + /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.1: + /inherits@2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-source-map/0.6.2: + /inline-source-map@0.6.2: resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} dependencies: source-map: 0.5.7 dev: true - /insert-module-globals/7.2.1: + /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: @@ -1380,7 +1400,7 @@ packages: xtend: 4.0.2 dev: true - /internal-slot/1.0.3: + /internal-slot@1.0.3: resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} engines: {node: '>= 0.4'} dependencies: @@ -1389,7 +1409,7 @@ packages: side-channel: 1.0.4 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -1397,24 +1417,24 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -1422,65 +1442,65 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-callable/1.2.4: + /is-callable@1.2.4: resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.10.0: + /is-core-module@2.10.0: resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -1488,27 +1508,27 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.9: + /is-typed-array@1.1.9: resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} engines: {node: '>= 0.4'} dependencies: @@ -1519,21 +1539,21 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-utf8/0.2.1: + /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /jest-worker/27.5.1: + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: @@ -1542,75 +1562,75 @@ packages: supports-color: 8.1.1 dev: true - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-parse-even-better-errors/3.0.0: + /json-parse-even-better-errors@3.0.0: resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /labeled-stream-splicer/2.0.2: + /labeled-stream-splicer@2.0.2: resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} dependencies: inherits: 2.0.4 stream-splicer: 2.0.1 dev: true - /lilconfig/2.0.6: + /lilconfig@2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} dev: true - /loader-runner/4.3.0: + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /lodash.memoize/3.0.4: + /lodash.memoize@3.0.4: resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} dev: true - /loose-envify/1.4.0: + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 dev: true - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /md5.js/1.3.5: + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 @@ -1618,16 +1638,16 @@ packages: safe-buffer: 5.2.1 dev: true - /merge-stream/2.0.0: + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -1635,7 +1655,7 @@ packages: picomatch: 2.3.1 dev: true - /miller-rabin/4.0.1: + /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true dependencies: @@ -1643,47 +1663,47 @@ packages: brorand: 1.1.0 dev: true - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimalistic-crypto-utils/1.0.1: + /minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mkdirp-classic/0.5.3: + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true - /mkdirp/3.0.1: + /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true dev: true - /module-deps/6.2.3: + /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} hasBin: true @@ -1705,27 +1725,27 @@ packages: xtend: 4.0.2 dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /nanoid/3.3.4: + /nanoid@3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /nanospinner/1.1.0: + /nanospinner@1.1.0: resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} dependencies: picocolors: 1.0.0 dev: true - /neo-async/2.6.2: + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /node-fetch/2.6.7: + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -1737,30 +1757,30 @@ packages: whatwg-url: 5.0.0 dev: true - /node-releases/2.0.6: + /node-releases@2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.12.2: + /object-inspect@1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -1770,52 +1790,52 @@ packages: object-keys: 1.1.1 dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /os-browserify/0.3.0: + /os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true - /outpipe/1.1.1: + /outpipe@1.1.1: resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} dependencies: shell-quote: 1.7.3 dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /pako/1.0.11: + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true - /parents/1.0.1: + /parents@1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} dependencies: path-platform: 0.11.15 dev: true - /parse-asn1/5.1.6: + /parse-asn1@5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} dependencies: asn1.js: 5.4.1 @@ -1825,42 +1845,42 @@ packages: safe-buffer: 5.2.1 dev: true - /parse-json/2.2.0: + /parse-json@2.2.0: resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} engines: {node: '>=0.10.0'} dependencies: error-ex: 1.3.2 dev: true - /path-browserify/1.0.1: + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-platform/0.11.15: + /path-platform@0.11.15: resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} engines: {node: '>= 0.8.0'} dev: true - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /pbkdf2/3.1.2: + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} dependencies: @@ -1871,51 +1891,51 @@ packages: sha.js: 2.4.11 dev: true - /pend/1.2.0: + /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /prettier/2.8.8: + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process/0.11.10: + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /progress/2.0.3: + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /proxy-from-env/1.1.0: + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true - /public-encrypt/4.0.3: + /public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.0 @@ -1926,27 +1946,27 @@ packages: safe-buffer: 5.2.1 dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/1.4.1: + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /punycode/2.1.1: + /punycode@2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} dev: true - /puppeteer-core/13.7.0: + /puppeteer-core@13.7.0: resolution: {integrity: sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==} engines: {node: '>=10.18.1'} dependencies: @@ -1969,35 +1989,35 @@ packages: - utf-8-validate dev: true - /querystring-es3/0.2.1: + /querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /randomfill/1.0.4: + /randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 dev: true - /react/17.0.2: + /react@17.0.2: resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} engines: {node: '>=0.10.0'} dependencies: @@ -2005,13 +2025,13 @@ packages: object-assign: 4.1.1 dev: true - /read-only-stream/2.0.0: + /read-only-stream@2.0.0: resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} dependencies: readable-stream: 2.3.7 dev: true - /readable-stream/2.3.7: + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 @@ -2023,7 +2043,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -2032,14 +2052,14 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -2048,7 +2068,7 @@ packages: functions-have-names: 1.2.3 dev: true - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -2057,63 +2077,63 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /ripemd160/2.0.2: + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 dev: true - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /run-script-os/1.1.6: + /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} hasBin: true dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /schema-utils/3.1.1: + /schema-utils@3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /semver/6.3.0: + /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver/7.3.8: + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} hasBin: true @@ -2121,13 +2141,13 @@ packages: lru-cache: 6.0.0 dev: true - /serialize-javascript/6.0.0: + /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: randombytes: 2.1.0 dev: true - /sha.js/2.4.11: + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: @@ -2135,17 +2155,17 @@ packages: safe-buffer: 5.2.1 dev: true - /shasum-object/1.0.0: + /shasum-object@1.0.0: resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} dependencies: fast-safe-stringify: 2.1.1 dev: true - /shell-quote/1.7.3: + /shell-quote@1.7.3: resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -2153,11 +2173,11 @@ packages: object-inspect: 1.12.2 dev: true - /simple-concat/1.0.1: + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true - /size-limit/8.2.4: + /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} hasBin: true @@ -2170,43 +2190,43 @@ packages: picocolors: 1.0.0 dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /stream-browserify/3.0.0: + /stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 readable-stream: 3.6.0 dev: true - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.7 dev: true - /stream-http/3.2.0: + /stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} dependencies: builtin-status-codes: 3.0.0 @@ -2215,14 +2235,14 @@ packages: xtend: 4.0.2 dev: true - /stream-splicer/2.0.1: + /stream-splicer@2.0.1: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.7 dev: true - /string.prototype.trimend/1.0.5: + /string.prototype.trimend@1.0.5: resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} dependencies: call-bind: 1.0.2 @@ -2230,7 +2250,7 @@ packages: es-abstract: 1.20.1 dev: true - /string.prototype.trimstart/1.0.5: + /string.prototype.trimstart@1.0.5: resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} dependencies: call-bind: 1.0.2 @@ -2238,60 +2258,60 @@ packages: es-abstract: 1.20.1 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /strip-bom/2.0.0: + /strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} dependencies: is-utf8: 0.2.1 dev: true - /strip-json-comments/2.0.1: + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /subarg/1.0.0: + /subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} dependencies: minimist: 1.2.8 dev: true - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /syntax-error/1.4.0: + /syntax-error@1.4.0: resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} dependencies: acorn-node: 1.8.2 dev: true - /tapable/2.2.1: + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /tar-fs/2.1.1: + /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} dependencies: chownr: 1.1.4 @@ -2300,7 +2320,7 @@ packages: tar-stream: 2.2.0 dev: true - /tar-stream/2.2.0: + /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} dependencies: @@ -2311,7 +2331,7 @@ packages: readable-stream: 3.6.0 dev: true - /terser-webpack-plugin/5.3.5_webpack@5.75.0: + /terser-webpack-plugin@5.3.5(webpack@5.75.0): resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -2335,7 +2355,7 @@ packages: webpack: 5.75.0 dev: true - /terser/5.14.2: + /terser@5.14.2: resolution: {integrity: sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==} engines: {node: '>=10'} hasBin: true @@ -2346,42 +2366,42 @@ packages: source-map-support: 0.5.21 dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true - /timers-browserify/1.4.2: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /timers-browserify@1.4.2: resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} engines: {node: '>=0.6.0'} dependencies: process: 0.11.10 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /ts-node/10.9.1_sz2hep2ld4tbz4lvm5u3llauiu: + /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -2412,7 +2432,7 @@ packages: yn: 3.1.1 dev: true - /tsconfig/5.0.3: + /tsconfig@5.0.3: resolution: {integrity: sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==} dependencies: any-promise: 1.3.0 @@ -2421,7 +2441,7 @@ packages: strip-json-comments: 2.0.1 dev: true - /tsify/5.0.4_4yjx665a5l6j7n3wjjaet7t3dm: + /tsify@5.0.4(browserify@17.0.0)(typescript@5.1.3): resolution: {integrity: sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==} engines: {node: '>=0.12'} peerDependencies: @@ -2438,30 +2458,30 @@ packages: typescript: 5.1.3 dev: true - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: false - /tty-browserify/0.0.1: + /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true - /typedarray/0.0.6: + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript/5.1.3: + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true dev: true - /umd/3.0.3: + /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} hasBin: true dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -2470,14 +2490,14 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unbzip2-stream/1.4.3: + /unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} dependencies: buffer: 5.7.1 through: 2.3.8 dev: true - /undeclared-identifiers/1.1.3: + /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} hasBin: true dependencies: @@ -2488,7 +2508,7 @@ packages: xtend: 4.0.2 dev: true - /update-browserslist-db/1.0.5_browserslist@4.21.3: + /update-browserslist-db@1.0.5(browserslist@4.21.3): resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} hasBin: true peerDependencies: @@ -2499,30 +2519,30 @@ packages: picocolors: 1.0.0 dev: true - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util/0.10.3: + /util@0.10.3: resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} dependencies: inherits: 2.0.1 dev: true - /util/0.12.4: + /util@0.12.4: resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} dependencies: inherits: 2.0.4 @@ -2533,20 +2553,20 @@ packages: which-typed-array: 1.1.8 dev: true - /uuid/9.0.0: + /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /vm-browserify/1.1.2: + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /watchify/4.0.0: + /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} hasBin: true @@ -2560,7 +2580,7 @@ packages: xtend: 4.0.2 dev: true - /watchpack/2.4.0: + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: @@ -2568,16 +2588,16 @@ packages: graceful-fs: 4.2.10 dev: true - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /webpack-sources/3.2.3: + /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack/5.75.0: + /webpack@5.75.0: resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -2593,7 +2613,7 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.0 - acorn-import-assertions: 1.8.0_acorn@8.8.0 + acorn-import-assertions: 1.8.0(acorn@8.8.0) browserslist: 4.21.3 chrome-trace-event: 1.0.3 enhanced-resolve: 5.10.0 @@ -2608,7 +2628,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.5_webpack@5.75.0 + terser-webpack-plugin: 5.3.5(webpack@5.75.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -2617,14 +2637,14 @@ packages: - uglify-js dev: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -2634,7 +2654,7 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array/1.1.8: + /which-typed-array@1.1.8: resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} engines: {node: '>= 0.4'} dependencies: @@ -2646,11 +2666,11 @@ packages: is-typed-array: 1.1.9 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws/8.5.0: + /ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -2663,23 +2683,23 @@ packages: optional: true dev: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yauzl/2.10.0: + /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true diff --git a/kipper/target-js/pnpm-lock.yaml b/kipper/target-js/pnpm-lock.yaml index 86fcb98a5..1b11ba22d 100644 --- a/kipper/target-js/pnpm-lock.yaml +++ b/kipper/target-js/pnpm-lock.yaml @@ -1,81 +1,95 @@ -lockfileVersion: 5.4 - -specifiers: - '@kipper/core': workspace:~ - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - ts-node: 10.9.1 - typescript: 5.1.3 - uuid: 9.0.0 - watchify: 4.0.0 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - '@kipper/core': link:../core + '@kipper/core': + specifier: workspace:~ + version: link:../core devDependencies: - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu - typescript: 5.1.3 - uuid: 9.0.0 - watchify: 4.0.0 + '@types/node': + specifier: 18.16.16 + version: 18.16.16 + ansi-regex: + specifier: 6.0.1 + version: 6.0.1 + json-parse-even-better-errors: + specifier: 3.0.0 + version: 3.0.0 + minimist: + specifier: 1.2.8 + version: 1.2.8 + mkdirp: + specifier: 3.0.1 + version: 3.0.1 + prettier: + specifier: 2.8.8 + version: 2.8.8 + run-script-os: + specifier: 1.1.6 + version: 1.1.6 + ts-node: + specifier: 10.9.1 + version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + typescript: + specifier: 5.1.3 + version: 5.1.3 + uuid: + specifier: 9.0.0 + version: 9.0.0 + watchify: + specifier: 4.0.0 + version: 4.0.0 packages: - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/node/18.16.16: + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -83,7 +97,7 @@ packages: through: 2.3.8 dev: true - /acorn-node/1.8.2: + /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 @@ -91,34 +105,34 @@ packages: xtend: 4.0.2 dev: true - /acorn-walk/7.2.0: + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.0: + /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /anymatch/3.1.2: + /anymatch@3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: @@ -126,11 +140,11 @@ packages: picomatch: 2.3.1 dev: true - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /asn1.js/5.4.1: + /asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 @@ -139,76 +153,76 @@ packages: safer-buffer: 2.1.2 dev: true - /assert/1.5.0: + /assert@1.5.0: resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} dependencies: object-assign: 4.1.1 util: 0.10.3 dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /bn.js/4.12.0: + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true - /bn.js/5.2.1: + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /brorand/1.1.0: + /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true - /browser-pack/6.1.0: + /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: + JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 - JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 dev: true - /browser-resolve/2.0.0: + /browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: resolve: 1.22.1 dev: true - /browserify-aes/1.2.0: + /browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 @@ -219,7 +233,7 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-cipher/1.0.1: + /browserify-cipher@1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 @@ -227,7 +241,7 @@ packages: evp_bytestokey: 1.0.3 dev: true - /browserify-des/1.0.2: + /browserify-des@1.0.2: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 @@ -236,14 +250,14 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-rsa/4.1.0: + /browserify-rsa@4.1.0: resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 dev: true - /browserify-sign/4.2.1: + /browserify-sign@4.2.1: resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} dependencies: bn.js: 5.2.1 @@ -257,17 +271,18 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-zlib/0.2.0: + /browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 dev: true - /browserify/17.0.0: + /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} hasBin: true dependencies: + JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -289,7 +304,6 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 - JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -318,37 +332,37 @@ packages: xtend: 4.0.2 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-xor/1.0.3: + /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true - /buffer/5.2.1: + /buffer@5.2.1: resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /builtin-status-codes/3.0.0: + /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true - /cached-path-relative/1.1.0: + /cached-path-relative@1.1.0: resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.2 dev: true - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -363,14 +377,14 @@ packages: fsevents: 2.3.2 dev: true - /cipher-base/1.0.4: + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 dev: true - /combine-source-map/0.8.0: + /combine-source-map@0.8.0: resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} dependencies: convert-source-map: 1.1.3 @@ -379,11 +393,11 @@ packages: source-map: 0.5.7 dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream/1.6.2: + /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: @@ -393,30 +407,30 @@ packages: typedarray: 0.0.6 dev: true - /console-browserify/1.2.0: + /console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true - /constants-browserify/1.0.0: + /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true - /convert-source-map/1.1.3: + /convert-source-map@1.1.3: resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /create-ecdh/4.0.4: + /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 elliptic: 6.5.4 dev: true - /create-hash/1.2.0: + /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 @@ -426,7 +440,7 @@ packages: sha.js: 2.4.11 dev: true - /create-hmac/1.1.7: + /create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 @@ -437,11 +451,11 @@ packages: sha.js: 2.4.11 dev: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /crypto-browserify/3.12.0: + /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 @@ -457,11 +471,11 @@ packages: randomfill: 1.0.4 dev: true - /dash-ast/1.0.0: + /dash-ast@1.0.0: resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} dev: true - /define-properties/1.1.4: + /define-properties@1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} dependencies: @@ -469,11 +483,11 @@ packages: object-keys: 1.1.1 dev: true - /defined/1.0.0: + /defined@1.0.0: resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} dev: true - /deps-sort/2.0.1: + /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} hasBin: true dependencies: @@ -483,14 +497,14 @@ packages: through2: 2.0.5 dev: true - /des.js/1.0.1: + /des.js@1.0.1: resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /detective/5.2.1: + /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true @@ -500,12 +514,12 @@ packages: minimist: 1.2.8 dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /diffie-hellman/5.0.3: + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.0 @@ -513,18 +527,18 @@ packages: randombytes: 2.1.0 dev: true - /domain-browser/1.2.0: + /domain-browser@1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.7 dev: true - /elliptic/6.5.4: + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 @@ -536,7 +550,7 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /es-abstract/1.20.1: + /es-abstract@1.20.1: resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} engines: {node: '>= 0.4'} dependencies: @@ -565,7 +579,7 @@ packages: unbox-primitive: 1.0.2 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -574,40 +588,40 @@ packages: is-symbol: 1.0.4 dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /evp_bytestokey/1.0.3: + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.4 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -615,11 +629,11 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -629,15 +643,15 @@ packages: functions-have-names: 1.2.3 dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /get-assigned-identifiers/1.2.0: + /get-assigned-identifiers@1.2.0: resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} dev: true - /get-intrinsic/1.1.2: + /get-intrinsic@1.1.2: resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} dependencies: function-bind: 1.1.1 @@ -645,7 +659,7 @@ packages: has-symbols: 1.0.3 dev: true - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -653,14 +667,14 @@ packages: get-intrinsic: 1.1.2 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -671,36 +685,36 @@ packages: path-is-absolute: 1.0.1 dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.1.2 dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /hash-base/3.1.0: + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} dependencies: @@ -709,14 +723,14 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js/1.1.7: + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hmac-drbg/1.0.1: + /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 @@ -724,49 +738,49 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /htmlescape/1.1.1: + /htmlescape@1.1.1: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} engines: {node: '>=0.10'} dev: true - /https-browserify/1.0.0: + /https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.1: + /inherits@2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-source-map/0.6.2: + /inline-source-map@0.6.2: resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} dependencies: source-map: 0.5.7 dev: true - /insert-module-globals/7.2.1: + /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: + JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 - JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -774,7 +788,7 @@ packages: xtend: 4.0.2 dev: true - /internal-slot/1.0.3: + /internal-slot@1.0.3: resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} engines: {node: '>= 0.4'} dependencies: @@ -783,7 +797,7 @@ packages: side-channel: 1.0.4 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -791,20 +805,20 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -812,65 +826,65 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-callable/1.2.4: + /is-callable@1.2.4: resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.10.0: + /is-core-module@2.10.0: resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -878,27 +892,27 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.9: + /is-typed-array@1.1.9: resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} engines: {node: '>= 0.4'} dependencies: @@ -909,42 +923,42 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /json-parse-even-better-errors/3.0.0: + /json-parse-even-better-errors@3.0.0: resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /labeled-stream-splicer/2.0.2: + /labeled-stream-splicer@2.0.2: resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} dependencies: inherits: 2.0.4 stream-splicer: 2.0.1 dev: true - /lodash.memoize/3.0.4: + /lodash.memoize@3.0.4: resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /md5.js/1.3.5: + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 @@ -952,7 +966,7 @@ packages: safe-buffer: 5.2.1 dev: true - /miller-rabin/4.0.1: + /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true dependencies: @@ -960,39 +974,40 @@ packages: brorand: 1.1.0 dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimalistic-crypto-utils/1.0.1: + /minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mkdirp-classic/0.5.3: + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true - /mkdirp/3.0.1: + /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true dev: true - /module-deps/6.2.3: + /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} hasBin: true dependencies: + JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1000,7 +1015,6 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 - JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 @@ -1010,26 +1024,26 @@ packages: xtend: 4.0.2 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.12.2: + /object-inspect@1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -1039,33 +1053,33 @@ packages: object-keys: 1.1.1 dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /os-browserify/0.3.0: + /os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true - /outpipe/1.1.1: + /outpipe@1.1.1: resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} dependencies: shell-quote: 1.7.3 dev: true - /pako/1.0.11: + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true - /parents/1.0.1: + /parents@1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} dependencies: path-platform: 0.11.15 dev: true - /parse-asn1/5.1.6: + /parse-asn1@5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} dependencies: asn1.js: 5.4.1 @@ -1075,25 +1089,25 @@ packages: safe-buffer: 5.2.1 dev: true - /path-browserify/1.0.1: + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-platform/0.11.15: + /path-platform@0.11.15: resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} engines: {node: '>= 0.8.0'} dev: true - /pbkdf2/3.1.2: + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} dependencies: @@ -1104,27 +1118,27 @@ packages: sha.js: 2.4.11 dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /prettier/2.8.8: + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process/0.11.10: + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /public-encrypt/4.0.3: + /public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.0 @@ -1135,45 +1149,45 @@ packages: safe-buffer: 5.2.1 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/1.4.1: + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /querystring-es3/0.2.1: + /querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /randomfill/1.0.4: + /randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 dev: true - /read-only-stream/2.0.0: + /read-only-stream@2.0.0: resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} dependencies: readable-stream: 2.3.7 dev: true - /readable-stream/2.3.7: + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 @@ -1185,7 +1199,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -1194,14 +1208,14 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -1210,7 +1224,7 @@ packages: functions-have-names: 1.2.3 dev: true - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -1219,31 +1233,31 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /ripemd160/2.0.2: + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 dev: true - /run-script-os/1.1.6: + /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} hasBin: true dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sha.js/2.4.11: + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: @@ -1251,17 +1265,17 @@ packages: safe-buffer: 5.2.1 dev: true - /shasum-object/1.0.0: + /shasum-object@1.0.0: resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} dependencies: fast-safe-stringify: 2.1.1 dev: true - /shell-quote/1.7.3: + /shell-quote@1.7.3: resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -1269,30 +1283,30 @@ packages: object-inspect: 1.12.2 dev: true - /simple-concat/1.0.1: + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /stream-browserify/3.0.0: + /stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 readable-stream: 3.6.0 dev: true - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.7 dev: true - /stream-http/3.2.0: + /stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} dependencies: builtin-status-codes: 3.0.0 @@ -1301,14 +1315,14 @@ packages: xtend: 4.0.2 dev: true - /stream-splicer/2.0.1: + /stream-splicer@2.0.1: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.7 dev: true - /string.prototype.trimend/1.0.5: + /string.prototype.trimend@1.0.5: resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} dependencies: call-bind: 1.0.2 @@ -1316,7 +1330,7 @@ packages: es-abstract: 1.20.1 dev: true - /string.prototype.trimstart/1.0.5: + /string.prototype.trimstart@1.0.5: resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} dependencies: call-bind: 1.0.2 @@ -1324,67 +1338,67 @@ packages: es-abstract: 1.20.1 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /subarg/1.0.0: + /subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} dependencies: minimist: 1.2.8 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /syntax-error/1.4.0: + /syntax-error@1.4.0: resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} dependencies: acorn-node: 1.8.2 dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true - /timers-browserify/1.4.2: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /timers-browserify@1.4.2: resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} engines: {node: '>=0.6.0'} dependencies: process: 0.11.10 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /ts-node/10.9.1_sz2hep2ld4tbz4lvm5u3llauiu: + /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -1415,26 +1429,26 @@ packages: yn: 3.1.1 dev: true - /tty-browserify/0.0.1: + /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true - /typedarray/0.0.6: + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript/5.1.3: + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true dev: true - /umd/3.0.3: + /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} hasBin: true dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -1443,7 +1457,7 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undeclared-identifiers/1.1.3: + /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} hasBin: true dependencies: @@ -1454,24 +1468,24 @@ packages: xtend: 4.0.2 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util/0.10.3: + /util@0.10.3: resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} dependencies: inherits: 2.0.1 dev: true - /util/0.12.4: + /util@0.12.4: resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} dependencies: inherits: 2.0.4 @@ -1482,20 +1496,20 @@ packages: which-typed-array: 1.1.8 dev: true - /uuid/9.0.0: + /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /vm-browserify/1.1.2: + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /watchify/4.0.0: + /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} hasBin: true @@ -1509,7 +1523,7 @@ packages: xtend: 4.0.2 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -1519,7 +1533,7 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array/1.1.8: + /which-typed-array@1.1.8: resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} engines: {node: '>= 0.4'} dependencies: @@ -1531,16 +1545,16 @@ packages: is-typed-array: 1.1.9 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true diff --git a/kipper/target-ts/pnpm-lock.yaml b/kipper/target-ts/pnpm-lock.yaml index fcec503c5..fda430c16 100644 --- a/kipper/target-ts/pnpm-lock.yaml +++ b/kipper/target-ts/pnpm-lock.yaml @@ -1,83 +1,98 @@ -lockfileVersion: 5.4 - -specifiers: - '@kipper/core': workspace:~ - '@kipper/target-js': workspace:~ - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - ts-node: 10.9.1 - typescript: 5.1.3 - uuid: 9.0.0 - watchify: 4.0.0 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - '@kipper/core': link:../core - '@kipper/target-js': link:../target-js + '@kipper/core': + specifier: workspace:~ + version: link:../core + '@kipper/target-js': + specifier: workspace:~ + version: link:../target-js devDependencies: - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu - typescript: 5.1.3 - uuid: 9.0.0 - watchify: 4.0.0 + '@types/node': + specifier: 18.16.16 + version: 18.16.16 + ansi-regex: + specifier: 6.0.1 + version: 6.0.1 + json-parse-even-better-errors: + specifier: 3.0.0 + version: 3.0.0 + minimist: + specifier: 1.2.8 + version: 1.2.8 + mkdirp: + specifier: 3.0.1 + version: 3.0.1 + prettier: + specifier: 2.8.8 + version: 2.8.8 + run-script-os: + specifier: 1.1.6 + version: 1.1.6 + ts-node: + specifier: 10.9.1 + version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + typescript: + specifier: 5.1.3 + version: 5.1.3 + uuid: + specifier: 9.0.0 + version: 9.0.0 + watchify: + specifier: 4.0.0 + version: 4.0.0 packages: - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/node/18.16.16: + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -85,7 +100,7 @@ packages: through: 2.3.8 dev: true - /acorn-node/1.8.2: + /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 @@ -93,34 +108,34 @@ packages: xtend: 4.0.2 dev: true - /acorn-walk/7.2.0: + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.0: + /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /anymatch/3.1.2: + /anymatch@3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: @@ -128,11 +143,11 @@ packages: picomatch: 2.3.1 dev: true - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /asn1.js/5.4.1: + /asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 @@ -141,76 +156,76 @@ packages: safer-buffer: 2.1.2 dev: true - /assert/1.5.0: + /assert@1.5.0: resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} dependencies: object-assign: 4.1.1 util: 0.10.3 dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /bn.js/4.12.0: + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true - /bn.js/5.2.1: + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /brorand/1.1.0: + /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true - /browser-pack/6.1.0: + /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: + JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 - JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 dev: true - /browser-resolve/2.0.0: + /browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: resolve: 1.22.1 dev: true - /browserify-aes/1.2.0: + /browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 @@ -221,7 +236,7 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-cipher/1.0.1: + /browserify-cipher@1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 @@ -229,7 +244,7 @@ packages: evp_bytestokey: 1.0.3 dev: true - /browserify-des/1.0.2: + /browserify-des@1.0.2: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 @@ -238,14 +253,14 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-rsa/4.1.0: + /browserify-rsa@4.1.0: resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 dev: true - /browserify-sign/4.2.1: + /browserify-sign@4.2.1: resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} dependencies: bn.js: 5.2.1 @@ -259,17 +274,18 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-zlib/0.2.0: + /browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 dev: true - /browserify/17.0.0: + /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} hasBin: true dependencies: + JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -291,7 +307,6 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 - JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -320,37 +335,37 @@ packages: xtend: 4.0.2 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-xor/1.0.3: + /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true - /buffer/5.2.1: + /buffer@5.2.1: resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /builtin-status-codes/3.0.0: + /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true - /cached-path-relative/1.1.0: + /cached-path-relative@1.1.0: resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.2 dev: true - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -365,14 +380,14 @@ packages: fsevents: 2.3.2 dev: true - /cipher-base/1.0.4: + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 dev: true - /combine-source-map/0.8.0: + /combine-source-map@0.8.0: resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} dependencies: convert-source-map: 1.1.3 @@ -381,11 +396,11 @@ packages: source-map: 0.5.7 dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream/1.6.2: + /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: @@ -395,30 +410,30 @@ packages: typedarray: 0.0.6 dev: true - /console-browserify/1.2.0: + /console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true - /constants-browserify/1.0.0: + /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true - /convert-source-map/1.1.3: + /convert-source-map@1.1.3: resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /create-ecdh/4.0.4: + /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 elliptic: 6.5.4 dev: true - /create-hash/1.2.0: + /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 @@ -428,7 +443,7 @@ packages: sha.js: 2.4.11 dev: true - /create-hmac/1.1.7: + /create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 @@ -439,11 +454,11 @@ packages: sha.js: 2.4.11 dev: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /crypto-browserify/3.12.0: + /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 @@ -459,11 +474,11 @@ packages: randomfill: 1.0.4 dev: true - /dash-ast/1.0.0: + /dash-ast@1.0.0: resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} dev: true - /define-properties/1.1.4: + /define-properties@1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} dependencies: @@ -471,11 +486,11 @@ packages: object-keys: 1.1.1 dev: true - /defined/1.0.0: + /defined@1.0.0: resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} dev: true - /deps-sort/2.0.1: + /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} hasBin: true dependencies: @@ -485,14 +500,14 @@ packages: through2: 2.0.5 dev: true - /des.js/1.0.1: + /des.js@1.0.1: resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /detective/5.2.1: + /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true @@ -502,12 +517,12 @@ packages: minimist: 1.2.8 dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /diffie-hellman/5.0.3: + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.0 @@ -515,18 +530,18 @@ packages: randombytes: 2.1.0 dev: true - /domain-browser/1.2.0: + /domain-browser@1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.7 dev: true - /elliptic/6.5.4: + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 @@ -538,7 +553,7 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /es-abstract/1.20.1: + /es-abstract@1.20.1: resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} engines: {node: '>= 0.4'} dependencies: @@ -567,7 +582,7 @@ packages: unbox-primitive: 1.0.2 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -576,40 +591,40 @@ packages: is-symbol: 1.0.4 dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /evp_bytestokey/1.0.3: + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.4 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -617,11 +632,11 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -631,15 +646,15 @@ packages: functions-have-names: 1.2.3 dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /get-assigned-identifiers/1.2.0: + /get-assigned-identifiers@1.2.0: resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} dev: true - /get-intrinsic/1.1.2: + /get-intrinsic@1.1.2: resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} dependencies: function-bind: 1.1.1 @@ -647,7 +662,7 @@ packages: has-symbols: 1.0.3 dev: true - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -655,14 +670,14 @@ packages: get-intrinsic: 1.1.2 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -673,36 +688,36 @@ packages: path-is-absolute: 1.0.1 dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.1.2 dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /hash-base/3.1.0: + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} dependencies: @@ -711,14 +726,14 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js/1.1.7: + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hmac-drbg/1.0.1: + /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 @@ -726,49 +741,49 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /htmlescape/1.1.1: + /htmlescape@1.1.1: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} engines: {node: '>=0.10'} dev: true - /https-browserify/1.0.0: + /https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.1: + /inherits@2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-source-map/0.6.2: + /inline-source-map@0.6.2: resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} dependencies: source-map: 0.5.7 dev: true - /insert-module-globals/7.2.1: + /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: + JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 - JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -776,7 +791,7 @@ packages: xtend: 4.0.2 dev: true - /internal-slot/1.0.3: + /internal-slot@1.0.3: resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} engines: {node: '>= 0.4'} dependencies: @@ -785,7 +800,7 @@ packages: side-channel: 1.0.4 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -793,20 +808,20 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -814,65 +829,65 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-callable/1.2.4: + /is-callable@1.2.4: resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.10.0: + /is-core-module@2.10.0: resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -880,27 +895,27 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.9: + /is-typed-array@1.1.9: resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} engines: {node: '>= 0.4'} dependencies: @@ -911,42 +926,42 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /json-parse-even-better-errors/3.0.0: + /json-parse-even-better-errors@3.0.0: resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /labeled-stream-splicer/2.0.2: + /labeled-stream-splicer@2.0.2: resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} dependencies: inherits: 2.0.4 stream-splicer: 2.0.1 dev: true - /lodash.memoize/3.0.4: + /lodash.memoize@3.0.4: resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /md5.js/1.3.5: + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 @@ -954,7 +969,7 @@ packages: safe-buffer: 5.2.1 dev: true - /miller-rabin/4.0.1: + /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true dependencies: @@ -962,39 +977,40 @@ packages: brorand: 1.1.0 dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimalistic-crypto-utils/1.0.1: + /minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mkdirp-classic/0.5.3: + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true - /mkdirp/3.0.1: + /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true dev: true - /module-deps/6.2.3: + /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} hasBin: true dependencies: + JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1002,7 +1018,6 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 - JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 @@ -1012,26 +1027,26 @@ packages: xtend: 4.0.2 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.12.2: + /object-inspect@1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -1041,33 +1056,33 @@ packages: object-keys: 1.1.1 dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /os-browserify/0.3.0: + /os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true - /outpipe/1.1.1: + /outpipe@1.1.1: resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} dependencies: shell-quote: 1.7.3 dev: true - /pako/1.0.11: + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true - /parents/1.0.1: + /parents@1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} dependencies: path-platform: 0.11.15 dev: true - /parse-asn1/5.1.6: + /parse-asn1@5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} dependencies: asn1.js: 5.4.1 @@ -1077,25 +1092,25 @@ packages: safe-buffer: 5.2.1 dev: true - /path-browserify/1.0.1: + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-platform/0.11.15: + /path-platform@0.11.15: resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} engines: {node: '>= 0.8.0'} dev: true - /pbkdf2/3.1.2: + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} dependencies: @@ -1106,27 +1121,27 @@ packages: sha.js: 2.4.11 dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /prettier/2.8.8: + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process/0.11.10: + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /public-encrypt/4.0.3: + /public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.0 @@ -1137,45 +1152,45 @@ packages: safe-buffer: 5.2.1 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/1.4.1: + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /querystring-es3/0.2.1: + /querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /randomfill/1.0.4: + /randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 dev: true - /read-only-stream/2.0.0: + /read-only-stream@2.0.0: resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} dependencies: readable-stream: 2.3.7 dev: true - /readable-stream/2.3.7: + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 @@ -1187,7 +1202,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -1196,14 +1211,14 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -1212,7 +1227,7 @@ packages: functions-have-names: 1.2.3 dev: true - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -1221,31 +1236,31 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /ripemd160/2.0.2: + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 dev: true - /run-script-os/1.1.6: + /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} hasBin: true dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sha.js/2.4.11: + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: @@ -1253,17 +1268,17 @@ packages: safe-buffer: 5.2.1 dev: true - /shasum-object/1.0.0: + /shasum-object@1.0.0: resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} dependencies: fast-safe-stringify: 2.1.1 dev: true - /shell-quote/1.7.3: + /shell-quote@1.7.3: resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -1271,30 +1286,30 @@ packages: object-inspect: 1.12.2 dev: true - /simple-concat/1.0.1: + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /stream-browserify/3.0.0: + /stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 readable-stream: 3.6.0 dev: true - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.7 dev: true - /stream-http/3.2.0: + /stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} dependencies: builtin-status-codes: 3.0.0 @@ -1303,14 +1318,14 @@ packages: xtend: 4.0.2 dev: true - /stream-splicer/2.0.1: + /stream-splicer@2.0.1: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.7 dev: true - /string.prototype.trimend/1.0.5: + /string.prototype.trimend@1.0.5: resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} dependencies: call-bind: 1.0.2 @@ -1318,7 +1333,7 @@ packages: es-abstract: 1.20.1 dev: true - /string.prototype.trimstart/1.0.5: + /string.prototype.trimstart@1.0.5: resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} dependencies: call-bind: 1.0.2 @@ -1326,67 +1341,67 @@ packages: es-abstract: 1.20.1 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /subarg/1.0.0: + /subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} dependencies: minimist: 1.2.8 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /syntax-error/1.4.0: + /syntax-error@1.4.0: resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} dependencies: acorn-node: 1.8.2 dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true - /timers-browserify/1.4.2: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /timers-browserify@1.4.2: resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} engines: {node: '>=0.6.0'} dependencies: process: 0.11.10 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /ts-node/10.9.1_sz2hep2ld4tbz4lvm5u3llauiu: + /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -1417,26 +1432,26 @@ packages: yn: 3.1.1 dev: true - /tty-browserify/0.0.1: + /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true - /typedarray/0.0.6: + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript/5.1.3: + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true dev: true - /umd/3.0.3: + /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} hasBin: true dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -1445,7 +1460,7 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undeclared-identifiers/1.1.3: + /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} hasBin: true dependencies: @@ -1456,24 +1471,24 @@ packages: xtend: 4.0.2 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util/0.10.3: + /util@0.10.3: resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} dependencies: inherits: 2.0.1 dev: true - /util/0.12.4: + /util@0.12.4: resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} dependencies: inherits: 2.0.4 @@ -1484,20 +1499,20 @@ packages: which-typed-array: 1.1.8 dev: true - /uuid/9.0.0: + /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /vm-browserify/1.1.2: + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /watchify/4.0.0: + /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} hasBin: true @@ -1511,7 +1526,7 @@ packages: xtend: 4.0.2 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -1521,7 +1536,7 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array/1.1.8: + /which-typed-array@1.1.8: resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} engines: {node: '>= 0.4'} dependencies: @@ -1533,16 +1548,16 @@ packages: is-typed-array: 1.1.9 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true diff --git a/kipper/web/pnpm-lock.yaml b/kipper/web/pnpm-lock.yaml index 5fb9bf70d..ffcd1a5c1 100644 --- a/kipper/web/pnpm-lock.yaml +++ b/kipper/web/pnpm-lock.yaml @@ -1,87 +1,105 @@ -lockfileVersion: 5.4 - -specifiers: - '@kipper/core': workspace:~ - '@kipper/target-js': workspace:~ - '@kipper/target-ts': workspace:~ - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - browserify: 17.0.0 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - ts-node: 10.9.1 - typescript: 5.1.3 - uglify-js: 3.17.4 - uuid: 9.0.0 - watchify: 4.0.0 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false devDependencies: - '@kipper/core': link:../core - '@kipper/target-js': link:../target-js - '@kipper/target-ts': link:../target-ts - '@types/node': 18.16.16 - ansi-regex: 6.0.1 - browserify: 17.0.0 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - prettier: 2.8.8 - run-script-os: 1.1.6 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu - typescript: 5.1.3 - uglify-js: 3.17.4 - uuid: 9.0.0 - watchify: 4.0.0 + '@kipper/core': + specifier: workspace:~ + version: link:../core + '@kipper/target-js': + specifier: workspace:~ + version: link:../target-js + '@kipper/target-ts': + specifier: workspace:~ + version: link:../target-ts + '@types/node': + specifier: 18.16.16 + version: 18.16.16 + ansi-regex: + specifier: 6.0.1 + version: 6.0.1 + browserify: + specifier: 17.0.0 + version: 17.0.0 + json-parse-even-better-errors: + specifier: 3.0.0 + version: 3.0.0 + minimist: + specifier: 1.2.8 + version: 1.2.8 + mkdirp: + specifier: 3.0.1 + version: 3.0.1 + prettier: + specifier: 2.8.8 + version: 2.8.8 + run-script-os: + specifier: 1.1.6 + version: 1.1.6 + ts-node: + specifier: 10.9.1 + version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + typescript: + specifier: 5.1.3 + version: 5.1.3 + uglify-js: + specifier: 3.17.4 + version: 3.17.4 + uuid: + specifier: 9.0.0 + version: 9.0.0 + watchify: + specifier: 4.0.0 + version: 4.0.0 packages: - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/node/18.16.16: + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -89,7 +107,7 @@ packages: through: 2.3.8 dev: true - /acorn-node/1.8.2: + /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 @@ -97,34 +115,34 @@ packages: xtend: 4.0.2 dev: true - /acorn-walk/7.2.0: + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.0: + /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /anymatch/3.1.2: + /anymatch@3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: @@ -132,11 +150,11 @@ packages: picomatch: 2.3.1 dev: true - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /asn1.js/5.4.1: + /asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 @@ -145,76 +163,76 @@ packages: safer-buffer: 2.1.2 dev: true - /assert/1.5.0: + /assert@1.5.0: resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} dependencies: object-assign: 4.1.1 util: 0.10.3 dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /bn.js/4.12.0: + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true - /bn.js/5.2.1: + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /brorand/1.1.0: + /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true - /browser-pack/6.1.0: + /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: + JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.0 - JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 dev: true - /browser-resolve/2.0.0: + /browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: resolve: 1.22.1 dev: true - /browserify-aes/1.2.0: + /browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 @@ -225,7 +243,7 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-cipher/1.0.1: + /browserify-cipher@1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 @@ -233,7 +251,7 @@ packages: evp_bytestokey: 1.0.3 dev: true - /browserify-des/1.0.2: + /browserify-des@1.0.2: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 @@ -242,14 +260,14 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-rsa/4.1.0: + /browserify-rsa@4.1.0: resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 dev: true - /browserify-sign/4.2.1: + /browserify-sign@4.2.1: resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} dependencies: bn.js: 5.2.1 @@ -263,17 +281,18 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-zlib/0.2.0: + /browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 dev: true - /browserify/17.0.0: + /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} hasBin: true dependencies: + JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -295,7 +314,6 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 - JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -324,37 +342,37 @@ packages: xtend: 4.0.2 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-xor/1.0.3: + /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true - /buffer/5.2.1: + /buffer@5.2.1: resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /builtin-status-codes/3.0.0: + /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true - /cached-path-relative/1.1.0: + /cached-path-relative@1.1.0: resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.2 dev: true - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -369,14 +387,14 @@ packages: fsevents: 2.3.2 dev: true - /cipher-base/1.0.4: + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 dev: true - /combine-source-map/0.8.0: + /combine-source-map@0.8.0: resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} dependencies: convert-source-map: 1.1.3 @@ -385,11 +403,11 @@ packages: source-map: 0.5.7 dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream/1.6.2: + /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: @@ -399,30 +417,30 @@ packages: typedarray: 0.0.6 dev: true - /console-browserify/1.2.0: + /console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true - /constants-browserify/1.0.0: + /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true - /convert-source-map/1.1.3: + /convert-source-map@1.1.3: resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /create-ecdh/4.0.4: + /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 elliptic: 6.5.4 dev: true - /create-hash/1.2.0: + /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 @@ -432,7 +450,7 @@ packages: sha.js: 2.4.11 dev: true - /create-hmac/1.1.7: + /create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 @@ -443,11 +461,11 @@ packages: sha.js: 2.4.11 dev: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /crypto-browserify/3.12.0: + /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 @@ -463,11 +481,11 @@ packages: randomfill: 1.0.4 dev: true - /dash-ast/1.0.0: + /dash-ast@1.0.0: resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} dev: true - /define-properties/1.1.4: + /define-properties@1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} dependencies: @@ -475,11 +493,11 @@ packages: object-keys: 1.1.1 dev: true - /defined/1.0.0: + /defined@1.0.0: resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} dev: true - /deps-sort/2.0.1: + /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} hasBin: true dependencies: @@ -489,14 +507,14 @@ packages: through2: 2.0.5 dev: true - /des.js/1.0.1: + /des.js@1.0.1: resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /detective/5.2.1: + /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true @@ -506,12 +524,12 @@ packages: minimist: 1.2.8 dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /diffie-hellman/5.0.3: + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.0 @@ -519,18 +537,18 @@ packages: randombytes: 2.1.0 dev: true - /domain-browser/1.2.0: + /domain-browser@1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.7 dev: true - /elliptic/6.5.4: + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 @@ -542,7 +560,7 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /es-abstract/1.20.1: + /es-abstract@1.20.1: resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} engines: {node: '>= 0.4'} dependencies: @@ -571,7 +589,7 @@ packages: unbox-primitive: 1.0.2 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -580,40 +598,40 @@ packages: is-symbol: 1.0.4 dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /evp_bytestokey/1.0.3: + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.4 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -621,11 +639,11 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -635,15 +653,15 @@ packages: functions-have-names: 1.2.3 dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /get-assigned-identifiers/1.2.0: + /get-assigned-identifiers@1.2.0: resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} dev: true - /get-intrinsic/1.1.2: + /get-intrinsic@1.1.2: resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} dependencies: function-bind: 1.1.1 @@ -651,7 +669,7 @@ packages: has-symbols: 1.0.3 dev: true - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -659,14 +677,14 @@ packages: get-intrinsic: 1.1.2 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -677,36 +695,36 @@ packages: path-is-absolute: 1.0.1 dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.1.2 dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /hash-base/3.1.0: + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} dependencies: @@ -715,14 +733,14 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js/1.1.7: + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hmac-drbg/1.0.1: + /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 @@ -730,49 +748,49 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /htmlescape/1.1.1: + /htmlescape@1.1.1: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} engines: {node: '>=0.10'} dev: true - /https-browserify/1.0.0: + /https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.1: + /inherits@2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-source-map/0.6.2: + /inline-source-map@0.6.2: resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} dependencies: source-map: 0.5.7 dev: true - /insert-module-globals/7.2.1: + /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: + JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 - JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -780,7 +798,7 @@ packages: xtend: 4.0.2 dev: true - /internal-slot/1.0.3: + /internal-slot@1.0.3: resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} engines: {node: '>= 0.4'} dependencies: @@ -789,7 +807,7 @@ packages: side-channel: 1.0.4 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -797,20 +815,20 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -818,65 +836,65 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-callable/1.2.4: + /is-callable@1.2.4: resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.10.0: + /is-core-module@2.10.0: resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -884,27 +902,27 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.9: + /is-typed-array@1.1.9: resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} engines: {node: '>= 0.4'} dependencies: @@ -915,42 +933,42 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /json-parse-even-better-errors/3.0.0: + /json-parse-even-better-errors@3.0.0: resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /labeled-stream-splicer/2.0.2: + /labeled-stream-splicer@2.0.2: resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} dependencies: inherits: 2.0.4 stream-splicer: 2.0.1 dev: true - /lodash.memoize/3.0.4: + /lodash.memoize@3.0.4: resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /md5.js/1.3.5: + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 @@ -958,7 +976,7 @@ packages: safe-buffer: 5.2.1 dev: true - /miller-rabin/4.0.1: + /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true dependencies: @@ -966,39 +984,40 @@ packages: brorand: 1.1.0 dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimalistic-crypto-utils/1.0.1: + /minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mkdirp-classic/0.5.3: + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true - /mkdirp/3.0.1: + /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true dev: true - /module-deps/6.2.3: + /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} hasBin: true dependencies: + JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -1006,7 +1025,6 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 - JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 @@ -1016,26 +1034,26 @@ packages: xtend: 4.0.2 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.12.2: + /object-inspect@1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -1045,33 +1063,33 @@ packages: object-keys: 1.1.1 dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /os-browserify/0.3.0: + /os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true - /outpipe/1.1.1: + /outpipe@1.1.1: resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} dependencies: shell-quote: 1.7.3 dev: true - /pako/1.0.11: + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true - /parents/1.0.1: + /parents@1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} dependencies: path-platform: 0.11.15 dev: true - /parse-asn1/5.1.6: + /parse-asn1@5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} dependencies: asn1.js: 5.4.1 @@ -1081,25 +1099,25 @@ packages: safe-buffer: 5.2.1 dev: true - /path-browserify/1.0.1: + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-platform/0.11.15: + /path-platform@0.11.15: resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} engines: {node: '>= 0.8.0'} dev: true - /pbkdf2/3.1.2: + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} dependencies: @@ -1110,27 +1128,27 @@ packages: sha.js: 2.4.11 dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /prettier/2.8.8: + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process/0.11.10: + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /public-encrypt/4.0.3: + /public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.0 @@ -1141,45 +1159,45 @@ packages: safe-buffer: 5.2.1 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/1.4.1: + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /querystring-es3/0.2.1: + /querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /randomfill/1.0.4: + /randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 dev: true - /read-only-stream/2.0.0: + /read-only-stream@2.0.0: resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} dependencies: readable-stream: 2.3.7 dev: true - /readable-stream/2.3.7: + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 @@ -1191,7 +1209,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -1200,14 +1218,14 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -1216,7 +1234,7 @@ packages: functions-have-names: 1.2.3 dev: true - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -1225,31 +1243,31 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /ripemd160/2.0.2: + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 dev: true - /run-script-os/1.1.6: + /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} hasBin: true dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sha.js/2.4.11: + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: @@ -1257,17 +1275,17 @@ packages: safe-buffer: 5.2.1 dev: true - /shasum-object/1.0.0: + /shasum-object@1.0.0: resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} dependencies: fast-safe-stringify: 2.1.1 dev: true - /shell-quote/1.7.3: + /shell-quote@1.7.3: resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -1275,30 +1293,30 @@ packages: object-inspect: 1.12.2 dev: true - /simple-concat/1.0.1: + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /stream-browserify/3.0.0: + /stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 readable-stream: 3.6.0 dev: true - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.7 dev: true - /stream-http/3.2.0: + /stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} dependencies: builtin-status-codes: 3.0.0 @@ -1307,14 +1325,14 @@ packages: xtend: 4.0.2 dev: true - /stream-splicer/2.0.1: + /stream-splicer@2.0.1: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.7 dev: true - /string.prototype.trimend/1.0.5: + /string.prototype.trimend@1.0.5: resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} dependencies: call-bind: 1.0.2 @@ -1322,7 +1340,7 @@ packages: es-abstract: 1.20.1 dev: true - /string.prototype.trimstart/1.0.5: + /string.prototype.trimstart@1.0.5: resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} dependencies: call-bind: 1.0.2 @@ -1330,67 +1348,67 @@ packages: es-abstract: 1.20.1 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /subarg/1.0.0: + /subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} dependencies: minimist: 1.2.8 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /syntax-error/1.4.0: + /syntax-error@1.4.0: resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} dependencies: acorn-node: 1.8.2 dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true - /timers-browserify/1.4.2: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /timers-browserify@1.4.2: resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} engines: {node: '>=0.6.0'} dependencies: process: 0.11.10 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /ts-node/10.9.1_sz2hep2ld4tbz4lvm5u3llauiu: + /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -1421,32 +1439,32 @@ packages: yn: 3.1.1 dev: true - /tty-browserify/0.0.1: + /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true - /typedarray/0.0.6: + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript/5.1.3: + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true dev: true - /uglify-js/3.17.4: + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true dev: true - /umd/3.0.3: + /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} hasBin: true dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -1455,7 +1473,7 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undeclared-identifiers/1.1.3: + /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} hasBin: true dependencies: @@ -1466,24 +1484,24 @@ packages: xtend: 4.0.2 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util/0.10.3: + /util@0.10.3: resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} dependencies: inherits: 2.0.1 dev: true - /util/0.12.4: + /util@0.12.4: resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} dependencies: inherits: 2.0.4 @@ -1494,20 +1512,20 @@ packages: which-typed-array: 1.1.8 dev: true - /uuid/9.0.0: + /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /vm-browserify/1.1.2: + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /watchify/4.0.0: + /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} hasBin: true @@ -1521,7 +1539,7 @@ packages: xtend: 4.0.2 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -1531,7 +1549,7 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array/1.1.8: + /which-typed-array@1.1.8: resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} engines: {node: '>= 0.4'} dependencies: @@ -1543,16 +1561,16 @@ packages: is-typed-array: 1.1.9 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09b6c7a40..d7c2bd952 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,86 +1,124 @@ -lockfileVersion: 5.4 - -specifiers: - '@istanbuljs/nyc-config-typescript': 1.0.2 - '@kipper/cli': workspace:~ - '@kipper/core': workspace:~ - '@kipper/target-js': workspace:~ - '@kipper/target-ts': workspace:~ - '@oclif/test': 2.3.21 - '@size-limit/preset-big-lib': 8.2.4 - '@types/chai': 4.3.0 - '@types/mocha': 10.0.1 - '@types/node': 18.16.16 - '@typescript-eslint/eslint-plugin': 5.59.8 - '@typescript-eslint/parser': 5.59.8 - ansi-regex: 6.0.1 - antlr4ts: ^0.5.0-alpha.4 - antlr4ts-cli: 0.5.0-alpha.4 - browserify: 17.0.0 - chai: 4.3.6 - coverage-badge-creator: 1.0.17 - eslint: 8.42.0 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - mocha: 10.2.0 - nyc: 15.1.0 - prettier: 2.8.8 - run-script-os: 1.1.6 - size-limit: 8.2.4 - source-map-support: 0.5.21 - ts-mocha: 10.0.0 - ts-node: 10.9.1 - tsify: 5.0.4 - tslib: ~2.5.0 - typescript: 5.1.3 - uglify-js: 3.17.4 - uuid: 9.0.0 - watchify: 4.0.0 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - '@kipper/cli': link:kipper/cli - '@kipper/core': link:kipper/core - '@kipper/target-js': link:kipper/target-js - '@kipper/target-ts': link:kipper/target-ts - antlr4ts: 0.5.0-alpha.4 - tslib: 2.5.0 + '@kipper/cli': + specifier: workspace:~ + version: link:kipper/cli + '@kipper/core': + specifier: workspace:~ + version: link:kipper/core + '@kipper/target-js': + specifier: workspace:~ + version: link:kipper/target-js + '@kipper/target-ts': + specifier: workspace:~ + version: link:kipper/target-ts + antlr4ts: + specifier: ^0.5.0-alpha.4 + version: 0.5.0-alpha.4 + tslib: + specifier: ~2.5.0 + version: 2.5.0 devDependencies: - '@istanbuljs/nyc-config-typescript': 1.0.2_nyc@15.1.0 - '@oclif/test': 2.3.21_sz2hep2ld4tbz4lvm5u3llauiu - '@size-limit/preset-big-lib': 8.2.4_4kdnhjay4fijd6kal7yshys5hy - '@types/chai': 4.3.0 - '@types/mocha': 10.0.1 - '@types/node': 18.16.16 - '@typescript-eslint/eslint-plugin': 5.59.8_54dzngpokg2nc3pytyodfzhcz4 - '@typescript-eslint/parser': 5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u - ansi-regex: 6.0.1 - antlr4ts-cli: 0.5.0-alpha.4 - browserify: 17.0.0 - chai: 4.3.6 - coverage-badge-creator: 1.0.17 - eslint: 8.42.0 - json-parse-even-better-errors: 3.0.0 - minimist: 1.2.8 - mkdirp: 3.0.1 - mocha: 10.2.0 - nyc: 15.1.0 - prettier: 2.8.8 - run-script-os: 1.1.6 - size-limit: 8.2.4 - source-map-support: 0.5.21 - ts-mocha: 10.0.0_mocha@10.2.0 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu - tsify: 5.0.4_4yjx665a5l6j7n3wjjaet7t3dm - typescript: 5.1.3 - uglify-js: 3.17.4 - uuid: 9.0.0 - watchify: 4.0.0 + '@istanbuljs/nyc-config-typescript': + specifier: 1.0.2 + version: 1.0.2(nyc@15.1.0) + '@oclif/test': + specifier: 2.3.21 + version: 2.3.21(@types/node@18.16.16)(typescript@5.1.3) + '@size-limit/preset-big-lib': + specifier: 8.2.4 + version: 8.2.4(size-limit@8.2.4)(uglify-js@3.17.4) + '@types/chai': + specifier: 4.3.0 + version: 4.3.0 + '@types/mocha': + specifier: 10.0.1 + version: 10.0.1 + '@types/node': + specifier: 18.16.16 + version: 18.16.16 + '@typescript-eslint/eslint-plugin': + specifier: 5.59.8 + version: 5.59.8(@typescript-eslint/parser@5.59.8)(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/parser': + specifier: 5.59.8 + version: 5.59.8(eslint@8.42.0)(typescript@5.1.3) + ansi-regex: + specifier: 6.0.1 + version: 6.0.1 + antlr4ts-cli: + specifier: 0.5.0-alpha.4 + version: 0.5.0-alpha.4 + browserify: + specifier: 17.0.0 + version: 17.0.0 + chai: + specifier: 4.3.6 + version: 4.3.6 + coverage-badge-creator: + specifier: 1.0.17 + version: 1.0.17 + eslint: + specifier: 8.42.0 + version: 8.42.0 + json-parse-even-better-errors: + specifier: 3.0.0 + version: 3.0.0 + minimist: + specifier: 1.2.8 + version: 1.2.8 + mkdirp: + specifier: 3.0.1 + version: 3.0.1 + mocha: + specifier: 10.2.0 + version: 10.2.0 + nyc: + specifier: 15.1.0 + version: 15.1.0 + prettier: + specifier: 2.8.8 + version: 2.8.8 + run-script-os: + specifier: 1.1.6 + version: 1.1.6 + size-limit: + specifier: 8.2.4 + version: 8.2.4 + source-map-support: + specifier: 0.5.21 + version: 0.5.21 + ts-mocha: + specifier: 10.0.0 + version: 10.0.0(mocha@10.2.0) + ts-node: + specifier: 10.9.1 + version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + tsify: + specifier: 5.0.4 + version: 5.0.4(browserify@17.0.0)(typescript@5.1.3) + typescript: + specifier: 5.1.3 + version: 5.1.3 + uglify-js: + specifier: 3.17.4 + version: 3.17.4 + uuid: + specifier: 9.0.0 + version: 9.0.0 + watchify: + specifier: 4.0.0 + version: 4.0.0 packages: - /@ampproject/remapping/2.2.0: + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: @@ -88,26 +126,26 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true - /@babel/code-frame/7.18.6: + /@babel/code-frame@7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.20.1: + /@babel/compat-data@7.20.1: resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.2: + /@babel/core@7.20.2: resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 '@babel/generator': 7.20.4 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-compilation-targets': 7.20.0(@babel/core@7.20.2) '@babel/helper-module-transforms': 7.20.2 '@babel/helpers': 7.20.1 '@babel/parser': 7.20.3 @@ -115,7 +153,7 @@ packages: '@babel/traverse': 7.20.1 '@babel/types': 7.20.2 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.1 semver: 6.3.0 @@ -123,7 +161,7 @@ packages: - supports-color dev: true - /@babel/generator/7.20.4: + /@babel/generator@7.20.4: resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} engines: {node: '>=6.9.0'} dependencies: @@ -132,7 +170,7 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2: + /@babel/helper-compilation-targets@7.20.0(@babel/core@7.20.2): resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -145,12 +183,12 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-environment-visitor/7.18.9: + /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-function-name/7.19.0: + /@babel/helper-function-name@7.19.0: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: @@ -158,21 +196,21 @@ packages: '@babel/types': 7.20.2 dev: true - /@babel/helper-hoist-variables/7.18.6: + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.2 dev: true - /@babel/helper-module-imports/7.18.6: + /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.2 dev: true - /@babel/helper-module-transforms/7.20.2: + /@babel/helper-module-transforms@7.20.2: resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} engines: {node: '>=6.9.0'} dependencies: @@ -188,36 +226,36 @@ packages: - supports-color dev: true - /@babel/helper-simple-access/7.20.2: + /@babel/helper-simple-access@7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.2 dev: true - /@babel/helper-split-export-declaration/7.18.6: + /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.2 dev: true - /@babel/helper-string-parser/7.19.4: + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier/7.19.1: + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.18.6: + /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.20.1: + /@babel/helpers@7.20.1: resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} engines: {node: '>=6.9.0'} dependencies: @@ -228,7 +266,7 @@ packages: - supports-color dev: true - /@babel/highlight/7.18.6: + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -237,7 +275,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.20.3: + /@babel/parser@7.20.3: resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} engines: {node: '>=6.0.0'} hasBin: true @@ -245,7 +283,7 @@ packages: '@babel/types': 7.20.2 dev: true - /@babel/template/7.18.10: + /@babel/template@7.18.10: resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} engines: {node: '>=6.9.0'} dependencies: @@ -254,7 +292,7 @@ packages: '@babel/types': 7.20.2 dev: true - /@babel/traverse/7.20.1: + /@babel/traverse@7.20.1: resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} engines: {node: '>=6.9.0'} dependencies: @@ -266,13 +304,13 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.20.3 '@babel/types': 7.20.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.20.2: + /@babel/types@7.20.2: resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} engines: {node: '>=6.9.0'} dependencies: @@ -281,14 +319,14 @@ packages: to-fast-properties: 2.0.0 dev: true - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@eslint-community/eslint-utils/4.4.0_eslint@8.42.0: + /@eslint-community/eslint-utils@4.4.0(eslint@8.42.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -298,17 +336,17 @@ packages: eslint-visitor-keys: 3.4.1 dev: true - /@eslint-community/regexpp/4.5.0: + /@eslint-community/regexpp@4.5.0: resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc/2.0.3: + /@eslint/eslintrc@2.0.3: resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) espree: 9.5.2 globals: 13.19.0 ignore: 5.2.0 @@ -320,32 +358,32 @@ packages: - supports-color dev: true - /@eslint/js/8.42.0: + /@eslint/js@8.42.0: resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array/0.11.10: + /@humanwhocodes/config-array@0.11.10: resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/module-importer/1.0.1: + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema/1.2.1: + /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config/1.1.0: + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -356,7 +394,7 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/nyc-config-typescript/1.0.2_nyc@15.1.0: + /@istanbuljs/nyc-config-typescript@1.0.2(nyc@15.1.0): resolution: {integrity: sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w==} engines: {node: '>=8'} peerDependencies: @@ -366,12 +404,12 @@ packages: nyc: 15.1.0 dev: true - /@istanbuljs/schema/0.1.3: + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jridgewell/gen-mapping/0.1.1: + /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} dependencies: @@ -379,7 +417,7 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/gen-mapping/0.3.2: + /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: @@ -388,42 +426,42 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array/1.1.2: + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map/0.3.2: + /@jridgewell/source-map@0.3.2: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.17 dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.17: + /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -431,12 +469,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -444,7 +482,7 @@ packages: fastq: 1.13.0 dev: true - /@oclif/core/2.8.5_sz2hep2ld4tbz4lvm5u3llauiu: + /@oclif/core@2.8.5(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==} engines: {node: '>=14.0.0'} dependencies: @@ -455,7 +493,7 @@ packages: chalk: 4.1.2 clean-stack: 3.0.1 cli-progress: 3.12.0 - debug: 4.3.4_supports-color@8.1.1 + debug: 4.3.4(supports-color@8.1.1) ejs: 3.1.8 fs-extra: 9.1.0 get-package-type: 0.1.0 @@ -472,7 +510,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.1_sz2hep2ld4tbz4lvm5u3llauiu + ts-node: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) tslib: 2.5.0 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -484,11 +522,11 @@ packages: - typescript dev: true - /@oclif/test/2.3.21_sz2hep2ld4tbz4lvm5u3llauiu: + /@oclif/test@2.3.21(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-RaFNf3/PMwBLrL9yu8aFsONsUSpyI16AGC6HiAabDyu534Rh+jBtqy/dPZ53/SOCBOholhZmVs7jT0UE5Utwew==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.8.5_sz2hep2ld4tbz4lvm5u3llauiu + '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) fancy-test: 2.0.23 transitivePeerDependencies: - '@swc/core' @@ -498,16 +536,16 @@ packages: - typescript dev: true - /@sitespeed.io/tracium/0.3.3: + /@sitespeed.io/tracium@0.3.3: resolution: {integrity: sha512-dNZafjM93Y+F+sfwTO5gTpsGXlnc/0Q+c2+62ViqP3gkMWvHEMSKkaEHgVJLcLg3i/g19GSIPziiKpgyne07Bw==} engines: {node: '>=8'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /@size-limit/file/8.2.4_size-limit@8.2.4: + /@size-limit/file@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-xLuF97W7m7lxrRJvqXRlxO/4t7cpXtfxOnjml/t4aRVUCMXLdyvebRr9OM4jjoK8Fmiz8jomCbETUCI3jVhLzA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: @@ -517,14 +555,14 @@ packages: size-limit: 8.2.4 dev: true - /@size-limit/preset-big-lib/8.2.4_4kdnhjay4fijd6kal7yshys5hy: + /@size-limit/preset-big-lib@8.2.4(size-limit@8.2.4)(uglify-js@3.17.4): resolution: {integrity: sha512-J4PTiJATEO/zoXF3tsSUy4KztvVuCw1g9ukRuDHYA+p1YYVViO4fDiSlnw4nBLN2lZoGdfQVOg12G7ta3+WwSA==} peerDependencies: size-limit: 8.2.4 dependencies: - '@size-limit/file': 8.2.4_size-limit@8.2.4 - '@size-limit/time': 8.2.4_size-limit@8.2.4 - '@size-limit/webpack': 8.2.4_4kdnhjay4fijd6kal7yshys5hy + '@size-limit/file': 8.2.4(size-limit@8.2.4) + '@size-limit/time': 8.2.4(size-limit@8.2.4) + '@size-limit/webpack': 8.2.4(size-limit@8.2.4)(uglify-js@3.17.4) size-limit: 8.2.4 transitivePeerDependencies: - '@swc/core' @@ -537,7 +575,7 @@ packages: - webpack-cli dev: true - /@size-limit/time/8.2.4_size-limit@8.2.4: + /@size-limit/time@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-tQ5EFlN/AY8RLIJxURVfiwJpO4Q9UihtfE6c14fXL9Jy/wl2hZEhkFrUhRayNDvnZW8HWNko1Hmt7dLsY3iF8A==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: @@ -553,7 +591,7 @@ packages: - utf-8-validate dev: true - /@size-limit/webpack/8.2.4_4kdnhjay4fijd6kal7yshys5hy: + /@size-limit/webpack@8.2.4(size-limit@8.2.4)(uglify-js@3.17.4): resolution: {integrity: sha512-L6TSQpX89cSeWQ1BL31BsaYucao0MGNW1xySHVO7jlgmOwnHC7j5zq91QRN9G6eMG84W+F3uRV4AiyCdZxKz9g==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: @@ -561,7 +599,7 @@ packages: dependencies: nanoid: 3.3.4 size-limit: 8.2.4 - webpack: 5.75.0_uglify-js@3.17.4 + webpack: 5.75.0(uglify-js@3.17.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -569,86 +607,87 @@ packages: - webpack-cli dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/chai/4.3.0: + /@types/chai@4.3.0: resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} dev: true - /@types/cli-progress/3.11.0: + /@types/cli-progress@3.11.0: resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} dependencies: '@types/node': 18.16.16 dev: true - /@types/eslint-scope/3.7.4: + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.4.10 '@types/estree': 0.0.51 dev: true - /@types/eslint/8.4.10: + /@types/eslint@8.4.10: resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==} dependencies: '@types/estree': 0.0.51 '@types/json-schema': 7.0.11 dev: true - /@types/estree/0.0.51: + /@types/estree@0.0.51: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/json-schema/7.0.11: + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/json5/0.0.29: + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + requiresBuild: true dev: true optional: true - /@types/lodash/4.14.189: + /@types/lodash@4.14.189: resolution: {integrity: sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==} dev: true - /@types/mocha/10.0.1: + /@types/mocha@10.0.1: resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==} dev: true - /@types/node/18.16.16: + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /@types/semver/7.3.13: + /@types/semver@7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/sinon/10.0.13: + /@types/sinon@10.0.13: resolution: {integrity: sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==} dependencies: '@types/sinonjs__fake-timers': 8.1.2 dev: true - /@types/sinonjs__fake-timers/8.1.2: + /@types/sinonjs__fake-timers@8.1.2: resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} dev: true - /@types/yauzl/2.10.0: + /@types/yauzl@2.10.0: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: @@ -656,7 +695,7 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin/5.59.8_54dzngpokg2nc3pytyodfzhcz4: + /@typescript-eslint/eslint-plugin@5.59.8(@typescript-eslint/parser@5.59.8)(eslint@8.42.0)(typescript@5.1.3): resolution: {integrity: sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -668,23 +707,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u + '@typescript-eslint/parser': 5.59.8(eslint@8.42.0)(typescript@5.1.3) '@typescript-eslint/scope-manager': 5.59.8 - '@typescript-eslint/type-utils': 5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u - '@typescript-eslint/utils': 5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u - debug: 4.3.4 + '@typescript-eslint/type-utils': 5.59.8(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/utils': 5.59.8(eslint@8.42.0)(typescript@5.1.3) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.42.0 grapheme-splitter: 1.0.4 ignore: 5.2.0 natural-compare-lite: 1.4.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@5.1.3 + tsutils: 3.21.0(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u: + /@typescript-eslint/parser@5.59.8(eslint@8.42.0)(typescript@5.1.3): resolution: {integrity: sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -696,15 +735,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.59.8 '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/typescript-estree': 5.59.8_typescript@5.1.3 - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.42.0 typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.59.8: + /@typescript-eslint/scope-manager@5.59.8: resolution: {integrity: sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -712,7 +751,7 @@ packages: '@typescript-eslint/visitor-keys': 5.59.8 dev: true - /@typescript-eslint/type-utils/5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u: + /@typescript-eslint/type-utils@5.59.8(eslint@8.42.0)(typescript@5.1.3): resolution: {integrity: sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -722,22 +761,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.8_typescript@5.1.3 - '@typescript-eslint/utils': 5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) + '@typescript-eslint/utils': 5.59.8(eslint@8.42.0)(typescript@5.1.3) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.42.0 - tsutils: 3.21.0_typescript@5.1.3 + tsutils: 3.21.0(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.59.8: + /@typescript-eslint/types@5.59.8: resolution: {integrity: sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.59.8_typescript@5.1.3: + /@typescript-eslint/typescript-estree@5.59.8(typescript@5.1.3): resolution: {integrity: sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -748,28 +787,28 @@ packages: dependencies: '@typescript-eslint/types': 5.59.8 '@typescript-eslint/visitor-keys': 5.59.8 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@5.1.3 + tsutils: 3.21.0(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.59.8_tizxnkcvjrb4cldxgwq5h3lj5u: + /@typescript-eslint/utils@5.59.8(eslint@8.42.0)(typescript@5.1.3): resolution: {integrity: sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@8.42.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.59.8 '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/typescript-estree': 5.59.8_typescript@5.1.3 + '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) eslint: 8.42.0 eslint-scope: 5.1.1 semver: 7.3.8 @@ -778,7 +817,7 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys/5.59.8: + /@typescript-eslint/visitor-keys@5.59.8: resolution: {integrity: sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -786,26 +825,26 @@ packages: eslint-visitor-keys: 3.4.1 dev: true - /@webassemblyjs/ast/1.11.1: + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 dev: true - /@webassemblyjs/floating-point-hex-parser/1.11.1: + /@webassemblyjs/floating-point-hex-parser@1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} dev: true - /@webassemblyjs/helper-api-error/1.11.1: + /@webassemblyjs/helper-api-error@1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} dev: true - /@webassemblyjs/helper-buffer/1.11.1: + /@webassemblyjs/helper-buffer@1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} dev: true - /@webassemblyjs/helper-numbers/1.11.1: + /@webassemblyjs/helper-numbers@1.11.1: resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 @@ -813,11 +852,11 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode/1.11.1: + /@webassemblyjs/helper-wasm-bytecode@1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} dev: true - /@webassemblyjs/helper-wasm-section/1.11.1: + /@webassemblyjs/helper-wasm-section@1.11.1: resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -826,23 +865,23 @@ packages: '@webassemblyjs/wasm-gen': 1.11.1 dev: true - /@webassemblyjs/ieee754/1.11.1: + /@webassemblyjs/ieee754@1.11.1: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128/1.11.1: + /@webassemblyjs/leb128@1.11.1: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8/1.11.1: + /@webassemblyjs/utf8@1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} dev: true - /@webassemblyjs/wasm-edit/1.11.1: + /@webassemblyjs/wasm-edit@1.11.1: resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -855,7 +894,7 @@ packages: '@webassemblyjs/wast-printer': 1.11.1 dev: true - /@webassemblyjs/wasm-gen/1.11.1: + /@webassemblyjs/wasm-gen@1.11.1: resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -865,7 +904,7 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wasm-opt/1.11.1: + /@webassemblyjs/wasm-opt@1.11.1: resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -874,7 +913,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 dev: true - /@webassemblyjs/wasm-parser/1.11.1: + /@webassemblyjs/wasm-parser@1.11.1: resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -885,22 +924,22 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wast-printer/1.11.1: + /@webassemblyjs/wast-printer@1.11.1: resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 dev: true - /@xtuc/ieee754/1.2.0: + /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true - /@xtuc/long/4.2.2: + /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -908,7 +947,7 @@ packages: through: 2.3.8 dev: true - /acorn-import-assertions/1.8.0_acorn@8.8.1: + /acorn-import-assertions@1.8.0(acorn@8.8.1): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 @@ -916,7 +955,7 @@ packages: acorn: 8.8.1 dev: true - /acorn-jsx/5.3.2_acorn@8.8.1: + /acorn-jsx@5.3.2(acorn@8.8.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -924,7 +963,7 @@ packages: acorn: 8.8.1 dev: true - /acorn-node/1.8.2: + /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 @@ -932,38 +971,38 @@ packages: xtend: 4.0.2 dev: true - /acorn-walk/7.2.0: + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.1: + /acorn@8.8.1: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /aggregate-error/3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -971,7 +1010,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-keywords/3.5.2_ajv@6.12.6: + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 @@ -979,7 +1018,7 @@ packages: ajv: 6.12.6 dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -988,65 +1027,65 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors/4.1.1: + /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} dev: true - /ansi-escapes/3.2.0: + /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true - /ansicolors/0.3.2: + /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} dev: true - /antlr4ts-cli/0.5.0-alpha.4: + /antlr4ts-cli@0.5.0-alpha.4: resolution: {integrity: sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==} hasBin: true dev: true - /antlr4ts/0.5.0-alpha.4: + /antlr4ts@0.5.0-alpha.4: resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} dev: false - /any-promise/1.3.0: + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch/3.1.3: + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: @@ -1054,42 +1093,42 @@ packages: picomatch: 2.3.1 dev: true - /append-transform/2.0.0: + /append-transform@2.0.0: resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} engines: {node: '>=8'} dependencies: default-require-extensions: 3.0.1 dev: true - /archy/1.0.0: + /archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} dev: true - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /argparse/2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /arrify/1.0.1: + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /asn1.js/5.4.1: + /asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 @@ -1098,45 +1137,45 @@ packages: safer-buffer: 2.1.2 dev: true - /assert/1.5.0: + /assert@1.5.0: resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} dependencies: object-assign: 4.1.1 util: 0.10.3 dev: true - /assertion-error/1.1.0: + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /async/3.2.4: + /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: true - /at-least-node/1.0.0: + /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /bl/4.1.0: + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 @@ -1144,61 +1183,61 @@ packages: readable-stream: 3.6.0 dev: true - /bn.js/4.12.0: + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true - /bn.js/5.2.1: + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion/2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /brorand/1.1.0: + /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true - /browser-pack/6.1.0: + /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: + JSONStream: 1.3.5 combine-source-map: 0.8.0 defined: 1.0.1 - JSONStream: 1.3.5 safe-buffer: 5.2.1 through2: 2.0.5 umd: 3.0.3 dev: true - /browser-resolve/2.0.0: + /browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: resolve: 1.22.1 dev: true - /browser-stdout/1.3.1: + /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserify-aes/1.2.0: + /browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 @@ -1209,7 +1248,7 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-cipher/1.0.1: + /browserify-cipher@1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 @@ -1217,7 +1256,7 @@ packages: evp_bytestokey: 1.0.3 dev: true - /browserify-des/1.0.2: + /browserify-des@1.0.2: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 @@ -1226,14 +1265,14 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-rsa/4.1.0: + /browserify-rsa@4.1.0: resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 dev: true - /browserify-sign/4.2.1: + /browserify-sign@4.2.1: resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} dependencies: bn.js: 5.2.1 @@ -1247,17 +1286,18 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-zlib/0.2.0: + /browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 dev: true - /browserify/17.0.0: + /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} hasBin: true dependencies: + JSONStream: 1.3.5 assert: 1.5.0 browser-pack: 6.1.0 browser-resolve: 2.0.0 @@ -1279,7 +1319,6 @@ packages: https-browserify: 1.0.0 inherits: 2.0.4 insert-module-globals: 7.2.1 - JSONStream: 1.3.5 labeled-stream-splicer: 2.0.2 mkdirp-classic: 0.5.3 module-deps: 6.2.3 @@ -1308,7 +1347,7 @@ packages: xtend: 4.0.2 dev: true - /browserslist/4.21.4: + /browserslist@4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1316,49 +1355,49 @@ packages: caniuse-lite: 1.0.30001434 electron-to-chromium: 1.4.284 node-releases: 2.0.6 - update-browserslist-db: 1.0.10_browserslist@4.21.4 + update-browserslist-db: 1.0.10(browserslist@4.21.4) dev: true - /buffer-crc32/0.2.13: + /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-xor/1.0.3: + /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true - /buffer/5.2.1: + /buffer@5.2.1: resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /buffer/5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /builtin-status-codes/3.0.0: + /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true - /bytes-iec/3.1.1: + /bytes-iec@3.1.1: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} dev: true - /cached-path-relative/1.1.0: + /cached-path-relative@1.1.0: resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} dev: true - /caching-transform/4.0.0: + /caching-transform@4.0.0: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} dependencies: @@ -1368,33 +1407,33 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.3 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase/5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001434: + /caniuse-lite@1.0.30001434: resolution: {integrity: sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==} dev: true - /cardinal/2.1.1: + /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true dependencies: @@ -1402,7 +1441,7 @@ packages: redeyed: 2.1.1 dev: true - /chai/4.3.6: + /chai@4.3.6: resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} engines: {node: '>=4'} dependencies: @@ -1415,7 +1454,7 @@ packages: type-detect: 4.0.8 dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -1424,7 +1463,7 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: @@ -1432,11 +1471,11 @@ packages: supports-color: 7.2.0 dev: true - /check-error/1.0.2: + /check-error@1.0.2: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} dev: true - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -1451,42 +1490,42 @@ packages: fsevents: 2.3.2 dev: true - /chownr/1.1.4: + /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true - /chrome-trace-event/1.0.3: + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /cipher-base/1.0.4: + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 dev: true - /clean-stack/2.2.0: + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /clean-stack/3.0.1: + /clean-stack@3.0.1: resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} engines: {node: '>=10'} dependencies: escape-string-regexp: 4.0.0 dev: true - /cli-progress/3.12.0: + /cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} dependencies: string-width: 4.2.3 dev: true - /cliui/6.0.0: + /cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 @@ -1494,7 +1533,7 @@ packages: wrap-ansi: 6.2.0 dev: true - /cliui/7.0.4: + /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: string-width: 4.2.3 @@ -1502,28 +1541,28 @@ packages: wrap-ansi: 7.0.0 dev: true - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /combine-source-map/0.8.0: + /combine-source-map@0.8.0: resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} dependencies: convert-source-map: 1.1.3 @@ -1532,24 +1571,24 @@ packages: source-map: 0.5.7 dev: true - /commander/2.20.3: + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander/9.4.1: + /commander@9.4.1: resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} engines: {node: ^12.20.0 || >=14} dev: true - /commondir/1.0.1: + /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream/1.6.2: + /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: @@ -1559,39 +1598,39 @@ packages: typedarray: 0.0.6 dev: true - /console-browserify/1.2.0: + /console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true - /constants-browserify/1.0.0: + /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true - /convert-source-map/1.1.3: + /convert-source-map@1.1.3: resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} dev: true - /convert-source-map/1.9.0: + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /coverage-badge-creator/1.0.17: + /coverage-badge-creator@1.0.17: resolution: {integrity: sha512-9agGAXGNafW9avCVg5eJF7rzpTRjTbSf3acNxEUQqxUn7WDrnEAlomHyPIosucZuChPxVPgW6Kg3W4nStj/jCg==} hasBin: true dev: true - /create-ecdh/4.0.4: + /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 elliptic: 6.5.4 dev: true - /create-hash/1.2.0: + /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 @@ -1601,7 +1640,7 @@ packages: sha.js: 2.4.11 dev: true - /create-hmac/1.1.7: + /create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 @@ -1612,11 +1651,11 @@ packages: sha.js: 2.4.11 dev: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-fetch/3.1.5: + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 @@ -1624,7 +1663,7 @@ packages: - encoding dev: true - /cross-spawn/6.0.5: + /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -1635,7 +1674,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -1644,7 +1683,7 @@ packages: which: 2.0.2 dev: true - /crypto-browserify/3.12.0: + /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 @@ -1660,23 +1699,11 @@ packages: randomfill: 1.0.4 dev: true - /dash-ast/1.0.0: + /dash-ast@1.0.0: resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} dev: true - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /debug/4.3.4_supports-color@8.1.1: + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -1689,39 +1716,39 @@ packages: supports-color: 8.1.1 dev: true - /decamelize/1.2.0: + /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decamelize/4.0.0: + /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} dev: true - /deep-eql/3.0.1: + /deep-eql@3.0.1: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: type-detect: 4.0.8 dev: true - /deep-is/0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /default-require-extensions/3.0.1: + /default-require-extensions@3.0.1: resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} engines: {node: '>=8'} dependencies: strip-bom: 4.0.0 dev: true - /defined/1.0.1: + /defined@1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} dev: true - /deps-sort/2.0.1: + /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} hasBin: true dependencies: @@ -1731,14 +1758,14 @@ packages: through2: 2.0.5 dev: true - /des.js/1.0.1: + /des.js@1.0.1: resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /detective/5.2.1: + /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true @@ -1748,26 +1775,26 @@ packages: minimist: 1.2.8 dev: true - /devtools-protocol/0.0.981744: + /devtools-protocol@0.0.981744: resolution: {integrity: sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==} dev: true - /diff/3.5.0: + /diff@3.5.0: resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} engines: {node: '>=0.3.1'} dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /diff/5.0.0: + /diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} dev: true - /diffie-hellman/5.0.3: + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.0 @@ -1775,32 +1802,32 @@ packages: randombytes: 2.1.0 dev: true - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /domain-browser/1.2.0: + /domain-browser@1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.7 dev: true - /ejs/3.1.8: + /ejs@3.1.8: resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} engines: {node: '>=0.10.0'} hasBin: true @@ -1808,11 +1835,11 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium/1.4.284: + /electron-to-chromium@1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} dev: true - /elliptic/6.5.4: + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 @@ -1824,17 +1851,17 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /enhanced-resolve/5.11.0: + /enhanced-resolve@5.11.0: resolution: {integrity: sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==} engines: {node: '>=10.13.0'} dependencies: @@ -1842,36 +1869,36 @@ packages: tapable: 2.2.1 dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-module-lexer/0.9.3: + /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es6-error/4.1.1: + /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} dev: true - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -1879,7 +1906,7 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope/7.2.0: + /eslint-scope@7.2.0: resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -1887,17 +1914,17 @@ packages: estraverse: 5.3.0 dev: true - /eslint-visitor-keys/3.4.1: + /eslint-visitor-keys@3.4.1: resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.42.0: + /eslint@8.42.0: resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@8.42.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@eslint-community/regexpp': 4.5.0 '@eslint/eslintrc': 2.0.3 '@eslint/js': 8.42.0 @@ -1907,7 +1934,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.0 @@ -1940,36 +1967,36 @@ packages: - supports-color dev: true - /espree/9.5.2: + /espree@9.5.2: resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.1 - acorn-jsx: 5.3.2_acorn@8.8.1 + acorn-jsx: 5.3.2(acorn@8.8.1) eslint-visitor-keys: 3.4.1 dev: true - /esprima/4.0.1: + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery/1.4.2: + /esquery@1.4.2: resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estimo/2.3.6: + /estimo@2.3.6: resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} engines: {node: '>=12'} hasBin: true @@ -1986,39 +2013,39 @@ packages: - utf-8-validate dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /evp_bytestokey/1.0.3: + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 dev: true - /extract-zip/2.0.1: + /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -2027,7 +2054,7 @@ packages: - supports-color dev: true - /fancy-test/2.0.23: + /fancy-test@2.0.23: resolution: {integrity: sha512-RPX4iAzAioH9nxkqk2yrcunBLBmnMLxtIsw3Pjgj2PGPHTdT3wZ6asKv9U332+UQyZwZWWc4bP64JOa6DcVhnQ==} engines: {node: '>=12.0.0'} dependencies: @@ -2043,11 +2070,11 @@ packages: - supports-color dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob/3.2.12: + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: @@ -2058,58 +2085,58 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dependencies: fastest-levenshtein: 1.0.16 dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastest-levenshtein/1.0.16: + /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} dev: true - /fastq/1.13.0: + /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 dev: true - /fd-slicer/1.1.0: + /fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 dev: true - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /filelist/1.0.4: + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.0 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /find-cache-dir/3.3.2: + /find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} dependencies: @@ -2118,12 +2145,12 @@ packages: pkg-dir: 4.2.0 dev: true - /find-chrome-bin/0.1.0: + /find-chrome-bin@0.1.0: resolution: {integrity: sha512-XoFZwaEn1R3pE6zNG8kH64l2e093hgB9+78eEKPmJK0o1EXEou+25cEWdtu2qq4DBQPDSe90VJAWVI2Sz9pX6Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -2131,7 +2158,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -2139,7 +2166,7 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache/3.0.4: + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -2147,22 +2174,22 @@ packages: rimraf: 3.0.2 dev: true - /flat/5.0.2: + /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true dev: true - /flatted/3.2.7: + /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /foreground-child/2.0.0: + /foreground-child@2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} dependencies: @@ -2170,15 +2197,15 @@ packages: signal-exit: 3.0.7 dev: true - /fromentries/1.3.2: + /fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} dev: true - /fs-constants/1.0.0: + /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true - /fs-extra/9.1.0: + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -2188,11 +2215,11 @@ packages: universalify: 2.0.0 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -2200,29 +2227,29 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /gensync/1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-assigned-identifiers/1.2.0: + /get-assigned-identifiers@1.2.0: resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} dev: true - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-func-name/2.0.0: + /get-func-name@2.0.0: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} dev: true - /get-intrinsic/1.1.3: + /get-intrinsic@1.1.3: resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} dependencies: function-bind: 1.1.1 @@ -2230,37 +2257,37 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stream/5.2.0: + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob-parent/6.0.2: + /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true - /glob-to-regexp/0.4.1: + /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob/7.2.0: + /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} dependencies: fs.realpath: 1.0.0 @@ -2271,7 +2298,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -2282,19 +2309,19 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals/11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals/13.19.0: + /globals@13.19.0: resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -2306,54 +2333,54 @@ packages: slash: 3.0.0 dev: true - /gopd/1.0.1: + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.1.3 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /grapheme-splitter/1.0.4: + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphemer/1.4.0: + /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /hash-base/3.1.0: + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} dependencies: @@ -2362,14 +2389,14 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js/1.1.7: + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hasha/5.2.2: + /hasha@5.2.2: resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} engines: {node: '>=8'} dependencies: @@ -2377,12 +2404,12 @@ packages: type-fest: 0.8.1 dev: true - /he/1.2.0: + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true - /hmac-drbg/1.0.1: + /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 @@ -2390,44 +2417,44 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /html-escaper/2.0.2: + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /htmlescape/1.1.1: + /htmlescape@1.1.1: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} engines: {node: '>=0.10'} dev: true - /https-browserify/1.0.0: + /https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /hyperlinker/1.0.0: + /hyperlinker@1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore/5.2.0: + /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} dev: true - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -2435,46 +2462,46 @@ packages: resolve-from: 4.0.0 dev: true - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string/4.0.0: + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.1: + /inherits@2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-source-map/0.6.2: + /inline-source-map@0.6.2: resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} dependencies: source-map: 0.5.7 dev: true - /insert-module-globals/7.2.1: + /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: + JSONStream: 1.3.5 acorn-node: 1.8.2 combine-source-map: 0.8.0 concat-stream: 1.6.2 is-buffer: 1.1.6 - JSONStream: 1.3.5 path-is-absolute: 1.0.1 process: 0.11.10 through2: 2.0.5 @@ -2482,7 +2509,7 @@ packages: xtend: 4.0.2 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -2490,83 +2517,83 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.11.0: + /is-core-module@2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 dev: true - /is-docker/2.2.1: + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-path-inside/3.0.3: + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} dev: true - /is-plain-obj/2.1.0: + /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-typed-array/1.1.10: + /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -2577,52 +2604,52 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-typedarray/1.0.0: + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true - /is-unicode-supported/0.1.0: + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true - /is-utf8/0.2.1: + /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-windows/1.0.2: + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /is-wsl/2.2.0: + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /istanbul-lib-coverage/3.2.0: + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-hook/3.0.0: + /istanbul-lib-hook@3.0.0: resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} engines: {node: '>=8'} dependencies: append-transform: 2.0.0 dev: true - /istanbul-lib-instrument/4.0.3: + /istanbul-lib-instrument@4.0.3: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: @@ -2634,7 +2661,7 @@ packages: - supports-color dev: true - /istanbul-lib-processinfo/2.0.3: + /istanbul-lib-processinfo@2.0.3: resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} engines: {node: '>=8'} dependencies: @@ -2646,7 +2673,7 @@ packages: uuid: 8.3.2 dev: true - /istanbul-lib-report/3.0.0: + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -2655,18 +2682,18 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps/4.0.1: + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports/3.1.5: + /istanbul-reports@3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -2674,7 +2701,7 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jake/10.8.5: + /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} hasBin: true @@ -2685,7 +2712,7 @@ packages: minimatch: 3.1.2 dev: true - /jest-worker/27.5.1: + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: @@ -2694,11 +2721,11 @@ packages: supports-color: 8.1.1 dev: true - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -2706,55 +2733,56 @@ packages: esprima: 4.0.1 dev: true - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true - /jsesc/2.5.2: + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-parse-even-better-errors/3.0.0: + /json-parse-even-better-errors@3.0.0: resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json-stringify-safe/5.0.1: + /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /json5/1.0.1: + /json5@1.0.1: resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} hasBin: true + requiresBuild: true dependencies: minimist: 1.2.8 dev: true optional: true - /json5/2.2.1: + /json5@2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} hasBin: true dev: true - /jsonfile/6.1.0: + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 @@ -2762,19 +2790,19 @@ packages: graceful-fs: 4.2.10 dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /labeled-stream-splicer/2.0.2: + /labeled-stream-splicer@2.0.2: resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} dependencies: inherits: 2.0.4 stream-splicer: 2.0.1 dev: true - /levn/0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -2782,47 +2810,47 @@ packages: type-check: 0.4.0 dev: true - /lilconfig/2.0.6: + /lilconfig@2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} dev: true - /loader-runner/4.3.0: + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path/6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.flattendeep/4.4.0: + /lodash.flattendeep@4.4.0: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} dev: true - /lodash.memoize/3.0.4: + /lodash.memoize@3.0.4: resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} dev: true - /lodash.merge/4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /log-symbols/4.1.0: + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: @@ -2830,38 +2858,38 @@ packages: is-unicode-supported: 0.1.0 dev: true - /loose-envify/1.4.0: + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 dev: true - /loupe/2.3.6: + /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: get-func-name: 2.0.0 dev: true - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /make-dir/3.1.0: + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /md5.js/1.3.5: + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 @@ -2869,16 +2897,16 @@ packages: safe-buffer: 5.2.1 dev: true - /merge-stream/2.0.0: + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -2886,7 +2914,7 @@ packages: picomatch: 2.3.1 dev: true - /miller-rabin/4.0.1: + /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true dependencies: @@ -2894,68 +2922,68 @@ packages: brorand: 1.1.0 dev: true - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimalistic-crypto-utils/1.0.1: + /minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch/5.0.1: + /minimatch@5.0.1: resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimatch/5.1.0: + /minimatch@5.1.0: resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mkdirp-classic/0.5.3: + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true - /mkdirp/0.5.6: + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mkdirp/3.0.1: + /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true dev: true - /mocha/10.2.0: + /mocha@10.2.0: resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} engines: {node: '>= 14.0.0'} hasBin: true @@ -2963,7 +2991,7 @@ packages: ansi-colors: 4.1.1 browser-stdout: 1.3.1 chokidar: 3.5.3 - debug: 4.3.4_supports-color@8.1.1 + debug: 4.3.4(supports-color@8.1.1) diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -2983,15 +3011,16 @@ packages: yargs-unparser: 2.0.0 dev: true - /mock-stdin/1.0.0: + /mock-stdin@1.0.0: resolution: {integrity: sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==} dev: true - /module-deps/6.2.3: + /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} hasBin: true dependencies: + JSONStream: 1.3.5 browser-resolve: 2.0.0 cached-path-relative: 1.1.0 concat-stream: 1.6.2 @@ -2999,7 +3028,6 @@ packages: detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 - JSONStream: 1.3.5 parents: 1.0.1 readable-stream: 2.3.7 resolve: 1.22.1 @@ -3009,57 +3037,57 @@ packages: xtend: 4.0.2 dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /ms/2.1.3: + /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /nanoid/3.3.3: + /nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /nanoid/3.3.4: + /nanoid@3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /nanospinner/1.1.0: + /nanospinner@1.1.0: resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} dependencies: picocolors: 1.0.0 dev: true - /natural-compare-lite/1.4.0: + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /natural-orderby/2.0.3: + /natural-orderby@2.0.3: resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} dev: true - /neo-async/2.6.2: + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /nice-try/1.0.5: + /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /nock/13.3.1: + /nock@13.3.1: resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} engines: {node: '>= 10.13'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) json-stringify-safe: 5.0.1 lodash: 4.17.21 propagate: 2.0.1 @@ -3067,7 +3095,7 @@ packages: - supports-color dev: true - /node-fetch/2.6.7: + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -3079,23 +3107,23 @@ packages: whatwg-url: 5.0.0 dev: true - /node-preload/0.2.1: + /node-preload@0.2.1: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} engines: {node: '>=8'} dependencies: process-on-spawn: 1.0.0 dev: true - /node-releases/2.0.6: + /node-releases@2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /nyc/15.1.0: + /nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} hasBin: true @@ -3131,23 +3159,23 @@ packages: - supports-color dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-treeify/1.1.33: + /object-treeify@1.1.33: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /optionator/0.9.1: + /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -3159,57 +3187,57 @@ packages: word-wrap: 1.2.3 dev: true - /os-browserify/0.3.0: + /os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true - /outpipe/1.1.1: + /outpipe@1.1.1: resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} dependencies: shell-quote: 1.7.4 dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map/3.0.0: + /p-map@3.0.0: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} engines: {node: '>=8'} dependencies: aggregate-error: 3.1.0 dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /package-hash/4.0.0: + /package-hash@4.0.0: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} dependencies: @@ -3219,24 +3247,24 @@ packages: release-zalgo: 1.0.0 dev: true - /pako/1.0.11: + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parents/1.0.1: + /parents@1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} dependencies: path-platform: 0.11.15 dev: true - /parse-asn1/5.1.6: + /parse-asn1@5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} dependencies: asn1.js: 5.4.1 @@ -3246,63 +3274,63 @@ packages: safe-buffer: 5.2.1 dev: true - /parse-json/2.2.0: + /parse-json@2.2.0: resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} engines: {node: '>=0.10.0'} dependencies: error-ex: 1.3.2 dev: true - /password-prompt/1.1.2: + /password-prompt@1.1.2: resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} dependencies: ansi-escapes: 3.2.0 cross-spawn: 6.0.5 dev: true - /path-browserify/1.0.1: + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-key/2.0.1: + /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-platform/0.11.15: + /path-platform@0.11.15: resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} engines: {node: '>= 0.8.0'} dev: true - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /pathval/1.1.1: + /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /pbkdf2/3.1.2: + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} dependencies: @@ -3313,68 +3341,68 @@ packages: sha.js: 2.4.11 dev: true - /pend/1.2.0: + /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier/2.8.8: + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process-on-spawn/1.0.0: + /process-on-spawn@1.0.0: resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} engines: {node: '>=8'} dependencies: fromentries: 1.3.2 dev: true - /process/0.11.10: + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /progress/2.0.3: + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /propagate/2.0.1: + /propagate@2.0.1: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} dev: true - /proxy-from-env/1.1.0: + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true - /public-encrypt/4.0.3: + /public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.0 @@ -3385,32 +3413,32 @@ packages: safe-buffer: 5.2.1 dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/1.4.1: + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /punycode/2.1.1: + /punycode@2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} dev: true - /puppeteer-core/13.7.0: + /puppeteer-core@13.7.0: resolution: {integrity: sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==} engines: {node: '>=10.18.1'} dependencies: cross-fetch: 3.1.5 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.981744 extract-zip: 2.0.1 https-proxy-agent: 5.0.1 @@ -3428,35 +3456,35 @@ packages: - utf-8-validate dev: true - /querystring-es3/0.2.1: + /querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /randomfill/1.0.4: + /randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 dev: true - /react/17.0.2: + /react@17.0.2: resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} engines: {node: '>=0.10.0'} dependencies: @@ -3464,13 +3492,13 @@ packages: object-assign: 4.1.1 dev: true - /read-only-stream/2.0.0: + /read-only-stream@2.0.0: resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} dependencies: readable-stream: 2.3.7 dev: true - /readable-stream/2.3.7: + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 @@ -3482,7 +3510,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -3491,46 +3519,46 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true - /redeyed/2.1.1: + /redeyed@2.1.1: resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} dependencies: esprima: 4.0.1 dev: true - /release-zalgo/1.0.0: + /release-zalgo@1.0.0: resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} engines: {node: '>=4'} dependencies: es6-error: 4.1.1 dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true - /require-main-filename/2.0.0: + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from/5.0.0: + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -3539,68 +3567,68 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /ripemd160/2.0.2: + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 dev: true - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /run-script-os/1.1.6: + /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} hasBin: true dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /schema-utils/3.1.1: + /schema-utils@3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /semver/5.7.1: + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver/6.3.0: + /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver/7.3.8: + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} hasBin: true @@ -3608,17 +3636,17 @@ packages: lru-cache: 6.0.0 dev: true - /serialize-javascript/6.0.0: + /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: randombytes: 2.1.0 dev: true - /set-blocking/2.0.0: + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /sha.js/2.4.11: + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: @@ -3626,49 +3654,49 @@ packages: safe-buffer: 5.2.1 dev: true - /shasum-object/1.0.0: + /shasum-object@1.0.0: resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} dependencies: fast-safe-stringify: 2.1.1 dev: true - /shebang-command/1.2.0: + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex/1.0.0: + /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /shell-quote/1.7.4: + /shell-quote@1.7.4: resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /simple-concat/1.0.1: + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true - /size-limit/8.2.4: + /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} hasBin: true @@ -3681,29 +3709,29 @@ packages: picocolors: 1.0.0 dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /spawn-wrap/2.0.0: + /spawn-wrap@2.0.0: resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} engines: {node: '>=8'} dependencies: @@ -3715,35 +3743,35 @@ packages: which: 2.0.2 dev: true - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stdout-stderr/0.1.13: + /stdout-stderr@0.1.13: resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} engines: {node: '>=8.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) strip-ansi: 6.0.1 transitivePeerDependencies: - supports-color dev: true - /stream-browserify/3.0.0: + /stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 readable-stream: 3.6.0 dev: true - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.7 dev: true - /stream-http/3.2.0: + /stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} dependencies: builtin-status-codes: 3.0.0 @@ -3752,14 +3780,14 @@ packages: xtend: 4.0.2 dev: true - /stream-splicer/2.0.1: + /stream-splicer@2.0.1: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.7 dev: true - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -3768,83 +3796,84 @@ packages: strip-ansi: 6.0.1 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true - /strip-bom/2.0.0: + /strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} dependencies: is-utf8: 0.2.1 dev: true - /strip-bom/3.0.0: + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + requiresBuild: true dependencies: is-utf8: 0.2.1 dev: true optional: true - /strip-bom/4.0.0: + /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-json-comments/2.0.1: + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /subarg/1.0.0: + /subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} dependencies: minimist: 1.2.8 dev: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-hyperlinks/2.3.0: + /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} dependencies: @@ -3852,23 +3881,23 @@ packages: supports-color: 7.2.0 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /syntax-error/1.4.0: + /syntax-error@1.4.0: resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} dependencies: acorn-node: 1.8.2 dev: true - /tapable/2.2.1: + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /tar-fs/2.1.1: + /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} dependencies: chownr: 1.1.4 @@ -3877,7 +3906,7 @@ packages: tar-stream: 2.2.0 dev: true - /tar-stream/2.2.0: + /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} dependencies: @@ -3888,7 +3917,7 @@ packages: readable-stream: 3.6.0 dev: true - /terser-webpack-plugin/5.3.6_qhjalvwy6qa52ff3tsbji3uinu: + /terser-webpack-plugin@5.3.6(uglify-js@3.17.4)(webpack@5.75.0): resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -3910,10 +3939,10 @@ packages: serialize-javascript: 6.0.0 terser: 5.15.1 uglify-js: 3.17.4 - webpack: 5.75.0_uglify-js@3.17.4 + webpack: 5.75.0(uglify-js@3.17.4) dev: true - /terser/5.15.1: + /terser@5.15.1: resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} engines: {node: '>=10'} hasBin: true @@ -3924,7 +3953,7 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude/6.0.0: + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -3933,51 +3962,51 @@ packages: minimatch: 3.1.2 dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true - /timers-browserify/1.4.2: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /timers-browserify@1.4.2: resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} engines: {node: '>=0.6.0'} dependencies: process: 0.11.10 dev: true - /to-fast-properties/2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /ts-mocha/10.0.0_mocha@10.2.0: + /ts-mocha@10.0.0(mocha@10.2.0): resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} hasBin: true @@ -3990,7 +4019,7 @@ packages: tsconfig-paths: 3.14.1 dev: true - /ts-node/10.9.1_sz2hep2ld4tbz4lvm5u3llauiu: + /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4021,7 +4050,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/7.0.1: + /ts-node@7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} hasBin: true @@ -4036,7 +4065,7 @@ packages: yn: 2.0.0 dev: true - /tsconfig-paths/3.14.1: + /tsconfig-paths@3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} requiresBuild: true dependencies: @@ -4047,7 +4076,7 @@ packages: dev: true optional: true - /tsconfig/5.0.3: + /tsconfig@5.0.3: resolution: {integrity: sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==} dependencies: any-promise: 1.3.0 @@ -4056,7 +4085,7 @@ packages: strip-json-comments: 2.0.1 dev: true - /tsify/5.0.4_4yjx665a5l6j7n3wjjaet7t3dm: + /tsify@5.0.4(browserify@17.0.0)(typescript@5.1.3): resolution: {integrity: sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==} engines: {node: '>=0.12'} peerDependencies: @@ -4073,14 +4102,14 @@ packages: typescript: 5.1.3 dev: true - /tslib/1.14.1: + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsutils/3.21.0_typescript@5.1.3: + /tsutils@3.21.0(typescript@5.1.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -4090,72 +4119,72 @@ packages: typescript: 5.1.3 dev: true - /tty-browserify/0.0.1: + /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: true - /type-fest/0.8.1: + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /typedarray-to-buffer/3.1.5: + /typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true - /typedarray/0.0.6: + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript/5.1.3: + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true dev: true - /uglify-js/3.17.4: + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true dev: true - /umd/3.0.3: + /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} hasBin: true dev: true - /unbzip2-stream/1.4.3: + /unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} dependencies: buffer: 5.7.1 through: 2.3.8 dev: true - /undeclared-identifiers/1.1.3: + /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} hasBin: true dependencies: @@ -4166,12 +4195,12 @@ packages: xtend: 4.0.2 dev: true - /universalify/2.0.0: + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.4: + /update-browserslist-db@1.0.10(browserslist@4.21.4): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: @@ -4182,30 +4211,30 @@ packages: picocolors: 1.0.0 dev: true - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util/0.10.3: + /util@0.10.3: resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} dependencies: inherits: 2.0.1 dev: true - /util/0.12.5: + /util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} dependencies: inherits: 2.0.4 @@ -4215,25 +4244,25 @@ packages: which-typed-array: 1.1.9 dev: true - /uuid/8.3.2: + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - /uuid/9.0.0: + /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /vm-browserify/1.1.2: + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /watchify/4.0.0: + /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} hasBin: true @@ -4247,7 +4276,7 @@ packages: xtend: 4.0.2 dev: true - /watchpack/2.4.0: + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: @@ -4255,16 +4284,16 @@ packages: graceful-fs: 4.2.10 dev: true - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /webpack-sources/3.2.3: + /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack/5.75.0_uglify-js@3.17.4: + /webpack@5.75.0(uglify-js@3.17.4): resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -4280,7 +4309,7 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.1 - acorn-import-assertions: 1.8.0_acorn@8.8.1 + acorn-import-assertions: 1.8.0(acorn@8.8.1) browserslist: 4.21.4 chrome-trace-event: 1.0.3 enhanced-resolve: 5.11.0 @@ -4295,7 +4324,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_qhjalvwy6qa52ff3tsbji3uinu + terser-webpack-plugin: 5.3.6(uglify-js@3.17.4)(webpack@5.75.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -4304,18 +4333,18 @@ packages: - uglify-js dev: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: true - /which-module/2.0.0: + /which-module@2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true - /which-typed-array/1.1.9: + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -4327,14 +4356,14 @@ packages: is-typed-array: 1.1.10 dev: true - /which/1.3.1: + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -4342,27 +4371,27 @@ packages: isexe: 2.0.0 dev: true - /widest-line/3.1.0: + /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} dependencies: string-width: 4.2.3 dev: true - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wordwrap/1.0.0: + /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true - /workerpool/6.2.1: + /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true - /wrap-ansi/6.2.0: + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -4371,7 +4400,7 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -4380,11 +4409,11 @@ packages: strip-ansi: 6.0.1 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic/3.0.3: + /write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 @@ -4393,7 +4422,7 @@ packages: typedarray-to-buffer: 3.1.5 dev: true - /ws/8.5.0: + /ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -4406,25 +4435,25 @@ packages: optional: true dev: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n/4.0.3: + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yargs-parser/18.1.3: + /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} dependencies: @@ -4432,12 +4461,12 @@ packages: decamelize: 1.2.0 dev: true - /yargs-parser/20.2.4: + /yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} dev: true - /yargs-unparser/2.0.0: + /yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} dependencies: @@ -4447,7 +4476,7 @@ packages: is-plain-obj: 2.1.0 dev: true - /yargs/15.4.1: + /yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} dependencies: @@ -4464,7 +4493,7 @@ packages: yargs-parser: 18.1.3 dev: true - /yargs/16.2.0: + /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} dependencies: @@ -4477,24 +4506,24 @@ packages: yargs-parser: 20.2.4 dev: true - /yauzl/2.10.0: + /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 dev: true - /yn/2.0.0: + /yn@2.0.0: resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} engines: {node: '>=4'} dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true From 2c1e45277ef556a10bbcb37fa65db0b7f793a440 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 20:36:48 +0100 Subject: [PATCH 072/257] other (#513): Updated pnpm-lock.yaml --- kipper/cli/pnpm-lock.yaml | 41 ++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 30fd41ed8..efaf42e85 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -15,8 +15,8 @@ dependencies: specifier: workspace:~ version: link:../target-ts '@oclif/command': - specifier: 1.8.26 - version: 1.8.26(@oclif/config@1.18.8) + specifier: 1.8.31 + version: 1.8.31(@oclif/config@1.18.8) '@oclif/config': specifier: 1.18.8 version: 1.18.8 @@ -319,8 +319,8 @@ packages: tslib: 2.5.2 dev: true - /@oclif/command@1.8.26(@oclif/config@1.18.2): - resolution: {integrity: sha512-IT9kOLFRMc3s6KJ1FymsNjbHShI211eVgAg+JMiDVl8LXwOJxYe8ybesgL1kpV9IUFByOBwZKNG2mmrVeNBHPg==} + /@oclif/command@1.8.31(@oclif/config@1.18.2): + resolution: {integrity: sha512-5GLT2l8ccxTqog4UBIX6DqdvDXkpDWBIU7tz8Bx+N1CACpY9cXqG6luUqQzLshKaHXx9b/Y4/KF6SvRTg9FN5A==} engines: {node: '>=12.0.0'} peerDependencies: '@oclif/config': ^1 @@ -328,15 +328,15 @@ packages: '@oclif/config': 1.18.2 '@oclif/errors': 1.3.6 '@oclif/help': 1.0.5 - '@oclif/parser': 3.8.11 + '@oclif/parser': 3.8.17 debug: 4.3.4(supports-color@8.1.1) - semver: 7.5.1 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: false - /@oclif/command@1.8.26(@oclif/config@1.18.8): - resolution: {integrity: sha512-IT9kOLFRMc3s6KJ1FymsNjbHShI211eVgAg+JMiDVl8LXwOJxYe8ybesgL1kpV9IUFByOBwZKNG2mmrVeNBHPg==} + /@oclif/command@1.8.31(@oclif/config@1.18.8): + resolution: {integrity: sha512-5GLT2l8ccxTqog4UBIX6DqdvDXkpDWBIU7tz8Bx+N1CACpY9cXqG6luUqQzLshKaHXx9b/Y4/KF6SvRTg9FN5A==} engines: {node: '>=12.0.0'} peerDependencies: '@oclif/config': ^1 @@ -344,9 +344,9 @@ packages: '@oclif/config': 1.18.8 '@oclif/errors': 1.3.6 '@oclif/help': 1.0.5 - '@oclif/parser': 3.8.11 + '@oclif/parser': 3.8.17 debug: 4.3.4(supports-color@8.1.1) - semver: 7.5.1 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: false @@ -518,21 +518,22 @@ packages: tslib: 2.5.0 dev: false - /@oclif/parser@3.8.11: - resolution: {integrity: sha512-B3NweRn1yZw2g7xaF10Zh/zwlqTJJINfU+CRkqll+LaTisSNvZbW0RR9WGan26EqqLp4qzNjzX/e90Ew8l9NLw==} + /@oclif/parser@3.8.17: + resolution: {integrity: sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A==} engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dependencies: '@oclif/errors': 1.3.6 '@oclif/linewrap': 1.0.0 chalk: 4.1.2 - tslib: 2.5.2 + tslib: 2.6.2 dev: false /@oclif/plugin-help@3.3.1: resolution: {integrity: sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ==} engines: {node: '>=8.0.0'} dependencies: - '@oclif/command': 1.8.26(@oclif/config@1.18.2) + '@oclif/command': 1.8.31(@oclif/config@1.18.2) '@oclif/config': 1.18.2 '@oclif/errors': 1.3.5 '@oclif/help': 1.0.5 @@ -3376,6 +3377,14 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -3773,6 +3782,10 @@ packages: /tslib@2.5.2: resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /tslog@3.3.4: resolution: {integrity: sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==} engines: {node: '>=10'} From d63fc8f9a43c02b30aad7691833ae0f4430b656b Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 20:38:59 +0100 Subject: [PATCH 073/257] other: Updated commit format in DEVELOPMENT.md --- DEVELOPMENT.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 1cbe824f1..de18abe69 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -171,13 +171,13 @@ which can be included and used inside a browser without any dependencies. These changes must be committed yourself with a commit message preferably similar to this: ``` - Bumped static index.ts versions to MAJOR.MINOR.PATCH + release: Bumped static index.ts versions to MAJOR.MINOR.PATCH ``` For example: ``` - Bumped static index.ts versions to 0.5.0-rc.0 + release: Bumped static index.ts versions to 0.5.0-rc.0 ``` 4. Bump version with a pre-written script (This will create a tag with the prefix `v`, make a commit and push to From 8fd7dc626c39f3a2c4623e0c0d3b250ee7b1f4cc Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 20:39:38 +0100 Subject: [PATCH 074/257] release: Bumped static index.ts versions to 0.11.0-alpha.1 --- CITATION.cff | 8 ++++---- kipper/cli/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 6043d5273..04bdbbb18 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,8 +13,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.10.4 - description: The GitHub release URL of tag 0.10.4 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.1 + description: The GitHub release URL of tag 0.11.0-alpha.1 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -31,6 +31,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.10.4/LICENSE' -version: 0.10.4 +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/LICENSE' +version: 0.11.0-alpha.1 date-released: '2023-08-15' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 66ae1df74..078a33dab 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.0"; +export const version = "0.11.0-alpha.1"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index f211695c3..6edb6d671 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.0"; +export const version = "0.11.0-alpha.1"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index f74195bcd..4a58e50e9 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.0"; +export const version = "0.11.0-alpha.1"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 762b8b8c9..ad1fb5998 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.0"; +export const version = "0.11.0-alpha.1"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index a3a71dfbc..0606ffe89 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.0"; +export const version = "0.11.0-alpha.1"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From d09f7aa53e8235064a8077cb5e0e6f89ba482c7a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 20:49:21 +0100 Subject: [PATCH 075/257] fix: Fixed issue with running 'bump' --- bump.sh | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bump.sh b/bump.sh index d5475969d..075e51d04 100755 --- a/bump.sh +++ b/bump.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/bin/bash # Enable errors set -e diff --git a/package.json b/package.json index 2e72aa82c..60760ab29 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "browserify": "pnpm --filter \"@kipper/web\" run browserify", "start": "node ./kipper/cli/bin/run", "bump": "run-script-os", - "bump:linux:macos:default": "./bump.sh", + "bump:linux:macos:default": "bash ./bump.sh", "bump:windows": "powershell.exe .\\bump.ps1", "size-limit": "size-limit", "cleanup": "run-script-os", From 7d06e98596af63ec8f37fcdc61c1c5a91ebd0736 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 21:18:32 +0100 Subject: [PATCH 076/257] other: Prettified files --- CHANGELOG.md | 3 +-- kipper/cli/src/decorators.ts | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f834a2b1f..99e569542 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -120,7 +120,6 @@ To use development versions of Kipper download the ### Fixed - - Redeclaration bug causing an `InternalError` after calling the compiler ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). - Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead @@ -132,7 +131,7 @@ To use development versions of Kipper download the added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). - CLI error handling bug as described in [#491](https://github.com/Luna-Klatzer/Kipper/issues/491). This includes multiple bugs where errors were reported as "Unexpected CLI Error". (This is the same fix as in `0.10.4`, but with one - additional edge-case covered. This fix was only added to the dev branch with the release of `0.11.0-alpha.1` i.e. + additional edge-case covered. This fix was only added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). ### Deprecated diff --git a/kipper/cli/src/decorators.ts b/kipper/cli/src/decorators.ts index 24001493a..8f7f4ee58 100644 --- a/kipper/cli/src/decorators.ts +++ b/kipper/cli/src/decorators.ts @@ -21,9 +21,7 @@ export function prettifiedErrors() { try { await originalFunc.call(this); } catch (error) { - const cliError = - error instanceof KipperCLIError || - error instanceof OclifCLIError; + const cliError = error instanceof KipperCLIError || error instanceof OclifCLIError; const internalError = error instanceof KipperInternalError; // Error configuration From 42e06934e3a2edc806bc5eec7262008423d8f9fe Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 21:19:22 +0100 Subject: [PATCH 077/257] Release 0.11.0-alpha.1 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/core/package.json | 10 +++++----- kipper/target-js/package.json | 10 +++++----- kipper/target-ts/package.json | 10 +++++----- kipper/web/package.json | 2 +- package.json | 2 +- 7 files changed, 32 insertions(+), 37 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 6cabdebe9..7cd786531 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊🖥️](#kipper-cli---kippercli-️) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊🖥️](#kipper-cli---kippercli-️) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.0 linux-x64 node-v18.15.0 +@kipper/cli/0.11.0-alpha.1 linux-x64 node-v20.10.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -85,7 +81,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -124,7 +120,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -141,7 +137,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/help.ts)_ ## `kipper run [FILE]` @@ -180,7 +176,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -191,8 +187,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.0/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index b2fe9b623..359d6ef7e 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.11.0-alpha.0", + "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run" diff --git a/kipper/core/package.json b/kipper/core/package.json index c1d79486c..3dae03b3d 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.11.0-alpha.0", + "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", @@ -25,10 +25,10 @@ "size-limit": "8.2.4", "@size-limit/preset-big-lib": "8.2.4" }, - "engines": { - "node": ">=16.0.0", - "pnpm": ">=8" - }, + "engines": { + "node": ">=16.0.0", + "pnpm": ">=8" + }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", "repository": { diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 381cbbb9f..18eef66be 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.0", + "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~" @@ -19,10 +19,10 @@ "ts-node": "10.9.1", "@types/node": "18.16.16" }, - "engines": { - "node": ">=16.0.0", - "pnpm": ">=8" - }, + "engines": { + "node": ">=16.0.0", + "pnpm": ">=8" + }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", "repository": { diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 76911e4a5..6d60295db 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.0", + "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", @@ -20,10 +20,10 @@ "ts-node": "10.9.1", "@types/node": "18.16.16" }, - "engines": { - "node": ">=16.0.0", - "pnpm": ">=8" - }, + "engines": { + "node": ">=16.0.0", + "pnpm": ">=8" + }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", "repository": { diff --git a/kipper/web/package.json b/kipper/web/package.json index 327ba768d..a2f2d9821 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.11.0-alpha.0", + "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index 60760ab29..1d8c5861b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.11.0-alpha.0", + "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From b5f1ca8e3d51df2fb66d6110c32e02248517d374 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 10 Feb 2024 21:36:44 +0100 Subject: [PATCH 078/257] other: Added quality-of-life script add-next-tag in package.json --- DEVELOPMENT.md | 6 +++--- add-next-tag.ps1 | 16 ++++++++++++++++ add-next-tag.sh | 17 +++++++++++++++++ package.json | 5 ++++- 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 add-next-tag.ps1 create mode 100644 add-next-tag.sh diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index de18abe69..9adf587e4 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -223,8 +223,8 @@ which can be included and used inside a browser without any dependencies. pnpm publish --tag alpha; pnpm -r publish --tag alpha ``` - Afterwards ensure the `next` tag is updated for every package using: + Afterwards ensure the `next` tag is updated for every package using (Requires `npm` to be installed): ```bash - npm dist-tag add @ next - ``` + pnpm run add-next-tag MAJOR.MINOR.PATCH + ``` diff --git a/add-next-tag.ps1 b/add-next-tag.ps1 new file mode 100644 index 000000000..0b95a9c68 --- /dev/null +++ b/add-next-tag.ps1 @@ -0,0 +1,16 @@ +#!/usr/bin/env pwsh + +# The first arg is the version +$version = $args[0] + +# Apply to all packages +$(npm dist-tag add kipper@$version next) +$(npm dist-tag add @kipper/cli@$version next) +$(npm dist-tag add @kipper/core@$version next) +$(npm dist-tag add @kipper/target-js@$version next) +$(npm dist-tag add @kipper/target-ts@$version next) +$(npm dist-tag add @kipper/web@$version next) +ExitOnFailure + +# Exit +Exit 0 diff --git a/add-next-tag.sh b/add-next-tag.sh new file mode 100644 index 000000000..7d765182e --- /dev/null +++ b/add-next-tag.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# The first arg is the version +if [ -z "$1" ]; then + printf "ERR: No version identifier supplied!\n" + exit 1 +fi + +version=$1 + +# Apply to all packages +npm dist-tag add kipper@$version next +npm dist-tag add @kipper/cli@$version next +npm dist-tag add @kipper/core@$version next +npm dist-tag add @kipper/target-js@$version next +npm dist-tag add @kipper/target-ts@$version next +npm dist-tag add @kipper/web@$version next diff --git a/package.json b/package.json index 1d8c5861b..4d677b72d 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,9 @@ "size-limit": "size-limit", "cleanup": "run-script-os", "cleanup:linux:macos:default": "rm -rf ./lib/; rm -rf ./kipper/**/lib", - "cleanup:windows": "powershell.exe Remove-Item -R -Force ./lib/; powershell.exe Remove-Item -R -Force ./kipper/**/lib" + "cleanup:windows": "powershell.exe Remove-Item -R -Force ./lib/; powershell.exe Remove-Item -R -Force ./kipper/**/lib", + "add-next-tag": "run-script-os", + "add-next-tag:linux:macos:default": "bash ./add-next-tag.sh", + "add-next-tag:windows": "powershell.exe .\\add-next-tag.ps1" } } From 04e7d794fd8470bdcfec25f1fad975d3d053f2c6 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 11 Feb 2024 17:06:01 +0100 Subject: [PATCH 079/257] other: Fixed outdated GitHub repo urls and refs --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/docs.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/ISSUE_TEMPLATE/other.yml | 2 +- CHANGELOG.md | 162 ++++++++++----------- CONTRIBUTING.md | 2 +- DEVELOPMENT.md | 2 +- README.md | 24 +-- SECURITY.md | 2 +- img/STYLE_GUIDE.md | 4 +- kipper/cli/README.md | 34 ++--- kipper/cli/package.json | 6 +- kipper/cli/src/index.ts | 2 +- kipper/config/package.json | 58 ++++++++ kipper/core/README.md | 26 ++-- kipper/core/package.json | 4 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/README.md | 24 +-- kipper/target-js/package.json | 4 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/README.md | 24 +-- kipper/target-ts/package.json | 4 +- kipper/target-ts/src/index.ts | 2 +- kipper/web/README.md | 24 +-- kipper/web/package.json | 4 +- package.json | 4 +- 27 files changed, 244 insertions(+), 186 deletions(-) create mode 100644 kipper/config/package.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 0cf7eaba4..21159a7e0 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -7,7 +7,7 @@ body: - type: checkboxes attributes: label: Is there an existing issue for this? - description: Please [search here](https://github.com/Luna-Klatzer/Kipper/issues) to see if an issue already exists for your problem. + description: Please [search here](https://github.com/Kipper-Lang/Kipper/issues) to see if an issue already exists for your problem. options: - label: I have searched the existing issues required: true diff --git a/.github/ISSUE_TEMPLATE/docs.yml b/.github/ISSUE_TEMPLATE/docs.yml index 758d1ec70..b15e03719 100644 --- a/.github/ISSUE_TEMPLATE/docs.yml +++ b/.github/ISSUE_TEMPLATE/docs.yml @@ -7,7 +7,7 @@ body: - type: checkboxes attributes: label: Is there an existing issue for this? - description: Please [search here](https://github.com/Luna-Klatzer/Kipper/issues) to see if an issue already exists for your problem. + description: Please [search here](https://github.com/Kipper-Lang/Kipper/issues) to see if an issue already exists for your problem. options: - label: I have searched the existing issues required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index da2bf5ca8..83405eb7a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -7,7 +7,7 @@ body: - type: checkboxes attributes: label: Is there an existing proposal for this? - description: Please [search here](https://github.com/Luna-Klatzer/Kipper/issues) to see if an issue already exists for your problem. + description: Please [search here](https://github.com/Kipper-Lang/Kipper/issues) to see if an issue already exists for your problem. options: - label: I have searched the existing issues required: true diff --git a/.github/ISSUE_TEMPLATE/other.yml b/.github/ISSUE_TEMPLATE/other.yml index c98015eb1..bf6f901b8 100644 --- a/.github/ISSUE_TEMPLATE/other.yml +++ b/.github/ISSUE_TEMPLATE/other.yml @@ -7,7 +7,7 @@ body: - type: checkboxes attributes: label: Is there an existing issue for this? - description: Please [search here](https://github.com/Luna-Klatzer/Kipper/issues) to see if an issue already exists for your problem. + description: Please [search here](https://github.com/Kipper-Lang/Kipper/issues) to see if an issue already exists for your problem. options: - label: I have searched the existing issues required: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 99e569542..385824b81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ To use development versions of Kipper download the ### Added - Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. - ([#287](https://github.com/Luna-Klatzer/Kipper/issues/287)). + ([#287](https://github.com/Kipper-Lang/Kipper/issues/287)). - New valid conversions: - `void` to `str`. - `null` to `str`. @@ -76,7 +76,7 @@ To use development versions of Kipper download the ### Changed -- Standardised error output for the CLI as described in [#435](https://github.com/Luna-Klatzer/Kipper/issues/435). +- Standardised error output for the CLI as described in [#435](https://github.com/Kipper-Lang/Kipper/issues/435). (This is the same change as in `0.10.3`, but was only added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` does _not_ have this change). - Made `VoidOrNullOrUndefinedPrimaryExpression` a constant expression and inherit from the `ConstantExpression` class. @@ -121,15 +121,15 @@ To use development versions of Kipper download the ### Fixed - Redeclaration bug causing an `InternalError` after calling the compiler - ([#462](https://github.om/Luna-Klatzer/Kipper/issues/462)). + ([#462](https://github.om/Kipper-Lang/Kipper/issues/462)). - Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). - Bug of invalid underline indent in error traceback. - ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). + ([#434](https://github.com/Kipper-Lang/Kipper/issues/434)). - CLI bug where the `-t` shortcut flag was incorrectly shown for the command `help compile`. - ([#451](https://github.com/Luna-Klatzer/Kipper/issues/451)) (This is the same fix as in `0.10.3`, but was only + ([#451](https://github.com/Kipper-Lang/Kipper/issues/451)) (This is the same fix as in `0.10.3`, but was only added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). -- CLI error handling bug as described in [#491](https://github.com/Luna-Klatzer/Kipper/issues/491). This includes +- CLI error handling bug as described in [#491](https://github.com/Kipper-Lang/Kipper/issues/491). This includes multiple bugs where errors were reported as "Unexpected CLI Error". (This is the same fix as in `0.10.4`, but with one additional edge-case covered. This fix was only added to the dev branch with the release of `0.11.0-alpha.1` i.e. `0.11.0-alpha.0` still has this bug). @@ -151,12 +151,12 @@ To use development versions of Kipper download the ### Fixed -- CLI error handling bug as described in [#491](https://github.com/Luna-Klatzer/Kipper/issues/491). This includes +- CLI error handling bug as described in [#491](https://github.com/Kipper-Lang/Kipper/issues/491). This includes multiple bugs where errors were reported as "Unexpected CLI Error". ### Deprecated -- CLI flag `--abort-on-first-error` in favour of `--no-recover`. [#501](https://github.com/Luna-Klatzer/Kipper/issues/501). +- CLI flag `--abort-on-first-error` in favour of `--no-recover`. [#501](https://github.com/Kipper-Lang/Kipper/issues/501). ## [0.10.3] - 2023-07-22 @@ -169,7 +169,7 @@ To use development versions of Kipper download the ### Changed -- Standardised error output for the CLI as described in [#435](https://github.com/Luna-Klatzer/Kipper/issues/435). +- Standardised error output for the CLI as described in [#435](https://github.com/Kipper-Lang/Kipper/issues/435). - Error message of `KipperInternalError`, which does not have " - Report this bug to the developer using the traceback!" as a suffix anymore. - Changed success message of the `kipper analyse` command `Finished code analysis in ...` to `Done in ...`. @@ -178,7 +178,7 @@ To use development versions of Kipper download the ### Fixed - CLI bug where the `-t` shortcut flag was incorrectly shown for the command `help compile`. - ([#451](https://github.com/Luna-Klatzer/Kipper/issues/451)) + ([#451](https://github.com/Kipper-Lang/Kipper/issues/451)) ## [0.10.2] - 2023-06-16 @@ -195,18 +195,18 @@ To use development versions of Kipper download the ### Fixed - Redeclaration bug causing an `InternalError` after calling the compiler - ([#462](https://github.com/Luna-Klatzer/Kipper/issues/462)). + ([#462](https://github.com/Kipper-Lang/Kipper/issues/462)). - Compiler argument bug in `KipperCompiler`, where `abortOnFirstError` didn't precede `recover`, meaning that instead of an error being thrown the failed result was returned (As defined in the `recover` behaviour, which is incorrect). - Bug of invalid underline indent in error traceback. - ([#434](https://github.com/Luna-Klatzer/Kipper/issues/434)). + ([#434](https://github.com/Kipper-Lang/Kipper/issues/434)). ## [0.10.1] - 2023-02-21 ### Fixed - Bug causing the compiler to not detect the expected useless statement warning for a useless arithmetic - expression. ([#426](https://github.com/Luna-Klatzer/Kipper/issues/426)). + expression. ([#426](https://github.com/Kipper-Lang/Kipper/issues/426)). ## [0.10.0] - 2023-02-19 @@ -214,37 +214,37 @@ To use development versions of Kipper download the - Added full support for custom-defined functions, function arguments, function return evaluation, function scopes/argument referencing and return-value code branch - inspection. ([#183](https://github.om/Luna-Klatzer/Kipper/issues/183)). -- Implemented while-loop iteration statements ([#268](https://github.com/Luna-Klatzer/Kipper/issues/268)). -- Implemented for-loop iteration statements ([#270](https://github.com/Luna-Klatzer/Kipper/issues/270)). + inspection. ([#183](https://github.om/Kipper-Lang/Kipper/issues/183)). +- Implemented while-loop iteration statements ([#268](https://github.com/Kipper-Lang/Kipper/issues/268)). +- Implemented for-loop iteration statements ([#270](https://github.com/Kipper-Lang/Kipper/issues/270)). - JavaScript compilation target with a new monorepo package called `@kipper/target-js`, which implements the semantic analysis and code generation for JavaScript, and provides the class `KipperJavaScriptTarget` (`TargetTS` available as alias), which can be used as the target in - the `CompileConfig`. ([#208](https://github.com/Luna-Klatzer/Kipper/issues/208)). + the `CompileConfig`. ([#208](https://github.com/Kipper-Lang/Kipper/issues/208)). - Standalone web-module package called `@kipper/web`, which from now on will provide the `kipper-standalone.js` script that can be used in a web-application. This also bundles `@kipper/target-js` and `@kipper/target-ts`, which can be also accessed using the identifiers `KipperJS` and `KipperTS` in the web environment. - ([#86](https://github.com/Luna-Klatzer/Kipper/issues/86)). + ([#86](https://github.com/Kipper-Lang/Kipper/issues/86)). - Implemented arithmetic assignment operators `+=`, `-=`, `*=`, `%=` and `/=` - ([#273](https://github.com/Luna-Klatzer/Kipper/issues/273)). + ([#273](https://github.com/Kipper-Lang/Kipper/issues/273)). - Support for unary and postfix increment and decrement (`++`, `--`) expressions - ([#272](https://github.com/Luna-Klatzer/Kipper/issues/272)). + ([#272](https://github.com/Kipper-Lang/Kipper/issues/272)). - Implemented member-access expressions using bracket and slice notation (`[]`, `[:]`), which can be used to access specific elements of a string (In the future, this will also be used to access elements of arrays and objects). - ([#372](https://github.com/Luna-Klatzer/Kipper/issues/372)). + ([#372](https://github.com/Kipper-Lang/Kipper/issues/372)). - Support for single-line comments separated by a newline char. - ([#400](https://github.com/Luna-Klatzer/Kipper/issues/400)). + ([#400](https://github.com/Kipper-Lang/Kipper/issues/400)). - Implemented new built-in function `len()`, which returns the length of a string (In the future also arrays). - ([#411](https://github.com/Luna-Klatzer/Kipper/issues/411)). + ([#411](https://github.com/Kipper-Lang/Kipper/issues/411)). - Support for jump statements `continue` and `break` for iteration statements. - ([#269](https://github.com/Luna-Klatzer/Kipper/issues/269)). + ([#269](https://github.com/Kipper-Lang/Kipper/issues/269)). - New built-in variable `__name__` returning the name of the current file. This also includes general support for built-in variables in the compiler. - ([#412](https://github.com/Luna-Klatzer/Kipper/issues/412)). + ([#412](https://github.com/Kipper-Lang/Kipper/issues/412)). - New built-in Kipper type `null` and `undefined`, and support for the constant identifier `void`, `null` and `undefined`. - Finished implementation of warning reporting system and added warning for useless expression statements. - ([#413](https://github.com/Luna-Klatzer/Kipper/issues/413)). + ([#413](https://github.com/Kipper-Lang/Kipper/issues/413)). - New Kipper CLI flag `-t/--target` to specify the target to use for a compilation or execution. - Use of `"use strict";` in the TypeScript target to enforce the use of strict mode during runtime. - New generic parameter `TypeSemantics` to `ASTNode`, which defines the type data that the AST Node should @@ -456,7 +456,7 @@ To use development versions of Kipper download the the semantic analysis and code generation for TypeScript, and provides the class `KipperTypeScriptTarget` (`TargetTS` available as alias), which can be used as the target in the `CompileConfig`. - Updated behaviour of the Compiler semantic analysis and implemented a basic error recovery system. - ([#198](https://github.com/Luna-Klatzer/Kipper/issues/198)) + ([#198](https://github.com/Kipper-Lang/Kipper/issues/198)) - Updated behaviour of Kipper Compiler semantic analysis and separated primary semantic analysis, type checking and target-specific semantic analysis into their own processing steps. (E.g. First, all AST nodes are semantically analysed, then type checked and semantically analysed for the target language) @@ -567,7 +567,7 @@ To use development versions of Kipper download the ### Changed - Fixed traceback bug for re-declarations inside compound statements generating an invalid error message and traceback. - ([#240](https://github.com/Luna-Klatzer/Kipper/issues/240)) + ([#240](https://github.com/Kipper-Lang/Kipper/issues/240)) - Updated Kipper compiler error message. ## [0.9.1] - 2022-06-29 @@ -584,11 +584,11 @@ To use development versions of Kipper download the - Entry point file for the root package `kipper`, which exports `@kipper/core` allowing the `kipper` package to be used in projects. - Syntax support and code generation for if, else-if and else statements - ([#182](https://github.com/Luna-Klatzer/Kipper/issues/182)). + ([#182](https://github.com/Kipper-Lang/Kipper/issues/182)). - Code generation of expression lists (e.g. expression statements containing multiple child expressions) - ([#173](https://github.com/Luna-Klatzer/Kipper/issues/173)). + ([#173](https://github.com/Kipper-Lang/Kipper/issues/173)). - Code generation for tangled expressions. - ([#203](https://github.com/Luna-Klatzer/Kipper/issues/203)) + ([#203](https://github.com/Kipper-Lang/Kipper/issues/203)) - Comparative and relational expressions, which allow for logical operations and comparisons on expressions. List of all supported operators, which can be used between two expressions. - `!=` (Not Equal Operator) @@ -608,11 +608,11 @@ To use development versions of Kipper download the - `-` (Minus Operator) - Partial support for compiler warnings by allowing `KipperError` instances to be warnings if `isWarning` is set to true and implementing AST-based checks for warnings using the new function `CompilableASTNode.checkForWarnings()`. - ([#199](https://github.com/Luna-Klatzer/Kipper/issues/199)) + ([#199](https://github.com/Kipper-Lang/Kipper/issues/199)) - New flag `-w/--warnings` in the commands `compile`, `run` and `analyse`, which enables logger warnings. - ([#199](https://github.com/Luna-Klatzer/Kipper/issues/199)) + ([#199](https://github.com/Kipper-Lang/Kipper/issues/199)) - Support for hex, binary and octal numbers. (Only minor changes, as previously the syntax for binary, octal and - hex numbers was already added.) ([#184](https://github.com/Luna-Klatzer/Kipper/issues/184)) + hex numbers was already added.) ([#184](https://github.com/Kipper-Lang/Kipper/issues/184)) - New errors: - `InvalidRelationalComparisonTypeError`, which is thrown whenever a relational comparison is used with types that are not comparable. @@ -717,7 +717,7 @@ To use development versions of Kipper download the ### Changed -- Fixed const assignment bug [#188](https://github.com/Luna-Klatzer/Kipper/issues/188), which allowed assignments to +- Fixed const assignment bug [#188](https://github.com/Kipper-Lang/Kipper/issues/188), which allowed assignments to read-only (constant) variables. - Fixed invalid identifier translation of built-in references in the TypeScript target. - Renamed: @@ -757,7 +757,7 @@ To use development versions of Kipper download the ### Added - Implemented type conversion expressions, which allow for the conversion of a value to another type. - ([#133](https://github.com/Luna-Klatzer/Kipper/issues/133)) The following conversions are supported: + ([#133](https://github.com/Kipper-Lang/Kipper/issues/133)) The following conversions are supported: - `str` as `num` - `num` as `str` - `bool` as `str` @@ -767,11 +767,11 @@ To use development versions of Kipper download the so will be blocked by the parser). This also includes a new expression class `BoolPrimaryExpression`, a new target-specific semantics function `KipperTargetSemanticAnalyser.boolPrimaryExpression` and target-specific translation function `KipperTargetCodeGenerator.boolPrimaryExpression`. - ([#134](https://github.com/Luna-Klatzer/Kipper/issues/134)) + ([#134](https://github.com/Kipper-Lang/Kipper/issues/134)) - Implemented reserved identifier checking, which ensures that no declarations overwrite/interfere with an internal - identifier or reserved identifier/keyword. ([#153](https://github.com/Luna-Klatzer/Kipper/issues/153)) + identifier or reserved identifier/keyword. ([#153](https://github.com/Kipper-Lang/Kipper/issues/153)) - Implemented tree-shaking for internal and built-in functions using the new class `KipperOptimiser`, which removes - any function definitions that are not used ([#159](https://github.com/Luna-Klatzer/Kipper/issues/159)). + any function definitions that are not used ([#159](https://github.com/Kipper-Lang/Kipper/issues/159)). - New field `KipperCompileTarget.builtInGenerator`, which will store the built-in generator for each target. - New classes and interfaces: - `KipperTargetBuiltInGenerator`, which updates the behaviour for generating built-in functions. @@ -876,15 +876,15 @@ To use development versions of Kipper download the ### Added - Implemented code generation for declarations, definitions and variable assignments - ([#26](https://github.com/Luna-Klatzer/Kipper/issues/26)). + ([#26](https://github.com/Kipper-Lang/Kipper/issues/26)). - Implemented semantic analysis for `AssignmentExpression` and `VariableDeclaration`. - Implemented support for identifiers references, which means variables can now be used in the following contexts: - As a function call argument: `call print(identifier)` - As a value in an arithmetic expression: `identifier + identifier` or `identifier + 5` - Implemented CLI flag `-s/--stringCode`, which can be used as a replacement for the argument `file`. - ([#100](https://github.com/Luna-Klatzer/Kipper/issues/100)). This flag is available for `kipper analyse`, + ([#100](https://github.com/Kipper-Lang/Kipper/issues/100)). This flag is available for `kipper analyse`, `kipper compile` and `kipper run`) -- Implemented single char flags for the CLI ([#109](https://github.com/Luna-Klatzer/Kipper/issues/109)). +- Implemented single char flags for the CLI ([#109](https://github.com/Kipper-Lang/Kipper/issues/109)). - Additional metadata and stack info when non-compiler errors are thrown during runtime in the CLI. - New fields: - `VariableDeclarationSemantics.value`, which represents the expression that was assigned in the definition. @@ -906,16 +906,16 @@ To use development versions of Kipper download the - Optimised Kipper parsing and lexing process by updating the parsing behaviour in Kipper.g4. Kipper should handle standard expressions a lot faster from no on. -- Fixed bug [#104](https://github.com/Luna-Klatzer/Kipper/issues/104), which caused an invalid evaluation of the return +- Fixed bug [#104](https://github.com/Kipper-Lang/Kipper/issues/104), which caused an invalid evaluation of the return type of string additive expressions causing invalid type errors when used with other expressions. - Fixed CLI issues with unrecognisable non-printable unicode characters, which caused errors with the Antlr4 Parser and Lexer, when reading files using the `utf16le` encoding. -- Fixed NULL character issue [#114](https://github.com/Luna-Klatzer/Kipper/pull/114) when writing TypeScript code onto +- Fixed NULL character issue [#114](https://github.com/Kipper-Lang/Kipper/pull/114) when writing TypeScript code onto files using the `utf16le` encoding. From now on a buffer will be created using the proper encoding (also for `ascii` and `utf8`) that should be properly writable to a file. -- Fixed incomplete translation bug [#118](https://github.com/Luna-Klatzer/Kipper/issues/118) of chained arithmetic +- Fixed incomplete translation bug [#118](https://github.com/Kipper-Lang/Kipper/issues/118) of chained arithmetic expressions with the same operator (`N + N + N`) resulting in incomplete TypeScript code. -- Fixed bug [#111](https://github.com/Luna-Klatzer/Kipper/issues/111), which caused an invalid evaluation of the +- Fixed bug [#111](https://github.com/Kipper-Lang/Kipper/issues/111), which caused an invalid evaluation of the return type of string expressions. - Updated logger messages. - Updated `compiler` folder structure of the core package: @@ -936,7 +936,7 @@ To use development versions of Kipper download the ### Removed - Unnecessary traceback when encountering Kipper runtime errors as explained in - [#110](https://github.com/Luna-Klatzer/Kipper/issues/109). + [#110](https://github.com/Kipper-Lang/Kipper/issues/109). - Option to use unary expressions for the left-hand side of an assignment expression in Kipper.g4. (Only identifiers may be used.) - Option to redeclare variables. From on a variable declaration can only be done once and afterwards the variable may @@ -1092,25 +1092,25 @@ To use development versions of Kipper download the - New function `KipperLogger.reportError()` for reporting and logging errors. - New function `KipperAntlrErrorListener.getSourceCode()` for fetching the source code for a syntax error. -- Proper tracebacks handling for `KipperSyntaxError` ([#42](https://github.com/Luna-Klatzer/Kipper/issues/42)). +- Proper tracebacks handling for `KipperSyntaxError` ([#42](https://github.com/Kipper-Lang/Kipper/issues/42)). - Getter fields `line`, `col`, `filePath` and `tokenSrc` in `KipperError`, which returns the metadata for the error. - Fallback option for Lexer errors, where if `offendingSymbol` is `undefined` the entire line of code is set as - `tokenSrc` ([#36](https://github.com/Luna-Klatzer/Kipper/issues/36)). + `tokenSrc` ([#36](https://github.com/Kipper-Lang/Kipper/issues/36)). - Getter field `KipperParseStream.lines` returning all lines in the source file as an array. ### Changed -- Fixed missing traceback line hinting ([#24](https://github.com/Luna-Klatzer/Kipper/issues/24)). -- Fixed missing error and fatal error logs ([#34](https://github.com/Luna-Klatzer/Kipper/issues/34)). +- Fixed missing traceback line hinting ([#24](https://github.com/Kipper-Lang/Kipper/issues/24)). +- Fixed missing error and fatal error logs ([#34](https://github.com/Kipper-Lang/Kipper/issues/34)). - Renamed function `CompileAssert.error()` to `CompileAssert.throwError()` and added error logging for the error passed as argument. - Renamed `KipperErrorListener` to `KipperAntlrErrorListener`. - Renamed `InternalKipperError` to `KipperInternalError`. -- Fixed usage of default antlr4 listeners for lexer errors ([#36](https://github.com/Luna-Klatzer/Kipper/issues/36)). +- Fixed usage of default antlr4 listeners for lexer errors ([#36](https://github.com/Kipper-Lang/Kipper/issues/36)). ### Removed -- Field `KipperCompiler.errorListener`, as due to ([#42](https://github.com/Luna-Klatzer/Kipper/issues/42)) +- Field `KipperCompiler.errorListener`, as due to ([#42](https://github.com/Kipper-Lang/Kipper/issues/42)) the `KipperAntlrErrorListener` will have to be initialised per compilation, not per compiler instance. - Namespace `Utils` and moved its methods into the global scope of the file to allow the following import scheme `import * as Utils from "@kipper/core/utils"`, where the user can themselves define the wanted scope identifier. @@ -1329,31 +1329,31 @@ To use development versions of Kipper download the - Updated file structure to separate `commands` (for `oclif`) and `compiler` (for the compiler source-code) -[unreleased]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.4...HEAD -[0.10.4]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.3...v0.10.4 -[0.10.3]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.2...v0.10.3 -[0.10.2]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.1...v0.10.2 -[0.10.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.10.0...v0.10.1 -[0.10.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.9.2...v0.10.0 -[0.9.2]: https://github.com/Luna-Klatzer/Kipper/compare/v0.9.1...v0.9.2 -[0.9.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.9.0...v0.9.1 -[0.9.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.8.3...v0.9.0 -[0.8.3]: https://github.com/Luna-Klatzer/Kipper/compare/v0.8.2...v0.8.3 -[0.8.2]: https://github.com/Luna-Klatzer/Kipper/compare/v0.8.1...v0.8.2 -[0.8.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.8.0...v0.8.1 -[0.8.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.7.0...v0.8.0 -[0.7.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.6.1...v0.7.0 -[0.6.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.6.0...v0.6.1 -[0.6.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.5.0...v0.6.0 -[0.5.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.4.0...v0.5.0 -[0.4.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.3.0...v0.4.0 -[0.3.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.2.1...v0.3.0 -[0.2.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.2.0...v0.2.1 -[0.2.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.1.2...v0.2.0 -[0.1.2]: https://github.com/Luna-Klatzer/Kipper/compare/v0.1.1...v0.1.2 -[0.1.1]: https://github.com/Luna-Klatzer/Kipper/compare/v0.0.5...v0.1.1 -[0.1.0]: https://github.com/Luna-Klatzer/Kipper/compare/v0.0.5...v0.1.1 -[0.0.5]: https://github.com/Luna-Klatzer/Kipper/compare/v0.0.3...v0.0.5 -[0.0.4]: https://github.com/Luna-Klatzer/Kipper/compare/v0.0.3...v0.0.5 -[0.0.3]: https://github.com/Luna-Klatzer/Kipper/compare/v0.0.2...v0.0.3 -[0.0.2]: https://github.com/Luna-Klatzer/Kipper/tags/v0.0.2 +[unreleased]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.4...HEAD +[0.10.4]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.3...v0.10.4 +[0.10.3]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.2...v0.10.3 +[0.10.2]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.1...v0.10.2 +[0.10.1]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.0...v0.10.1 +[0.10.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.9.2...v0.10.0 +[0.9.2]: https://github.com/Kipper-Lang/Kipper/compare/v0.9.1...v0.9.2 +[0.9.1]: https://github.com/Kipper-Lang/Kipper/compare/v0.9.0...v0.9.1 +[0.9.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.8.3...v0.9.0 +[0.8.3]: https://github.com/Kipper-Lang/Kipper/compare/v0.8.2...v0.8.3 +[0.8.2]: https://github.com/Kipper-Lang/Kipper/compare/v0.8.1...v0.8.2 +[0.8.1]: https://github.com/Kipper-Lang/Kipper/compare/v0.8.0...v0.8.1 +[0.8.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.7.0...v0.8.0 +[0.7.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.6.1...v0.7.0 +[0.6.1]: https://github.com/Kipper-Lang/Kipper/compare/v0.6.0...v0.6.1 +[0.6.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.5.0...v0.6.0 +[0.5.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.4.0...v0.5.0 +[0.4.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.3.0...v0.4.0 +[0.3.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.2.1...v0.3.0 +[0.2.1]: https://github.com/Kipper-Lang/Kipper/compare/v0.2.0...v0.2.1 +[0.2.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.1.2...v0.2.0 +[0.1.2]: https://github.com/Kipper-Lang/Kipper/compare/v0.1.1...v0.1.2 +[0.1.1]: https://github.com/Kipper-Lang/Kipper/compare/v0.0.5...v0.1.1 +[0.1.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.0.5...v0.1.1 +[0.0.5]: https://github.com/Kipper-Lang/Kipper/compare/v0.0.3...v0.0.5 +[0.0.4]: https://github.com/Kipper-Lang/Kipper/compare/v0.0.3...v0.0.5 +[0.0.3]: https://github.com/Kipper-Lang/Kipper/compare/v0.0.2...v0.0.3 +[0.0.2]: https://github.com/Kipper-Lang/Kipper/tags/v0.0.2 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 06d957a42..8874a821a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,7 +52,7 @@ If you are working on or creating a bug issue, it is important to try and reprod projects that recreate the situation that the bug was encountered in. In case you are creating a bug issue, it is also important to provide steps on how to reproduce the issue and info -about your environment. The [bug issue template](https://github.com/Luna-Klatzer/Kipper/issues/new/choose) will help you +about your environment. The [bug issue template](https://github.com/Kipper-Lang/Kipper/issues/new/choose) will help you ### Feature issue diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 9adf587e4..b539b3a08 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -126,7 +126,7 @@ which can be included and used inside a browser without any dependencies. ## Making a new release 1. Get new version for the next release - (Visit GitHub for the [recommended version](https://github.com/Luna-Klatzer/Kipper/releases)): + (Visit GitHub for the [recommended version](https://github.com/Kipper-Lang/Kipper/releases)): ```bash MAJOR.MINOR.PATCH diff --git a/README.md b/README.md index bb5dd3713..cffd2096a 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@ # The Kipper programming language - `kipper` 🦊✨ [![Version](https://img.shields.io/npm/v/kipper?label=npm%20stable&color=%23cd2620&logo=npm)](https://npmjs.org/package/kipper) -[![Dev Version](https://img.shields.io/github/v/tag/Luna-Klatzer/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) -[![codecov](https://codecov.io/gh/Luna-Klatzer/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) -[![Issues](https://img.shields.io/github/issues/Luna-Klatzer/Kipper)](https://github.com/Luna-Klatzer/Kipper/issues) -[![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan)](https://github.com/Luna-Klatzer/Kipper/blob/main/LICENSE) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Kipper-Lang/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Kipper-Lang/Kipper) +[![Issues](https://img.shields.io/github/issues/Kipper-Lang/Kipper)](https://github.com/Kipper-Lang/Kipper/issues) +[![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan)](https://github.com/Kipper-Lang/Kipper/blob/main/LICENSE) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) @@ -23,8 +23,8 @@ _For more details, you can read more about this project in the sections ["Goals - Docs: https://docs.kipper-lang.org - Playground: https://play.kipper-lang.org - Issue Tracker: https://issues.kipper-lang.org -- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Luna-Klatzer/Kipper/discussions/139) -- Changelog: [View CHANGELOG.md](https://github.com/Luna-Klatzer/Kipper/blob/main/CHANGELOG.md) +- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139) +- Changelog: [View CHANGELOG.md](https://github.com/Kipper-Lang/Kipper/blob/main/CHANGELOG.md) ## Installation @@ -49,7 +49,7 @@ If you are using `pnpm` or `yarn`, use `pnpm i kipper` or `yarn add kipper`. ## Goals & Planned Features -_View the current implementation state in the [Kipper Roadmap 🦊🚧](https://github.com/Luna-Klatzer/Kipper/discussions/139)._ +_View the current implementation state in the [Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139)._ - Full compiler ensured type safety, by analysing and reporting code during compilation. - Duck typing type checking with TypeScript-like interface types for both compile and runtime. @@ -131,7 +131,7 @@ This also enables the usage of Kipper files with the `.kip` extension, which can without having to configure anything yourself. This also allows the input of data over the console and file-interactions, which are not supported inside a browser. -For more info go to the [`@kipper/cli` README](https://github.com/Luna-Klatzer/Kipper/blob/main/kipper/cli/README.md). +For more info go to the [`@kipper/cli` README](https://github.com/Kipper-Lang/Kipper/blob/main/kipper/cli/README.md). ### Locally in your own code with `@kipper/core` 🦊⌨️ @@ -219,15 +219,15 @@ different cases and how Kipper should handle them during runtime. ## Contributing to Kipper If you want to contribute to Kipper, we have a full guide explaining the structure of Kipper and how to use GitHub -issues and pull requests. Check it out [here](https://github.com/Luna-Klatzer/Kipper/blob/main/CONTRIBUTING.md)! +issues and pull requests. Check it out [here](https://github.com/Kipper-Lang/Kipper/blob/main/CONTRIBUTING.md)! -If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Luna-Klatzer/Kipper/discussions)! +If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Kipper-Lang/Kipper/discussions)! We appreciate any feedback or help! Kipper is open-source and free for anyone, help us make it even better! 🦊❤️ ## Copyright and License -![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan) +![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) Copyright (C) 2021-2023 Luna Klatzer @@ -244,7 +244,7 @@ PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -See the [LICENSE](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/LICENSE) +See the [LICENSE](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/LICENSE) for information on terms & conditions for usage. ### FOSSA License Report diff --git a/SECURITY.md b/SECURITY.md index 44ac844f2..b4a093aed 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -27,7 +27,7 @@ View a list of all available NPM versions [here](https://www.npmjs.com/package/@ ## Reporting a Vulnerability Reporting a vulnerability or issue can be done under -the [issues page](https://github.com/Luna-Klatzer/Kipper/issues/new/choose). +the [issues page](https://github.com/Kipper-Lang/Kipper/issues/new/choose). Mark the issue as a bug report, and follow the guidelines inside the issue editor. Be as detailed as possible to avoid too many followup questions. diff --git a/img/STYLE_GUIDE.md b/img/STYLE_GUIDE.md index d98832616..f99c28145 100644 --- a/img/STYLE_GUIDE.md +++ b/img/STYLE_GUIDE.md @@ -19,8 +19,8 @@ ## Primary logo -![](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/img/Kipper-Logo-with-head.png) +![](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/img/Kipper-Logo-with-head.png) ## Fox head logo -![](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/img/Kipper-Fox-Head.png) +![](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/img/Kipper-Fox-Head.png) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 7cd786531..ff0537991 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -1,4 +1,4 @@ -![](https://github.com/Luna-Klatzer/Kipper/raw/main/img/Kipper-Logo-with-head.png) +![](https://github.com/Kipper-Lang/Kipper/raw/main/img/Kipper-Logo-with-head.png) # Kipper CLI - `@kipper/cli` 🦊🖥️ @@ -9,14 +9,14 @@ straightforward, simple, secure and type-safe coding with better efficiency and It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊🖥️ -_For more details, you can read more about this project on the [project repository](https://github.com/Luna-Klatzer/Kipper) +_For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ [![Version](https://img.shields.io/npm/v/@kipper/cli?label=release&color=%23cd2620&logo=npm)](https://npmjs.org/package/@kipper/cli) -[![Dev Version](https://img.shields.io/github/v/tag/Luna-Klatzer/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) -[![codecov](https://codecov.io/gh/Luna-Klatzer/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) -[![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan)](https://github.com/Luna-Klatzer/Kipper/blob/main/LICENSE) -[![Issues](https://img.shields.io/github/issues/Luna-Klatzer/Kipper)](https://github.com/Luna-Klatzer/Kipper/issues) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Kipper-Lang/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Kipper-Lang/Kipper) +[![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan)](https://github.com/Kipper-Lang/Kipper/blob/main/LICENSE) +[![Issues](https://img.shields.io/github/issues/Kipper-Lang/Kipper)](https://github.com/Kipper-Lang/Kipper/issues) [![Install size](https://packagephobia.com/badge?p=@kipper/cli)](https://packagephobia.com/result?p=@kipper/cli) [![Publish size](https://badgen.net/packagephobia/publish/@kipper/cli)](https://packagephobia.com/result?p=@kipper/cli) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) @@ -33,8 +33,8 @@ and the [Kipper website](https://kipper-lang.org)._ - Docs: https://docs.kipper-lang.org - Playground: https://play.kipper-lang.org - Issue Tracker: https://issues.kipper-lang.org -- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Luna-Klatzer/Kipper/discussions/139) -- Changelog: [View CHANGELOG.md](https://github.com/Luna-Klatzer/Kipper/blob/main/CHANGELOG.md) +- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139) +- Changelog: [View CHANGELOG.md](https://github.com/Kipper-Lang/Kipper/blob/main/CHANGELOG.md) # Usage @@ -81,7 +81,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -120,7 +120,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -137,7 +137,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/help.ts)_ ## `kipper run [FILE]` @@ -176,7 +176,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -187,21 +187,21 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Luna-Klatzer/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/version.ts)_ +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper If you want to contribute to Kipper, we have a full guide explaining the structure of Kipper and how to use GitHub -issues and pull requests. Check it out [here](https://github.com/Luna-Klatzer/Kipper/blob/main/CONTRIBUTING.md)! +issues and pull requests. Check it out [here](https://github.com/Kipper-Lang/Kipper/blob/main/CONTRIBUTING.md)! -If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Luna-Klatzer/Kipper/discussions)! +If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Kipper-Lang/Kipper/discussions)! We appreciate any feedback or help! Kipper is open-source and free for anyone, help us make it even better! 🦊❤️ ## Copyright and License -![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan) +![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) Copyright (C) 2021-2023 Luna Klatzer @@ -218,7 +218,7 @@ PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -See the [LICENSE](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/LICENSE) +See the [LICENSE](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/LICENSE) for information on terms & conditions for usage. ### FOSSA License Report diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 359d6ef7e..588fa95b4 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -45,10 +45,10 @@ "LICENSE" ], "homepage": "https://kipper-lang.org", - "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", + "bugs": "https://github.com/Kipper-Lang/Kipper/issues", "repository": { "type": "git", - "url": "https://github.com/Luna-Klatzer/Kipper" + "url": "https://github.com/Kipper-Lang/Kipper" }, "keywords": [ "kipper", @@ -68,7 +68,7 @@ "@oclif/plugin-warn-if-update-available" ], "helpClass": "./lib/help", - "repositoryPrefix": "https://github.com/Luna-Klatzer/Kipper/blob/v<%- version %>/kipper/cli/<%- commandPath %>", + "repositoryPrefix": "https://github.com/Kipper-Lang/Kipper/blob/v<%- version %>/kipper/cli/<%- commandPath %>", "warn-if-update-available": { "timeoutInDays": 7, "message": "<%= config.name %> npm package update available from <%= chalk.greenBright(config.version) %> to <%= chalk.greenBright(latest) %>." diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 078a33dab..66754146c 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -19,4 +19,4 @@ export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars export const license = "GPL-3.0-or-later"; // eslint-disable-next-line no-unused-vars -export const github = "https://github.com/Luna-Klatzer/Kipper"; +export const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/config/package.json b/kipper/config/package.json new file mode 100644 index 000000000..95f778573 --- /dev/null +++ b/kipper/config/package.json @@ -0,0 +1,58 @@ +{ + "name": "@kipper/config", + "description": "The config file support package adding support for kip-config.json 🦊", + "version": "0.11.0-alpha.0", + "author": "Luna-Klatzer @Luna-Klatzer", + "devDependencies": { + "typescript": "5.1.3" + }, + "engines": { + "node": ">=16.0.0", + "pnpm": ">=8" + }, + "homepage": "https://kipper-lang.org", + "bugs": "https://github.com/Kipper-Lang/Kipper/issues", + "repository": { + "type": "git", + "url": "https://github.com/Kipper-Lang/Kipper" + }, + "keywords": [ + "kipper", + "language", + "compiler" + ], + "files": [ + "lib", + "src", + "LICENSE", + "KipperLexer.g4", + "KipperParser.g4" + ], + "size-limit": [ + { + "path": "./kipper-standalone.min.js", + "limit": "200 kB" + }, + { + "path": "./kipper-standalone.js", + "limit": "400 kB" + } + ], + "license": "GPL-3.0-or-later", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "scripts": { + "prepack": "pnpm run build", + "build": "tsc", + "version": "pnpm version", + "antlr4ts": "antlr4ts -visitor -o ./src/compiler/parser/antlr ./KipperLexer.g4 ./KipperParser.g4", + "postantlr4ts": "run-script-os", + "postantlr4ts:linux:macos:default": "cp ./src/compiler/parser/antlr/*.interp ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./", + "postantlr4ts:windows": "copy .\\src\\compiler\\parser\\antlr\\*.interp .\\lib\\compiler\\parser\\antlr\\ /Y && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\lib\\compiler\\parser\\antlr\\ && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\", + "lint": "pnpm run tslint", + "lint:fix": "pnpm run tslint:fix", + "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", + "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix", + "size-limit": "size-limit" + } +} diff --git a/kipper/core/README.md b/kipper/core/README.md index defb2d82d..bb865641b 100644 --- a/kipper/core/README.md +++ b/kipper/core/README.md @@ -1,12 +1,12 @@ -![](https://github.com/Luna-Klatzer/Kipper/raw/main/img/Kipper-Logo-with-head.png) +![](https://github.com/Kipper-Lang/Kipper/raw/main/img/Kipper-Logo-with-head.png) # Kipper Core Package - `@kipper/core` 🦊✨ [![Version](https://img.shields.io/npm/v/@kipper/core?label=npm%20stable&color=%23cd2620&logo=npm)](https://npmjs.org/package/kipper) -[![Dev Version](https://img.shields.io/github/v/tag/Luna-Klatzer/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) -[![codecov](https://codecov.io/gh/Luna-Klatzer/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) -[![Issues](https://img.shields.io/github/issues/Luna-Klatzer/Kipper)](https://github.com/Luna-Klatzer/Kipper/issues) -[![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan)](https://github.com/Luna-Klatzer/Kipper/blob/main/LICENSE) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Kipper-Lang/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Kipper-Lang/Kipper) +[![Issues](https://img.shields.io/github/issues/Kipper-Lang/Kipper)](https://github.com/Kipper-Lang/Kipper/issues) +[![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan)](https://github.com/Kipper-Lang/Kipper/blob/main/LICENSE) [![Install size](https://packagephobia.com/badge?p=@kipper/core)](https://packagephobia.com/result?p=@kipper/core) [![Publish size](https://badgen.net/packagephobia/publish/@kipper/core)](https://packagephobia.com/result?p=@kipper/core) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) @@ -18,7 +18,7 @@ straightforward, simple, secure and type-safe coding with better efficiency and It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 -_For more details, you can read more about this project on the [project repository](https://github.com/Luna-Klatzer/Kipper) +_For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ ## Installation @@ -37,8 +37,8 @@ If you are using `pnpm` or `yarn`, use `pnpm i @kipper/core` or `yarn add @kippe - Docs: https://docs.kipper-lang.org - Playground: https://play.kipper-lang.org - Issue Tracker: https://issues.kipper-lang.org -- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Luna-Klatzer/Kipper/discussions/139) -- Changelog: [View CHANGELOG.md](https://github.com/Luna-Klatzer/Kipper/blob/main/CHANGELOG.md) +- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139) +- Changelog: [View CHANGELOG.md](https://github.com/Kipper-Lang/Kipper/blob/main/CHANGELOG.md) ## How to use Kipper? @@ -97,7 +97,7 @@ This also enables the usage of Kipper files with the `.kip` extension, which can without having to configure anything yourself. This also allows the input of data over the console and file-interactions, which are not supported inside a browser. -For more info go to the [`@kipper/cli` README](https://github.com/Luna-Klatzer/Kipper/blob/main/kipper/cli/README.md). +For more info go to the [`@kipper/cli` README](https://github.com/Kipper-Lang/Kipper/blob/main/kipper/cli/README.md). ### Locally in your own code with `@kipper/core` 🦊⌨️ @@ -149,15 +149,15 @@ Simple example of using the Kipper Compiler in Node.js: ## Contributing to Kipper If you want to contribute to Kipper, we have a full guide explaining the structure of Kipper and how to use GitHub -issues and pull requests. Check it out [here](https://github.com/Luna-Klatzer/Kipper/blob/main/CONTRIBUTING.md)! +issues and pull requests. Check it out [here](https://github.com/Kipper-Lang/Kipper/blob/main/CONTRIBUTING.md)! -If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Luna-Klatzer/Kipper/discussions)! +If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Kipper-Lang/Kipper/discussions)! We appreciate any feedback or help! Kipper is open-source and free for anyone, help us make it even better! 🦊❤️ ## Copyright and License -![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan) +![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) Copyright (C) 2021-2023 Luna Klatzer @@ -174,7 +174,7 @@ PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -See the [LICENSE](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/LICENSE) +See the [LICENSE](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/LICENSE) for information on terms & conditions for usage. ### FOSSA License Report diff --git a/kipper/core/package.json b/kipper/core/package.json index 3dae03b3d..abb0785e7 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -30,10 +30,10 @@ "pnpm": ">=8" }, "homepage": "https://kipper-lang.org", - "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", + "bugs": "https://github.com/Kipper-Lang/Kipper/issues", "repository": { "type": "git", - "url": "https://github.com/Luna-Klatzer/Kipper" + "url": "https://github.com/Kipper-Lang/Kipper" }, "keywords": [ "kipper", diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 6edb6d671..b3377ccfe 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -23,4 +23,4 @@ export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars export const license = "GPL-3.0-or-later"; // eslint-disable-next-line no-unused-vars -export const github = "https://github.com/Luna-Klatzer/Kipper"; +export const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/index.ts b/kipper/index.ts index 4a58e50e9..b02503f3f 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -19,4 +19,4 @@ export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars export const license = "GPL-3.0-or-later"; // eslint-disable-next-line no-unused-vars -export const github = "https://github.com/Luna-Klatzer/Kipper"; +export const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/target-js/README.md b/kipper/target-js/README.md index c0750877c..7b5f966ef 100644 --- a/kipper/target-js/README.md +++ b/kipper/target-js/README.md @@ -1,12 +1,12 @@ -![](https://github.com/Luna-Klatzer/Kipper/raw/main/img/Kipper-Logo-with-head.png) +![](https://github.com/Kipper-Lang/Kipper/raw/main/img/Kipper-Logo-with-head.png) # Kipper JavaScript Target - `@kipper/target-js` 🦊⌨️ [![Version](https://img.shields.io/npm/v/@kipper/target-js?label=npm%20stable&color=%23cd2620&logo=npm)](https://npmjs.org/package/kipper) -[![Dev Version](https://img.shields.io/github/v/tag/Luna-Klatzer/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) -[![codecov](https://codecov.io/gh/Luna-Klatzer/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) -[![Issues](https://img.shields.io/github/issues/Luna-Klatzer/Kipper)](https://github.com/Luna-Klatzer/Kipper/issues) -[![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan)](https://github.com/Luna-Klatzer/Kipper/blob/main/LICENSE) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Kipper-Lang/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Kipper-Lang/Kipper) +[![Issues](https://img.shields.io/github/issues/Kipper-Lang/Kipper)](https://github.com/Kipper-Lang/Kipper/issues) +[![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan)](https://github.com/Kipper-Lang/Kipper/blob/main/LICENSE) [![Install size](https://packagephobia.com/badge?p=@kipper/target-js)](https://packagephobia.com/result?p=@kipper/target-js) [![Publish size](https://badgen.net/packagephobia/publish/@kipper/target-js)](https://packagephobia.com/result?p=@kipper/target-js) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) @@ -18,7 +18,7 @@ straightforward, simple, secure and type-safe coding with better efficiency and It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊 -_For more details, you can read more about this project on the [project repository](https://github.com/Luna-Klatzer/Kipper) +_For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ ## Installation @@ -37,8 +37,8 @@ If you are using `pnpm` or `yarn`, use `pnpm i @kipper/target-js` or `yarn add @ - Docs: https://docs.kipper-lang.org - Playground: https://play.kipper-lang.org - Issue Tracker: https://issues.kipper-lang.org -- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Luna-Klatzer/Kipper/discussions/139) -- Changelog: [View CHANGELOG.md](https://github.com/Luna-Klatzer/Kipper/blob/main/CHANGELOG.md) +- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139) +- Changelog: [View CHANGELOG.md](https://github.com/Kipper-Lang/Kipper/blob/main/CHANGELOG.md) ## Usage @@ -99,15 +99,15 @@ Proper documentation for the Kipper language is available at https://docs.kipper ## Contributing to Kipper If you want to contribute to Kipper, we have a full guide explaining the structure of Kipper and how to use GitHub -issues and pull requests. Check it out [here](https://github.com/Luna-Klatzer/Kipper/blob/main/CONTRIBUTING.md)! +issues and pull requests. Check it out [here](https://github.com/Kipper-Lang/Kipper/blob/main/CONTRIBUTING.md)! -If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Luna-Klatzer/Kipper/discussions)! +If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Kipper-Lang/Kipper/discussions)! We appreciate any feedback or help! Kipper is open-source and free for anyone, help us make it even better! 🦊❤️ ## Copyright and License -![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan) +![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) Copyright (C) 2021-2023 Luna Klatzer @@ -124,7 +124,7 @@ PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -See the [LICENSE](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/LICENSE) +See the [LICENSE](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/LICENSE) for information on terms & conditions for usage. ### FOSSA License Report diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 18eef66be..e9141eb80 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -24,10 +24,10 @@ "pnpm": ">=8" }, "homepage": "https://kipper-lang.org", - "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", + "bugs": "https://github.com/Kipper-Lang/Kipper/issues", "repository": { "type": "git", - "url": "https://github.com/Luna-Klatzer/Kipper" + "url": "https://github.com/Kipper-Lang/Kipper" }, "keywords": [ "kipper", diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index ad1fb5998..436fe830d 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -19,4 +19,4 @@ export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars export const license = "GPL-3.0-or-later"; // eslint-disable-next-line no-unused-vars -export const github = "https://github.com/Luna-Klatzer/Kipper"; +export const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/target-ts/README.md b/kipper/target-ts/README.md index 96b1b77b1..fd9eee73a 100644 --- a/kipper/target-ts/README.md +++ b/kipper/target-ts/README.md @@ -1,12 +1,12 @@ -![](https://github.com/Luna-Klatzer/Kipper/raw/main/img/Kipper-Logo-with-head.png) +![](https://github.com/Kipper-Lang/Kipper/raw/main/img/Kipper-Logo-with-head.png) # Kipper TypeScript Target - `@kipper/target-ts` 🦊⌨️ [![Version](https://img.shields.io/npm/v/@kipper/target-ts?label=npm%20stable&color=%23cd2620&logo=npm)](https://npmjs.org/package/kipper) -[![Dev Version](https://img.shields.io/github/v/tag/Luna-Klatzer/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) -[![codecov](https://codecov.io/gh/Luna-Klatzer/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) -[![Issues](https://img.shields.io/github/issues/Luna-Klatzer/Kipper)](https://github.com/Luna-Klatzer/Kipper/issues) -[![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan)](https://github.com/Luna-Klatzer/Kipper/blob/main/LICENSE) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Kipper-Lang/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Kipper-Lang/Kipper) +[![Issues](https://img.shields.io/github/issues/Kipper-Lang/Kipper)](https://github.com/Kipper-Lang/Kipper/issues) +[![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan)](https://github.com/Kipper-Lang/Kipper/blob/main/LICENSE) [![Install size](https://packagephobia.com/badge?p=@kipper/target-ts)](https://packagephobia.com/result?p=@kipper/target-ts) [![Publish size](https://badgen.net/packagephobia/publish/@kipper/target-ts)](https://packagephobia.com/result?p=@kipper/target-ts) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) @@ -18,7 +18,7 @@ straightforward, simple, secure and type-safe coding with better efficiency and It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊 -_For more details, you can read more about this project on the [project repository](https://github.com/Luna-Klatzer/Kipper) +_For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ ## Installation @@ -37,8 +37,8 @@ If you are using `pnpm` or `yarn`, use `pnpm i @kipper/target-ts` or `yarn add @ - Docs: https://docs.kipper-lang.org - Playground: https://play.kipper-lang.org - Issue Tracker: https://issues.kipper-lang.org -- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Luna-Klatzer/Kipper/discussions/139) -- Changelog: [View CHANGELOG.md](https://github.com/Luna-Klatzer/Kipper/blob/main/CHANGELOG.md) +- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139) +- Changelog: [View CHANGELOG.md](https://github.com/Kipper-Lang/Kipper/blob/main/CHANGELOG.md) ## Usage @@ -95,15 +95,15 @@ Proper documentation for the Kipper language is available at https://docs.kipper ## Contributing to Kipper If you want to contribute to Kipper, we have a full guide explaining the structure of Kipper and how to use GitHub -issues and pull requests. Check it out [here](https://github.com/Luna-Klatzer/Kipper/blob/main/CONTRIBUTING.md)! +issues and pull requests. Check it out [here](https://github.com/Kipper-Lang/Kipper/blob/main/CONTRIBUTING.md)! -If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Luna-Klatzer/Kipper/discussions)! +If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Kipper-Lang/Kipper/discussions)! We appreciate any feedback or help! Kipper is open-source and free for anyone, help us make it even better! 🦊❤️ ## Copyright and License -![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan) +![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) Copyright (C) 2021-2023 Luna Klatzer @@ -120,7 +120,7 @@ PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -See the [LICENSE](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/LICENSE) +See the [LICENSE](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/LICENSE) for information on terms & conditions for usage. ### FOSSA License Report diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 6d60295db..16bff02e9 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -25,10 +25,10 @@ "pnpm": ">=8" }, "homepage": "https://kipper-lang.org", - "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", + "bugs": "https://github.com/Kipper-Lang/Kipper/issues", "repository": { "type": "git", - "url": "https://github.com/Luna-Klatzer/Kipper" + "url": "https://github.com/Kipper-Lang/Kipper" }, "keywords": [ "kipper", diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 0606ffe89..225d19757 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -19,4 +19,4 @@ export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars export const license = "GPL-3.0-or-later"; // eslint-disable-next-line no-unused-vars -export const github = "https://github.com/Luna-Klatzer/Kipper"; +export const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/web/README.md b/kipper/web/README.md index 40b1495a9..52e59387b 100644 --- a/kipper/web/README.md +++ b/kipper/web/README.md @@ -1,12 +1,12 @@ -![](https://github.com/Luna-Klatzer/Kipper/raw/main/img/Kipper-Logo-with-head.png) +![](https://github.com/Kipper-Lang/Kipper/raw/main/img/Kipper-Logo-with-head.png) # Kipper Web Module - `@kipper/web` 🦊🌐 [![Version](https://img.shields.io/npm/v/@kipper/web?label=npm%20stable&color=%23cd2620&logo=npm)](https://npmjs.org/package/kipper) -[![Dev Version](https://img.shields.io/github/v/tag/Luna-Klatzer/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Luna-Klatzer/Kipper/tags) -[![codecov](https://codecov.io/gh/Luna-Klatzer/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Luna-Klatzer/Kipper) -[![Issues](https://img.shields.io/github/issues/Luna-Klatzer/Kipper)](https://github.com/Luna-Klatzer/Kipper/issues) -[![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan)](https://github.com/Luna-Klatzer/Kipper/blob/main/LICENSE) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Kipper-Lang/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Kipper-Lang/Kipper) +[![Issues](https://img.shields.io/github/issues/Kipper-Lang/Kipper)](https://github.com/Kipper-Lang/Kipper/issues) +[![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan)](https://github.com/Kipper-Lang/Kipper/blob/main/LICENSE) [![Install size](https://packagephobia.com/badge?p=@kipper/web)](https://packagephobia.com/result?p=@kipper/web) [![Publish size](https://badgen.net/packagephobia/publish/@kipper/web)](https://packagephobia.com/result?p=@kipper/web) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) @@ -18,7 +18,7 @@ straightforward, simple, secure and type-safe coding with better efficiency and It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊🖥️ -_For more details, you can read more about this project on the [project repository](https://github.com/Luna-Klatzer/Kipper) +_For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ ## General Information @@ -27,8 +27,8 @@ and the [Kipper website](https://kipper-lang.org)._ - Docs: https://docs.kipper-lang.org - Playground: https://play.kipper-lang.org - Issue Tracker: https://issues.kipper-lang.org -- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Luna-Klatzer/Kipper/discussions/139) -- Changelog: [View CHANGELOG.md](https://github.com/Luna-Klatzer/Kipper/blob/main/CHANGELOG.md) +- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139) +- Changelog: [View CHANGELOG.md](https://github.com/Kipper-Lang/Kipper/blob/main/CHANGELOG.md) ## Usage @@ -70,15 +70,15 @@ Proper documentation for the Kipper language is available at https://docs.kipper ## Contributing to Kipper If you want to contribute to Kipper, we have a full guide explaining the structure of Kipper and how to use GitHub -issues and pull requests. Check it out [here](https://github.com/Luna-Klatzer/Kipper/blob/main/CONTRIBUTING.md)! +issues and pull requests. Check it out [here](https://github.com/Kipper-Lang/Kipper/blob/main/CONTRIBUTING.md)! -If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Luna-Klatzer/Kipper/discussions)! +If you have any questions or concerns, you can open up a discussion page [here](https://github.com/Kipper-Lang/Kipper/discussions)! We appreciate any feedback or help! Kipper is open-source and free for anyone, help us make it even better! 🦊❤️ ## Copyright and License -![License](https://img.shields.io/github/license/Luna-Klatzer/Kipper?color=cyan) +![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) Copyright (C) 2021-2023 Luna Klatzer @@ -95,7 +95,7 @@ PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -See the [LICENSE](https://raw.githubusercontent.com/Luna-Klatzer/Kipper/main/LICENSE) +See the [LICENSE](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/LICENSE) for information on terms & conditions for usage. ### FOSSA License Report diff --git a/kipper/web/package.json b/kipper/web/package.json index a2f2d9821..eb395640c 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -26,10 +26,10 @@ "pnpm": ">=8" }, "homepage": "https://kipper-lang.org", - "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", + "bugs": "https://github.com/Kipper-Lang/Kipper/issues", "repository": { "type": "git", - "url": "https://github.com/Luna-Klatzer/Kipper" + "url": "https://github.com/Kipper-Lang/Kipper" }, "keywords": [ "kipper", diff --git a/package.json b/package.json index 4d677b72d..18ce71b46 100644 --- a/package.json +++ b/package.json @@ -48,10 +48,10 @@ "pnpm": ">=8" }, "homepage": "https://kipper-lang.org", - "bugs": "https://github.com/Luna-Klatzer/Kipper/issues", + "bugs": "https://github.com/Kipper-Lang/Kipper/issues", "repository": { "type": "git", - "url": "https://github.com/Luna-Klatzer/Kipper" + "url": "https://github.com/Kipper-Lang/Kipper" }, "keywords": [ "kipper", From 7f62eefc43250719e5169a7c30df4cad7942417c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 11 Feb 2024 19:50:59 +0100 Subject: [PATCH 080/257] major (#508): Implemented core functionality of the '@kipper/config' package --- kipper/config/package.json | 22 +-- kipper/config/pnpm-lock.yaml | 18 +++ kipper/config/src/abstract/config-file.ts | 19 +++ .../config/src/abstract/config-interpreter.ts | 133 ++++++++++++++++++ .../src/abstract/evaluated-config-file.ts | 13 ++ kipper/config/src/errors.ts | 52 +++++++ .../src/evaluated-kipper-config-file.ts | 33 +++++ kipper/config/src/kipper-config-file.ts | 37 +++++ .../config/src/kipper-config-interpreter.ts | 85 +++++++++++ 9 files changed, 393 insertions(+), 19 deletions(-) create mode 100644 kipper/config/pnpm-lock.yaml create mode 100644 kipper/config/src/abstract/config-file.ts create mode 100644 kipper/config/src/abstract/config-interpreter.ts create mode 100644 kipper/config/src/abstract/evaluated-config-file.ts create mode 100644 kipper/config/src/errors.ts create mode 100644 kipper/config/src/evaluated-kipper-config-file.ts create mode 100644 kipper/config/src/kipper-config-file.ts create mode 100644 kipper/config/src/kipper-config-interpreter.ts diff --git a/kipper/config/package.json b/kipper/config/package.json index 95f778573..bc3307c43 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -4,6 +4,7 @@ "version": "0.11.0-alpha.0", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { + "@kipper/cli": "workspace:~", "typescript": "5.1.3" }, "engines": { @@ -24,19 +25,7 @@ "files": [ "lib", "src", - "LICENSE", - "KipperLexer.g4", - "KipperParser.g4" - ], - "size-limit": [ - { - "path": "./kipper-standalone.min.js", - "limit": "200 kB" - }, - { - "path": "./kipper-standalone.js", - "limit": "400 kB" - } + "LICENSE" ], "license": "GPL-3.0-or-later", "main": "lib/index.js", @@ -45,14 +34,9 @@ "prepack": "pnpm run build", "build": "tsc", "version": "pnpm version", - "antlr4ts": "antlr4ts -visitor -o ./src/compiler/parser/antlr ./KipperLexer.g4 ./KipperParser.g4", - "postantlr4ts": "run-script-os", - "postantlr4ts:linux:macos:default": "cp ./src/compiler/parser/antlr/*.interp ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./", - "postantlr4ts:windows": "copy .\\src\\compiler\\parser\\antlr\\*.interp .\\lib\\compiler\\parser\\antlr\\ /Y && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\lib\\compiler\\parser\\antlr\\ && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\", "lint": "pnpm run tslint", "lint:fix": "pnpm run tslint:fix", "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", - "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix", - "size-limit": "size-limit" + "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix" } } diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml new file mode 100644 index 000000000..5243ed7a4 --- /dev/null +++ b/kipper/config/pnpm-lock.yaml @@ -0,0 +1,18 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + typescript: + specifier: 5.1.3 + version: 5.1.3 + +packages: + + /typescript@5.1.3: + resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true diff --git a/kipper/config/src/abstract/config-file.ts b/kipper/config/src/abstract/config-file.ts new file mode 100644 index 000000000..4f56b8dfa --- /dev/null +++ b/kipper/config/src/abstract/config-file.ts @@ -0,0 +1,19 @@ +import type { KipperEncoding } from "@kipper/cli"; + +/** + * An abstract class that represents a configuration file. + * @since 0.11.0 + */ +export abstract class ConfigFile { + public readonly content: string; + public readonly parsedJSON: { [key: string]: any }; + public readonly fileName: string; + public readonly encoding: KipperEncoding; + + protected constructor(content: string, fileName: string, encoding: KipperEncoding) { + this.content = content; + this.parsedJSON = JSON.parse(content); + this.fileName = fileName; + this.encoding = encoding; + } +} diff --git a/kipper/config/src/abstract/config-interpreter.ts b/kipper/config/src/abstract/config-interpreter.ts new file mode 100644 index 000000000..71506b3ec --- /dev/null +++ b/kipper/config/src/abstract/config-interpreter.ts @@ -0,0 +1,133 @@ +import { ConfigFile } from "./config-file"; +import { ConfigValidationError } from "../errors"; + +/** + * A type that represents a configuration scheme. + * @since 0.11.0 + */ +export type ConfigInterpreterScheme = { + [key: string]: { + type: "string" | "number" | "boolean"; + required: boolean; + } | { + type: "array", + required: boolean; + itemType: "string" | "number" | "boolean"; + } | { + type: "object"; + required: boolean; + properties: ConfigInterpreterScheme; + } +}; + +/** + * A type that directly corresponds to the provided scheme and translates it to a TypeScript type + * i.e. a representation of what a valid config file would actually look like if it was parsed. + */ +export type Config = { + [key in keyof Scheme]: Scheme[key] extends { type: "string" } ? + string : + Scheme[key] extends { type: "number", required: false } ? + number : + Scheme[key] extends { type: "boolean" } ? + boolean : + Scheme[key] extends { type: "array", itemType: infer T } ? + T[] : + Scheme[key] extends { type: "object", properties: infer P extends ConfigInterpreterScheme } ? + Config

: + never; +}; + +type example = Config<{ "smth": { type: "object", required: false, properties: { x: { type: "string", required: false } }}}> +var example1: example = {} as example; + +example1.smth.x; + +/** + * An abstract class that interprets a configuration file and returns a configuration object. + * @since 0.11.0 + */ +export abstract class ConfigInterpreter { + scheme: SchemeT; + + protected constructor(scheme: SchemeT) { + this.scheme = scheme; + } + + /** + * Validate a configuration file based off a scheme. + * + * This is intended for basic validation, and should not be used for complex validation. There a custom validation + * methods should be implemented depending on the complexity of the configuration file. + * @param config The configuration file to validate. + * @param parentFiles The parent files of the configuration file. Used to allow for more descriptive error messages + * when recursively validating configuration files. + * @throws ConfigValidationError If the configuration file is invalid. + * @protected + * @since 0.11.0 + */ + protected validateConfigBasedOffScheme(config: ConfigFile, parentFiles: string[]): void { + this.validateConfigBasedOffSchemeRecursive(config, this.scheme, parentFiles); + } + + /** + * Raw recursive function to validate a configuration file based off a scheme. + * @param configFile The configuration file to validate. + * @param scheme The scheme to validate the configuration file against. + * @param parentFiles The parent files of the configuration file. Used to allow for more descriptive error messages + * when recursively validating configuration files. + * @throws ConfigValidationError If the configuration file is invalid. + * @private + * @since 0.11.0 + */ + private validateConfigBasedOffSchemeRecursive( + configFile: ConfigFile, + scheme: ConfigInterpreterScheme, + parentFiles: string[] + ): void { + for (const key in scheme) { + const schemeValue = scheme[key]; + const configValue = configFile.parsedJSON[key]; + + if (schemeValue.required && configValue === undefined) { + throw new ConfigValidationError(`Missing required field "${key}"`, configFile.fileName, parentFiles); + } + + if (schemeValue.type === "object") { + this.validateConfigBasedOffSchemeRecursive( + configValue, + schemeValue.properties, + parentFiles + ); + } else if (schemeValue.type === "array") { + if (!Array.isArray(configValue)) { + throw new ConfigValidationError( + `Field "${key}" is not an array, but it should be`, + configFile.fileName, + parentFiles + ); + } + + for (const value of configValue) { + if (typeof value !== schemeValue.itemType) { + throw new ConfigValidationError( + `Field "${key}" contains an item that is not of type "${schemeValue.itemType}"`, + configFile.fileName, + parentFiles + ); + } + } + } else { + if (typeof configValue !== schemeValue.type) { + throw new ConfigValidationError( + `Field "${key}" is not of type "${schemeValue.type}"`, + configFile.fileName, + parentFiles + ); + } + } + } + } + + abstract loadConfig(config: ConfigFile): Promise; +} diff --git a/kipper/config/src/abstract/evaluated-config-file.ts b/kipper/config/src/abstract/evaluated-config-file.ts new file mode 100644 index 000000000..d4a0c11cf --- /dev/null +++ b/kipper/config/src/abstract/evaluated-config-file.ts @@ -0,0 +1,13 @@ +/** + * A type that represents a processed configuration value. + * @since 0.11.0 + */ +export type EvaluatedConfigValue = undefined | string | number | boolean | Array | EvaluatedConfigFile; + +/** + * A type that represents a processed configuration file. + * @since 0.11.0 + */ +export interface EvaluatedConfigFile { + [key: string]: EvaluatedConfigValue; +} diff --git a/kipper/config/src/errors.ts b/kipper/config/src/errors.ts new file mode 100644 index 000000000..b364360d2 --- /dev/null +++ b/kipper/config/src/errors.ts @@ -0,0 +1,52 @@ +/** + * Generic error for the '@kipper/config' package. + * @since 0.11.0 + */ +export class ConfigError { + public constructor(public message: string, public fileName: string, parentFiles: string[] = []) { + this.message = `${message} (${[fileName, ...parentFiles].join(" -> ")})`; + this.fileName = fileName; + } +} + +/** + * Error that is thrown whenever a validation error is encountered. + * @since 0.11.0 + */ +export class ConfigValidationError extends ConfigError { + public constructor(validationError: string, fileName: string, parentFiles?: string[]) { + super( + `Encountered validation error in file ${fileName}: ${validationError}`, + "ConfigValidationError", + parentFiles, + ); + } +} + +/** + * Error that is thrown whenever an unknown field is encountered. + * @since 0.11.0 + */ +export class UnknownFieldError extends ConfigError { + public constructor(unknownField: string, fileName: string, parentFiles?: string[]) { + super( + `Encountered unknown field in file ${fileName}: ${unknownField}`, + "UnknownFieldError", + parentFiles, + ); + } +} + +/** + * Error that is thrown whenever an extends file is not found. + * @since 0.11.0 + */ +export class UnableToFindExtendsFileError extends ConfigError { + public constructor(fileName: string, parentFiles?: string[]) { + super( + `Unable to find extends file for file ${fileName}`, + "UnableToFindExtendsFileError", + parentFiles, + ); + } +} diff --git a/kipper/config/src/evaluated-kipper-config-file.ts b/kipper/config/src/evaluated-kipper-config-file.ts new file mode 100644 index 000000000..bc4d1ffc2 --- /dev/null +++ b/kipper/config/src/evaluated-kipper-config-file.ts @@ -0,0 +1,33 @@ +import { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract/evaluated-config-file"; + +/** + * A type that represents a path-like object. + * @since 0.11.0 + */ +export type PathLike = string; + +export interface RawEvaluatedKipperConfigFile extends EvaluatedConfigFile { + version: string; + resources: Array; + compiler: { + target: string; + }; +} + +/** + * A class that represents a processed Kipper config file. + * @since 0.11.0 + */ +export class EvaluatedKipperConfigFile implements RawEvaluatedKipperConfigFile { + [key: string]: EvaluatedConfigValue; + + version: RawEvaluatedKipperConfigFile["version"]; + resources: RawEvaluatedKipperConfigFile["resources"]; + compiler: RawEvaluatedKipperConfigFile["compiler"]; + + public constructor(config: RawEvaluatedKipperConfigFile) { + this.version = config.version; + this.resources = config.resources; + this.compiler = config.compiler; + } +} diff --git a/kipper/config/src/kipper-config-file.ts b/kipper/config/src/kipper-config-file.ts new file mode 100644 index 000000000..c90213284 --- /dev/null +++ b/kipper/config/src/kipper-config-file.ts @@ -0,0 +1,37 @@ +import * as fs from 'fs/promises'; +import type { KipperEncoding } from "@kipper/cli"; +import { ConfigFile } from "./abstract/config-file"; +import * as path from "node:path"; + +/** + * A class that represents a Kipper config file. + * @since 0.11.0 + */ +export class KipperConfigFile extends ConfigFile { + protected constructor(content: string, fileName: string = "", encoding: KipperEncoding = "utf8") { + super(content, fileName, encoding); + } + + /** + * Create a new KipperConfigFile from a string. + * @param content The content of the file. + * @param encoding The encoding of the file. As we are running in a JavaScript environment, the default + * {@link encoding} is always assumed to be the internal encoding of the JavaScript environment i.e. UTF-16 (utf16le). + * @since 0.11.0 + */ + static fromString(content: string, encoding: KipperEncoding = "utf16le"): KipperConfigFile { + return new KipperConfigFile(content, "", encoding); + } + + /** + * Create a new KipperConfigFile from a file. + * @param file The file to read. + * @param encoding The encoding of the file. + * @since 0.11.0 + */ + static async fromFile(file: string, encoding: KipperEncoding): Promise { + const fileContent = await fs.readFile(file, { encoding }); + const fileName = path.basename(file); + return new KipperConfigFile(fileContent, fileName, encoding); + } +} diff --git a/kipper/config/src/kipper-config-interpreter.ts b/kipper/config/src/kipper-config-interpreter.ts new file mode 100644 index 000000000..9a35563e6 --- /dev/null +++ b/kipper/config/src/kipper-config-interpreter.ts @@ -0,0 +1,85 @@ +import { Config, ConfigInterpreter, ConfigInterpreterScheme } from "./abstract/config-interpreter"; +import { KipperConfigFile } from "./kipper-config-file"; +import { EvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; + +/** + * A type that represents a Kipper config file. + * @since 0.11.0 + */ +export const KipperConfigScheme = { + extends: { + type: "string", + required: false, + }, + version: { + type: "string", + required: true, + }, + resources: { + type: "array", + required: true, + itemType: "string", + }, + compiler: { + type: "object", + required: true, + properties: { + target: { + type: "string", + required: true, + }, + }, + }, +} satisfies ConfigInterpreterScheme; + +/** + * A type that directly corresponds to the {@link KipperConfigScheme} and translates it to a TypeScript type i.e. a + * representation of what a valid config file would actually look like if it was parsed. + * @since 0.11.0 + */ +export type KipperConfig = Config; + +export class KipperConfigInterpreter extends ConfigInterpreter { + constructor() { + super(KipperConfigScheme); + } + + /** + * Loads and interprets a Kipper config file. + * + * This method will load the config file, validate it, resolve any "extends" fields, and process the config file. + * + * NOTE: If an "extends" fields is present, the encoding of the provided {@link config} will be used for the extended + * config file i.e. all extended config files must have the same encoding as the base config file. This is a + * limitation to simplify the algorithm. + * @param config The config file to load. + * @param parentFiles The parent files of the provided config files. This will be used to indicate where the config + * file was referenced from and will be used to provide more descriptive error messages (e.g. "fileA -> fileB -> + * fileC -> ..."). This will usually not be needed by the user and is primarily used for internal purposes. + */ + async loadConfig(config: KipperConfigFile, parentFiles: string[] = []): Promise { + const configFile: Partial = JSON.parse(config.content); + + // Ensure that the config file is "on a basic level" valid (all required fields are present, etc.) + this.validateConfigBasedOffScheme(config, parentFiles); + const validatedConfigFile = configFile as KipperConfig; + + // Evaluate any "extends" fields in the config file + let extendedConfig: EvaluatedKipperConfigFile | undefined; + if (validatedConfigFile.extends) { + extendedConfig = await this.loadConfig( + await KipperConfigFile.fromFile(validatedConfigFile.extends, config.encoding), + [...parentFiles, config.fileName], + ); + } + + // Process the config file here (e.g., resolve paths, apply extensions, etc.) + return new EvaluatedKipperConfigFile({ + version: validatedConfigFile.version, + resources: validatedConfigFile.resources, + compiler: { + target: validatedConfigFile.compiler.target, + }, + }); + } +} From 1d9cd22e71111e1c5cdb73fc9a6f98d772eaa6ca Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 11 Feb 2024 19:53:18 +0100 Subject: [PATCH 081/257] other: Updated pnpm-lock.yaml --- kipper/config/pnpm-lock.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index 5243ed7a4..256b06251 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false devDependencies: + '@kipper/cli': + specifier: workspace:~ + version: link:../cli typescript: specifier: 5.1.3 version: 5.1.3 From b6ed15f3420d473cfe685f8daf83860101772b6e Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 12 Feb 2024 02:25:46 +0100 Subject: [PATCH 082/257] minor (#508): Properly implemented errors, extended config and added validation for resources, files and version --- kipper/config/package.json | 6 +- kipper/config/pnpm-lock.yaml | 31 +++ .../config/src/abstract/config-interpreter.ts | 94 ++++--- .../src/abstract/evaluated-config-file.ts | 2 +- kipper/config/src/errors.ts | 76 +++-- .../src/evaluated-kipper-config-file.ts | 29 +- kipper/config/src/index.ts | 16 ++ kipper/config/src/kipper-config-file.ts | 5 +- .../config/src/kipper-config-interpreter.ts | 262 +++++++++++++++++- kipper/config/src/tools.ts | 36 +++ 10 files changed, 477 insertions(+), 80 deletions(-) create mode 100644 kipper/config/src/index.ts create mode 100644 kipper/config/src/tools.ts diff --git a/kipper/config/package.json b/kipper/config/package.json index bc3307c43..53ac1f392 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,9 +1,13 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json 🦊", - "version": "0.11.0-alpha.0", + "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", + "dependencies": { + "semver": "7.6.0" + }, "devDependencies": { + "@types/semver": "7.5.7", "@kipper/cli": "workspace:~", "typescript": "5.1.3" }, diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index 256b06251..0b8cd4c8e 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -4,18 +4,49 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +dependencies: + semver: + specifier: 7.6.0 + version: 7.6.0 + devDependencies: '@kipper/cli': specifier: workspace:~ version: link:../cli + '@types/semver': + specifier: 7.5.7 + version: 7.5.7 typescript: specifier: 5.1.3 version: 5.1.3 packages: + /@types/semver@7.5.7: + resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} hasBin: true dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false diff --git a/kipper/config/src/abstract/config-interpreter.ts b/kipper/config/src/abstract/config-interpreter.ts index 71506b3ec..bb1a4365e 100644 --- a/kipper/config/src/abstract/config-interpreter.ts +++ b/kipper/config/src/abstract/config-interpreter.ts @@ -1,5 +1,6 @@ import { ConfigFile } from "./config-file"; -import { ConfigValidationError } from "../errors"; +import { ConfigErrorMetaData, ConfigValidationError, UnknownFieldError } from "../errors"; +import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "../evaluated-kipper-config-file"; /** * A type that represents a configuration scheme. @@ -25,24 +26,29 @@ export type ConfigInterpreterScheme = { * i.e. a representation of what a valid config file would actually look like if it was parsed. */ export type Config = { - [key in keyof Scheme]: Scheme[key] extends { type: "string" } ? + [key in keyof Scheme]: Scheme[key] extends { type: "string"; required: true } ? string : - Scheme[key] extends { type: "number", required: false } ? - number : - Scheme[key] extends { type: "boolean" } ? - boolean : - Scheme[key] extends { type: "array", itemType: infer T } ? - T[] : - Scheme[key] extends { type: "object", properties: infer P extends ConfigInterpreterScheme } ? - Config

: - never; + Scheme[key] extends { type: "string"; required: false } ? + string | undefined : + Scheme[key] extends { type: "number"; required: true } ? + number : + Scheme[key] extends { type: "number"; required: false } ? + number | undefined : + Scheme[key] extends { type: "boolean"; required: true } ? + boolean : + Scheme[key] extends { type: "boolean"; required: false } ? + boolean | undefined : + Scheme[key] extends { type: "array"; itemType: infer T; required: true } ? + T[] : + Scheme[key] extends { type: "array"; itemType: infer T; required: false } ? + (T | undefined)[] : + Scheme[key] extends { type: "object"; properties: infer P extends ConfigInterpreterScheme; required: true } ? + Config

: + Scheme[key] extends { type: "object"; properties: infer P extends ConfigInterpreterScheme; required: false } ? + Config

| undefined : + never; }; -type example = Config<{ "smth": { type: "object", required: false, properties: { x: { type: "string", required: false } }}}> -var example1: example = {} as example; - -example1.smth.x; - /** * An abstract class that interprets a configuration file and returns a configuration object. * @since 0.11.0 @@ -59,74 +65,82 @@ export abstract class ConfigInterpreter { + if (!(key in scheme)) { + throw new UnknownFieldError(`Unknown field "${key}"`, meta); + } + }); } abstract loadConfig(config: ConfigFile): Promise; diff --git a/kipper/config/src/abstract/evaluated-config-file.ts b/kipper/config/src/abstract/evaluated-config-file.ts index d4a0c11cf..12b8cdf57 100644 --- a/kipper/config/src/abstract/evaluated-config-file.ts +++ b/kipper/config/src/abstract/evaluated-config-file.ts @@ -2,7 +2,7 @@ * A type that represents a processed configuration value. * @since 0.11.0 */ -export type EvaluatedConfigValue = undefined | string | number | boolean | Array | EvaluatedConfigFile; +export type EvaluatedConfigValue = any; /** * A type that represents a processed configuration file. diff --git a/kipper/config/src/errors.ts b/kipper/config/src/errors.ts index b364360d2..4fb42f4c0 100644 --- a/kipper/config/src/errors.ts +++ b/kipper/config/src/errors.ts @@ -1,11 +1,36 @@ /** + * The metadata for a config error, which is used to provide verbose error messages. + * @since 0.11.0 + */ +export type ConfigErrorMetaData = { fileName: string, parentFiles: string[] }; + + /** * Generic error for the '@kipper/config' package. * @since 0.11.0 */ export class ConfigError { - public constructor(public message: string, public fileName: string, parentFiles: string[] = []) { - this.message = `${message} (${[fileName, ...parentFiles].join(" -> ")})`; - this.fileName = fileName; + public constructor(public message: string, public meta: ConfigErrorMetaData) { + this.message = `${message} (${[meta.fileName, ...meta.parentFiles].join(" -> ")})`; + } +} + +/** + * Error that is thrown whenever a directory or file is not found. + * @since 0.11.0 + */ +export class NotFoundError extends ConfigError { + public constructor(fileName: string, meta: ConfigErrorMetaData) { + super(`Dir or file not found ~ '${fileName}'`, meta); + } +} + +/** + * Error that is thrown whenever an invalid path is encountered. + * @since 0.11.0 + */ +export class InvalidPathError extends ConfigError { + public constructor(fileName: string, details: string, meta: ConfigErrorMetaData) { + super(`Invalid path '${fileName}' ~ ${details}`, meta); } } @@ -14,11 +39,10 @@ export class ConfigError { * @since 0.11.0 */ export class ConfigValidationError extends ConfigError { - public constructor(validationError: string, fileName: string, parentFiles?: string[]) { + public constructor(validationError: string, meta: ConfigErrorMetaData) { super( - `Encountered validation error in file ${fileName}: ${validationError}`, - "ConfigValidationError", - parentFiles, + `Encountered validation error ~ '${validationError}'`, + meta ); } } @@ -28,25 +52,43 @@ export class ConfigValidationError extends ConfigError { * @since 0.11.0 */ export class UnknownFieldError extends ConfigError { - public constructor(unknownField: string, fileName: string, parentFiles?: string[]) { + public constructor(unknownField: string, meta: ConfigErrorMetaData) { super( - `Encountered unknown field in file ${fileName}: ${unknownField}`, - "UnknownFieldError", - parentFiles, + `Encountered unknown field ~ '${unknownField}'`, + meta ); } } /** - * Error that is thrown whenever an extends file is not found. + * Error that is thrown whenever the syntax for a resource mapping is invalid. + * @since 0.11.0 + */ +export class InvalidMappingSyntaxError extends ConfigError { + public constructor(provided: string, meta: ConfigErrorMetaData) { + super(`Invalid mapping syntax ~ '${provided}'`, meta); + } +} + +/** + * Error that is thrown whenever the syntax for a version is invalid. + * @since 0.11.0 + */ +export class InvalidVersionSyntaxError extends ConfigError { + public constructor(provided: string, meta: ConfigErrorMetaData) { + super(`Invalid version syntax ~ '${provided}'`, meta); + } +} + +/** + * Error that is thrown whenever the version of a file is incompatible. * @since 0.11.0 */ -export class UnableToFindExtendsFileError extends ConfigError { - public constructor(fileName: string, parentFiles?: string[]) { +export class IncompatibleVersionError extends ConfigError { + public constructor(expected: string, actual: string, meta: ConfigErrorMetaData) { super( - `Unable to find extends file for file ${fileName}`, - "UnableToFindExtendsFileError", - parentFiles, + `Version mismatch ~ Expected '${expected}', but received '${actual}'`, + meta ); } } diff --git a/kipper/config/src/evaluated-kipper-config-file.ts b/kipper/config/src/evaluated-kipper-config-file.ts index bc4d1ffc2..7a322bfbd 100644 --- a/kipper/config/src/evaluated-kipper-config-file.ts +++ b/kipper/config/src/evaluated-kipper-config-file.ts @@ -1,4 +1,5 @@ -import { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract/evaluated-config-file"; +import type { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract/evaluated-config-file"; +import type * as semver from "semver"; /** * A type that represents a path-like object. @@ -6,11 +7,19 @@ import { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract/evaluated- */ export type PathLike = string; +/** + * A raw representation of a processed Kipper config file. + * @since 0.11.0 + */ export interface RawEvaluatedKipperConfigFile extends EvaluatedConfigFile { - version: string; - resources: Array; + basePath: string; + outDir: string; + srcDir?: string; + files: Array<{ src: PathLike, out: PathLike }>; + resources: Array<{ src: PathLike, out: PathLike }>; compiler: { target: string; + version: semver.SemVer; }; } @@ -19,15 +28,25 @@ export interface RawEvaluatedKipperConfigFile extends EvaluatedConfigFile { * @since 0.11.0 */ export class EvaluatedKipperConfigFile implements RawEvaluatedKipperConfigFile { + // eslint-disable-next-line no-undef [key: string]: EvaluatedConfigValue; - version: RawEvaluatedKipperConfigFile["version"]; + public readonly raw: RawEvaluatedKipperConfigFile; + + basePath: RawEvaluatedKipperConfigFile["basePath"]; + outDir: RawEvaluatedKipperConfigFile["outDir"]; + srcDir: RawEvaluatedKipperConfigFile["srcDir"]; + files: RawEvaluatedKipperConfigFile["files"]; resources: RawEvaluatedKipperConfigFile["resources"]; compiler: RawEvaluatedKipperConfigFile["compiler"]; public constructor(config: RawEvaluatedKipperConfigFile) { - this.version = config.version; + this.basePath = config.basePath; + this.outDir = config.outDir; + this.srcDir = config.srcDir; + this.files = config.files; this.resources = config.resources; this.compiler = config.compiler; + this.raw = config; } } diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts new file mode 100644 index 000000000..043a3edda --- /dev/null +++ b/kipper/config/src/index.ts @@ -0,0 +1,16 @@ +/** + * The Kipper config library for parsing and validating Kipper configuration files. + * @author Luna Klatzer + * @copyright 2021-2024 Luna Klatzer + */ + +// eslint-disable-next-line no-unused-vars +export const name = "@kipper/config"; +// eslint-disable-next-line no-unused-vars +export const version = "0.11.0-alpha.1"; +// eslint-disable-next-line no-unused-vars +export const author = "Luna Klatzer"; +// eslint-disable-next-line no-unused-vars +export const license = "GPL-3.0-or-later"; +// eslint-disable-next-line no-unused-vars +export const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/config/src/kipper-config-file.ts b/kipper/config/src/kipper-config-file.ts index c90213284..910d79417 100644 --- a/kipper/config/src/kipper-config-file.ts +++ b/kipper/config/src/kipper-config-file.ts @@ -1,7 +1,8 @@ -import * as fs from 'fs/promises'; import type { KipperEncoding } from "@kipper/cli"; import { ConfigFile } from "./abstract/config-file"; import * as path from "node:path"; +import * as fs from 'node:fs/promises'; +import { ensureExistsHasPermAndIsOfType } from "./tools"; /** * A class that represents a Kipper config file. @@ -30,6 +31,8 @@ export class KipperConfigFile extends ConfigFile { * @since 0.11.0 */ static async fromFile(file: string, encoding: KipperEncoding): Promise { + await ensureExistsHasPermAndIsOfType(file, "r", "file"); + const fileContent = await fs.readFile(file, { encoding }); const fileName = path.basename(file); return new KipperConfigFile(fileContent, fileName, encoding); diff --git a/kipper/config/src/kipper-config-interpreter.ts b/kipper/config/src/kipper-config-interpreter.ts index 9a35563e6..ee28701ad 100644 --- a/kipper/config/src/kipper-config-interpreter.ts +++ b/kipper/config/src/kipper-config-interpreter.ts @@ -1,33 +1,133 @@ import { Config, ConfigInterpreter, ConfigInterpreterScheme } from "./abstract/config-interpreter"; import { KipperConfigFile } from "./kipper-config-file"; -import { EvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; +import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; +import { ConfigErrorMetaData, InvalidMappingSyntaxError, InvalidVersionSyntaxError } from "./errors"; +import { ensureExistsHasPermAndIsOfType } from "./tools"; +import { version as kipperConfigVersion } from "./index"; +import * as semver from "semver"; +import * as path from "node:path"; /** * A type that represents a Kipper config file. * @since 0.11.0 */ export const KipperConfigScheme = { - extends: { + /** + * The file that this config file extends. + * @since 0.11.0 + */ + extends: { + type: "string", + required: false, + }, + /** + * The base path of the project. This is the path that all other paths are relative to. + * + * This is optional and if not provided, the working directory of the invoked Kipper CLI command will be used. + * @since 0.11.0 + */ + basePath: { + type: "string", + required: false, + }, + /** + * The source directory of the project. + * + * This is optional, as not always a "src" directory is needed. If not provided, the {@link basePath} will be used as + * the source directory and all {@link files} are compiled and emitted with preserved directory structure relative + * to the {@link basePath}. (This would mean that even if a "src" is provided, the {@link files} would still be + * emitted with preserved directory structure i.e. "{@link outDir}/src/..."). + * + * If provided, the {@link files} will be emitted with preserved directory structure relative to the {@link srcDir}. + * This reflects the natural behaviour and means "{@link srcDir}/index.kip" is outputted as "{@link outDir}/index.smth". + * This although means any files outside will cause an error. + */ + srcDir: { type: "string", required: false, }, - version: { + /** + * The output directory of the project. + * + * This is used as the output directory for all compiled files and resources. + * @since 0.11.0 + */ + outDir: { type: "string", required: true, }, + /** + * Any resources that are required for the project. + * + * They will be copied and placed in the output directory with preserved directory structure. As such, this also + * means that the compiler enforces a strict "same-origin" policy for resources i.e. resources must be within the + * {@link basePath} of the project. + * + * Example: + * - "logo.png" will be copied to "{@link outDir}/logo.png" + * - "img/" will be copied to "{@link outDir}/img/" + * - "img/logo.png" will be copied to "{@link outDir}/img/logo.png" + * + * To avoid this behaviour the "origin:dest" syntax can be used. This will copy the origin file to the destination + * directory (if a directory is provided) or file (can be also used to rename the file). This is useful for resources + * that should not be placed in the output directory with preserved directory structure. + * @since 0.11.0 + */ resources: { type: "array", required: true, itemType: "string", }, + /** + * An array of files to compile. They will be all placed in the output directory with preserved directory structure. + * + * Note that if a {@link srcDir} is provided, the files will be emitted with preserved directory structure relative to + * the {@link srcDir}. This reflects the natural behaviour and means "{@link srcDir}/index.kip" is outputted as + * "{@link outDir}/index.smth". This although means any files outside will cause an error. + * + * If not provided, the {@link basePath} will be used as the source directory and all files are compiled and emitted + * with preserved directory structure relative to the {@link basePath}. (This would mean that even if a "src" is + * provided, the files would still be emitted with preserved directory structure i.e. "{@link outDir}/src/..."). + * @since 0.11.0 + */ + files: { + type: "array", + required: true, + itemType: "string", + }, + /** + * Compiler-specific options. + * + * These can be heavily dependent on the compiler version, and as such, the compiler version is also required. + * @since 0.11.0 + */ compiler: { type: "object", required: true, properties: { + /** + * The target of the compiler. + * @since 0.11.0 + */ target: { type: "string", required: true, }, + /** + * The version of the compiler. + * + * Standard NPM-like versioning is used, i.e. the following rules apply: + * - "1.2.3" will match only "1.2.3". + * - "~1.2.3", "1.2" and "1.2.x" will match any version from "1.2.3" to "1.2.9999" (inclusive). + * - "^1.2.3", "1" and "1.x.x" will match any version from "1.2.3" to "1.9999.9999" (inclusive). + * - "*" will match any version. (This is heavily discourage and should only be used for testing.) + * - ... and many more. (Visit the npm docs for more information.) + * @since 0.11.0 + */ + version: { + type: "string", + required: true, + }, }, }, } satisfies ConfigInterpreterScheme; @@ -39,6 +139,22 @@ export const KipperConfigScheme = { */ export type KipperConfig = Config; +/** + * A type that represents the environment information that is used to interpret a Kipper config file. + * @since 0.11.0 + */ +export interface KipperConfigEnvInfo { + /** + * Working directory of the invoked Kipper CLI command in absolute form. + * @since 0.11.0 + */ + workDir: string; + /** + * + */ + +} + export class KipperConfigInterpreter extends ConfigInterpreter { constructor() { super(KipperConfigScheme); @@ -49,37 +165,153 @@ export class KipperConfigInterpreter extends ConfigInterpreter fileB -> * fileC -> ..."). This will usually not be needed by the user and is primarily used for internal purposes. */ - async loadConfig(config: KipperConfigFile, parentFiles: string[] = []): Promise { - const configFile: Partial = JSON.parse(config.content); + async loadConfig( + configFile: KipperConfigFile, + envInfo: KipperConfigEnvInfo = { workDir: process.cwd() }, + parentFiles: string[] = [] + ): Promise { + // Create the meta object which is used to provide more descriptive error messages (will be reused throughout the + // whole analysis and processing of the config file) + const meta: ConfigErrorMetaData = { fileName: configFile.fileName, parentFiles }; - // Ensure that the config file is "on a basic level" valid (all required fields are present, etc.) - this.validateConfigBasedOffScheme(config, parentFiles); - const validatedConfigFile = configFile as KipperConfig; + const rawConfig = configFile.parsedJSON; // Evaluate any "extends" fields in the config file let extendedConfig: EvaluatedKipperConfigFile | undefined; - if (validatedConfigFile.extends) { + if (rawConfig.extends && typeof rawConfig.extends === "string") { extendedConfig = await this.loadConfig( - await KipperConfigFile.fromFile(validatedConfigFile.extends, config.encoding), - [...parentFiles, config.fileName], + await KipperConfigFile.fromFile(rawConfig.extends, configFile.encoding), + envInfo, + [...parentFiles, configFile.fileName], ); } + // Ensure that the config file is "on a basic level" valid (all required fields are present, etc.) + this.validateConfigBasedOffScheme(rawConfig, meta, extendedConfig?.raw); + const validatedConfigFile = rawConfig as KipperConfig; + + // Make "outDir" and "basePath" absolute and ensure they exist, are directories and readable/writable + validatedConfigFile.outDir = path.resolve(envInfo.workDir, validatedConfigFile.outDir); + validatedConfigFile.basePath = validatedConfigFile.basePath + ? path.resolve(envInfo.workDir, validatedConfigFile.basePath) + : envInfo.workDir; + await ensureExistsHasPermAndIsOfType(validatedConfigFile.outDir, "rw", "dir", meta); + await ensureExistsHasPermAndIsOfType(validatedConfigFile.basePath, "rw", "dir", meta); + + // Process each resource and file in the config file + const processedResources = + await this.processResources(validatedConfigFile.resources, validatedConfigFile.basePath, validatedConfigFile.outDir, meta); + const processedFiles = + await this.processFiles(validatedConfigFile.files, validatedConfigFile.basePath, validatedConfigFile.srcDir, validatedConfigFile.outDir, meta); + + // Validate the compiler version + const processedVersion = await this.validateCompilerVersion(validatedConfigFile.compiler.version, meta); + // Process the config file here (e.g., resolve paths, apply extensions, etc.) return new EvaluatedKipperConfigFile({ - version: validatedConfigFile.version, - resources: validatedConfigFile.resources, + ...(extendedConfig?.raw || {}), + basePath: validatedConfigFile.basePath, + outDir: validatedConfigFile.outDir, + srcDir: validatedConfigFile.srcDir, + resources: processedResources, + files: processedFiles, compiler: { target: validatedConfigFile.compiler.target, + version: processedVersion, }, }); } + + private async processResources( + resources: KipperConfig["resources"], + basePath: KipperConfig["basePath"] & string, + outDir: KipperConfig["outDir"], + meta: ConfigErrorMetaData, + ): Promise { + const processedResources: RawEvaluatedKipperConfigFile["resources"] = []; + for (const resourceItem of resources) { + const pathMapping: boolean = resourceItem.includes(":"); + + let resolvedSrcPath: string; + let resolvedOutPath: string; + if (pathMapping) { + // Ensure the pathMapping is in the correct format + if (/[^:]+:[^:]+/.test(resourceItem)) { + const [src, out] = resourceItem.split(":"); + + resolvedSrcPath = path.resolve(basePath, src); + resolvedOutPath = path.resolve(outDir, out); + } else { + throw new InvalidMappingSyntaxError(`Invalid path mapping "${resourceItem}"`, meta); + } + } else { + resolvedSrcPath = path.resolve(basePath, resourceItem); + resolvedOutPath = path.resolve(outDir, resourceItem); + } + + await ensureExistsHasPermAndIsOfType(resolvedSrcPath, "r", "file", meta); + processedResources.push({ + src: resolvedSrcPath, + out: resolvedOutPath, + }); + } + return processedResources; + } + + private async processFiles( + files: KipperConfig["files"], + basePath: KipperConfig["basePath"] & string, + src: KipperConfig["srcDir"], + outDir: KipperConfig["outDir"], + meta: ConfigErrorMetaData, + ): Promise { + const processedFiles: RawEvaluatedKipperConfigFile["files"] = []; + for (const filePath of files) { + const resolvedSrcPath = path.resolve(src ?? basePath, filePath); + await ensureExistsHasPermAndIsOfType(resolvedSrcPath, "r", "file", meta); + + // If a srcDir is provided, the files will be emitted with preserved directory structure relative to the srcDir + // If not, we assume that the given filePath is relative to the basePath i.e. will be relative to the outDir + // in the output + const resolvedOutPath = path.resolve(outDir, src ? path.relative(src, resolvedSrcPath) : filePath); + + processedFiles.push({ + src: resolvedSrcPath, + out: resolvedOutPath, + }); + } + return processedFiles; + } + + private async validateCompilerVersion(providedVersion: string, meta: ConfigErrorMetaData): Promise { + // First get the current version of the compiler - As every kipper package has to have the same version when used + // together, we can simply import 'version' from index.ts + const latestKipperVersion = kipperConfigVersion; + + // Validate the provided version + const cleanVersion = semver.clean(providedVersion); + if (!cleanVersion || !semver.valid(cleanVersion)) { + throw new InvalidVersionSyntaxError(providedVersion, meta); + } + + // Ensure the provided version is compatible with the current version + // (Kipper will always follow the semver versioning scheme, as such we can ignore the potential 'null' return value) + const coercedCurrentVersion = semver.coerce(latestKipperVersion)!; + if (!semver.satisfies(coercedCurrentVersion, providedVersion)) { + throw new InvalidVersionSyntaxError(providedVersion, meta); + } + + return semver.parse(cleanVersion)!; + } } diff --git a/kipper/config/src/tools.ts b/kipper/config/src/tools.ts new file mode 100644 index 000000000..1c02f5dcd --- /dev/null +++ b/kipper/config/src/tools.ts @@ -0,0 +1,36 @@ +import { NotFoundError, InvalidPathError, ConfigErrorMetaData } from "./errors"; +import * as fs from "node:fs/promises"; + +/** + * Checks if a file or directory exists and is of a certain type. + * + * This also automatically checks that the given path is readable and writable. + * @param path The path to check. + * @param mode The mode to check the path with. (Either "r" or "rw") + * @param type The type of the path to check. (Either "file" or "dir) + * @param meta The metadata for any error that may be thrown. + * @since 0.11.0 + */ +export async function ensureExistsHasPermAndIsOfType( + path: string, + mode: "r" | "rw", + type: "file" | "dir" = "file", + meta: ConfigErrorMetaData +): Promise { + try { + await fs.access(path, mode == "r" ? fs.constants.R_OK : fs.constants.R_OK | fs.constants.W_OK); + + const stats = await fs.stat(path); + if ((type === "file" && !stats.isFile()) || (type === "dir" && !stats.isDirectory())) { + throw new InvalidPathError(path, `The path is not a ${type}`, meta); + } + } catch (e) { + if (e instanceof InvalidPathError) { + throw e; + } else if ((e).code === "ENOENT") { + throw new NotFoundError(path, meta); + } else { + throw new InvalidPathError(path, "The path is not readable or writable", meta); + } + } +} From a77fe8bafc909c529a7f4c89b3552805a76f7197 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 12 Feb 2024 02:26:07 +0100 Subject: [PATCH 083/257] other (#508): Added empty test files for '@kipper/config' This is for later --- test/config-files/kip-config.basic.json | 12 ++++++++++++ test/module/config/kipper-config-file-interpreter.ts | 3 +++ test/module/config/kipper-config-file.test.ts | 3 +++ 3 files changed, 18 insertions(+) create mode 100644 test/config-files/kip-config.basic.json create mode 100644 test/module/config/kipper-config-file-interpreter.ts create mode 100644 test/module/config/kipper-config-file.test.ts diff --git a/test/config-files/kip-config.basic.json b/test/config-files/kip-config.basic.json new file mode 100644 index 000000000..aec9826e5 --- /dev/null +++ b/test/config-files/kip-config.basic.json @@ -0,0 +1,12 @@ +{ + "compiler": { + "version": "*", + "target": "ts" + }, + "files": [ + "src/index.kip" + ], + "resources": [ + "my-image.png" + ] +} diff --git a/test/module/config/kipper-config-file-interpreter.ts b/test/module/config/kipper-config-file-interpreter.ts new file mode 100644 index 000000000..d5846399b --- /dev/null +++ b/test/module/config/kipper-config-file-interpreter.ts @@ -0,0 +1,3 @@ +describe("KipperConfigInterpreter", () => { + +}); diff --git a/test/module/config/kipper-config-file.test.ts b/test/module/config/kipper-config-file.test.ts new file mode 100644 index 000000000..f3ab4ea87 --- /dev/null +++ b/test/module/config/kipper-config-file.test.ts @@ -0,0 +1,3 @@ +describe("KipperConfigFile", () => { + +}); From 3ff6861a7815971a620de4e19931c2e1c8d1a131 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 14:45:34 +0100 Subject: [PATCH 084/257] other: Bumped tslib to `2.6.2` and updated dependencies --- kipper/cli/package.json | 1 + kipper/cli/pnpm-lock.yaml | 67 +++++-------------------- kipper/config/package.json | 3 +- kipper/config/pnpm-lock.yaml | 9 +++- kipper/core/package.json | 2 +- kipper/core/pnpm-lock.yaml | 43 ++-------------- kipper/target-js/package.json | 3 +- kipper/target-js/pnpm-lock.yaml | 29 +++-------- kipper/target-ts/package.json | 3 +- kipper/target-ts/pnpm-lock.yaml | 29 +++-------- kipper/web/pnpm-lock.yaml | 23 --------- package.json | 5 +- pnpm-lock.yaml | 89 +++------------------------------ 13 files changed, 55 insertions(+), 251 deletions(-) diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 588fa95b4..9fd8367c9 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -16,6 +16,7 @@ "@oclif/parser": "3.8.10", "@oclif/errors": "1.3.6", "@oclif/plugin-warn-if-update-available": "2.0.37", + "tslib": "~2.6.2", "tslog": "3.3.4" }, "devDependencies": { diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index efaf42e85..f1dd8b375 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -32,6 +32,9 @@ dependencies: '@oclif/plugin-warn-if-update-available': specifier: 2.0.37 version: 2.0.37(@types/node@18.16.16)(typescript@5.1.3) + tslib: + specifier: ~2.6.2 + version: 2.6.2 tslog: specifier: 3.3.4 version: 3.3.4 @@ -157,7 +160,6 @@ packages: /@npmcli/arborist@4.3.1: resolution: {integrity: sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} - hasBin: true dependencies: '@isaacs/string-locale-compare': 1.1.0 '@npmcli/installed-package-contents': 1.0.7 @@ -229,7 +231,6 @@ packages: /@npmcli/installed-package-contents@1.0.7: resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} engines: {node: '>= 10'} - hasBin: true dependencies: npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 @@ -261,7 +262,6 @@ packages: /@npmcli/move-file@1.1.2: resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 @@ -270,7 +270,6 @@ packages: /@npmcli/move-file@2.0.1: resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 @@ -316,7 +315,7 @@ packages: chalk: 4.1.2 strip-ansi: 6.0.1 supports-color: 8.1.1 - tslib: 2.5.2 + tslib: 2.6.2 dev: true /@oclif/command@1.8.31(@oclif/config@1.18.2): @@ -360,7 +359,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-wsl: 2.2.0 - tslib: 2.5.2 + tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: false @@ -374,7 +373,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-wsl: 2.2.0 - tslib: 2.5.0 + tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: false @@ -388,7 +387,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-wsl: 2.2.0 - tslib: 2.5.0 + tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: false @@ -422,7 +421,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.2.0 - tslib: 2.5.2 + tslib: 2.6.2 widest-line: 3.1.0 wrap-ansi: 7.0.0 dev: true @@ -456,7 +455,7 @@ packages: supports-color: 8.1.1 supports-hyperlinks: 2.2.0 ts-node: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) - tslib: 2.5.0 + tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 wrap-ansi: 7.0.0 @@ -515,13 +514,12 @@ packages: '@oclif/errors': 1.3.6 '@oclif/linewrap': 1.0.0 chalk: 4.1.2 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@oclif/parser@3.8.17: resolution: {integrity: sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A==} engines: {node: '>=8.0.0'} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dependencies: '@oclif/errors': 1.3.6 '@oclif/linewrap': 1.0.0 @@ -596,7 +594,6 @@ packages: /@oclif/screen@3.0.4: resolution: {integrity: sha512-IMsTN1dXEXaOSre27j/ywGbBjrzx0FNd1XmuhCWCB9NTPrhWI1Ifbz+YLSEcstfQfocYsrbrIessxXb2oon4lA==} engines: {node: '>=12.0.0'} - deprecated: Deprecated in favor of @oclif/core dev: true /@oclif/test@2.3.21(@types/node@18.16.16)(typescript@5.1.3): @@ -858,7 +855,6 @@ packages: /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} - hasBin: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -1172,7 +1168,6 @@ packages: /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 @@ -1334,7 +1329,6 @@ packages: /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true dev: true /colors@1.0.3: @@ -1361,7 +1355,6 @@ packages: /concurrently@7.6.0: resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} - hasBin: true dependencies: chalk: 4.1.2 date-fns: 2.29.3 @@ -1503,7 +1496,6 @@ packages: /ejs@3.1.8: resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} engines: {node: '>=0.10.0'} - hasBin: true dependencies: jake: 10.8.5 @@ -1563,7 +1555,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -1825,7 +1816,6 @@ packages: /glob@10.2.5: resolution: {integrity: sha512-Gj+dFYPZ5hc5dazjXzB0iHg2jKWJZYMjITXYPBRQ/xc2Buw7H0BINknRTwURJ6IC6MEFpYbLvtgVb3qD+DwyuA==} engines: {node: '>=16 || 14 >=14.17'} - hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.2.0 @@ -2134,7 +2124,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -2257,7 +2246,6 @@ packages: /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} - hasBin: true dependencies: async: 3.2.4 chalk: 4.1.2 @@ -2275,7 +2263,6 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -2621,7 +2608,6 @@ packages: /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} - hasBin: true dev: true /mock-stdin@1.0.0: @@ -2684,7 +2670,6 @@ packages: /node-gyp@8.4.1: resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} engines: {node: '>= 10.12.0'} - hasBin: true dependencies: env-paths: 2.2.1 glob: 7.2.3 @@ -2704,7 +2689,6 @@ packages: /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} - hasBin: true dependencies: abbrev: 1.1.1 dev: true @@ -2772,7 +2756,6 @@ packages: /npm-packlist@3.0.0: resolution: {integrity: sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==} engines: {node: '>=10'} - hasBin: true dependencies: glob: 7.2.3 ignore-walk: 4.0.1 @@ -2847,7 +2830,6 @@ packages: /oclif@3.4.6(@types/node@18.16.16)(mem-fs-editor@9.6.0)(mem-fs@2.2.1)(typescript@5.1.3): resolution: {integrity: sha512-YyGMDil2JpfC9OcB76Gtcd5LqwwOeAgb8S7mVHf/6Qecjqor8QbbvcSwZvB1e1TqjlD1JUhDPqBiFeVe/WOdWg==} engines: {node: '>=12.0.0'} - hasBin: true dependencies: '@oclif/core': 1.26.2 '@oclif/plugin-help': 5.2.4(@types/node@18.16.16)(typescript@5.1.3) @@ -2863,7 +2845,7 @@ packages: lodash: 4.17.21 normalize-package-data: 3.0.3 semver: 7.5.1 - tslib: 2.5.2 + tslib: 2.6.2 yeoman-environment: 3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1) yeoman-generator: 5.8.0(mem-fs@2.2.1)(yeoman-environment@3.15.1) yosay: 2.0.2 @@ -2990,7 +2972,6 @@ packages: /pacote@12.0.3: resolution: {integrity: sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} - hasBin: true dependencies: '@npmcli/git': 2.1.0 '@npmcli/installed-package-contents': 1.0.7 @@ -3179,7 +3160,6 @@ packages: /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true /queue-microtask@1.2.3: @@ -3245,7 +3225,6 @@ packages: /readdir-scoped-modules@1.1.0: resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} - deprecated: This functionality has been moved to @npmcli/fs dependencies: debuglog: 1.0.1 dezalgo: 1.0.4 @@ -3285,7 +3264,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.11.0 path-parse: 1.0.7 @@ -3317,7 +3295,6 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 dev: true @@ -3325,7 +3302,6 @@ packages: /rimraf@5.0.1: resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} engines: {node: '>=14'} - hasBin: true dependencies: glob: 10.2.5 dev: true @@ -3343,7 +3319,7 @@ packages: /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: - tslib: 2.5.2 + tslib: 2.6.2 dev: true /safe-buffer@5.1.2: @@ -3368,19 +3344,16 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true /semver@7.5.1: resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: false @@ -3418,7 +3391,6 @@ packages: /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} - hasBin: true dependencies: glob: 7.2.3 interpret: 1.4.0 @@ -3739,7 +3711,6 @@ packages: /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true dev: true /treeverse@1.0.4: @@ -3748,7 +3719,6 @@ packages: /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -3776,15 +3746,8 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - - /tslib@2.5.2: - resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false /tslog@3.3.4: resolution: {integrity: sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==} @@ -3820,7 +3783,6 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true /unique-filename@1.1.1: resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} @@ -3888,7 +3850,6 @@ packages: /uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -3973,14 +3934,12 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 dev: true @@ -4087,7 +4046,6 @@ packages: /yeoman-environment@3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1): resolution: {integrity: sha512-P4DTQxqCxNTBD7gph+P+dIckBdx0xyHmvOYgO3vsc9/Sl67KJ6QInz5Qv6tlXET3CFFJ/YxPIdl9rKb0XwTRLg==} engines: {node: '>=12.10.0'} - hasBin: true peerDependencies: mem-fs: ^1.2.0 || ^2.0.0 mem-fs-editor: ^8.1.2 || ^9.0.0 @@ -4175,7 +4133,6 @@ packages: /yosay@2.0.2: resolution: {integrity: sha512-avX6nz2esp7IMXGag4gu6OyQBsMh/SEn+ZybGu3yKPlOTE6z9qJrzG/0X5vCq/e0rPFy0CUYCze0G5hL310ibA==} engines: {node: '>=4'} - hasBin: true dependencies: ansi-regex: 2.1.1 ansi-styles: 3.2.1 diff --git a/kipper/config/package.json b/kipper/config/package.json index 53ac1f392..7202d3c7e 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -4,7 +4,8 @@ "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { - "semver": "7.6.0" + "semver": "7.6.0", + "tslib": "~2.6.2" }, "devDependencies": { "@types/semver": "7.5.7", diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index 0b8cd4c8e..eb917ea58 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: semver: specifier: 7.6.0 version: 7.6.0 + tslib: + specifier: ~2.6.2 + version: 2.6.2 devDependencies: '@kipper/cli': @@ -36,15 +39,17 @@ packages: /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: false + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true dev: true /yallist@4.0.0: diff --git a/kipper/core/package.json b/kipper/core/package.json index abb0785e7..693ebb112 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -5,7 +5,7 @@ "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", - "tslib": "~2.5.0" + "tslib": "~2.6.2" }, "devDependencies": { "typescript": "5.1.3", diff --git a/kipper/core/pnpm-lock.yaml b/kipper/core/pnpm-lock.yaml index 46594f651..7a10dde31 100644 --- a/kipper/core/pnpm-lock.yaml +++ b/kipper/core/pnpm-lock.yaml @@ -9,8 +9,8 @@ dependencies: specifier: ^0.5.0-alpha.4 version: 0.5.0-alpha.4 tslib: - specifier: ~2.5.0 - version: 2.5.0 + specifier: ~2.6.2 + version: 2.6.2 devDependencies: '@size-limit/preset-big-lib': @@ -373,7 +373,6 @@ packages: /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 @@ -408,13 +407,11 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /agent-base@6.0.2: @@ -450,7 +447,6 @@ packages: /antlr4ts-cli@0.5.0-alpha.4: resolution: {integrity: sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==} - hasBin: true dev: true /antlr4ts@0.5.0-alpha.4: @@ -548,7 +544,6 @@ packages: /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - hasBin: true dependencies: JSONStream: 1.3.5 combine-source-map: 0.8.0 @@ -622,7 +617,6 @@ packages: /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} - hasBin: true dependencies: JSONStream: 1.3.5 assert: 1.5.0 @@ -677,7 +671,6 @@ packages: /browserslist@4.21.3: resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001377 electron-to-chromium: 1.4.221 @@ -906,7 +899,6 @@ packages: /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - hasBin: true dependencies: JSONStream: 1.3.5 shasum-object: 1.0.0 @@ -924,7 +916,6 @@ packages: /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} - hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.0 @@ -1067,7 +1058,6 @@ packages: /estimo@2.3.6: resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} engines: {node: '>=12'} - hasBin: true dependencies: '@sitespeed.io/tracium': 0.3.3 commander: 9.4.0 @@ -1106,7 +1096,6 @@ packages: /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} - hasBin: true dependencies: debug: 4.3.4 get-stream: 5.2.0 @@ -1386,7 +1375,6 @@ packages: /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - hasBin: true dependencies: JSONStream: 1.3.5 acorn-node: 1.8.2 @@ -1614,7 +1602,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 dev: true @@ -1657,7 +1644,6 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -1700,13 +1686,11 @@ packages: /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} - hasBin: true dev: true /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} - hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 2.0.0 @@ -1732,7 +1716,6 @@ packages: /nanoid@3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: true /nanospinner@1.1.0: @@ -1914,7 +1897,6 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /process-nextick-args@2.0.1: @@ -1997,7 +1979,6 @@ packages: /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true /queue-microtask@1.2.3: @@ -2070,7 +2051,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.10.0 path-parse: 1.0.7 @@ -2084,7 +2064,6 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 dev: true @@ -2104,7 +2083,6 @@ packages: /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - hasBin: true dev: true /safe-buffer@5.1.2: @@ -2130,13 +2108,11 @@ packages: /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true dev: true /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: true @@ -2149,7 +2125,6 @@ packages: /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -2180,7 +2155,6 @@ packages: /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} - hasBin: true dependencies: bytes-iec: 3.1.1 chokidar: 3.5.3 @@ -2358,7 +2332,6 @@ packages: /terser@5.14.2: resolution: {integrity: sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 acorn: 8.8.0 @@ -2403,7 +2376,6 @@ packages: /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -2458,8 +2430,8 @@ packages: typescript: 5.1.3 dev: true - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false /tty-browserify@0.0.1: @@ -2473,12 +2445,10 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true dev: true /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - hasBin: true dev: true /unbox-primitive@1.0.2: @@ -2499,7 +2469,6 @@ packages: /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - hasBin: true dependencies: acorn-node: 1.8.2 dash-ast: 1.0.0 @@ -2510,7 +2479,6 @@ packages: /update-browserslist-db@1.0.5(browserslist@4.21.3): resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -2555,7 +2523,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -2569,7 +2536,6 @@ packages: /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} - hasBin: true dependencies: anymatch: 3.1.2 browserify: 17.0.0 @@ -2600,7 +2566,6 @@ packages: /webpack@5.75.0: resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} - hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index e9141eb80..ec3d0807c 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -4,7 +4,8 @@ "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { - "@kipper/core": "workspace:~" + "@kipper/core": "workspace:~", + "tslib": "~2.6.2" }, "devDependencies": { "typescript": "5.1.3", diff --git a/kipper/target-js/pnpm-lock.yaml b/kipper/target-js/pnpm-lock.yaml index 1b11ba22d..86ff829a0 100644 --- a/kipper/target-js/pnpm-lock.yaml +++ b/kipper/target-js/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@kipper/core': specifier: workspace:~ version: link:../core + tslib: + specifier: ~2.6.2 + version: 2.6.2 devDependencies: '@types/node': @@ -91,7 +94,6 @@ packages: /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 @@ -118,13 +120,11 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /ansi-regex@6.0.1: @@ -206,7 +206,6 @@ packages: /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - hasBin: true dependencies: JSONStream: 1.3.5 combine-source-map: 0.8.0 @@ -280,7 +279,6 @@ packages: /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} - hasBin: true dependencies: JSONStream: 1.3.5 assert: 1.5.0 @@ -489,7 +487,6 @@ packages: /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - hasBin: true dependencies: JSONStream: 1.3.5 shasum-object: 1.0.0 @@ -507,7 +504,6 @@ packages: /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} - hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.0 @@ -774,7 +770,6 @@ packages: /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - hasBin: true dependencies: JSONStream: 1.3.5 acorn-node: 1.8.2 @@ -968,7 +963,6 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -999,13 +993,11 @@ packages: /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} - hasBin: true dev: true /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} - hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 2.0.0 @@ -1126,7 +1118,6 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /process-nextick-args@2.0.1: @@ -1165,7 +1156,6 @@ packages: /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true /randombytes@2.1.0: @@ -1226,7 +1216,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.10.0 path-parse: 1.0.7 @@ -1242,7 +1231,6 @@ packages: /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - hasBin: true dev: true /safe-buffer@5.1.2: @@ -1259,7 +1247,6 @@ packages: /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -1400,7 +1387,6 @@ packages: /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -1429,6 +1415,10 @@ packages: yn: 3.1.1 dev: true + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true @@ -1440,12 +1430,10 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true dev: true /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - hasBin: true dev: true /unbox-primitive@1.0.2: @@ -1459,7 +1447,6 @@ packages: /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - hasBin: true dependencies: acorn-node: 1.8.2 dash-ast: 1.0.0 @@ -1498,7 +1485,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -1512,7 +1498,6 @@ packages: /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} - hasBin: true dependencies: anymatch: 3.1.2 browserify: 17.0.0 diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 16bff02e9..102775753 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -5,7 +5,8 @@ "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", - "@kipper/core": "workspace:~" + "@kipper/core": "workspace:~", + "tslib": "~2.6.2" }, "devDependencies": { "typescript": "5.1.3", diff --git a/kipper/target-ts/pnpm-lock.yaml b/kipper/target-ts/pnpm-lock.yaml index fda430c16..85ff9fd1d 100644 --- a/kipper/target-ts/pnpm-lock.yaml +++ b/kipper/target-ts/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@kipper/target-js': specifier: workspace:~ version: link:../target-js + tslib: + specifier: ~2.6.2 + version: 2.6.2 devDependencies: '@types/node': @@ -94,7 +97,6 @@ packages: /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 @@ -121,13 +123,11 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /ansi-regex@6.0.1: @@ -209,7 +209,6 @@ packages: /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - hasBin: true dependencies: JSONStream: 1.3.5 combine-source-map: 0.8.0 @@ -283,7 +282,6 @@ packages: /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} - hasBin: true dependencies: JSONStream: 1.3.5 assert: 1.5.0 @@ -492,7 +490,6 @@ packages: /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - hasBin: true dependencies: JSONStream: 1.3.5 shasum-object: 1.0.0 @@ -510,7 +507,6 @@ packages: /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} - hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.0 @@ -777,7 +773,6 @@ packages: /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - hasBin: true dependencies: JSONStream: 1.3.5 acorn-node: 1.8.2 @@ -971,7 +966,6 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -1002,13 +996,11 @@ packages: /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} - hasBin: true dev: true /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} - hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 2.0.0 @@ -1129,7 +1121,6 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /process-nextick-args@2.0.1: @@ -1168,7 +1159,6 @@ packages: /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true /randombytes@2.1.0: @@ -1229,7 +1219,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.10.0 path-parse: 1.0.7 @@ -1245,7 +1234,6 @@ packages: /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - hasBin: true dev: true /safe-buffer@5.1.2: @@ -1262,7 +1250,6 @@ packages: /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -1403,7 +1390,6 @@ packages: /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -1432,6 +1418,10 @@ packages: yn: 3.1.1 dev: true + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true @@ -1443,12 +1433,10 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true dev: true /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - hasBin: true dev: true /unbox-primitive@1.0.2: @@ -1462,7 +1450,6 @@ packages: /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - hasBin: true dependencies: acorn-node: 1.8.2 dash-ast: 1.0.0 @@ -1501,7 +1488,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -1515,7 +1501,6 @@ packages: /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} - hasBin: true dependencies: anymatch: 3.1.2 browserify: 17.0.0 diff --git a/kipper/web/pnpm-lock.yaml b/kipper/web/pnpm-lock.yaml index ffcd1a5c1..2ac35d477 100644 --- a/kipper/web/pnpm-lock.yaml +++ b/kipper/web/pnpm-lock.yaml @@ -101,7 +101,6 @@ packages: /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 @@ -128,13 +127,11 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /ansi-regex@6.0.1: @@ -216,7 +213,6 @@ packages: /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - hasBin: true dependencies: JSONStream: 1.3.5 combine-source-map: 0.8.0 @@ -290,7 +286,6 @@ packages: /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} - hasBin: true dependencies: JSONStream: 1.3.5 assert: 1.5.0 @@ -499,7 +494,6 @@ packages: /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - hasBin: true dependencies: JSONStream: 1.3.5 shasum-object: 1.0.0 @@ -517,7 +511,6 @@ packages: /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} - hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.0 @@ -784,7 +777,6 @@ packages: /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - hasBin: true dependencies: JSONStream: 1.3.5 acorn-node: 1.8.2 @@ -978,7 +970,6 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -1009,13 +1000,11 @@ packages: /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} - hasBin: true dev: true /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} - hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 2.0.0 @@ -1136,7 +1125,6 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /process-nextick-args@2.0.1: @@ -1175,7 +1163,6 @@ packages: /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true /randombytes@2.1.0: @@ -1236,7 +1223,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.10.0 path-parse: 1.0.7 @@ -1252,7 +1238,6 @@ packages: /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - hasBin: true dev: true /safe-buffer@5.1.2: @@ -1269,7 +1254,6 @@ packages: /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -1410,7 +1394,6 @@ packages: /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -1450,18 +1433,15 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true dev: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} - hasBin: true dev: true /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - hasBin: true dev: true /unbox-primitive@1.0.2: @@ -1475,7 +1455,6 @@ packages: /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - hasBin: true dependencies: acorn-node: 1.8.2 dash-ast: 1.0.0 @@ -1514,7 +1493,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -1528,7 +1506,6 @@ packages: /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} - hasBin: true dependencies: anymatch: 3.1.2 browserify: 17.0.0 diff --git a/package.json b/package.json index 18ce71b46..1cf941c44 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,12 @@ "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { + "@kipper/config": "workspace:~", "@kipper/cli": "workspace:~", "@kipper/core": "workspace:~", "@kipper/target-js": "workspace:~", "@kipper/target-ts": "workspace:~", - "antlr4ts": "^0.5.0-alpha.4", - "tslib": "~2.5.0" + "tslib": "~2.6.2" }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "1.0.2", @@ -22,7 +22,6 @@ "@typescript-eslint/parser": "5.59.8", "json-parse-even-better-errors": "3.0.0", "ansi-regex": "6.0.1", - "antlr4ts-cli": "0.5.0-alpha.4", "browserify": "17.0.0", "chai": "4.3.6", "coverage-badge-creator": "1.0.17", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d7c2bd952..e6cc0c9f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@kipper/cli': specifier: workspace:~ version: link:kipper/cli + '@kipper/config': + specifier: workspace:~ + version: link:kipper/config '@kipper/core': specifier: workspace:~ version: link:kipper/core @@ -17,12 +20,9 @@ dependencies: '@kipper/target-ts': specifier: workspace:~ version: link:kipper/target-ts - antlr4ts: - specifier: ^0.5.0-alpha.4 - version: 0.5.0-alpha.4 tslib: - specifier: ~2.5.0 - version: 2.5.0 + specifier: ~2.6.2 + version: 2.6.2 devDependencies: '@istanbuljs/nyc-config-typescript': @@ -52,9 +52,6 @@ devDependencies: ansi-regex: specifier: 6.0.1 version: 6.0.1 - antlr4ts-cli: - specifier: 0.5.0-alpha.4 - version: 0.5.0-alpha.4 browserify: specifier: 17.0.0 version: 17.0.0 @@ -278,7 +275,6 @@ packages: /@babel/parser@7.20.3: resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.20.2 dev: true @@ -511,7 +507,7 @@ packages: supports-color: 8.1.1 supports-hyperlinks: 2.3.0 ts-node: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) - tslib: 2.5.0 + tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 wrap-ansi: 7.0.0 @@ -941,7 +937,6 @@ packages: /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 @@ -984,13 +979,11 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /acorn@8.8.1: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /agent-base@6.0.2: @@ -1072,15 +1065,6 @@ packages: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} dev: true - /antlr4ts-cli@0.5.0-alpha.4: - resolution: {integrity: sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==} - hasBin: true - dev: true - - /antlr4ts@0.5.0-alpha.4: - resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} - dev: false - /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true @@ -1217,7 +1201,6 @@ packages: /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - hasBin: true dependencies: JSONStream: 1.3.5 combine-source-map: 0.8.0 @@ -1295,7 +1278,6 @@ packages: /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} - hasBin: true dependencies: JSONStream: 1.3.5 assert: 1.5.0 @@ -1350,7 +1332,6 @@ packages: /browserslist@4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001434 electron-to-chromium: 1.4.284 @@ -1435,7 +1416,6 @@ packages: /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 @@ -1620,7 +1600,6 @@ packages: /coverage-badge-creator@1.0.17: resolution: {integrity: sha512-9agGAXGNafW9avCVg5eJF7rzpTRjTbSf3acNxEUQqxUn7WDrnEAlomHyPIosucZuChPxVPgW6Kg3W4nStj/jCg==} - hasBin: true dev: true /create-ecdh@4.0.4: @@ -1750,7 +1729,6 @@ packages: /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - hasBin: true dependencies: JSONStream: 1.3.5 shasum-object: 1.0.0 @@ -1768,7 +1746,6 @@ packages: /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} - hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.1 @@ -1830,7 +1807,6 @@ packages: /ejs@3.1.8: resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} engines: {node: '>=0.10.0'} - hasBin: true dependencies: jake: 10.8.5 dev: true @@ -1922,7 +1898,6 @@ packages: /eslint@8.42.0: resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@eslint-community/regexpp': 4.5.0 @@ -1979,7 +1954,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true dev: true /esquery@1.4.2: @@ -1999,7 +1973,6 @@ packages: /estimo@2.3.6: resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} engines: {node: '>=12'} - hasBin: true dependencies: '@sitespeed.io/tracium': 0.3.3 commander: 9.4.1 @@ -2043,7 +2016,6 @@ packages: /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} - hasBin: true dependencies: debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 @@ -2101,7 +2073,6 @@ packages: /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} dev: true /fastq@1.13.0: @@ -2176,7 +2147,6 @@ packages: /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true dev: true /flatted@3.2.7: @@ -2406,7 +2376,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true dev: true /hmac-drbg@1.0.1: @@ -2495,7 +2464,6 @@ packages: /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - hasBin: true dependencies: JSONStream: 1.3.5 acorn-node: 1.8.2 @@ -2546,7 +2514,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: true /is-extglob@2.1.1: @@ -2704,7 +2671,6 @@ packages: /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} - hasBin: true dependencies: async: 3.2.4 chalk: 4.1.2 @@ -2727,7 +2693,6 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -2735,7 +2700,6 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 dev: true @@ -2743,7 +2707,6 @@ packages: /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true dev: true /json-parse-even-better-errors@2.3.1: @@ -2769,7 +2732,6 @@ packages: /json5@1.0.1: resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} - hasBin: true requiresBuild: true dependencies: minimist: 1.2.8 @@ -2779,7 +2741,6 @@ packages: /json5@2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} - hasBin: true dev: true /jsonfile@6.1.0: @@ -2860,7 +2821,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 dev: true @@ -2916,7 +2876,6 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -2972,7 +2931,6 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 dev: true @@ -2980,13 +2938,11 @@ packages: /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} - hasBin: true dev: true /mocha@10.2.0: resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} engines: {node: '>= 14.0.0'} - hasBin: true dependencies: ansi-colors: 4.1.1 browser-stdout: 1.3.1 @@ -3018,7 +2974,6 @@ packages: /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} - hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 2.0.0 @@ -3048,13 +3003,11 @@ packages: /nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: true /nanoid@3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: true /nanospinner@1.1.0: @@ -3126,7 +3079,6 @@ packages: /nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} - hasBin: true dependencies: '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 @@ -3369,7 +3321,6 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /process-nextick-args@2.0.1: @@ -3464,7 +3415,6 @@ packages: /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true /queue-microtask@1.2.3: @@ -3560,7 +3510,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.11.0 path-parse: 1.0.7 @@ -3574,7 +3523,6 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 dev: true @@ -3594,7 +3542,6 @@ packages: /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - hasBin: true dev: true /safe-buffer@5.1.2: @@ -3620,18 +3567,15 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true dev: true /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true dev: true /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: true @@ -3648,7 +3592,6 @@ packages: /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -3699,7 +3642,6 @@ packages: /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} - hasBin: true dependencies: bytes-iec: 3.1.1 chokidar: 3.5.3 @@ -3945,7 +3887,6 @@ packages: /terser@5.15.1: resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 acorn: 8.8.1 @@ -4009,7 +3950,6 @@ packages: /ts-mocha@10.0.0(mocha@10.2.0): resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} - hasBin: true peerDependencies: mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X dependencies: @@ -4021,7 +3961,6 @@ packages: /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -4053,7 +3992,6 @@ packages: /ts-node@7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} - hasBin: true dependencies: arrify: 1.0.1 buffer-from: 1.1.2 @@ -4106,8 +4044,8 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} /tsutils@3.21.0(typescript@5.1.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -4163,18 +4101,15 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true dev: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} - hasBin: true dev: true /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - hasBin: true dev: true /unbzip2-stream@1.4.3: @@ -4186,7 +4121,6 @@ packages: /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - hasBin: true dependencies: acorn-node: 1.8.2 dash-ast: 1.0.0 @@ -4202,7 +4136,6 @@ packages: /update-browserslist-db@1.0.10(browserslist@4.21.4): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -4246,12 +4179,10 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true dev: true /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -4265,7 +4196,6 @@ packages: /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} - hasBin: true dependencies: anymatch: 3.1.3 browserify: 17.0.0 @@ -4296,7 +4226,6 @@ packages: /webpack@5.75.0(uglify-js@3.17.4): resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} - hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: @@ -4358,7 +4287,6 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 dev: true @@ -4366,7 +4294,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 dev: true From 4a56d39f7c7eecc26006a88c0cd35f1a12b40e4e Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 14:45:34 +0100 Subject: [PATCH 085/257] other: Added missing test dependency in package.json --- package.json | 5 +++-- pnpm-lock.yaml | 11 +++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1cf941c44..992f9e58b 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,9 @@ "tsify": "5.0.4", "uglify-js": "3.17.4", "uuid": "9.0.0", - "watchify": "4.0.0" - }, + "watchify": "4.0.0", + "antlr4ts": "^0.5.0-alpha.4" + }, "engines": { "node": ">=16.0.0", "pnpm": ">=8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6cc0c9f2..6ee95bb65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,6 +52,9 @@ devDependencies: ansi-regex: specifier: 6.0.1 version: 6.0.1 + antlr4ts: + specifier: ^0.5.0-alpha.4 + version: 0.5.0-alpha.4 browserify: specifier: 17.0.0 version: 17.0.0 @@ -1065,6 +1068,10 @@ packages: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} dev: true + /antlr4ts@0.5.0-alpha.4: + resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + dev: true + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true @@ -3950,6 +3957,7 @@ packages: /ts-mocha@10.0.0(mocha@10.2.0): resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} + hasBin: true peerDependencies: mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X dependencies: @@ -3961,6 +3969,7 @@ packages: /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -4136,6 +4145,7 @@ packages: /update-browserslist-db@1.0.10(browserslist@4.21.4): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -4226,6 +4236,7 @@ packages: /webpack@5.75.0(uglify-js@3.17.4): resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} + hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: From acddf63f5f69ea89a464d15ed354a85ecf5911ab Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 15:26:44 +0100 Subject: [PATCH 086/257] other: Cleaned up dependencies, bumped `eslint` & `@typescript-eslint/eslint-plugin`, and prettified project --- DEVELOPMENT.md | 2 +- kipper/cli/README.md | 21 +- kipper/cli/package.json | 12 +- kipper/cli/pnpm-lock.yaml | 3494 ++----------------------------- kipper/core/package.json | 16 +- kipper/core/pnpm-lock.yaml | 1353 +----------- kipper/target-js/package.json | 12 +- kipper/target-js/pnpm-lock.yaml | 1501 ------------- kipper/target-ts/package.json | 12 +- kipper/target-ts/pnpm-lock.yaml | 1501 ------------- kipper/web/package.json | 14 +- kipper/web/pnpm-lock.yaml | 282 --- package.json | 5 +- pnpm-lock.yaml | 308 +-- 14 files changed, 416 insertions(+), 8117 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index b539b3a08..34df393f5 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -227,4 +227,4 @@ which can be included and used inside a browser without any dependencies. ```bash pnpm run add-next-tag MAJOR.MINOR.PATCH - ``` + ``` diff --git a/kipper/cli/README.md b/kipper/cli/README.md index ff0537991..b06d1ef61 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊🖥️](#kipper-cli---kippercli-️) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊🖥️](#kipper-cli---kippercli-️) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -188,6 +192,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 9fd8367c9..c2739361d 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -22,16 +22,8 @@ "devDependencies": { "@types/node": "18.16.16", "@types/sinon": "10.0.15", - "@oclif/test": "2.3.21", - "ts-node": "10.9.1", - "@sinonjs/fake-timers": "10.0.2", - "rimraf": "5.0.1", - "os-tmpdir": "1.0.2", - "pseudomap": "1.0.2", - "typescript": "5.1.3", - "oclif": "3.4.6", - "json-parse-even-better-errors": "2.3.1", - "semver": "7.5.1" + "typescript": "5.1.3", + "prettier": "2.8.8" }, "engines": { "node": ">=16.0.0", diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index f1dd8b375..abf614cda 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -40,104 +40,43 @@ dependencies: version: 3.3.4 devDependencies: - '@oclif/test': - specifier: 2.3.21 - version: 2.3.21(@types/node@18.16.16)(typescript@5.1.3) - '@sinonjs/fake-timers': - specifier: 10.0.2 - version: 10.0.2 '@types/node': specifier: 18.16.16 version: 18.16.16 '@types/sinon': specifier: 10.0.15 version: 10.0.15 - json-parse-even-better-errors: - specifier: 2.3.1 - version: 2.3.1 - oclif: - specifier: 3.4.6 - version: 3.4.6(@types/node@18.16.16)(mem-fs-editor@9.6.0)(mem-fs@2.2.1)(typescript@5.1.3) - os-tmpdir: - specifier: 1.0.2 - version: 1.0.2 - pseudomap: - specifier: 1.0.2 - version: 1.0.2 - rimraf: - specifier: 5.0.1 - version: 5.0.1 - semver: - specifier: 7.5.1 - version: 7.5.1 - ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + prettier: + specifier: 2.8.8 + version: 2.8.8 typescript: specifier: 5.1.3 version: 5.1.3 packages: - /@babel/code-frame@7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.18.6 - dev: true - - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.19.1 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - - /@gar/promisify@1.1.3: - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - dev: true - - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.0.1 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - - /@isaacs/string-locale-compare@1.1.0: - resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} - dev: true + dev: false /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} + dev: false /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: false /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + dev: false /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -145,10 +84,12 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: false /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} + dev: false /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -156,167 +97,7 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 - - /@npmcli/arborist@4.3.1: - resolution: {integrity: sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} - dependencies: - '@isaacs/string-locale-compare': 1.1.0 - '@npmcli/installed-package-contents': 1.0.7 - '@npmcli/map-workspaces': 2.0.4 - '@npmcli/metavuln-calculator': 2.0.0 - '@npmcli/move-file': 1.1.2 - '@npmcli/name-from-folder': 1.0.1 - '@npmcli/node-gyp': 1.0.3 - '@npmcli/package-json': 1.0.1 - '@npmcli/run-script': 2.0.0 - bin-links: 3.0.3 - cacache: 15.3.0 - common-ancestor-path: 1.0.1 - json-parse-even-better-errors: 2.3.1 - json-stringify-nice: 1.1.4 - mkdirp: 1.0.4 - mkdirp-infer-owner: 2.0.0 - npm-install-checks: 4.0.0 - npm-package-arg: 8.1.5 - npm-pick-manifest: 6.1.1 - npm-registry-fetch: 12.0.2 - pacote: 12.0.3 - parse-conflict-json: 2.0.2 - proc-log: 1.0.0 - promise-all-reject-late: 1.0.1 - promise-call-limit: 1.0.1 - read-package-json-fast: 2.0.3 - readdir-scoped-modules: 1.1.0 - rimraf: 3.0.2 - semver: 7.5.1 - ssri: 8.0.1 - treeverse: 1.0.4 - walk-up-path: 1.0.0 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /@npmcli/fs@1.1.1: - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.5.1 - dev: true - - /@npmcli/fs@2.1.2: - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.5.1 - dev: true - - /@npmcli/git@2.1.0: - resolution: {integrity: sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==} - dependencies: - '@npmcli/promise-spawn': 1.3.2 - lru-cache: 6.0.0 - mkdirp: 1.0.4 - npm-pick-manifest: 6.1.1 - promise-inflight: 1.0.1 - promise-retry: 2.0.1 - semver: 7.5.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - dev: true - - /@npmcli/installed-package-contents@1.0.7: - resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} - engines: {node: '>= 10'} - dependencies: - npm-bundled: 1.1.2 - npm-normalize-package-bin: 1.0.1 - dev: true - - /@npmcli/map-workspaces@2.0.4: - resolution: {integrity: sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - '@npmcli/name-from-folder': 1.0.1 - glob: 8.1.0 - minimatch: 5.1.0 - read-package-json-fast: 2.0.3 - dev: true - - /@npmcli/metavuln-calculator@2.0.0: - resolution: {integrity: sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} - dependencies: - cacache: 15.3.0 - json-parse-even-better-errors: 2.3.1 - pacote: 12.0.3 - semver: 7.5.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /@npmcli/move-file@1.1.2: - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - dev: true - - /@npmcli/move-file@2.0.1: - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - dev: true - - /@npmcli/name-from-folder@1.0.1: - resolution: {integrity: sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==} - dev: true - - /@npmcli/node-gyp@1.0.3: - resolution: {integrity: sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==} - dev: true - - /@npmcli/package-json@1.0.1: - resolution: {integrity: sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==} - dependencies: - json-parse-even-better-errors: 2.3.1 - dev: true - - /@npmcli/promise-spawn@1.3.2: - resolution: {integrity: sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==} - dependencies: - infer-owner: 1.0.4 - dev: true - - /@npmcli/run-script@2.0.0: - resolution: {integrity: sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==} - dependencies: - '@npmcli/node-gyp': 1.0.3 - '@npmcli/promise-spawn': 1.3.2 - node-gyp: 8.4.1 - read-package-json-fast: 2.0.3 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /@oclif/color@1.0.4: - resolution: {integrity: sha512-HEcVnSzpQkjskqWJyVN3tGgR0H0F8GrBmDjgQ1N0ZwwktYa4y9kfV07P/5vt5BjPXNyslXHc4KAO8Bt7gmErCA==} - engines: {node: '>=12.0.0'} - dependencies: - ansi-styles: 4.3.0 - chalk: 4.1.2 - strip-ansi: 6.0.1 - supports-color: 8.1.1 - tslib: 2.6.2 - dev: true + dev: false /@oclif/command@1.8.31(@oclif/config@1.18.2): resolution: {integrity: sha512-5GLT2l8ccxTqog4UBIX6DqdvDXkpDWBIU7tz8Bx+N1CACpY9cXqG6luUqQzLshKaHXx9b/Y4/KF6SvRTg9FN5A==} @@ -392,40 +173,6 @@ packages: - supports-color dev: false - /@oclif/core@1.26.2: - resolution: {integrity: sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==} - engines: {node: '>=14.0.0'} - dependencies: - '@oclif/linewrap': 1.0.0 - '@oclif/screen': 3.0.4 - ansi-escapes: 4.3.2 - ansi-styles: 4.3.0 - cardinal: 2.1.1 - chalk: 4.1.2 - clean-stack: 3.0.1 - cli-progress: 3.12.0 - debug: 4.3.4(supports-color@8.1.1) - ejs: 3.1.8 - fs-extra: 9.1.0 - get-package-type: 0.1.0 - globby: 11.1.0 - hyperlinker: 1.0.0 - indent-string: 4.0.0 - is-wsl: 2.2.0 - js-yaml: 3.14.1 - natural-orderby: 2.0.3 - object-treeify: 1.1.33 - password-prompt: 1.1.2 - semver: 7.5.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - supports-color: 8.1.1 - supports-hyperlinks: 2.2.0 - tslib: 2.6.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: true - /@oclif/core@2.8.5(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==} engines: {node: '>=14.0.0'} @@ -464,6 +211,7 @@ packages: - '@swc/wasm' - '@types/node' - typescript + dev: false /@oclif/errors@1.3.5: resolution: {integrity: sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==} @@ -506,6 +254,7 @@ packages: /@oclif/linewrap@1.0.0: resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} + dev: false /@oclif/parser@3.8.10: resolution: {integrity: sha512-J4l/NcnfbIU84+NNdy6bxq9yJt4joFWNvpk59hq+uaQPUNtjmNJDVGuRvf6GUOxHNgRsVK1JRmd/Ez+v7Z9GqQ==} @@ -546,33 +295,6 @@ packages: - supports-color dev: false - /@oclif/plugin-help@5.2.4(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-7fVB/M1cslwHJTmyNGGDYBizi54NHcKCxHAbDSD16EbjosKxFwncRylVC/nsMgKZEufMDKZaVYI2lYRY3GHlSQ==} - engines: {node: '>=12.0.0'} - dependencies: - '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - typescript - dev: true - - /@oclif/plugin-not-found@2.3.18(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-yUXgdPwjE/JIuWZ23Ge6G5gM+qiw7Baq/26oBq3eusIP6hZuHYeCpwQ96Zy5aHcjm2NSZcMjkZG1jARyr9BzkQ==} - engines: {node: '>=12.0.0'} - dependencies: - '@oclif/color': 1.0.4 - '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) - fast-levenshtein: 3.0.0 - lodash: 4.17.21 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - typescript - dev: true - /@oclif/plugin-warn-if-update-available@2.0.37(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-rfDNvplwgiwV+QSV4JU96ypmWgNJ6Hk5FEAEAKzqF0v0J8AHwZGpwwYO/MCZSkbc7bfYpkqLx/sxjpMO6j6PmQ==} engines: {node: '>=12.0.0'} @@ -590,243 +312,33 @@ packages: - '@types/node' - supports-color - typescript - - /@oclif/screen@3.0.4: - resolution: {integrity: sha512-IMsTN1dXEXaOSre27j/ywGbBjrzx0FNd1XmuhCWCB9NTPrhWI1Ifbz+YLSEcstfQfocYsrbrIessxXb2oon4lA==} - engines: {node: '>=12.0.0'} - dev: true - - /@oclif/test@2.3.21(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-RaFNf3/PMwBLrL9yu8aFsONsUSpyI16AGC6HiAabDyu534Rh+jBtqy/dPZ53/SOCBOholhZmVs7jT0UE5Utwew==} - engines: {node: '>=12.0.0'} - dependencies: - '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) - fancy-test: 2.0.23 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - dev: true - - /@octokit/auth-token@2.5.0: - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} - dependencies: - '@octokit/types': 6.41.0 - dev: true - - /@octokit/core@3.6.0: - resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} - dependencies: - '@octokit/auth-token': 2.5.0 - '@octokit/graphql': 4.8.0 - '@octokit/request': 5.6.3 - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.0 - transitivePeerDependencies: - - encoding - dev: true - - /@octokit/endpoint@6.0.12: - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} - dependencies: - '@octokit/types': 6.41.0 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.0 - dev: true - - /@octokit/graphql@4.8.0: - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} - dependencies: - '@octokit/request': 5.6.3 - '@octokit/types': 6.41.0 - universal-user-agent: 6.0.0 - transitivePeerDependencies: - - encoding - dev: true - - /@octokit/openapi-types@12.11.0: - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - dev: true - - /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): - resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} - peerDependencies: - '@octokit/core': '>=2' - dependencies: - '@octokit/core': 3.6.0 - '@octokit/types': 6.41.0 - dev: true - - /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} - peerDependencies: - '@octokit/core': '>=3' - dependencies: - '@octokit/core': 3.6.0 - dev: true - - /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): - resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} - peerDependencies: - '@octokit/core': '>=3' - dependencies: - '@octokit/core': 3.6.0 - '@octokit/types': 6.41.0 - deprecation: 2.3.1 - dev: true - - /@octokit/request-error@2.1.0: - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} - dependencies: - '@octokit/types': 6.41.0 - deprecation: 2.3.1 - once: 1.4.0 - dev: true - - /@octokit/request@5.6.3: - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} - dependencies: - '@octokit/endpoint': 6.0.12 - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 - is-plain-object: 5.0.0 - node-fetch: 2.6.9 - universal-user-agent: 6.0.0 - transitivePeerDependencies: - - encoding - dev: true - - /@octokit/rest@18.12.0: - resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} - dependencies: - '@octokit/core': 3.6.0 - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) - transitivePeerDependencies: - - encoding - dev: true - - /@octokit/types@6.41.0: - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} - dependencies: - '@octokit/openapi-types': 12.11.0 - dev: true - - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - - /@sindresorhus/is@4.6.0: - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - dev: true - - /@sinonjs/commons@2.0.0: - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} - dependencies: - type-detect: 4.0.8 - dev: true - - /@sinonjs/fake-timers@10.0.2: - resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} - dependencies: - '@sinonjs/commons': 2.0.0 - dev: true - - /@szmarczak/http-timer@4.0.6: - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - dependencies: - defer-to-connect: 2.0.1 - dev: true - - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + dev: false /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: false /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: false /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: false /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - - /@types/cacheable-request@6.0.3: - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - dependencies: - '@types/http-cache-semantics': 4.0.1 - '@types/keyv': 3.1.4 - '@types/node': 18.16.16 - '@types/responselike': 1.0.0 - dev: true - - /@types/chai@4.3.3: - resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} - dev: true + dev: false /@types/cli-progress@3.11.0: resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} dependencies: '@types/node': 18.16.16 - - /@types/expect@1.20.4: - resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} - dev: true - - /@types/http-cache-semantics@4.0.1: - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - dev: true - - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 18.16.16 - dev: true - - /@types/lodash@4.14.182: - resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==} - dev: true - - /@types/minimatch@3.0.5: - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - dev: true - - /@types/node@15.14.9: - resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} - dev: true + dev: false /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} - /@types/normalize-package-data@2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - dev: true - - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - dependencies: - '@types/node': 18.16.16 - dev: true - /@types/sinon@10.0.15: resolution: {integrity: sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==} dependencies: @@ -837,360 +349,102 @@ packages: resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} dev: true - /@types/vinyl@2.0.7: - resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} - dependencies: - '@types/expect': 1.20.4 - '@types/node': 18.16.16 - dev: true - - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true - /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} + dev: false /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /agentkeepalive@4.2.1: - resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} - engines: {node: '>= 8.0.0'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - depd: 1.1.2 - humanize-ms: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: true - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true + dev: false /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} + dev: false /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - - /ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - dev: true - - /ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - dev: true + dev: false /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - - /ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true + dev: false /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + dev: false /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true - - /are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.0 - dev: true - - /are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.0 - dev: true + dev: false /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: false /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - - /array-differ@3.0.0: - resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} - engines: {node: '>=8'} - dev: true + dev: false /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - - /arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - dev: true - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true + dev: false /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: false /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /aws-sdk@2.1311.0: - resolution: {integrity: sha512-X3cFNsfs3HUfz6LKiLqvDTO4EsqO5DnNssh9SOoxhwmoMyJ2et3dEmigO6TaA44BjVNdLW98+sXJVPTGvINY1Q==} - engines: {node: '>= 10.0.0'} - dependencies: - buffer: 4.9.2 - events: 1.1.1 - ieee754: 1.1.13 - jmespath: 0.16.0 - querystring: 0.2.0 - sax: 1.2.1 - url: 0.10.3 - util: 0.12.5 - uuid: 8.0.0 - xml2js: 0.4.19 - dev: true + dev: false /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: true - - /bin-links@3.0.3: - resolution: {integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - cmd-shim: 5.0.0 - mkdirp-infer-owner: 2.0.0 - npm-normalize-package-bin: 2.0.0 - read-cmd-shim: 3.0.1 - rimraf: 3.0.2 - write-file-atomic: 4.0.2 - dev: true - - /binaryextensions@4.18.0: - resolution: {integrity: sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw==} - engines: {node: '>=0.8'} - dev: true - - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true + dev: false /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: false /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 + dev: false /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: false /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false - /buffer@4.9.2: - resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - isarray: 1.0.0 - dev: true - - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /builtins@1.0.3: - resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} - dev: true - - /cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} - dependencies: - '@npmcli/fs': 1.1.1 - '@npmcli/move-file': 1.1.2 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 7.2.3 - infer-owner: 1.0.4 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.1.13 - unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird - dev: true - - /cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - '@npmcli/fs': 2.1.2 - '@npmcli/move-file': 2.0.1 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 8.1.0 - infer-owner: 1.0.4 - lru-cache: 7.14.1 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 9.0.1 - tar: 6.1.13 - unique-filename: 2.0.1 - transitivePeerDependencies: - - bluebird - dev: true - - /cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - dev: true - - /cacheable-request@7.0.2: - resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 4.5.2 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.0 - dev: true - /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 - - /chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true + dev: false /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1198,189 +452,45 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true - - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true - - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + dev: false /clean-stack@3.0.1: resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} engines: {node: '>=10'} dependencies: escape-string-regexp: 4.0.0 - - /cli-boxes@1.0.0: - resolution: {integrity: sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==} - engines: {node: '>=0.10.0'} - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true + dev: false /cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} dependencies: string-width: 4.2.3 - - /cli-spinners@2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} - engines: {node: '>=6'} - dev: true - - /cli-table@0.3.11: - resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} - engines: {node: '>= 0.2.0'} - dependencies: - colors: 1.0.3 - dev: true - - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true - - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /clone-buffer@1.0.0: - resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} - engines: {node: '>= 0.10'} - dev: true - - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - dependencies: - mimic-response: 1.0.1 - dev: true - - /clone-stats@1.0.0: - resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} - dev: true - - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true - - /clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - dev: true - - /cloneable-readable@1.1.3: - resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} - dependencies: - inherits: 2.0.4 - process-nextick-args: 2.0.1 - readable-stream: 2.3.7 - dev: true - - /cmd-shim@5.0.0: - resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - mkdirp-infer-owner: 2.0.0 - dev: true - - /code-point-at@1.1.0: - resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} - engines: {node: '>=0.10.0'} - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true + dev: false /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + dev: false /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - dev: true - - /colors@1.0.3: - resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} - engines: {node: '>=0.1.90'} - dev: true - - /commander@7.1.0: - resolution: {integrity: sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==} - engines: {node: '>= 10'} - dev: true - - /common-ancestor-path@1.0.1: - resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} - dev: true - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + dev: false /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - /concurrently@7.6.0: - resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} - engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} - dependencies: - chalk: 4.1.2 - date-fns: 2.29.3 - lodash: 4.17.21 - rxjs: 7.8.0 - shell-quote: 1.8.0 - spawn-command: 0.0.2-1 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.6.2 - dev: true - - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true + dev: false /content-type@1.0.4: resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} engines: {node: '>= 0.6'} - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + dev: false /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: false /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} @@ -1391,29 +501,7 @@ packages: semver: 5.7.1 shebang-command: 1.2.0 which: 1.3.1 - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - dev: true - - /date-fns@2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} - engines: {node: '>=0.11'} - dev: true - - /dateformat@4.6.3: - resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - dev: true + dev: false /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -1426,184 +514,46 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 - - /debuglog@1.0.1: - resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} - dev: true - - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - dependencies: - mimic-response: 3.1.0 - dev: true - - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true - - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - dependencies: - clone: 1.0.4 - dev: true - - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: true - - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true - - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: true - - /dezalgo@1.0.4: - resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - dependencies: - asap: 2.0.6 - wrappy: 1.0.2 - dev: true + dev: false /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - - /diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} - engines: {node: '>=0.3.1'} - dev: true + dev: false /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 - - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + dev: false /ejs@3.1.8: resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} engines: {node: '>=0.10.0'} dependencies: jake: 10.8.5 + dev: false /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true - - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true - dependencies: - iconv-lite: 0.6.3 - dev: true - optional: true - - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true - - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true + dev: false /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - - /error@10.4.0: - resolution: {integrity: sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==} - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + dev: false /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + dev: false /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true - - /events@1.1.1: - resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} - engines: {node: '>=0.4.x'} - dev: true - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true - - /fancy-test@2.0.23: - resolution: {integrity: sha512-RPX4iAzAioH9nxkqk2yrcunBLBmnMLxtIsw3Pjgj2PGPHTdT3wZ6asKv9U332+UQyZwZWWc4bP64JOa6DcVhnQ==} - engines: {node: '>=12.0.0'} - dependencies: - '@types/chai': 4.3.3 - '@types/lodash': 4.14.182 - '@types/node': 18.16.16 - '@types/sinon': 10.0.15 - lodash: 4.17.21 - mock-stdin: 1.0.0 - nock: 13.3.1 - stdout-stderr: 0.1.13 - transitivePeerDependencies: - - supports-color - dev: true + dev: false /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} @@ -1614,90 +564,26 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - - /fast-levenshtein@3.0.0: - resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} - dependencies: - fastest-levenshtein: 1.0.16 - dev: true - - /fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - dev: true + dev: false /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 - - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true + dev: false /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.0 + dev: false /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - dependencies: - micromatch: 4.0.5 - pkg-dir: 4.2.0 - dev: true - - /find-yarn-workspace-root@2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - dependencies: - micromatch: 4.0.5 - dev: true - - /first-chunk-stream@2.0.0: - resolution: {integrity: sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==} - engines: {node: '>=0.10.0'} - dependencies: - readable-stream: 2.3.7 - dev: true - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.0.2 - dev: true + dev: false /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} @@ -1706,6 +592,7 @@ packages: graceful-fs: 4.2.10 jsonfile: 4.0.0 universalify: 0.1.2 + dev: false /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} @@ -1715,136 +602,19 @@ packages: graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 - - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: true - - /gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - dev: true + dev: false /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - - /get-stdin@4.0.1: - resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} - engines: {node: '>=0.10.0'} - dev: true - - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - dev: true - - /github-username@6.0.0: - resolution: {integrity: sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ==} - engines: {node: '>=10'} - dependencies: - '@octokit/rest': 18.12.0 - transitivePeerDependencies: - - encoding - dev: true + dev: false /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - - /glob@10.2.5: - resolution: {integrity: sha512-Gj+dFYPZ5hc5dazjXzB0iHg2jKWJZYMjITXYPBRQ/xc2Buw7H0BINknRTwURJ6IC6MEFpYbLvtgVb3qD+DwyuA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.2.0 - minimatch: 9.0.0 - minipass: 6.0.2 - path-scurry: 1.9.2 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.0 - once: 1.4.0 - dev: true + dev: false /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -1856,91 +626,16 @@ packages: ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.0 - dev: true - - /got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.0 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.2 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - dev: true + dev: false /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - - /grouped-queue@2.0.0: - resolution: {integrity: sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw==} - engines: {node: '>=8.0.0'} - dev: true - - /has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} - dependencies: - ansi-regex: 2.1.1 - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + dev: false /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 - dev: true - - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + dev: false /http-call@5.3.0: resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} @@ -1954,294 +649,74 @@ packages: tunnel-agent: 0.6.0 transitivePeerDependencies: - supports-color - - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - dev: true - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.2 - dev: true + dev: false /hyperlinker@1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dependencies: - safer-buffer: 2.1.2 - dev: true - optional: true - - /ieee754@1.1.13: - resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /ignore-walk@4.0.1: - resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} - engines: {node: '>=10'} - dependencies: - minimatch: 3.1.2 - dev: true + dev: false /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + dev: false /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + dev: false - /infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - dev: true + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + dev: false - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false - /inquirer@8.2.5: - resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} - engines: {node: '>=12.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 7.0.0 - dev: true - - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - dev: true - - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - /is-fullwidth-code-point@1.0.0: - resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} - engines: {node: '>=0.10.0'} - dependencies: - number-is-nan: 1.0.1 - dev: true - - /is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true - - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - dev: true + dev: false /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true - - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + dev: false /is-retry-allowed@1.2.0: resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} engines: {node: '>=0.10.0'} - - /is-scoped@2.1.0: - resolution: {integrity: sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==} - engines: {node: '>=8'} - dependencies: - scoped-regex: 2.1.0 - dev: true + dev: false /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - - /is-utf8@0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - dev: true + dev: false /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true + dev: false /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /jackspeak@2.2.0: - resolution: {integrity: sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: true + dev: false /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} @@ -2251,45 +726,24 @@ packages: chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - - /jmespath@0.16.0: - resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} - engines: {node: '>= 0.6.0'} - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + dev: false /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} dependencies: argparse: 1.0.10 esprima: 4.0.1 - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + dev: false /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true - - /json-stringify-nice@1.1.4: - resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} - dev: true - - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true + dev: false /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.10 + dev: false /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -2297,178 +751,27 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.10 - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - - /just-diff-apply@5.5.0: - resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} - dev: true - - /just-diff@5.2.0: - resolution: {integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==} - dev: true - - /keyv@4.5.2: - resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.10 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - dev: true - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true + dev: false /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: true + dev: false /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - - /lru-cache@7.14.1: - resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==} - engines: {node: '>=12'} - dev: true - - /lru-cache@9.1.1: - resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} - engines: {node: 14 || >=16.14} - dev: true + dev: false /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - /make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - agentkeepalive: 4.2.1 - cacache: 16.1.3 - http-cache-semantics: 4.1.1 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 7.14.1 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 2.1.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 - ssri: 9.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /make-fetch-happen@9.1.0: - resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} - engines: {node: '>= 10'} - dependencies: - agentkeepalive: 4.2.1 - cacache: 15.3.0 - http-cache-semantics: 4.1.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 1.4.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 6.2.1 - ssri: 8.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /mem-fs-editor@9.6.0(mem-fs@2.2.1): - resolution: {integrity: sha512-CsuAd+s0UPZnGzm3kQ5X7gGmVmwiX9XXRAmXj9Mbq0CJa8YWUkPqneelp0aG2g+7uiwCBHlJbl30FYtToLT3VQ==} - engines: {node: '>=12.10.0'} - peerDependencies: - mem-fs: ^2.1.0 - peerDependenciesMeta: - mem-fs: - optional: true - dependencies: - binaryextensions: 4.18.0 - commondir: 1.0.1 - deep-extend: 0.6.0 - ejs: 3.1.8 - globby: 11.1.0 - isbinaryfile: 4.0.10 - mem-fs: 2.2.1 - minimatch: 3.1.2 - multimatch: 5.0.0 - normalize-path: 3.0.0 - textextensions: 5.15.0 - dev: true - - /mem-fs@2.2.1: - resolution: {integrity: sha512-yiAivd4xFOH/WXlUi6v/nKopBh1QLzwjFi36NK88cGt/PRXI8WeBASqY+YSjIVWvQTx3hR8zHKDBMV6hWmglNA==} - engines: {node: '>=12'} - dependencies: - '@types/node': 15.14.9 - '@types/vinyl': 2.0.7 - vinyl: 2.2.1 - vinyl-file: 3.0.0 - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + dev: false /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + dev: false /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -2476,1177 +779,179 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true - - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: true + dev: false /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: false /minimatch@5.1.0: resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 + dev: false - /minimatch@9.0.0: - resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimist@1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} - dev: true + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true + /natural-orderby@2.0.3: + resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} + dev: false - /minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - dev: true + /nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: false - /minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - dev: true + /object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + dev: false - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} dependencies: - minipass: 3.3.6 - dev: true + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: false - /minipass-json-stream@1.0.1: - resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} + /password-prompt@1.1.2: + resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} dependencies: - jsonparse: 1.3.1 - minipass: 3.3.6 - dev: true + ansi-escapes: 3.2.0 + cross-spawn: 6.0.5 + dev: false - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - dependencies: - minipass: 3.3.6 - dev: true + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: false - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dependencies: - minipass: 3.3.6 - dev: true + dev: false - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - dev: true + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false - /minipass@4.0.3: - resolution: {integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==} - engines: {node: '>=8'} + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true dev: true - /minipass@6.0.2: - resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: false - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + /redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - dev: true - - /mkdirp-infer-owner@2.0.0: - resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} - engines: {node: '>=10'} - dependencies: - chownr: 2.0.0 - infer-owner: 1.0.4 - mkdirp: 1.0.4 - dev: true - - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - dev: true - - /mock-stdin@1.0.0: - resolution: {integrity: sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==} - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /multimatch@5.0.0: - resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} - engines: {node: '>=10'} - dependencies: - '@types/minimatch': 3.0.5 - array-differ: 3.0.0 - array-union: 2.1.0 - arrify: 2.0.1 - minimatch: 3.1.2 - dev: true - - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true - - /natural-orderby@2.0.3: - resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true - - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - - /nock@13.3.1: - resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} - engines: {node: '>= 10.13'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - json-stringify-safe: 5.0.1 - lodash: 4.17.21 - propagate: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /node-fetch@2.6.9: - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: true - - /node-gyp@8.4.1: - resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} - engines: {node: '>= 10.12.0'} - dependencies: - env-paths: 2.2.1 - glob: 7.2.3 - graceful-fs: 4.2.10 - make-fetch-happen: 9.1.0 - nopt: 5.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.5.1 - tar: 6.1.13 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - dependencies: - abbrev: 1.1.1 - dev: true - - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.1 - semver: 5.7.1 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.11.0 - semver: 7.5.1 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: true - - /npm-bundled@1.1.2: - resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} - dependencies: - npm-normalize-package-bin: 1.0.1 - dev: true - - /npm-install-checks@4.0.0: - resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} - engines: {node: '>=10'} - dependencies: - semver: 7.5.1 - dev: true - - /npm-normalize-package-bin@1.0.1: - resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} - dev: true - - /npm-normalize-package-bin@2.0.0: - resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true - - /npm-package-arg@8.1.5: - resolution: {integrity: sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==} - engines: {node: '>=10'} - dependencies: - hosted-git-info: 4.1.0 - semver: 7.5.1 - validate-npm-package-name: 3.0.0 - dev: true - - /npm-packlist@3.0.0: - resolution: {integrity: sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==} - engines: {node: '>=10'} - dependencies: - glob: 7.2.3 - ignore-walk: 4.0.1 - npm-bundled: 1.1.2 - npm-normalize-package-bin: 1.0.1 - dev: true - - /npm-pick-manifest@6.1.1: - resolution: {integrity: sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==} - dependencies: - npm-install-checks: 4.0.0 - npm-normalize-package-bin: 1.0.1 - npm-package-arg: 8.1.5 - semver: 7.5.1 - dev: true - - /npm-registry-fetch@12.0.2: - resolution: {integrity: sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} - dependencies: - make-fetch-happen: 10.2.1 - minipass: 3.3.6 - minipass-fetch: 1.4.1 - minipass-json-stream: 1.0.1 - minizlib: 2.1.2 - npm-package-arg: 8.1.5 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - - /npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - dev: true - - /npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - dev: true - - /number-is-nan@1.0.1: - resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} - engines: {node: '>=0.10.0'} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} - - /oclif@3.4.6(@types/node@18.16.16)(mem-fs-editor@9.6.0)(mem-fs@2.2.1)(typescript@5.1.3): - resolution: {integrity: sha512-YyGMDil2JpfC9OcB76Gtcd5LqwwOeAgb8S7mVHf/6Qecjqor8QbbvcSwZvB1e1TqjlD1JUhDPqBiFeVe/WOdWg==} - engines: {node: '>=12.0.0'} - dependencies: - '@oclif/core': 1.26.2 - '@oclif/plugin-help': 5.2.4(@types/node@18.16.16)(typescript@5.1.3) - '@oclif/plugin-not-found': 2.3.18(@types/node@18.16.16)(typescript@5.1.3) - '@oclif/plugin-warn-if-update-available': 2.0.37(@types/node@18.16.16)(typescript@5.1.3) - aws-sdk: 2.1311.0 - concurrently: 7.6.0 - debug: 4.3.4(supports-color@8.1.1) - find-yarn-workspace-root: 2.0.0 - fs-extra: 8.1.0 - github-slugger: 1.5.0 - got: 11.8.6 - lodash: 4.17.21 - normalize-package-data: 3.0.3 - semver: 7.5.1 - tslib: 2.6.2 - yeoman-environment: 3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1) - yeoman-generator: 5.8.0(mem-fs@2.2.1)(yeoman-environment@3.15.1) - yosay: 2.0.2 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - bluebird - - encoding - - mem-fs - - mem-fs-editor - - supports-color - - typescript - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.7.0 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true - - /p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - dev: true - - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - dev: true - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true - - /p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - dev: true - - /p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - dependencies: - p-finally: 1.0.0 - dev: true - - /p-transform@1.3.0: - resolution: {integrity: sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg==} - engines: {node: '>=12.10.0'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - p-queue: 6.6.2 - transitivePeerDependencies: - - supports-color - dev: true - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - - /pacote@12.0.3: - resolution: {integrity: sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} - dependencies: - '@npmcli/git': 2.1.0 - '@npmcli/installed-package-contents': 1.0.7 - '@npmcli/promise-spawn': 1.3.2 - '@npmcli/run-script': 2.0.0 - cacache: 15.3.0 - chownr: 2.0.0 - fs-minipass: 2.1.0 - infer-owner: 1.0.4 - minipass: 3.3.6 - mkdirp: 1.0.4 - npm-package-arg: 8.1.5 - npm-packlist: 3.0.0 - npm-pick-manifest: 6.1.1 - npm-registry-fetch: 12.0.2 - promise-retry: 2.0.1 - read-package-json-fast: 2.0.3 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.1.13 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /pad-component@0.0.1: - resolution: {integrity: sha512-8EKVBxCRSvLnsX1p2LlSFSH3c2/wuhY9/BXXWu8boL78FbVKqn2L5SpURt1x5iw6Gq8PTqJ7MdPoe5nCtX3I+g==} - dev: true - - /parse-conflict-json@2.0.2: - resolution: {integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - json-parse-even-better-errors: 2.3.1 - just-diff: 5.2.0 - just-diff-apply: 5.5.0 - dev: true - - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.18.6 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true - - /password-prompt@1.1.2: - resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} - dependencies: - ansi-escapes: 3.2.0 - cross-spawn: 6.0.5 - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-scurry@1.9.2: - resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 9.1.1 - minipass: 6.0.2 - dev: true - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true - - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true - - /preferred-pm@3.0.3: - resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} - engines: {node: '>=10'} - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - dev: true - - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true - - /proc-log@1.0.0: - resolution: {integrity: sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==} - dev: true - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - - /promise-all-reject-late@1.0.1: - resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} - dev: true - - /promise-call-limit@1.0.1: - resolution: {integrity: sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==} - dev: true - - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true - - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - dev: true - - /propagate@2.0.1: - resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} - engines: {node: '>= 8'} - dev: true - - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: true - - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true - - /read-cmd-shim@3.0.1: - resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true - - /read-package-json-fast@2.0.3: - resolution: {integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==} - engines: {node: '>=10'} - dependencies: - json-parse-even-better-errors: 2.3.1 - npm-normalize-package-bin: 1.0.1 - dev: true - - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.1 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - - /readdir-scoped-modules@1.1.0: - resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} - dependencies: - debuglog: 1.0.1 - dezalgo: 1.0.4 - graceful-fs: 4.2.10 - once: 1.4.0 - dev: true - - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - dependencies: - resolve: 1.22.1 - dev: true - - /redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} - dependencies: - esprima: 4.0.1 - - /remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: true - - /replace-ext@1.0.1: - resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} - engines: {node: '>= 0.10'} - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: true - - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - dependencies: - lowercase-keys: 2.0.0 - dev: true - - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true + esprima: 4.0.1 + dev: false /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - dependencies: - glob: 7.2.3 - dev: true - - /rimraf@5.0.1: - resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} - engines: {node: '>=14'} - dependencies: - glob: 10.2.5 - dev: true - - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + dev: false /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - - /rxjs@7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} - dependencies: - tslib: 2.6.2 - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + dev: false /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /sax@1.2.1: - resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} - dev: true - - /scoped-regex@2.1.0: - resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} - engines: {node: '>=8'} - dev: true + dev: false /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + dev: false - /semver@7.5.1: - resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 - - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 - dev: false - - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - dependencies: - shebang-regex: 1.0.0 - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /shell-quote@1.8.0: - resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} - dev: true - - /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true - - /socks-proxy-agent@6.2.1: - resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} - engines: {node: '>= 10'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - dev: true - - /socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - dev: true - - /socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - dependencies: - ip: 2.0.0 - smart-buffer: 4.2.0 - dev: true - - /sort-keys@4.2.0: - resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} - engines: {node: '>=8'} - dependencies: - is-plain-obj: 2.1.0 - dev: true - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: false - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false - - /spawn-command@0.0.2-1: - resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} - dev: true - - /spdx-correct@3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.12 - dev: true - - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true - - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 - dev: true - - /spdx-license-ids@3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} - dev: true - - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - /ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - minipass: 3.3.6 - dev: true - - /stdout-stderr@0.1.13: - resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} - engines: {node: '>=8.0.0'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - strip-ansi: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /string-width@1.0.2: - resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} - engines: {node: '>=0.10.0'} - dependencies: - code-point-at: 1.1.0 - is-fullwidth-code-point: 1.0.0 - strip-ansi: 3.0.1 - dev: true - - /string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: true - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.0.1 - dev: true - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + /semver@7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + engines: {node: '>=10'} dependencies: - safe-buffer: 5.1.2 - dev: true + lru-cache: 6.0.0 + dev: false - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} dependencies: - safe-buffer: 5.2.1 - dev: true + lru-cache: 6.0.0 + dev: false - /strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: - ansi-regex: 2.1.1 - dev: true + shebang-regex: 1.0.0 + dev: false - /strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} - dependencies: - ansi-regex: 3.0.1 - dev: true + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: false - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - dev: true + dev: false - /strip-bom-buf@1.0.0: - resolution: {integrity: sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==} - engines: {node: '>=4'} + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: - is-utf8: 0.2.1 - dev: true + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false - /strip-bom-stream@2.0.0: - resolution: {integrity: sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==} + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dependencies: - first-chunk-stream: 2.0.0 - strip-bom: 2.0.0 - dev: true + dev: false - /strip-bom@2.0.0: - resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} - engines: {node: '>=0.10.0'} - dependencies: - is-utf8: 0.2.1 - dev: true + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: - is-utf8: 0.2.1 - dev: true - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - dev: true + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: - has-flag: 3.0.0 - dev: true + ansi-regex: 5.0.1 + dev: false /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: false /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: false /supports-hyperlinks@2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} @@ -3654,71 +959,18 @@ packages: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /taketalk@1.0.0: - resolution: {integrity: sha512-kS7E53It6HA8S1FVFBWP7HDwgTiJtkmYk7TsowGlizzVrivR1Mf9mgjXHY1k7rOfozRVMZSfwjB3bevO4QEqpg==} - dependencies: - get-stdin: 4.0.1 - minimist: 1.2.7 - dev: true - - /tar@6.1.13: - resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} - engines: {node: '>=10'} - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 4.0.3 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /textextensions@5.15.0: - resolution: {integrity: sha512-MeqZRHLuaGamUXGuVn2ivtU3LA3mLCCIO5kUGoohTCoGmCBg/+8yPhWVX9WSl9telvVd8erftjFk9Fwb2dD6rw==} - engines: {node: '>=0.8'} - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: true + dev: false /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true - - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - dev: true - - /treeverse@1.0.4: - resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} - dev: true + dev: false /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -3745,9 +997,11 @@ packages: typescript: 5.1.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: false /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false /tslog@3.3.4: resolution: {integrity: sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==} @@ -3760,212 +1014,47 @@ packages: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + dev: false /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + dev: false /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - /unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} - dependencies: - unique-slug: 2.0.2 - dev: true - - /unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - unique-slug: 3.0.0 - dev: true - - /unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} - dependencies: - imurmurhash: 0.1.4 - dev: true - - /unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - dev: true - - /universal-user-agent@6.0.0: - resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} - dev: true - /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + dev: false /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - - /url@0.10.3: - resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.10 - which-typed-array: 1.1.9 - dev: true - - /uuid@8.0.0: - resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} - dev: true + dev: false /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 - dev: true - - /validate-npm-package-name@3.0.0: - resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} - dependencies: - builtins: 1.0.3 - dev: true - - /vinyl-file@3.0.0: - resolution: {integrity: sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==} - engines: {node: '>=4'} - dependencies: - graceful-fs: 4.2.10 - pify: 2.3.0 - strip-bom-buf: 1.0.0 - strip-bom-stream: 2.0.0 - vinyl: 2.2.1 - dev: true - - /vinyl@2.2.1: - resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} - engines: {node: '>= 0.10'} - dependencies: - clone: 2.1.2 - clone-buffer: 1.0.0 - clone-stats: 1.0.0 - cloneable-readable: 1.1.3 - remove-trailing-separator: 1.1.0 - replace-ext: 1.0.1 - dev: true - - /walk-up-path@1.0.0: - resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==} - dev: true - - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - dependencies: - defaults: 1.0.4 - dev: true - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: true - - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} - dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - dev: true - - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 - dev: true + dev: false /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} dependencies: isexe: 2.0.0 - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - dependencies: - isexe: 2.0.0 - dev: true - - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - dependencies: - string-width: 4.2.3 - dev: true + dev: false /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} dependencies: string-width: 4.2.3 + dev: false /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - /wrap-ansi@2.1.0: - resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} - engines: {node: '>=0.10.0'} - dependencies: - string-width: 1.0.2 - strip-ansi: 3.0.1 - dev: true + dev: false /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -3983,164 +1072,13 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.0.1 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - - /xml2js@0.4.19: - resolution: {integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==} - dependencies: - sax: 1.2.1 - xmlbuilder: 9.0.7 - dev: true - - /xmlbuilder@9.0.7: - resolution: {integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==} - engines: {node: '>=4.0'} - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + dev: false /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true - - /yargs@17.6.2: - resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true - - /yeoman-environment@3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1): - resolution: {integrity: sha512-P4DTQxqCxNTBD7gph+P+dIckBdx0xyHmvOYgO3vsc9/Sl67KJ6QInz5Qv6tlXET3CFFJ/YxPIdl9rKb0XwTRLg==} - engines: {node: '>=12.10.0'} - peerDependencies: - mem-fs: ^1.2.0 || ^2.0.0 - mem-fs-editor: ^8.1.2 || ^9.0.0 - dependencies: - '@npmcli/arborist': 4.3.1 - are-we-there-yet: 2.0.0 - arrify: 2.0.1 - binaryextensions: 4.18.0 - chalk: 4.1.2 - cli-table: 0.3.11 - commander: 7.1.0 - dateformat: 4.6.3 - debug: 4.3.4(supports-color@8.1.1) - diff: 5.1.0 - error: 10.4.0 - escape-string-regexp: 4.0.0 - execa: 5.1.1 - find-up: 5.0.0 - globby: 11.1.0 - grouped-queue: 2.0.0 - inquirer: 8.2.5 - is-scoped: 2.1.0 - isbinaryfile: 4.0.10 - lodash: 4.17.21 - log-symbols: 4.1.0 - mem-fs: 2.2.1 - mem-fs-editor: 9.6.0(mem-fs@2.2.1) - minimatch: 3.1.2 - npmlog: 5.0.1 - p-queue: 6.6.2 - p-transform: 1.3.0 - pacote: 12.0.3 - preferred-pm: 3.0.3 - pretty-bytes: 5.6.0 - semver: 7.5.1 - slash: 3.0.0 - strip-ansi: 6.0.1 - text-table: 0.2.0 - textextensions: 5.15.0 - untildify: 4.0.0 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /yeoman-generator@5.8.0(mem-fs@2.2.1)(yeoman-environment@3.15.1): - resolution: {integrity: sha512-dsrwFn9/c2/MOe80sa2nKfbZd/GaPTgmmehdgkFifs1VN/I7qPsW2xcBfvSkHNGK+PZly7uHyH8kaVYSFNUDhQ==} - engines: {node: '>=12.10.0'} - peerDependencies: - yeoman-environment: ^3.2.0 - peerDependenciesMeta: - yeoman-environment: - optional: true - dependencies: - chalk: 4.1.2 - dargs: 7.0.0 - debug: 4.3.4(supports-color@8.1.1) - execa: 5.1.1 - github-username: 6.0.0 - lodash: 4.17.21 - mem-fs-editor: 9.6.0(mem-fs@2.2.1) - minimist: 1.2.7 - read-pkg-up: 7.0.1 - run-async: 2.4.1 - semver: 7.5.1 - shelljs: 0.8.5 - sort-keys: 4.2.0 - text-table: 0.2.0 - yeoman-environment: 3.15.1(mem-fs-editor@9.6.0)(mem-fs@2.2.1) - transitivePeerDependencies: - - encoding - - mem-fs - - supports-color - dev: true + dev: false /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true - - /yosay@2.0.2: - resolution: {integrity: sha512-avX6nz2esp7IMXGag4gu6OyQBsMh/SEn+ZybGu3yKPlOTE6z9qJrzG/0X5vCq/e0rPFy0CUYCze0G5hL310ibA==} - engines: {node: '>=4'} - dependencies: - ansi-regex: 2.1.1 - ansi-styles: 3.2.1 - chalk: 1.1.3 - cli-boxes: 1.0.0 - pad-component: 0.0.1 - string-width: 2.1.1 - strip-ansi: 3.0.1 - taketalk: 1.0.0 - wrap-ansi: 2.1.0 - dev: true + dev: false diff --git a/kipper/core/package.json b/kipper/core/package.json index 693ebb112..3bde0d22c 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -8,22 +8,12 @@ "tslib": "~2.6.2" }, "devDependencies": { + "@types/node": "18.16.16", "typescript": "5.1.3", - "uuid": "9.0.0", - "mkdirp": "3.0.1", - "ansi-regex": "6.0.1", - "minimist": "1.2.8", "prettier": "2.8.8", - "tsify": "5.0.4", - "browserify": "17.0.0", - "watchify": "4.0.0", - "antlr4ts-cli": "0.5.0-alpha.4", - "json-parse-even-better-errors": "3.0.0", - "run-script-os": "1.1.6", - "ts-node": "10.9.1", - "@types/node": "18.16.16", "size-limit": "8.2.4", - "@size-limit/preset-big-lib": "8.2.4" + "@size-limit/preset-big-lib": "8.2.4", + "antlr4ts-cli": "^0.5.0-alpha.4" }, "engines": { "node": ">=16.0.0", diff --git a/kipper/core/pnpm-lock.yaml b/kipper/core/pnpm-lock.yaml index 7a10dde31..270a907ef 100644 --- a/kipper/core/pnpm-lock.yaml +++ b/kipper/core/pnpm-lock.yaml @@ -19,58 +19,21 @@ devDependencies: '@types/node': specifier: 18.16.16 version: 18.16.16 - ansi-regex: - specifier: 6.0.1 - version: 6.0.1 antlr4ts-cli: - specifier: 0.5.0-alpha.4 + specifier: ^0.5.0-alpha.4 version: 0.5.0-alpha.4 - browserify: - specifier: 17.0.0 - version: 17.0.0 - json-parse-even-better-errors: - specifier: 3.0.0 - version: 3.0.0 - minimist: - specifier: 1.2.8 - version: 1.2.8 - mkdirp: - specifier: 3.0.1 - version: 3.0.1 prettier: specifier: 2.8.8 version: 2.8.8 - run-script-os: - specifier: 1.1.6 - version: 1.1.6 size-limit: specifier: 8.2.4 version: 8.2.4 - ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) - tsify: - specifier: 5.0.4 - version: 5.0.4(browserify@17.0.0)(typescript@5.1.3) typescript: specifier: 5.1.3 version: 5.1.3 - uuid: - specifier: 9.0.0 - version: 9.0.0 - watchify: - specifier: 4.0.0 - version: 4.0.0 packages: - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} @@ -108,13 +71,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -207,22 +163,6 @@ packages: - webpack-cli dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true - /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -371,13 +311,6 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.0): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: @@ -386,29 +319,6 @@ packages: acorn: 8.8.0 dev: true - /acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - dev: true - /acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} @@ -440,23 +350,15 @@ packages: uri-js: 4.4.1 dev: true - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - /antlr4ts-cli@0.5.0-alpha.4: resolution: {integrity: sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==} + hasBin: true dev: true /antlr4ts@0.5.0-alpha.4: resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} dev: false - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - /anymatch@3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} @@ -465,36 +367,11 @@ packages: picomatch: 2.3.1 dev: true - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - dependencies: - bn.js: 4.12.0 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 - dev: true - - /assert@1.5.0: - resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} - dependencies: - object-assign: 4.1.1 - util: 0.10.3 - dev: true - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -516,14 +393,6 @@ packages: readable-stream: 3.6.0 dev: true - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: true - - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -538,136 +407,6 @@ packages: fill-range: 7.0.1 dev: true - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: true - - /browser-pack@6.1.0: - resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - dependencies: - JSONStream: 1.3.5 - combine-source-map: 0.8.0 - defined: 1.0.0 - safe-buffer: 5.2.1 - through2: 2.0.5 - umd: 3.0.3 - dev: true - - /browser-resolve@2.0.0: - resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} - dependencies: - resolve: 1.22.1 - dev: true - - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - dev: true - - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - dependencies: - cipher-base: 1.0.4 - des.js: 1.0.1 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} - dependencies: - bn.js: 5.2.1 - randombytes: 2.1.0 - dev: true - - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} - dependencies: - bn.js: 5.2.1 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.5.4 - inherits: 2.0.4 - parse-asn1: 5.1.6 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - dev: true - - /browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - dependencies: - pako: 1.0.11 - dev: true - - /browserify@17.0.0: - resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} - engines: {node: '>= 0.8'} - dependencies: - JSONStream: 1.3.5 - assert: 1.5.0 - browser-pack: 6.1.0 - browser-resolve: 2.0.0 - browserify-zlib: 0.2.0 - buffer: 5.2.1 - cached-path-relative: 1.1.0 - concat-stream: 1.6.2 - console-browserify: 1.2.0 - constants-browserify: 1.0.0 - crypto-browserify: 3.12.0 - defined: 1.0.0 - deps-sort: 2.0.1 - domain-browser: 1.2.0 - duplexer2: 0.1.4 - events: 3.3.0 - glob: 7.2.3 - has: 1.0.3 - htmlescape: 1.1.1 - https-browserify: 1.0.0 - inherits: 2.0.4 - insert-module-globals: 7.2.1 - labeled-stream-splicer: 2.0.2 - mkdirp-classic: 0.5.3 - module-deps: 6.2.3 - os-browserify: 0.3.0 - parents: 1.0.1 - path-browserify: 1.0.1 - process: 0.11.10 - punycode: 1.4.1 - querystring-es3: 0.2.1 - read-only-stream: 2.0.0 - readable-stream: 2.3.7 - resolve: 1.22.1 - shasum-object: 1.0.0 - shell-quote: 1.7.3 - stream-browserify: 3.0.0 - stream-http: 3.2.0 - string_decoder: 1.3.0 - subarg: 1.0.0 - syntax-error: 1.4.0 - through2: 2.0.5 - timers-browserify: 1.4.2 - tty-browserify: 0.0.1 - url: 0.11.0 - util: 0.12.4 - vm-browserify: 1.1.2 - xtend: 4.0.2 - dev: true - /browserslist@4.21.3: resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -686,17 +425,6 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: true - - /buffer@5.2.1: - resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: @@ -704,26 +432,11 @@ packages: ieee754: 1.2.1 dev: true - /builtin-status-codes@3.0.0: - resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - dev: true - /bytes-iec@3.1.1: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} dev: true - /cached-path-relative@1.1.0: - resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.2 - dev: true - /caniuse-lite@1.0.30001377: resolution: {integrity: sha512-I5XeHI1x/mRSGl96LFOaSk528LA/yZG3m3iQgImGujjO8gotd/DL8QaI1R1h1dg5ATeI2jqPblMpKq4Tr5iKfQ==} dev: true @@ -752,22 +465,6 @@ packages: engines: {node: '>=6.0'} dev: true - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /combine-source-map@0.8.0: - resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} - dependencies: - convert-source-map: 1.1.3 - inline-source-map: 0.6.2 - lodash.memoize: 3.0.4 - source-map: 0.5.7 - dev: true - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -781,70 +478,6 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.7 - typedarray: 0.0.6 - dev: true - - /console-browserify@1.2.0: - resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} - dev: true - - /constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - dev: true - - /convert-source-map@1.1.3: - resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} - dev: true - - /convert-source-map@1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true - - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.4 - dev: true - - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: true - - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: @@ -853,26 +486,6 @@ packages: - encoding dev: true - /crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.4 - pbkdf2: 3.1.2 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - dev: true - - /dash-ast@1.0.0: - resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} - dev: true - /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -885,60 +498,10 @@ packages: ms: 2.1.2 dev: true - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true - - /defined@1.0.0: - resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} - dev: true - - /deps-sort@2.0.1: - resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - dependencies: - JSONStream: 1.3.5 - shasum-object: 1.0.0 - subarg: 1.0.0 - through2: 2.0.5 - dev: true - - /des.js@1.0.1: - resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - dependencies: - acorn-node: 1.8.2 - defined: 1.0.0 - minimist: 1.2.8 - dev: true - /devtools-protocol@0.0.981744: resolution: {integrity: sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==} dev: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dependencies: - bn.js: 4.12.0 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dev: true - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -946,33 +509,10 @@ packages: path-type: 4.0.0 dev: true - /domain-browser@1.2.0: - resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} - engines: {node: '>=0.4', npm: '>=1.2'} - dev: true - - /duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - dependencies: - readable-stream: 2.3.7 - dev: true - /electron-to-chromium@1.4.221: resolution: {integrity: sha512-aWg2mYhpxZ6Q6Xvyk7B2ziBca4YqrCDlXzmcD7wuRs65pVEVkMT1u2ifdjpAQais2O2o0rW964ZWWWYRlAL/kw==} dev: true - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: @@ -987,54 +527,10 @@ packages: tapable: 2.2.1 dev: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /es-abstract@1.20.1: - resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.2 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-symbols: 1.0.3 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-weakref: 1.0.2 - object-inspect: 1.12.2 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 - unbox-primitive: 1.0.2 - dev: true - /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.4 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -1086,13 +582,6 @@ packages: engines: {node: '>=0.8.x'} dev: true - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - dev: true - /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -1125,10 +614,6 @@ packages: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: true - /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: @@ -1161,12 +646,6 @@ packages: path-exists: 4.0.0 dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.4 - dev: true - /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true @@ -1183,36 +662,6 @@ packages: dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /get-assigned-identifiers@1.2.0: - resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} - dev: true - - /get-intrinsic@1.1.2: - resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - dev: true - /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -1220,14 +669,6 @@ packages: pump: 3.0.0 dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - dev: true - /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1266,73 +707,11 @@ packages: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.1.2 - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - dev: true - - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /htmlescape@1.1.1: - resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} - engines: {node: '>=0.10'} - dev: true - - /https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - dev: true - /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -1359,97 +738,15 @@ packages: wrappy: 1.0.2 dev: true - /inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} - dev: true - /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-source-map@0.6.2: - resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: - source-map: 0.5.7 - dev: true - - /insert-module-globals@7.2.1: - resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - dependencies: - JSONStream: 1.3.5 - acorn-node: 1.8.2 - combine-source-map: 0.8.0 - concat-stream: 1.6.2 - is-buffer: 1.1.6 - path-is-absolute: 1.0.1 - process: 0.11.10 - through2: 2.0.5 - undeclared-identifiers: 1.1.3 - xtend: 4.0.2 - dev: true - - /internal-slot@1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.2 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true - - /is-callable@1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} - dependencies: - has: 1.0.3 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 + binary-extensions: 2.2.0 dev: true /is-extglob@2.1.1: @@ -1457,13 +754,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1471,76 +761,11 @@ packages: is-extglob: 2.1.1 dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.9: - resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.1 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - dev: true - - /is-utf8@0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.2 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -1558,27 +783,10 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - - /labeled-stream-splicer@2.0.2: - resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} - dependencies: - inherits: 2.0.4 - stream-splicer: 2.0.1 - dev: true - /lilconfig@2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} @@ -1596,10 +804,6 @@ packages: p-locate: 4.1.0 dev: true - /lodash.memoize@3.0.4: - resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} - dev: true - /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} dependencies: @@ -1613,18 +817,6 @@ packages: yallist: 4.0.0 dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -1642,13 +834,6 @@ packages: picomatch: 2.3.1 dev: true - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - dev: true - /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -1661,54 +846,16 @@ packages: mime-db: 1.52.0 dev: true - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true - - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: true - /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - dev: true - - /module-deps@6.2.3: - resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} - engines: {node: '>= 0.8.0'} - dependencies: - JSONStream: 1.3.5 - browser-resolve: 2.0.0 - cached-path-relative: 1.1.0 - concat-stream: 1.6.2 - defined: 1.0.0 - detective: 5.2.1 - duplexer2: 0.1.4 - inherits: 2.0.4 - parents: 1.0.1 - readable-stream: 2.3.7 - resolve: 1.22.1 - stream-combiner2: 1.1.1 - subarg: 1.0.0 - through2: 2.0.5 - xtend: 4.0.2 - dev: true - /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -1754,41 +901,12 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - dev: true - - /outpipe@1.1.1: - resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} - dependencies: - shell-quote: 1.7.3 - dev: true - /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -1808,37 +926,6 @@ packages: engines: {node: '>=6'} dev: true - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true - - /parents@1.0.1: - resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} - dependencies: - path-platform: 0.11.15 - dev: true - - /parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} - dependencies: - asn1.js: 5.4.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - pbkdf2: 3.1.2 - safe-buffer: 5.2.1 - dev: true - - /parse-json@2.2.0: - resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} - engines: {node: '>=0.10.0'} - dependencies: - error-ex: 1.3.2 - dev: true - - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true - /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1849,31 +936,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-platform@0.11.15: - resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} - engines: {node: '>= 0.8.0'} - dev: true - /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true @@ -1899,15 +966,6 @@ packages: engines: {node: '>=10.13.0'} dev: true - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true - /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -1917,17 +975,6 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - dependencies: - bn.js: 4.12.0 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - parse-asn1: 5.1.6 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: @@ -1935,14 +982,6 @@ packages: once: 1.4.0 dev: true - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: true - - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true - /punycode@2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} @@ -1971,16 +1010,6 @@ packages: - utf-8-validate dev: true - /querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} - engines: {node: '>=0.4.x'} - dev: true - - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - dev: true - /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -1991,13 +1020,6 @@ packages: safe-buffer: 5.2.1 dev: true - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - /react@17.0.2: resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} engines: {node: '>=0.10.0'} @@ -2006,24 +1028,6 @@ packages: object-assign: 4.1.1 dev: true - /read-only-stream@2.0.0: - resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} - dependencies: - readable-stream: 2.3.7 - dev: true - - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} @@ -2040,23 +1044,6 @@ packages: picomatch: 2.3.1 dev: true - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 - dev: true - - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - dependencies: - is-core-module: 2.10.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2068,35 +1055,16 @@ packages: glob: 7.2.3 dev: true - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /run-script-os@1.1.6: - resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - /schema-utils@3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} @@ -2106,10 +1074,6 @@ packages: ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - dev: true - /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -2123,35 +1087,6 @@ packages: randombytes: 2.1.0 dev: true - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /shasum-object@1.0.0: - resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} - dependencies: - fast-safe-stringify: 2.1.1 - dev: true - - /shell-quote@1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} - dev: true - - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - object-inspect: 1.12.2 - dev: true - - /simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - dev: true - /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} @@ -2176,92 +1111,17 @@ packages: source-map: 0.6.1 dev: true - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true - /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - - /stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - dependencies: - duplexer2: 0.1.4 - readable-stream: 2.3.7 - dev: true - - /stream-http@3.2.0: - resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} - dependencies: - builtin-status-codes: 3.0.0 - inherits: 2.0.4 - readable-stream: 3.6.0 - xtend: 4.0.2 - dev: true - - /stream-splicer@2.0.1: - resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.7 - dev: true - - /string.prototype.trimend@1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true - - /string.prototype.trimstart@1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /strip-bom@2.0.0: - resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} - engines: {node: '>=0.10.0'} - dependencies: - is-utf8: 0.2.1 - dev: true - - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true - - /subarg@1.0.0: - resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} - dependencies: - minimist: 1.2.8 - dev: true - /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} @@ -2269,17 +1129,6 @@ packages: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /syntax-error@1.4.0: - resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} - dependencies: - acorn-node: 1.8.2 - dev: true - /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -2339,30 +1188,10 @@ packages: source-map-support: 0.5.21 dev: true - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - dependencies: - readable-stream: 2.3.7 - xtend: 4.0.2 - dev: true - - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - dependencies: - readable-stream: 3.6.0 - dev: true - /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /timers-browserify@1.4.2: - resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} - engines: {node: '>=0.6.0'} - dependencies: - process: 0.11.10 - dev: true - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2374,92 +1203,15 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.16.16 - acorn: 8.8.0 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.1.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - - /tsconfig@5.0.3: - resolution: {integrity: sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==} - dependencies: - any-promise: 1.3.0 - parse-json: 2.2.0 - strip-bom: 2.0.0 - strip-json-comments: 2.0.1 - dev: true - - /tsify@5.0.4(browserify@17.0.0)(typescript@5.1.3): - resolution: {integrity: sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==} - engines: {node: '>=0.12'} - peerDependencies: - browserify: '>= 10.x' - typescript: '>= 2.8' - dependencies: - browserify: 17.0.0 - convert-source-map: 1.8.0 - fs.realpath: 1.0.0 - object-assign: 4.1.1 - semver: 6.3.0 - through2: 2.0.5 - tsconfig: 5.0.3 - typescript: 5.1.3 - dev: true - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false - /tty-browserify@0.0.1: - resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} - dev: true - - /typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true - /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} dev: true - /umd@3.0.3: - resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - dev: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - /unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} dependencies: @@ -2467,18 +1219,9 @@ packages: through: 2.3.8 dev: true - /undeclared-identifiers@1.1.3: - resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - dependencies: - acorn-node: 1.8.2 - dash-ast: 1.0.0 - get-assigned-identifiers: 1.2.0 - simple-concat: 1.0.1 - xtend: 4.0.2 - dev: true - /update-browserslist-db@1.0.5(browserslist@4.21.3): resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} + hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -2493,59 +1236,10 @@ packages: punycode: 2.1.1 dev: true - /url@0.11.0: - resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - dev: true - /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util@0.10.3: - resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} - dependencies: - inherits: 2.0.1 - dev: true - - /util@0.12.4: - resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.9 - safe-buffer: 5.2.1 - which-typed-array: 1.1.8 - dev: true - - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - dev: true - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - - /vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - dev: true - - /watchify@4.0.0: - resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - browserify: 17.0.0 - chokidar: 3.5.3 - defined: 1.0.0 - outpipe: 1.1.1 - through2: 4.0.2 - xtend: 4.0.2 - dev: true - /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -2566,6 +1260,7 @@ packages: /webpack@5.75.0: resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} + hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: @@ -2609,28 +1304,6 @@ packages: webidl-conversions: 3.0.1 dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-typed-array@1.1.8: - resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.1 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.9 - dev: true - /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true @@ -2648,11 +1321,6 @@ packages: optional: true dev: true - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true - /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true @@ -2663,8 +1331,3 @@ packages: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index ec3d0807c..1fb40743f 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -8,17 +8,9 @@ "tslib": "~2.6.2" }, "devDependencies": { + "@types/node": "18.16.16", "typescript": "5.1.3", - "uuid": "9.0.0", - "mkdirp": "3.0.1", - "ansi-regex": "6.0.1", - "minimist": "1.2.8", - "prettier": "2.8.8", - "watchify": "4.0.0", - "json-parse-even-better-errors": "3.0.0", - "run-script-os": "1.1.6", - "ts-node": "10.9.1", - "@types/node": "18.16.16" + "prettier": "2.8.8" }, "engines": { "node": ">=16.0.0", diff --git a/kipper/target-js/pnpm-lock.yaml b/kipper/target-js/pnpm-lock.yaml index 86ff829a0..17381bee9 100644 --- a/kipper/target-js/pnpm-lock.yaml +++ b/kipper/target-js/pnpm-lock.yaml @@ -16,1530 +16,29 @@ devDependencies: '@types/node': specifier: 18.16.16 version: 18.16.16 - ansi-regex: - specifier: 6.0.1 - version: 6.0.1 - json-parse-even-better-errors: - specifier: 3.0.0 - version: 3.0.0 - minimist: - specifier: 1.2.8 - version: 1.2.8 - mkdirp: - specifier: 3.0.1 - version: 3.0.1 prettier: specifier: 2.8.8 version: 2.8.8 - run-script-os: - specifier: 1.1.6 - version: 1.1.6 - ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) typescript: specifier: 5.1.3 version: 5.1.3 - uuid: - specifier: 9.0.0 - version: 9.0.0 - watchify: - specifier: 4.0.0 - version: 4.0.0 packages: - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true - /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - - /acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} - engines: {node: '>=0.4.0'} - dev: true - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - dependencies: - bn.js: 4.12.0 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 - dev: true - - /assert@1.5.0: - resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} - dependencies: - object-assign: 4.1.1 - util: 0.10.3 - dev: true - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: true - - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: true - - /browser-pack@6.1.0: - resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - dependencies: - JSONStream: 1.3.5 - combine-source-map: 0.8.0 - defined: 1.0.0 - safe-buffer: 5.2.1 - through2: 2.0.5 - umd: 3.0.3 - dev: true - - /browser-resolve@2.0.0: - resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} - dependencies: - resolve: 1.22.1 - dev: true - - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - dev: true - - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - dependencies: - cipher-base: 1.0.4 - des.js: 1.0.1 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} - dependencies: - bn.js: 5.2.1 - randombytes: 2.1.0 - dev: true - - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} - dependencies: - bn.js: 5.2.1 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.5.4 - inherits: 2.0.4 - parse-asn1: 5.1.6 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - dev: true - - /browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - dependencies: - pako: 1.0.11 - dev: true - - /browserify@17.0.0: - resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} - engines: {node: '>= 0.8'} - dependencies: - JSONStream: 1.3.5 - assert: 1.5.0 - browser-pack: 6.1.0 - browser-resolve: 2.0.0 - browserify-zlib: 0.2.0 - buffer: 5.2.1 - cached-path-relative: 1.1.0 - concat-stream: 1.6.2 - console-browserify: 1.2.0 - constants-browserify: 1.0.0 - crypto-browserify: 3.12.0 - defined: 1.0.0 - deps-sort: 2.0.1 - domain-browser: 1.2.0 - duplexer2: 0.1.4 - events: 3.3.0 - glob: 7.2.3 - has: 1.0.3 - htmlescape: 1.1.1 - https-browserify: 1.0.0 - inherits: 2.0.4 - insert-module-globals: 7.2.1 - labeled-stream-splicer: 2.0.2 - mkdirp-classic: 0.5.3 - module-deps: 6.2.3 - os-browserify: 0.3.0 - parents: 1.0.1 - path-browserify: 1.0.1 - process: 0.11.10 - punycode: 1.4.1 - querystring-es3: 0.2.1 - read-only-stream: 2.0.0 - readable-stream: 2.3.7 - resolve: 1.22.1 - shasum-object: 1.0.0 - shell-quote: 1.7.3 - stream-browserify: 3.0.0 - stream-http: 3.2.0 - string_decoder: 1.3.0 - subarg: 1.0.0 - syntax-error: 1.4.0 - through2: 2.0.5 - timers-browserify: 1.4.2 - tty-browserify: 0.0.1 - url: 0.11.0 - util: 0.12.4 - vm-browserify: 1.1.2 - xtend: 4.0.2 - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: true - - /buffer@5.2.1: - resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /builtin-status-codes@3.0.0: - resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - dev: true - - /cached-path-relative@1.1.0: - resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.2 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /combine-source-map@0.8.0: - resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} - dependencies: - convert-source-map: 1.1.3 - inline-source-map: 0.6.2 - lodash.memoize: 3.0.4 - source-map: 0.5.7 - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.7 - typedarray: 0.0.6 - dev: true - - /console-browserify@1.2.0: - resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} - dev: true - - /constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - dev: true - - /convert-source-map@1.1.3: - resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} - dev: true - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true - - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.4 - dev: true - - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: true - - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.4 - pbkdf2: 3.1.2 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - dev: true - - /dash-ast@1.0.0: - resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} - dev: true - - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true - - /defined@1.0.0: - resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} - dev: true - - /deps-sort@2.0.1: - resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - dependencies: - JSONStream: 1.3.5 - shasum-object: 1.0.0 - subarg: 1.0.0 - through2: 2.0.5 - dev: true - - /des.js@1.0.1: - resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - dependencies: - acorn-node: 1.8.2 - defined: 1.0.0 - minimist: 1.2.8 - dev: true - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dependencies: - bn.js: 4.12.0 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dev: true - - /domain-browser@1.2.0: - resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} - engines: {node: '>=0.4', npm: '>=1.2'} - dev: true - - /duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - dependencies: - readable-stream: 2.3.7 - dev: true - - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /es-abstract@1.20.1: - resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.2 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-symbols: 1.0.3 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-weakref: 1.0.2 - object-inspect: 1.12.2 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 - unbox-primitive: 1.0.2 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.4 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true - - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - dev: true - - /fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.4 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /get-assigned-identifiers@1.2.0: - resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} - dev: true - - /get-intrinsic@1.1.2: - resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - dev: true - - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.1.2 - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - dev: true - - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /htmlescape@1.1.1: - resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} - engines: {node: '>=0.10'} - dev: true - - /https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /inline-source-map@0.6.2: - resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} - dependencies: - source-map: 0.5.7 - dev: true - - /insert-module-globals@7.2.1: - resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - dependencies: - JSONStream: 1.3.5 - acorn-node: 1.8.2 - combine-source-map: 0.8.0 - concat-stream: 1.6.2 - is-buffer: 1.1.6 - path-is-absolute: 1.0.1 - process: 0.11.10 - through2: 2.0.5 - undeclared-identifiers: 1.1.3 - xtend: 4.0.2 - dev: true - - /internal-slot@1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.2 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true - - /is-callable@1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} - dependencies: - has: 1.0.3 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.9: - resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.1 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.2 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - - /labeled-stream-splicer@2.0.2: - resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} - dependencies: - inherits: 2.0.4 - stream-splicer: 2.0.1 - dev: true - - /lodash.memoize@3.0.4: - resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} - dev: true - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - dev: true - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true - - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true - - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - dev: true - - /module-deps@6.2.3: - resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} - engines: {node: '>= 0.8.0'} - dependencies: - JSONStream: 1.3.5 - browser-resolve: 2.0.0 - cached-path-relative: 1.1.0 - concat-stream: 1.6.2 - defined: 1.0.0 - detective: 5.2.1 - duplexer2: 0.1.4 - inherits: 2.0.4 - parents: 1.0.1 - readable-stream: 2.3.7 - resolve: 1.22.1 - stream-combiner2: 1.1.1 - subarg: 1.0.0 - through2: 2.0.5 - xtend: 4.0.2 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - dev: true - - /outpipe@1.1.1: - resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} - dependencies: - shell-quote: 1.7.3 - dev: true - - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true - - /parents@1.0.1: - resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} - dependencies: - path-platform: 0.11.15 - dev: true - - /parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} - dependencies: - asn1.js: 5.4.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - pbkdf2: 3.1.2 - safe-buffer: 5.2.1 - dev: true - - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-platform@0.11.15: - resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} - engines: {node: '>= 0.8.0'} - dev: true - - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} dev: true - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true - - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - dependencies: - bn.js: 4.12.0 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - parse-asn1: 5.1.6 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: true - - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true - - /querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} - engines: {node: '>=0.4.x'} - dev: true - - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - - /read-only-stream@2.0.0: - resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} - dependencies: - readable-stream: 2.3.7 - dev: true - - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 - dev: true - - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - dependencies: - is-core-module: 2.10.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - dev: true - - /run-script-os@1.1.6: - resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /shasum-object@1.0.0: - resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} - dependencies: - fast-safe-stringify: 2.1.1 - dev: true - - /shell-quote@1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} - dev: true - - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - object-inspect: 1.12.2 - dev: true - - /simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - dev: true - - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true - - /stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - - /stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - dependencies: - duplexer2: 0.1.4 - readable-stream: 2.3.7 - dev: true - - /stream-http@3.2.0: - resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} - dependencies: - builtin-status-codes: 3.0.0 - inherits: 2.0.4 - readable-stream: 3.6.0 - xtend: 4.0.2 - dev: true - - /stream-splicer@2.0.1: - resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.7 - dev: true - - /string.prototype.trimend@1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true - - /string.prototype.trimstart@1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /subarg@1.0.0: - resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} - dependencies: - minimist: 1.2.8 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /syntax-error@1.4.0: - resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} - dependencies: - acorn-node: 1.8.2 - dev: true - - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - dependencies: - readable-stream: 2.3.7 - xtend: 4.0.2 - dev: true - - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - dependencies: - readable-stream: 3.6.0 - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /timers-browserify@1.4.2: - resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} - engines: {node: '>=0.6.0'} - dependencies: - process: 0.11.10 - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.16.16 - acorn: 8.8.0 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.1.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false - /tty-browserify@0.0.1: - resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} - dev: true - - /typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true - /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} dev: true - - /umd@3.0.3: - resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - dev: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - - /undeclared-identifiers@1.1.3: - resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - dependencies: - acorn-node: 1.8.2 - dash-ast: 1.0.0 - get-assigned-identifiers: 1.2.0 - simple-concat: 1.0.1 - xtend: 4.0.2 - dev: true - - /url@0.11.0: - resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /util@0.10.3: - resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} - dependencies: - inherits: 2.0.1 - dev: true - - /util@0.12.4: - resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.9 - safe-buffer: 5.2.1 - which-typed-array: 1.1.8 - dev: true - - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - dev: true - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - - /vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - dev: true - - /watchify@4.0.0: - resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - browserify: 17.0.0 - chokidar: 3.5.3 - defined: 1.0.0 - outpipe: 1.1.1 - through2: 4.0.2 - xtend: 4.0.2 - dev: true - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-typed-array@1.1.8: - resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.1 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.9 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 102775753..c6b650db5 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -9,17 +9,9 @@ "tslib": "~2.6.2" }, "devDependencies": { + "@types/node": "18.16.16", "typescript": "5.1.3", - "uuid": "9.0.0", - "mkdirp": "3.0.1", - "ansi-regex": "6.0.1", - "minimist": "1.2.8", - "prettier": "2.8.8", - "watchify": "4.0.0", - "json-parse-even-better-errors": "3.0.0", - "run-script-os": "1.1.6", - "ts-node": "10.9.1", - "@types/node": "18.16.16" + "prettier": "2.8.8" }, "engines": { "node": ">=16.0.0", diff --git a/kipper/target-ts/pnpm-lock.yaml b/kipper/target-ts/pnpm-lock.yaml index 85ff9fd1d..e2386b4bf 100644 --- a/kipper/target-ts/pnpm-lock.yaml +++ b/kipper/target-ts/pnpm-lock.yaml @@ -19,1530 +19,29 @@ devDependencies: '@types/node': specifier: 18.16.16 version: 18.16.16 - ansi-regex: - specifier: 6.0.1 - version: 6.0.1 - json-parse-even-better-errors: - specifier: 3.0.0 - version: 3.0.0 - minimist: - specifier: 1.2.8 - version: 1.2.8 - mkdirp: - specifier: 3.0.1 - version: 3.0.1 prettier: specifier: 2.8.8 version: 2.8.8 - run-script-os: - specifier: 1.1.6 - version: 1.1.6 - ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) typescript: specifier: 5.1.3 version: 5.1.3 - uuid: - specifier: 9.0.0 - version: 9.0.0 - watchify: - specifier: 4.0.0 - version: 4.0.0 packages: - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true - /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - - /acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} - engines: {node: '>=0.4.0'} - dev: true - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - dependencies: - bn.js: 4.12.0 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 - dev: true - - /assert@1.5.0: - resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} - dependencies: - object-assign: 4.1.1 - util: 0.10.3 - dev: true - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: true - - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: true - - /browser-pack@6.1.0: - resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - dependencies: - JSONStream: 1.3.5 - combine-source-map: 0.8.0 - defined: 1.0.0 - safe-buffer: 5.2.1 - through2: 2.0.5 - umd: 3.0.3 - dev: true - - /browser-resolve@2.0.0: - resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} - dependencies: - resolve: 1.22.1 - dev: true - - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - dev: true - - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - dependencies: - cipher-base: 1.0.4 - des.js: 1.0.1 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} - dependencies: - bn.js: 5.2.1 - randombytes: 2.1.0 - dev: true - - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} - dependencies: - bn.js: 5.2.1 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.5.4 - inherits: 2.0.4 - parse-asn1: 5.1.6 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - dev: true - - /browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - dependencies: - pako: 1.0.11 - dev: true - - /browserify@17.0.0: - resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} - engines: {node: '>= 0.8'} - dependencies: - JSONStream: 1.3.5 - assert: 1.5.0 - browser-pack: 6.1.0 - browser-resolve: 2.0.0 - browserify-zlib: 0.2.0 - buffer: 5.2.1 - cached-path-relative: 1.1.0 - concat-stream: 1.6.2 - console-browserify: 1.2.0 - constants-browserify: 1.0.0 - crypto-browserify: 3.12.0 - defined: 1.0.0 - deps-sort: 2.0.1 - domain-browser: 1.2.0 - duplexer2: 0.1.4 - events: 3.3.0 - glob: 7.2.3 - has: 1.0.3 - htmlescape: 1.1.1 - https-browserify: 1.0.0 - inherits: 2.0.4 - insert-module-globals: 7.2.1 - labeled-stream-splicer: 2.0.2 - mkdirp-classic: 0.5.3 - module-deps: 6.2.3 - os-browserify: 0.3.0 - parents: 1.0.1 - path-browserify: 1.0.1 - process: 0.11.10 - punycode: 1.4.1 - querystring-es3: 0.2.1 - read-only-stream: 2.0.0 - readable-stream: 2.3.7 - resolve: 1.22.1 - shasum-object: 1.0.0 - shell-quote: 1.7.3 - stream-browserify: 3.0.0 - stream-http: 3.2.0 - string_decoder: 1.3.0 - subarg: 1.0.0 - syntax-error: 1.4.0 - through2: 2.0.5 - timers-browserify: 1.4.2 - tty-browserify: 0.0.1 - url: 0.11.0 - util: 0.12.4 - vm-browserify: 1.1.2 - xtend: 4.0.2 - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: true - - /buffer@5.2.1: - resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /builtin-status-codes@3.0.0: - resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - dev: true - - /cached-path-relative@1.1.0: - resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.2 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /combine-source-map@0.8.0: - resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} - dependencies: - convert-source-map: 1.1.3 - inline-source-map: 0.6.2 - lodash.memoize: 3.0.4 - source-map: 0.5.7 - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.7 - typedarray: 0.0.6 - dev: true - - /console-browserify@1.2.0: - resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} - dev: true - - /constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - dev: true - - /convert-source-map@1.1.3: - resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} - dev: true - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true - - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.4 - dev: true - - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: true - - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.4 - pbkdf2: 3.1.2 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - dev: true - - /dash-ast@1.0.0: - resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} - dev: true - - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true - - /defined@1.0.0: - resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} - dev: true - - /deps-sort@2.0.1: - resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - dependencies: - JSONStream: 1.3.5 - shasum-object: 1.0.0 - subarg: 1.0.0 - through2: 2.0.5 - dev: true - - /des.js@1.0.1: - resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - dependencies: - acorn-node: 1.8.2 - defined: 1.0.0 - minimist: 1.2.8 - dev: true - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dependencies: - bn.js: 4.12.0 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dev: true - - /domain-browser@1.2.0: - resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} - engines: {node: '>=0.4', npm: '>=1.2'} - dev: true - - /duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - dependencies: - readable-stream: 2.3.7 - dev: true - - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /es-abstract@1.20.1: - resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.2 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-symbols: 1.0.3 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-weakref: 1.0.2 - object-inspect: 1.12.2 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 - unbox-primitive: 1.0.2 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.4 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true - - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - dev: true - - /fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.4 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /get-assigned-identifiers@1.2.0: - resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} - dev: true - - /get-intrinsic@1.1.2: - resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - dev: true - - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.1.2 - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - dev: true - - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /htmlescape@1.1.1: - resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} - engines: {node: '>=0.10'} - dev: true - - /https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /inline-source-map@0.6.2: - resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} - dependencies: - source-map: 0.5.7 - dev: true - - /insert-module-globals@7.2.1: - resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - dependencies: - JSONStream: 1.3.5 - acorn-node: 1.8.2 - combine-source-map: 0.8.0 - concat-stream: 1.6.2 - is-buffer: 1.1.6 - path-is-absolute: 1.0.1 - process: 0.11.10 - through2: 2.0.5 - undeclared-identifiers: 1.1.3 - xtend: 4.0.2 - dev: true - - /internal-slot@1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.2 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true - - /is-callable@1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} - dependencies: - has: 1.0.3 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.9: - resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.1 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.2 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - - /labeled-stream-splicer@2.0.2: - resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} - dependencies: - inherits: 2.0.4 - stream-splicer: 2.0.1 - dev: true - - /lodash.memoize@3.0.4: - resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} - dev: true - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - dev: true - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true - - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true - - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - dev: true - - /module-deps@6.2.3: - resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} - engines: {node: '>= 0.8.0'} - dependencies: - JSONStream: 1.3.5 - browser-resolve: 2.0.0 - cached-path-relative: 1.1.0 - concat-stream: 1.6.2 - defined: 1.0.0 - detective: 5.2.1 - duplexer2: 0.1.4 - inherits: 2.0.4 - parents: 1.0.1 - readable-stream: 2.3.7 - resolve: 1.22.1 - stream-combiner2: 1.1.1 - subarg: 1.0.0 - through2: 2.0.5 - xtend: 4.0.2 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - dev: true - - /outpipe@1.1.1: - resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} - dependencies: - shell-quote: 1.7.3 - dev: true - - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true - - /parents@1.0.1: - resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} - dependencies: - path-platform: 0.11.15 - dev: true - - /parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} - dependencies: - asn1.js: 5.4.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - pbkdf2: 3.1.2 - safe-buffer: 5.2.1 - dev: true - - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-platform@0.11.15: - resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} - engines: {node: '>= 0.8.0'} - dev: true - - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} dev: true - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true - - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - dependencies: - bn.js: 4.12.0 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - parse-asn1: 5.1.6 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: true - - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true - - /querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} - engines: {node: '>=0.4.x'} - dev: true - - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - - /read-only-stream@2.0.0: - resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} - dependencies: - readable-stream: 2.3.7 - dev: true - - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 - dev: true - - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - dependencies: - is-core-module: 2.10.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - dev: true - - /run-script-os@1.1.6: - resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /shasum-object@1.0.0: - resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} - dependencies: - fast-safe-stringify: 2.1.1 - dev: true - - /shell-quote@1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} - dev: true - - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - object-inspect: 1.12.2 - dev: true - - /simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - dev: true - - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true - - /stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - - /stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - dependencies: - duplexer2: 0.1.4 - readable-stream: 2.3.7 - dev: true - - /stream-http@3.2.0: - resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} - dependencies: - builtin-status-codes: 3.0.0 - inherits: 2.0.4 - readable-stream: 3.6.0 - xtend: 4.0.2 - dev: true - - /stream-splicer@2.0.1: - resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.7 - dev: true - - /string.prototype.trimend@1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true - - /string.prototype.trimstart@1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /subarg@1.0.0: - resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} - dependencies: - minimist: 1.2.8 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /syntax-error@1.4.0: - resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} - dependencies: - acorn-node: 1.8.2 - dev: true - - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - dependencies: - readable-stream: 2.3.7 - xtend: 4.0.2 - dev: true - - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - dependencies: - readable-stream: 3.6.0 - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /timers-browserify@1.4.2: - resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} - engines: {node: '>=0.6.0'} - dependencies: - process: 0.11.10 - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.16.16 - acorn: 8.8.0 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.1.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false - /tty-browserify@0.0.1: - resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} - dev: true - - /typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true - /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} dev: true - - /umd@3.0.3: - resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - dev: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - - /undeclared-identifiers@1.1.3: - resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - dependencies: - acorn-node: 1.8.2 - dash-ast: 1.0.0 - get-assigned-identifiers: 1.2.0 - simple-concat: 1.0.1 - xtend: 4.0.2 - dev: true - - /url@0.11.0: - resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /util@0.10.3: - resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} - dependencies: - inherits: 2.0.1 - dev: true - - /util@0.12.4: - resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.9 - safe-buffer: 5.2.1 - which-typed-array: 1.1.8 - dev: true - - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - dev: true - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - - /vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - dev: true - - /watchify@4.0.0: - resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - browserify: 17.0.0 - chokidar: 3.5.3 - defined: 1.0.0 - outpipe: 1.1.1 - through2: 4.0.2 - xtend: 4.0.2 - dev: true - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-typed-array@1.1.8: - resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.1 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.9 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true diff --git a/kipper/web/package.json b/kipper/web/package.json index eb395640c..69529e42d 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -7,17 +7,9 @@ "@kipper/target-js": "workspace:~", "@kipper/target-ts": "workspace:~", "@kipper/core": "workspace:~", - "typescript": "5.1.3", - "uuid": "9.0.0", - "mkdirp": "3.0.1", - "ansi-regex": "6.0.1", - "minimist": "1.2.8", - "prettier": "2.8.8", - "watchify": "4.0.0", - "json-parse-even-better-errors": "3.0.0", - "run-script-os": "1.1.6", - "ts-node": "10.9.1", - "@types/node": "18.16.16", + "@types/node": "18.16.16", + "typescript": "5.1.3", + "prettier": "2.8.8", "browserify": "17.0.0", "uglify-js": "3.17.4" }, diff --git a/kipper/web/pnpm-lock.yaml b/kipper/web/pnpm-lock.yaml index 2ac35d477..cc70c8941 100644 --- a/kipper/web/pnpm-lock.yaml +++ b/kipper/web/pnpm-lock.yaml @@ -17,84 +17,21 @@ devDependencies: '@types/node': specifier: 18.16.16 version: 18.16.16 - ansi-regex: - specifier: 6.0.1 - version: 6.0.1 browserify: specifier: 17.0.0 version: 17.0.0 - json-parse-even-better-errors: - specifier: 3.0.0 - version: 3.0.0 - minimist: - specifier: 1.2.8 - version: 1.2.8 - mkdirp: - specifier: 3.0.1 - version: 3.0.1 prettier: specifier: 2.8.8 version: 2.8.8 - run-script-os: - specifier: 1.1.6 - version: 1.1.6 - ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) typescript: specifier: 5.1.3 version: 5.1.3 uglify-js: specifier: 3.17.4 version: 3.17.4 - uuid: - specifier: 9.0.0 - version: 9.0.0 - watchify: - specifier: 4.0.0 - version: 4.0.0 packages: - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true - /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true @@ -119,38 +56,11 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} dev: true - /acorn@8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} - engines: {node: '>=0.4.0'} - dev: true - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: @@ -180,11 +90,6 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true @@ -200,13 +105,6 @@ packages: concat-map: 0.0.1 dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true @@ -367,21 +265,6 @@ packages: get-intrinsic: 1.1.2 dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: @@ -456,10 +339,6 @@ packages: sha.js: 2.4.11 dev: true - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: @@ -517,11 +396,6 @@ packages: minimist: 1.2.8 dev: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -607,13 +481,6 @@ packages: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -624,14 +491,6 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true @@ -670,13 +529,6 @@ packages: get-intrinsic: 1.1.2 dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -813,13 +665,6 @@ packages: has-bigints: 1.0.2 dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -850,11 +695,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -862,13 +702,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -881,11 +714,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -935,11 +763,6 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -956,10 +779,6 @@ packages: resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: @@ -997,11 +816,6 @@ packages: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - dev: true - /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} @@ -1023,11 +837,6 @@ packages: xtend: 4.0.2 dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -1062,12 +871,6 @@ packages: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true - /outpipe@1.1.1: - resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} - dependencies: - shell-quote: 1.7.3 - dev: true - /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true @@ -1117,11 +920,6 @@ packages: sha.js: 2.4.11 dev: true - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -1205,13 +1003,6 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} @@ -1236,10 +1027,6 @@ packages: inherits: 2.0.4 dev: true - /run-script-os@1.1.6: - resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - dev: true - /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true @@ -1368,12 +1155,6 @@ packages: xtend: 4.0.2 dev: true - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - dependencies: - readable-stream: 3.6.0 - dev: true - /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -1385,43 +1166,6 @@ packages: process: 0.11.10 dev: true - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.16.16 - acorn: 8.8.0 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.1.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true @@ -1491,31 +1235,10 @@ packages: which-typed-array: 1.1.8 dev: true - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - dev: true - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /watchify@4.0.0: - resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - browserify: 17.0.0 - chokidar: 3.5.3 - defined: 1.0.0 - outpipe: 1.1.1 - through2: 4.0.2 - xtend: 4.0.2 - dev: true - /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -1546,8 +1269,3 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true diff --git a/package.json b/package.json index 992f9e58b..7670a092d 100644 --- a/package.json +++ b/package.json @@ -18,15 +18,14 @@ "@types/chai": "4.3.0", "@types/mocha": "10.0.1", "@types/node": "18.16.16", - "@typescript-eslint/eslint-plugin": "5.59.8", - "@typescript-eslint/parser": "5.59.8", + "@typescript-eslint/eslint-plugin": "6.21.0", + "eslint": "8.56.0", "json-parse-even-better-errors": "3.0.0", "ansi-regex": "6.0.1", "browserify": "17.0.0", "chai": "4.3.6", "coverage-badge-creator": "1.0.17", "typescript": "5.1.3", - "eslint": "8.42.0", "minimist": "1.2.8", "mkdirp": "3.0.1", "mocha": "10.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ee95bb65..a20a1900f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,11 +44,8 @@ devDependencies: specifier: 18.16.16 version: 18.16.16 '@typescript-eslint/eslint-plugin': - specifier: 5.59.8 - version: 5.59.8(@typescript-eslint/parser@5.59.8)(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/parser': - specifier: 5.59.8 - version: 5.59.8(eslint@8.42.0)(typescript@5.1.3) + specifier: 6.21.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.1.3) ansi-regex: specifier: 6.0.1 version: 6.0.1 @@ -65,8 +62,8 @@ devDependencies: specifier: 1.0.17 version: 1.0.17 eslint: - specifier: 8.42.0 - version: 8.42.0 + specifier: 8.56.0 + version: 8.56.0 json-parse-even-better-errors: specifier: 3.0.0 version: 3.0.0 @@ -118,6 +115,11 @@ devDependencies: packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} @@ -325,28 +327,28 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.42.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.42.0 - eslint-visitor-keys: 3.4.1 + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.5.0: - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.3: - resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 + espree: 9.6.1 globals: 13.19.0 ignore: 5.2.0 import-fresh: 3.3.0 @@ -357,16 +359,16 @@ packages: - supports-color dev: true - /@eslint/js@8.42.0: - resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.10: - resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: @@ -378,8 +380,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true /@istanbuljs/load-nyc-config@1.1.0: @@ -654,6 +656,10 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} requiresBuild: true @@ -672,8 +678,8 @@ packages: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /@types/semver@7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/semver@7.5.7: + resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} dev: true /@types/sinon@10.0.13: @@ -694,134 +700,140 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@5.59.8(@typescript-eslint/parser@5.59.8)(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.1.3): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.59.8(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/scope-manager': 5.59.8 - '@typescript-eslint/type-utils': 5.59.8(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/utils': 5.59.8(eslint@8.42.0)(typescript@5.1.3) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.1.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.1.3) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.42.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.0 - natural-compare-lite: 1.4.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.1.3) + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.8(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.1.3): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.8 - '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.1.3) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.42.0 + eslint: 8.56.0 typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.59.8: - resolution: {integrity: sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/visitor-keys': 5.59.8 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@5.59.8(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.1.3): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) - '@typescript-eslint/utils': 5.59.8(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.1.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.1.3) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.42.0 - tsutils: 3.21.0(typescript@5.1.3) + eslint: 8.56.0 + ts-api-utils: 1.2.1(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.59.8: - resolution: {integrity: sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.8(typescript@5.1.3): - resolution: {integrity: sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.1.3): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/visitor-keys': 5.59.8 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.1.3) + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.59.8(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.1.3): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.59.8 - '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) - eslint: 8.42.0 - eslint-scope: 5.1.1 - semver: 7.3.8 + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.7 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.1.3) + eslint: 8.56.0 + semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.59.8: - resolution: {integrity: sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.59.8 - eslint-visitor-keys: 3.4.1 + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true /@webassemblyjs/ast@1.11.1: @@ -953,12 +965,12 @@ packages: acorn: 8.8.1 dev: true - /acorn-jsx@5.3.2(acorn@8.8.1): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.1 + acorn: 8.11.3 dev: true /acorn-node@1.8.2: @@ -984,6 +996,12 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /acorn@8.8.1: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} @@ -1889,39 +1907,41 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.2.0: - resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.42.0: - resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.3 - '@eslint/js': 8.42.0 - '@humanwhocodes/config-array': 0.11.10 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.4.2 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -1931,7 +1951,6 @@ packages: globals: 13.19.0 graphemer: 1.4.0 ignore: 5.2.0 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -1941,21 +1960,20 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color dev: true - /espree@9.5.2: - resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2(acorn@8.8.1) - eslint-visitor-keys: 3.4.1 + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 dev: true /esprima@4.0.1: @@ -2320,10 +2338,6 @@ packages: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true - /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true @@ -2430,6 +2444,11 @@ packages: engines: {node: '>= 4'} dev: true + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2928,6 +2947,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true @@ -3023,10 +3049,6 @@ packages: picocolors: 1.0.0 dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -3134,16 +3156,16 @@ packages: wrappy: 1.0.2 dev: true - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 dev: true /os-browserify@0.3.0: @@ -3587,6 +3609,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: @@ -3954,6 +3984,15 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true + /ts-api-utils@1.2.1(typescript@5.1.3): + resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.3 + dev: true + /ts-mocha@10.0.0(mocha@10.2.0): resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} @@ -4049,23 +4088,9 @@ packages: typescript: 5.1.3 dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.1.3): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.1.3 - dev: true - /tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true @@ -4316,11 +4341,6 @@ packages: string-width: 4.2.3 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true From 0333d3a9435f3b86fddcfb47d88d12e1a8fedb4e Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 15:26:58 +0100 Subject: [PATCH 087/257] minor (#508): Added tsconfig.json to @kipper/config --- kipper/config/tsconfig.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 kipper/config/tsconfig.json diff --git a/kipper/config/tsconfig.json b/kipper/config/tsconfig.json new file mode 100644 index 000000000..048c3fce2 --- /dev/null +++ b/kipper/config/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src", + "target": "es2016", + "noImplicitOverride": false, + "experimentalDecorators": true, + "skipLibCheck": true, + "lib": [ + "ES7" // ES7 -> ES2016 + ] + }, + "include": [ + "./src/**/*" + ], + "exclude": [ + "node_modules", + "lib", + "dist", + "**/*.spec.ts" + ], + "files": [] +} From 97e9385909adac78e3401b18624af3eb1bd22171 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 16:11:23 +0100 Subject: [PATCH 088/257] other: Fixed issue in README.md files --- README.md | 2 +- kipper/cli/README.md | 2 +- kipper/core/README.md | 4 ++-- kipper/target-js/README.md | 4 ++-- kipper/target-ts/README.md | 4 ++-- kipper/web/README.md | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index cffd2096a..9a824ec32 100644 --- a/README.md +++ b/README.md @@ -230,7 +230,7 @@ We appreciate any feedback or help! Kipper is open-source and free for anyone, h ![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) -Copyright (C) 2021-2023 Luna Klatzer +Copyright (C) 2021-2024 Luna Klatzer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software diff --git a/kipper/cli/README.md b/kipper/cli/README.md index b06d1ef61..5d9ab0a1c 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -209,7 +209,7 @@ We appreciate any feedback or help! Kipper is open-source and free for anyone, h ![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) -Copyright (C) 2021-2023 Luna Klatzer +Copyright (C) 2021-2024 Luna Klatzer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software diff --git a/kipper/core/README.md b/kipper/core/README.md index bb865641b..beef15620 100644 --- a/kipper/core/README.md +++ b/kipper/core/README.md @@ -23,7 +23,7 @@ and the [Kipper website](https://kipper-lang.org)._ ## Installation -To install the whole Kipper package with its CLI, run the following command: +To install the package, run the following command: ```bash npm i @kipper/core @@ -160,7 +160,7 @@ We appreciate any feedback or help! Kipper is open-source and free for anyone, h ![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) -Copyright (C) 2021-2023 Luna Klatzer +Copyright (C) 2021-2024 Luna Klatzer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software diff --git a/kipper/target-js/README.md b/kipper/target-js/README.md index 7b5f966ef..e89a1ccc7 100644 --- a/kipper/target-js/README.md +++ b/kipper/target-js/README.md @@ -23,7 +23,7 @@ and the [Kipper website](https://kipper-lang.org)._ ## Installation -To install the whole Kipper package with its CLI, run the following command: +To install the package, run the following command: ```bash npm i @kipper/target-js @@ -110,7 +110,7 @@ We appreciate any feedback or help! Kipper is open-source and free for anyone, h ![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) -Copyright (C) 2021-2023 Luna Klatzer +Copyright (C) 2021-2024 Luna Klatzer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software diff --git a/kipper/target-ts/README.md b/kipper/target-ts/README.md index fd9eee73a..971a3d951 100644 --- a/kipper/target-ts/README.md +++ b/kipper/target-ts/README.md @@ -23,7 +23,7 @@ and the [Kipper website](https://kipper-lang.org)._ ## Installation -To install the whole Kipper package with its CLI, run the following command: +To install the package, run the following command: ```bash npm i @kipper/target-ts @@ -106,7 +106,7 @@ We appreciate any feedback or help! Kipper is open-source and free for anyone, h ![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) -Copyright (C) 2021-2023 Luna Klatzer +Copyright (C) 2021-2024 Luna Klatzer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software diff --git a/kipper/web/README.md b/kipper/web/README.md index 52e59387b..ecd84c881 100644 --- a/kipper/web/README.md +++ b/kipper/web/README.md @@ -81,7 +81,7 @@ We appreciate any feedback or help! Kipper is open-source and free for anyone, h ![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) -Copyright (C) 2021-2023 Luna Klatzer +Copyright (C) 2021-2024 Luna Klatzer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software From d8d417bc5cd16481b7e687798df556aad42fdf5f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 16:11:39 +0100 Subject: [PATCH 089/257] other: Fixed dependencies in root package.json --- package.json | 12 +++++++----- pnpm-lock.yaml | 11 ++++++++++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 7670a092d..2befff11c 100644 --- a/package.json +++ b/package.json @@ -12,12 +12,13 @@ "tslib": "~2.6.2" }, "devDependencies": { - "@istanbuljs/nyc-config-typescript": "1.0.2", + "@types/chai": "4.3.0", + "@types/mocha": "10.0.1", + "@types/node": "18.16.16", + "@types/semver": "7.5.7", "@oclif/test": "2.3.21", "@size-limit/preset-big-lib": "8.2.4", - "@types/chai": "4.3.0", - "@types/mocha": "10.0.1", - "@types/node": "18.16.16", + "@istanbuljs/nyc-config-typescript": "1.0.2", "@typescript-eslint/eslint-plugin": "6.21.0", "eslint": "8.56.0", "json-parse-even-better-errors": "3.0.0", @@ -40,7 +41,8 @@ "uglify-js": "3.17.4", "uuid": "9.0.0", "watchify": "4.0.0", - "antlr4ts": "^0.5.0-alpha.4" + "antlr4ts": "^0.5.0-alpha.4", + "semver": "7.6.0" }, "engines": { "node": ">=16.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a20a1900f..329d53f0c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,6 +43,9 @@ devDependencies: '@types/node': specifier: 18.16.16 version: 18.16.16 + '@types/semver': + specifier: 7.5.7 + version: 7.5.7 '@typescript-eslint/eslint-plugin': specifier: 6.21.0 version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.1.3) @@ -85,6 +88,9 @@ devDependencies: run-script-os: specifier: 1.1.6 version: 1.1.6 + semver: + specifier: 7.6.0 + version: 7.6.0 size-limit: specifier: 8.2.4 version: 8.2.4 @@ -506,7 +512,7 @@ packages: natural-orderby: 2.0.3 object-treeify: 1.1.33 password-prompt: 1.1.2 - semver: 7.3.8 + semver: 7.6.0 string-width: 4.2.3 strip-ansi: 6.0.1 supports-color: 8.1.1 @@ -3596,15 +3602,18 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true dev: true /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true dev: true /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} + hasBin: true dependencies: lru-cache: 6.0.0 dev: true From 37281573147c85609c20c1efc2ad66ac20efcfd7 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 16:20:56 +0100 Subject: [PATCH 090/257] other: Minor style fixes in README.md files --- kipper/cli/README.md | 6 +++--- kipper/core/README.md | 3 ++- kipper/target-js/README.md | 4 ++-- kipper/target-ts/README.md | 2 +- kipper/web/README.md | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 5d9ab0a1c..f5a9accae 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -1,13 +1,13 @@ ![](https://github.com/Kipper-Lang/Kipper/raw/main/img/Kipper-Logo-with-head.png) -# Kipper CLI - `@kipper/cli` 🦊🖥️ +# Kipper CLI - `@kipper/cli` 🦊✨ -The Kipper command line interface (CLI) to interact with the Kipper compiler. 🦊✨ +The Kipper command line interface (CLI) to interact with the Kipper compiler. ⌨️✨ Kipper is a JavaScript-like strongly and strictly typed language with Python flavour. It aims to provide straightforward, simple, secure and type-safe coding with better efficiency and developer satisfaction! -It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊🖥️ +It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 _For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ diff --git a/kipper/core/README.md b/kipper/core/README.md index beef15620..42dd6c9f1 100644 --- a/kipper/core/README.md +++ b/kipper/core/README.md @@ -11,13 +11,14 @@ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/core)](https://packagephobia.com/result?p=@kipper/core) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -The core module for Kipper, which contains the primary language and compiler. 🦊✨ +The core module for Kipper, which contains the primary language and compiler. ⌨️✨ Kipper is a JavaScript-like strongly and strictly typed language with Python flavour. It aims to provide straightforward, simple, secure and type-safe coding with better efficiency and developer satisfaction! It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 + _For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ diff --git a/kipper/target-js/README.md b/kipper/target-js/README.md index e89a1ccc7..b1e72aee7 100644 --- a/kipper/target-js/README.md +++ b/kipper/target-js/README.md @@ -11,12 +11,12 @@ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/target-js)](https://packagephobia.com/result?p=@kipper/target-js) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -The JavaScript target for the Kipper Compiler. 🦊✨ +The JavaScript target for the Kipper Compiler. ⌨️✨ Kipper is a JavaScript-like strongly and strictly typed language with Python flavour. It aims to provide straightforward, simple, secure and type-safe coding with better efficiency and developer satisfaction! -It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊 +It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 _For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ diff --git a/kipper/target-ts/README.md b/kipper/target-ts/README.md index 971a3d951..7f9146853 100644 --- a/kipper/target-ts/README.md +++ b/kipper/target-ts/README.md @@ -11,7 +11,7 @@ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/target-ts)](https://packagephobia.com/result?p=@kipper/target-ts) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -The TypeScript target for the Kipper Compiler. 🦊✨ +The TypeScript target for the Kipper Compiler. ⌨️✨ Kipper is a JavaScript-like strongly and strictly typed language with Python flavour. It aims to provide straightforward, simple, secure and type-safe coding with better efficiency and developer satisfaction! diff --git a/kipper/web/README.md b/kipper/web/README.md index ecd84c881..6dcc5a399 100644 --- a/kipper/web/README.md +++ b/kipper/web/README.md @@ -11,12 +11,12 @@ [![Publish size](https://badgen.net/packagephobia/publish/@kipper/web)](https://packagephobia.com/result?p=@kipper/web) [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -The standalone web-module for the Kipper Compiler. 🦊✨ +The standalone web-module for the Kipper Compiler. ⌨️✨ Kipper is a JavaScript-like strongly and strictly typed language with Python flavour. It aims to provide straightforward, simple, secure and type-safe coding with better efficiency and developer satisfaction! -It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊🖥️ +It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 _For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ From b0db63022d604d9eeb674bede694d26317c05496 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 16:50:08 +0100 Subject: [PATCH 091/257] minor (#508): Fixed multiple bugs in @kipper/config and added support for "*" version specifiers --- .../config/src/abstract/config-interpreter.ts | 122 +++++++++--------- kipper/config/src/abstract/index.ts | 7 + kipper/config/src/errors.ts | 74 +++++++---- .../src/evaluated-kipper-config-file.ts | 6 +- kipper/config/src/index.ts | 5 + kipper/config/src/kipper-config-file.ts | 2 +- .../config/src/kipper-config-interpreter.ts | 66 +++++++--- kipper/config/src/tools.ts | 32 +++-- 8 files changed, 203 insertions(+), 111 deletions(-) create mode 100644 kipper/config/src/abstract/index.ts diff --git a/kipper/config/src/abstract/config-interpreter.ts b/kipper/config/src/abstract/config-interpreter.ts index bb1a4365e..7aa730e0f 100644 --- a/kipper/config/src/abstract/config-interpreter.ts +++ b/kipper/config/src/abstract/config-interpreter.ts @@ -7,18 +7,24 @@ import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "../eval * @since 0.11.0 */ export type ConfigInterpreterScheme = { - [key: string]: { - type: "string" | "number" | "boolean"; - required: boolean; - } | { - type: "array", - required: boolean; - itemType: "string" | "number" | "boolean"; - } | { - type: "object"; - required: boolean; - properties: ConfigInterpreterScheme; - } + [key: string]: + | { + type: "string" | "number" | "boolean"; + required: boolean; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + | { + type: "array"; + required: boolean; + itemType: "string" | "number" | "boolean"; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + | { + type: "object"; + required: boolean; + properties: ConfigInterpreterScheme; + // eslint-disable-next-line no-mixed-spaces-and-tabs + }; }; /** @@ -26,27 +32,27 @@ export type ConfigInterpreterScheme = { * i.e. a representation of what a valid config file would actually look like if it was parsed. */ export type Config = { - [key in keyof Scheme]: Scheme[key] extends { type: "string"; required: true } ? - string : - Scheme[key] extends { type: "string"; required: false } ? - string | undefined : - Scheme[key] extends { type: "number"; required: true } ? - number : - Scheme[key] extends { type: "number"; required: false } ? - number | undefined : - Scheme[key] extends { type: "boolean"; required: true } ? - boolean : - Scheme[key] extends { type: "boolean"; required: false } ? - boolean | undefined : - Scheme[key] extends { type: "array"; itemType: infer T; required: true } ? - T[] : - Scheme[key] extends { type: "array"; itemType: infer T; required: false } ? - (T | undefined)[] : - Scheme[key] extends { type: "object"; properties: infer P extends ConfigInterpreterScheme; required: true } ? - Config

: - Scheme[key] extends { type: "object"; properties: infer P extends ConfigInterpreterScheme; required: false } ? - Config

| undefined : - never; + [key in keyof Scheme]: Scheme[key] extends { type: "string"; required: true } + ? string + : Scheme[key] extends { type: "string"; required: false } + ? string | undefined + : Scheme[key] extends { type: "number"; required: true } + ? number + : Scheme[key] extends { type: "number"; required: false } + ? number | undefined + : Scheme[key] extends { type: "boolean"; required: true } + ? boolean + : Scheme[key] extends { type: "boolean"; required: false } + ? boolean | undefined + : Scheme[key] extends { type: "array"; itemType: infer T; required: true } + ? T[] + : Scheme[key] extends { type: "array"; itemType: infer T; required: false } + ? T[] | undefined + : Scheme[key] extends { type: "object"; properties: infer P extends ConfigInterpreterScheme; required: true } + ? Config

+ : Scheme[key] extends { type: "object"; properties: infer P extends ConfigInterpreterScheme; required: false } + ? Config

| undefined + : never; }; /** @@ -100,43 +106,35 @@ export abstract class ConfigInterpreter { + Object.keys(configFile).forEach((key) => { if (!(key in scheme)) { throw new UnknownFieldError(`Unknown field "${key}"`, meta); } diff --git a/kipper/config/src/abstract/index.ts b/kipper/config/src/abstract/index.ts new file mode 100644 index 000000000..502ad7b2b --- /dev/null +++ b/kipper/config/src/abstract/index.ts @@ -0,0 +1,7 @@ +/** + * Abstract classes and interfaces for the configuration system. + * @since 0.11.0 + */ +export * from "./config-file"; +export * from "./config-interpreter"; +export * from "./evaluated-config-file"; diff --git a/kipper/config/src/errors.ts b/kipper/config/src/errors.ts index 4fb42f4c0..21f94682c 100644 --- a/kipper/config/src/errors.ts +++ b/kipper/config/src/errors.ts @@ -1,24 +1,56 @@ +import { clean } from "semver"; + /** * The metadata for a config error, which is used to provide verbose error messages. * @since 0.11.0 */ -export type ConfigErrorMetaData = { fileName: string, parentFiles: string[] }; +export type ConfigErrorMetaData = { fileName: string; parentFiles: string[] }; - /** +/** * Generic error for the '@kipper/config' package. * @since 0.11.0 */ export class ConfigError { - public constructor(public message: string, public meta: ConfigErrorMetaData) { - this.message = `${message} (${[meta.fileName, ...meta.parentFiles].join(" -> ")})`; + public constructor(public message: string, public meta?: ConfigErrorMetaData) { + this.message = `${message}${meta ? ` (${[meta.fileName, ...meta.parentFiles].join(" -> ")})` : ""}`; + } +} + +/** + * Error that is thrown whenever a file is not found. + * @since 0.11.0 + */ +export class FileNotFoundError extends ConfigError { + public constructor(fileName: string) { + super(`File not found '${fileName}'`); } } /** - * Error that is thrown whenever a directory or file is not found. + * Error that is thrown whenever an invalid path is encountered. * @since 0.11.0 */ -export class NotFoundError extends ConfigError { +export class InvalidPathError extends ConfigError { + public constructor(fileName: string, details: string) { + super(`Invalid path '${fileName}'. ${details}`); + } +} + +/** + * Error that is thrown whenever an interpreter error is encountered. + * @since 0.11.0 + */ +export class ConfigInterpreterError extends ConfigError { + public constructor(message: string, meta?: ConfigErrorMetaData) { + super(message, meta); + } +} + +/** + * Error that is thrown whenever a referenced directory or file is not found. + * @since 0.11.0 + */ +export class RefNotFoundError extends ConfigInterpreterError { public constructor(fileName: string, meta: ConfigErrorMetaData) { super(`Dir or file not found ~ '${fileName}'`, meta); } @@ -28,7 +60,7 @@ export class NotFoundError extends ConfigError { * Error that is thrown whenever an invalid path is encountered. * @since 0.11.0 */ -export class InvalidPathError extends ConfigError { +export class RefInvalidPathError extends ConfigInterpreterError { public constructor(fileName: string, details: string, meta: ConfigErrorMetaData) { super(`Invalid path '${fileName}' ~ ${details}`, meta); } @@ -38,12 +70,9 @@ export class InvalidPathError extends ConfigError { * Error that is thrown whenever a validation error is encountered. * @since 0.11.0 */ -export class ConfigValidationError extends ConfigError { +export class ConfigValidationError extends ConfigInterpreterError { public constructor(validationError: string, meta: ConfigErrorMetaData) { - super( - `Encountered validation error ~ '${validationError}'`, - meta - ); + super(`Validation error ~ '${validationError}'`, meta); } } @@ -51,12 +80,9 @@ export class ConfigValidationError extends ConfigError { * Error that is thrown whenever an unknown field is encountered. * @since 0.11.0 */ -export class UnknownFieldError extends ConfigError { +export class UnknownFieldError extends ConfigInterpreterError { public constructor(unknownField: string, meta: ConfigErrorMetaData) { - super( - `Encountered unknown field ~ '${unknownField}'`, - meta - ); + super(`Unknown field ~ '${unknownField}'`, meta); } } @@ -64,7 +90,7 @@ export class UnknownFieldError extends ConfigError { * Error that is thrown whenever the syntax for a resource mapping is invalid. * @since 0.11.0 */ -export class InvalidMappingSyntaxError extends ConfigError { +export class InvalidMappingSyntaxError extends ConfigInterpreterError { public constructor(provided: string, meta: ConfigErrorMetaData) { super(`Invalid mapping syntax ~ '${provided}'`, meta); } @@ -74,7 +100,7 @@ export class InvalidMappingSyntaxError extends ConfigError { * Error that is thrown whenever the syntax for a version is invalid. * @since 0.11.0 */ -export class InvalidVersionSyntaxError extends ConfigError { +export class InvalidVersionSyntaxError extends ConfigInterpreterError { public constructor(provided: string, meta: ConfigErrorMetaData) { super(`Invalid version syntax ~ '${provided}'`, meta); } @@ -84,11 +110,13 @@ export class InvalidVersionSyntaxError extends ConfigError { * Error that is thrown whenever the version of a file is incompatible. * @since 0.11.0 */ -export class IncompatibleVersionError extends ConfigError { - public constructor(expected: string, actual: string, meta: ConfigErrorMetaData) { +export class IncompatibleVersionError extends ConfigInterpreterError { + public constructor(expected: string, cleanExpected: string, actual: string, meta: ConfigErrorMetaData) { super( - `Version mismatch ~ Expected '${expected}', but received '${actual}'`, - meta + `Version mismatch ~ Expected '${expected}'${ + cleanExpected == expected ? "" : `(Cleaned: ${cleanExpected})` + }, but received '${actual}'`, + meta, ); } } diff --git a/kipper/config/src/evaluated-kipper-config-file.ts b/kipper/config/src/evaluated-kipper-config-file.ts index 7a322bfbd..1a6aadd26 100644 --- a/kipper/config/src/evaluated-kipper-config-file.ts +++ b/kipper/config/src/evaluated-kipper-config-file.ts @@ -15,8 +15,10 @@ export interface RawEvaluatedKipperConfigFile extends EvaluatedConfigFile { basePath: string; outDir: string; srcDir?: string; - files: Array<{ src: PathLike, out: PathLike }>; - resources: Array<{ src: PathLike, out: PathLike }>; + // Since multiple files may be generated from a single source file, + // the outDir is used to specify the output directory and not a single file path + files: Array<{ src: PathLike; outDir: PathLike }>; + resources: Array<{ src: PathLike; out: PathLike }>; compiler: { target: string; version: semver.SemVer; diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 043a3edda..458a1eaf2 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -3,6 +3,11 @@ * @author Luna Klatzer * @copyright 2021-2024 Luna Klatzer */ +export * from "./errors"; +export * from "./abstract/"; +export * from "./kipper-config-file"; +export * from "./kipper-config-interpreter"; +export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; diff --git a/kipper/config/src/kipper-config-file.ts b/kipper/config/src/kipper-config-file.ts index 910d79417..1f5b3253c 100644 --- a/kipper/config/src/kipper-config-file.ts +++ b/kipper/config/src/kipper-config-file.ts @@ -1,7 +1,7 @@ import type { KipperEncoding } from "@kipper/cli"; import { ConfigFile } from "./abstract/config-file"; import * as path from "node:path"; -import * as fs from 'node:fs/promises'; +import * as fs from "node:fs/promises"; import { ensureExistsHasPermAndIsOfType } from "./tools"; /** diff --git a/kipper/config/src/kipper-config-interpreter.ts b/kipper/config/src/kipper-config-interpreter.ts index ee28701ad..75d724dbe 100644 --- a/kipper/config/src/kipper-config-interpreter.ts +++ b/kipper/config/src/kipper-config-interpreter.ts @@ -1,7 +1,12 @@ import { Config, ConfigInterpreter, ConfigInterpreterScheme } from "./abstract/config-interpreter"; import { KipperConfigFile } from "./kipper-config-file"; import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; -import { ConfigErrorMetaData, InvalidMappingSyntaxError, InvalidVersionSyntaxError } from "./errors"; +import { + ConfigErrorMetaData, + IncompatibleVersionError, + InvalidMappingSyntaxError, + InvalidVersionSyntaxError, RefInvalidPathError +} from "./errors"; import { ensureExistsHasPermAndIsOfType } from "./tools"; import { version as kipperConfigVersion } from "./index"; import * as semver from "semver"; @@ -152,7 +157,6 @@ export interface KipperConfigEnvInfo { /** * */ - } export class KipperConfigInterpreter extends ConfigInterpreter { @@ -179,7 +183,7 @@ export class KipperConfigInterpreter extends ConfigInterpreter { // Create the meta object which is used to provide more descriptive error messages (will be reused throughout the // whole analysis and processing of the config file) @@ -201,19 +205,34 @@ export class KipperConfigInterpreter extends ConfigInterpreter { const processedFiles: RawEvaluatedKipperConfigFile["files"] = []; for (const filePath of files) { - const resolvedSrcPath = path.resolve(src ?? basePath, filePath); + // We always use the "basePath" as the source directory is only used for modifying the output directory structure + const resolvedSrcPath = path.resolve(basePath, filePath); await ensureExistsHasPermAndIsOfType(resolvedSrcPath, "r", "file", meta); // If a srcDir is provided, the files will be emitted with preserved directory structure relative to the srcDir // If not, we assume that the given filePath is relative to the basePath i.e. will be relative to the outDir // in the output - const resolvedOutPath = path.resolve(outDir, src ? path.relative(src, resolvedSrcPath) : filePath); + // (Note: This also means we have to throw an error if srcDir is provided, but files are outside of it) + if (src && !resolvedSrcPath.startsWith(path.resolve(src))) { + throw new RefInvalidPathError( + resolvedSrcPath, + `The file is outside of the provided srcDir "${src}" and will not be emitted with preserved directory structure`, + meta, + ); + } + const resolvedOutPath = path.resolve( + outDir, + src ? path.relative(src, path.dirname(resolvedSrcPath)) : filePath + ); processedFiles.push({ src: resolvedSrcPath, - out: resolvedOutPath, + outDir: resolvedOutPath, }); } return processedFiles; @@ -297,7 +328,12 @@ export class KipperConfigInterpreter extends ConfigInterpreter { // First get the current version of the compiler - As every kipper package has to have the same version when used // together, we can simply import 'version' from index.ts - const latestKipperVersion = kipperConfigVersion; + const currentKipperVersion = kipperConfigVersion; + + // If '*' is provided, we'll simply resolve it to the currently installed version + if (providedVersion.trim() === "*") { + return semver.parse(semver.clean(currentKipperVersion))!; + } // Validate the provided version const cleanVersion = semver.clean(providedVersion); @@ -307,9 +343,9 @@ export class KipperConfigInterpreter extends ConfigInterpreter { try { await fs.access(path, mode == "r" ? fs.constants.R_OK : fs.constants.R_OK | fs.constants.W_OK); const stats = await fs.stat(path); if ((type === "file" && !stats.isFile()) || (type === "dir" && !stats.isDirectory())) { - throw new InvalidPathError(path, `The path is not a ${type}`, meta); + throw meta + ? new RefInvalidPathError(path, `The path is not a ${type}`, meta) + : new InvalidPathError(path, `The path is not a ${type}`); } } catch (e) { - if (e instanceof InvalidPathError) { + if (e instanceof RefInvalidPathError) { throw e; - } else if ((e).code === "ENOENT") { - throw new NotFoundError(path, meta); + } else if ((e).code === "ENOENT") { + throw meta ? new RefNotFoundError(path, meta) : new FileNotFoundError(path); } else { - throw new InvalidPathError(path, "The path is not readable or writable", meta); + throw meta + ? new RefInvalidPathError(path, "The path is not readable or writable", meta) + : new InvalidPathError(path, "The path is not readable or writable"); } } } From b207bc316013abb898e5fd38df18b625f8ec8c33 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 16:50:32 +0100 Subject: [PATCH 092/257] other (#508): Added generic project files and README.md for @kipper/config --- kipper/config/.eslintignore | 2 + kipper/config/.gitignore | 79 +++++ kipper/config/LICENSE | 674 ++++++++++++++++++++++++++++++++++++ kipper/config/README.md | 69 ++++ 4 files changed, 824 insertions(+) create mode 100644 kipper/config/.eslintignore create mode 100644 kipper/config/.gitignore create mode 100644 kipper/config/LICENSE create mode 100644 kipper/config/README.md diff --git a/kipper/config/.eslintignore b/kipper/config/.eslintignore new file mode 100644 index 000000000..3063f07d5 --- /dev/null +++ b/kipper/config/.eslintignore @@ -0,0 +1,2 @@ +lib +node_modules diff --git a/kipper/config/.gitignore b/kipper/config/.gitignore new file mode 100644 index 000000000..4ad1c7abc --- /dev/null +++ b/kipper/config/.gitignore @@ -0,0 +1,79 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# oclif .gitignore ttttt +*-debug.log +*-error.log +/.nyc_output +/tmp +/yarn.lock +node_modules + +# Web builds +kipper-standalone.js +kipper-standalone.min.js + +# Runtime data +pids +*.pid +*.seed +*.pid.lock +gen/ + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc __tests__ coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript controller_v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# Transpiled JavaScript files from Typescript +/lib + +# Cache used by TypeScript's incremental build +*.tsbuildinfo + +*.idea diff --git a/kipper/config/LICENSE b/kipper/config/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/kipper/config/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/kipper/config/README.md b/kipper/config/README.md new file mode 100644 index 000000000..cd5030340 --- /dev/null +++ b/kipper/config/README.md @@ -0,0 +1,69 @@ +![](https://github.com/Kipper-Lang/Kipper/raw/main/img/Kipper-Logo-with-head.png) + +# Kipper Config Package - `@kipper/config` 🦊⌨️ + +[![Version](https://img.shields.io/npm/v/@kipper/config?label=npm%20stable&color=%23cd2620&logo=npm)](https://npmjs.org/package/kipper) +[![Dev Version](https://img.shields.io/github/v/tag/Kipper-Lang/Kipper?include_prereleases&label=dev&logo=github&sort=semver)](https://github.com/Kipper-Lang/Kipper/tags) +[![codecov](https://codecov.io/gh/Kipper-Lang/Kipper/branch/main/graph/badge.svg?token=S4RQT7X3YP)](https://codecov.io/gh/Kipper-Lang/Kipper) +[![Issues](https://img.shields.io/github/issues/Kipper-Lang/Kipper)](https://github.com/Kipper-Lang/Kipper/issues) +[![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan)](https://github.com/Kipper-Lang/Kipper/blob/main/LICENSE) +[![Install size](https://packagephobia.com/badge?p=@kipper/config)](https://packagephobia.com/result?p=@kipper/config) +[![Publish size](https://badgen.net/packagephobia/publish/@kipper/config)](https://packagephobia.com/result?p=@kipper/config) +[![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) + +The config package of the Kipper CLI for managing project environments, handling configurations and settings, and +providing a consistent way to manage your workflow. ⌨️✨ + +Kipper is a JavaScript-like strongly and strictly typed language with Python flavour. It aims to provide +straightforward, simple, secure and type-safe coding with better efficiency and developer satisfaction! + +It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 + + +_For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) +and the [Kipper website](https://kipper-lang.org)._ + +## Installation + +To install the package, run the following command: + +```bash +npm i @kipper/config +``` + +If you are using `pnpm` or `yarn`, use `pnpm i @kipper/config` or `yarn add @kipper/config`. + +## General Information + +- Website: https://kipper-lang.org +- Docs: https://docs.kipper-lang.org +- Playground: https://play.kipper-lang.org +- Issue Tracker: https://issues.kipper-lang.org +- Roadmap: [View Kipper Roadmap 🦊🚧](https://github.com/Kipper-Lang/Kipper/discussions/139) +- Changelog: [View CHANGELOG.md](https://github.com/Kipper-Lang/Kipper/blob/main/CHANGELOG.md) + +## Copyright and License + +![License](https://img.shields.io/github/license/Kipper-Lang/Kipper?color=cyan) +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_shield) + +Copyright (C) 2021-2024 Luna Klatzer + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . + +See the [LICENSE](https://raw.githubusercontent.com/Kipper-Lang/Kipper/main/LICENSE) +for information on terms & conditions for usage. + +### FOSSA License Report + +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FLuna-Klatzer%2FKipper?ref=badge_large) From c6cdca14c95d65504f562a02c45f0b1dd255124b Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 13 Feb 2024 16:50:49 +0100 Subject: [PATCH 093/257] test (#508): Added basic tests for @kipper/config To be extended! --- test/config-files/kip-config.basic.json | 6 ++- .../config/kipper-config-file-interpreter.ts | 33 +++++++++++++++ test/module/config/kipper-config-file.test.ts | 42 +++++++++++++++++++ test/module/config/utils/utils.ts | 5 +++ 4 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 test/module/config/utils/utils.ts diff --git a/test/config-files/kip-config.basic.json b/test/config-files/kip-config.basic.json index aec9826e5..1ef8ec835 100644 --- a/test/config-files/kip-config.basic.json +++ b/test/config-files/kip-config.basic.json @@ -1,12 +1,14 @@ { + "outDir": "dist", + "srcDir": "test/kipper-files", "compiler": { "version": "*", "target": "ts" }, "files": [ - "src/index.kip" + "test/kipper-files/main.kip" ], "resources": [ - "my-image.png" + "img/icon.png" ] } diff --git a/test/module/config/kipper-config-file-interpreter.ts b/test/module/config/kipper-config-file-interpreter.ts index d5846399b..e2a04614e 100644 --- a/test/module/config/kipper-config-file-interpreter.ts +++ b/test/module/config/kipper-config-file-interpreter.ts @@ -1,3 +1,36 @@ +import { getFileName } from "./utils/utils"; +import { assert } from "chai"; +import { KipperConfigFile, KipperConfigInterpreter, version as kipConfigVersion } from "@kipper/config"; +import * as semver from "semver"; + +const basicKipConfig = getFileName("kip-config.basic.json"); + describe("KipperConfigInterpreter", () => { + describe("loadConfig", () => { + describe("no extends", () => { + const interpreter = new KipperConfigInterpreter(); + + it("should load a basic config", async () => { + const kipperConfigFile = await KipperConfigFile.fromFile(basicKipConfig, "utf8"); + const config = await interpreter.loadConfig(kipperConfigFile); + const pwd = process.cwd(); + assert.deepEqual(config.raw, { + basePath: pwd, + srcDir: `${pwd}/test/kipper-files`, + outDir: `${pwd}/dist`, + compiler: { + version: semver.parse(semver.clean(kipConfigVersion))!, + target: "ts" + }, + files: [ + { src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` } + ], + resources: [ + { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` } + ] + }); + }); + }); + }); }); diff --git a/test/module/config/kipper-config-file.test.ts b/test/module/config/kipper-config-file.test.ts index f3ab4ea87..628deb864 100644 --- a/test/module/config/kipper-config-file.test.ts +++ b/test/module/config/kipper-config-file.test.ts @@ -1,3 +1,45 @@ +import { FileNotFoundError, KipperConfigFile } from "@kipper/config"; +import { getFileName } from "./utils/utils"; +import { assert } from "chai"; +import * as path from "path"; +import * as fs from "node:fs/promises"; + +const basicKipConfig = getFileName("kip-config.basic.json"); + describe("KipperConfigFile", () => { + const encoding = "utf8"; + + describe("fromString", () => { + it("should return a KipperConfigFile instance", () => { + const kipConfig = KipperConfigFile.fromString("{}", encoding); + assert.instanceOf(kipConfig, KipperConfigFile); + assert.strictEqual(kipConfig.content, "{}"); + assert.deepEqual(kipConfig.parsedJSON, {}); + assert.strictEqual(kipConfig.fileName, ""); + assert.strictEqual(kipConfig.encoding, encoding); + }); + }); + + describe("fromFile", () => { + it("should return a KipperConfigFile instance", async () => { + // First get the file content to check what we are expecting + const fileContent = await fs.readFile(basicKipConfig, { encoding }); + + const kipConfig = await KipperConfigFile.fromFile(basicKipConfig, encoding); + assert.instanceOf(kipConfig, KipperConfigFile); + assert.strictEqual(kipConfig.content, fileContent); + assert.deepEqual(kipConfig.parsedJSON, JSON.parse(fileContent)); + assert.strictEqual(kipConfig.fileName, path.basename(basicKipConfig)); + assert.strictEqual(kipConfig.encoding, encoding); + }); + it("should throw an error if the file does not exist", async () => { + try { + await KipperConfigFile.fromFile(getFileName("does-not-exist.json"), encoding); + assert.fail("Expected an error to be thrown"); + } catch (error) { + assert.instanceOf(error, FileNotFoundError); + } + }); + }); }); diff --git a/test/module/config/utils/utils.ts b/test/module/config/utils/utils.ts new file mode 100644 index 000000000..3a57b02a0 --- /dev/null +++ b/test/module/config/utils/utils.ts @@ -0,0 +1,5 @@ +import * as path from "path"; + +export function getFileName(pathString: string): string { + return path.resolve(`${__dirname}/../../../config-files/${pathString}`); +} From 9a37144a1517623b198125a1fed8df05f9c79945 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 14 Feb 2024 00:04:21 +0100 Subject: [PATCH 094/257] minor (#508): Fixed many bugs in the @kipper/config package --- kipper/config/package.json | 2 + kipper/config/pnpm-lock.yaml | 34 +++++ kipper/config/src/abstract/config-file.ts | 9 +- .../config/src/abstract/config-interpreter.ts | 124 ++++++++++++------ kipper/config/src/errors.ts | 14 +- .../src/evaluated-kipper-config-file.ts | 2 +- kipper/config/src/kipper-config-file.ts | 18 ++- .../config/src/kipper-config-interpreter.ts | 97 +++++++++----- 8 files changed, 220 insertions(+), 80 deletions(-) diff --git a/kipper/config/package.json b/kipper/config/package.json index 7202d3c7e..197cd5356 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -4,6 +4,8 @@ "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { + "deepmerge": "4.3.1", + "is-plain-object": "5.0.0", "semver": "7.6.0", "tslib": "~2.6.2" }, diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index eb917ea58..ee21910a8 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -5,6 +5,12 @@ settings: excludeLinksFromLockfile: false dependencies: + deepmerge: + specifier: 4.3.1 + version: 4.3.1 + is-plain-object: + specifier: 5.0.0 + version: 5.0.0 semver: specifier: 7.6.0 version: 7.6.0 @@ -16,6 +22,12 @@ devDependencies: '@kipper/cli': specifier: workspace:~ version: link:../cli + '@types/deepmerge': + specifier: 2.2.0 + version: 2.2.0 + '@types/is-plain-object': + specifier: 2.0.4 + version: 2.0.4 '@types/semver': specifier: 7.5.7 version: 7.5.7 @@ -25,10 +37,32 @@ devDependencies: packages: + /@types/deepmerge@2.2.0: + resolution: {integrity: sha512-FEQYDHh6+Q+QXKSrIY46m+/lAmAj/bk4KpLaam+hArmzaVpMBHLcfwOH2Q2UOkWM7XsdY9PmZpGyPAjh/JRGhQ==} + deprecated: This is a stub types definition. deepmerge provides its own type definitions, so you do not need this installed. + dependencies: + deepmerge: 4.3.1 + dev: true + + /@types/is-plain-object@2.0.4: + resolution: {integrity: sha512-najbe//S/ThT7nEh+iLmXNUFMWQHf7x2QUrsMgtF/apA8dJl8rCsfWr9f8XG9nBo+NyT5TbT92IFIJji9ZmsRQ==} + deprecated: This is a stub types definition for is-plain-object (https://github.com/jonschlinkert/is-plain-object). is-plain-object provides its own type definitions, so you don't need @types/is-plain-object installed! + dependencies: + is-plain-object: 5.0.0 + dev: true + /@types/semver@7.5.7: resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} diff --git a/kipper/config/src/abstract/config-file.ts b/kipper/config/src/abstract/config-file.ts index 4f56b8dfa..fafda3043 100644 --- a/kipper/config/src/abstract/config-file.ts +++ b/kipper/config/src/abstract/config-file.ts @@ -1,4 +1,5 @@ import type { KipperEncoding } from "@kipper/cli"; +import { ConfigErrorMetaData, JSONSyntaxError } from "../errors"; /** * An abstract class that represents a configuration file. @@ -10,10 +11,14 @@ export abstract class ConfigFile { public readonly fileName: string; public readonly encoding: KipperEncoding; - protected constructor(content: string, fileName: string, encoding: KipperEncoding) { + protected constructor(content: string, fileName: string, encoding: KipperEncoding, meta?: ConfigErrorMetaData) { this.content = content; - this.parsedJSON = JSON.parse(content); this.fileName = fileName; this.encoding = encoding; + try { + this.parsedJSON = JSON.parse(content); + } catch (e) { + throw new JSONSyntaxError(String(e), { fileName, refChain: meta?.refChain ?? [] }); + } } } diff --git a/kipper/config/src/abstract/config-interpreter.ts b/kipper/config/src/abstract/config-interpreter.ts index 7aa730e0f..bc44f2125 100644 --- a/kipper/config/src/abstract/config-interpreter.ts +++ b/kipper/config/src/abstract/config-interpreter.ts @@ -2,29 +2,44 @@ import { ConfigFile } from "./config-file"; import { ConfigErrorMetaData, ConfigValidationError, UnknownFieldError } from "../errors"; import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "../evaluated-kipper-config-file"; +/** + * A type that represents a configuration scheme definition. + * @since 0.11.0 + */ +export type ConfigInterpreterSchemeDefinition = { + type: "string" | "number" | "boolean"; + required: boolean; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + | { + type: "array"; + required: boolean; + itemType: "string" | "number" | "boolean"; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + | { + type: "object"; + required: boolean; + properties: ConfigInterpreterScheme; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + | { + type: "union"; + required: boolean; + possibilities: ( + { type: "string" | "number" | "boolean" } | + { type: "array"; itemType: "string" | "number" | "boolean" } | + { type: "object"; properties: ConfigInterpreterScheme } + )[] + // eslint-disable-next-line no-mixed-spaces-and-tabs + }; + /** * A type that represents a configuration scheme. * @since 0.11.0 */ export type ConfigInterpreterScheme = { - [key: string]: - | { - type: "string" | "number" | "boolean"; - required: boolean; - // eslint-disable-next-line no-mixed-spaces-and-tabs - } - | { - type: "array"; - required: boolean; - itemType: "string" | "number" | "boolean"; - // eslint-disable-next-line no-mixed-spaces-and-tabs - } - | { - type: "object"; - required: boolean; - properties: ConfigInterpreterScheme; - // eslint-disable-next-line no-mixed-spaces-and-tabs - }; + [key: string]: ConfigInterpreterSchemeDefinition; }; /** @@ -111,26 +126,7 @@ export abstract class ConfigInterpreter p.type).join(", ")}'`, + meta, + ); + } + } else { + if ( + (schemeValue.type === "array" && !Array.isArray(configValue)) || + (schemeValue.type !== "array" && schemeValue.type !== typeof configValue) + ) { + throw new ConfigValidationError(`Field "${key}" is not of type "${schemeValue.type}"`, meta); + } + + if (schemeValue.type === "object") { + this.validateConfigBasedOffSchemeRecursive(configValue, schemeValue.properties, meta); + } else if (schemeValue.type === "array") { + for (const value of configValue) { + if (typeof value !== schemeValue.itemType) { + throw new ConfigValidationError( + `Field "${key}" contains an item that is not of type "${schemeValue.itemType}"`, + meta, + ); + } + } + } + } + } + abstract loadConfig(config: ConfigFile): Promise; } diff --git a/kipper/config/src/errors.ts b/kipper/config/src/errors.ts index 21f94682c..ac0107836 100644 --- a/kipper/config/src/errors.ts +++ b/kipper/config/src/errors.ts @@ -4,7 +4,7 @@ import { clean } from "semver"; * The metadata for a config error, which is used to provide verbose error messages. * @since 0.11.0 */ -export type ConfigErrorMetaData = { fileName: string; parentFiles: string[] }; +export type ConfigErrorMetaData = { fileName: string; refChain: string[] }; /** * Generic error for the '@kipper/config' package. @@ -12,7 +12,7 @@ export type ConfigErrorMetaData = { fileName: string; parentFiles: string[] }; */ export class ConfigError { public constructor(public message: string, public meta?: ConfigErrorMetaData) { - this.message = `${message}${meta ? ` (${[meta.fileName, ...meta.parentFiles].join(" -> ")})` : ""}`; + this.message = `${message}${meta ? ` (${[...meta.refChain, meta.fileName].join(" -> ")})` : ""}`; } } @@ -46,6 +46,16 @@ export class ConfigInterpreterError extends ConfigError { } } +/** + * Error that is thrown whenever a file is not found. + * @since 0.11.0 + */ +export class JSONSyntaxError extends ConfigInterpreterError { + public constructor(details: string, meta: ConfigErrorMetaData) { + super(`Invalid JSON syntax ~ ${details}`, meta); + } +} + /** * Error that is thrown whenever a referenced directory or file is not found. * @since 0.11.0 diff --git a/kipper/config/src/evaluated-kipper-config-file.ts b/kipper/config/src/evaluated-kipper-config-file.ts index 1a6aadd26..c194bc459 100644 --- a/kipper/config/src/evaluated-kipper-config-file.ts +++ b/kipper/config/src/evaluated-kipper-config-file.ts @@ -43,12 +43,12 @@ export class EvaluatedKipperConfigFile implements RawEvaluatedKipperConfigFile { compiler: RawEvaluatedKipperConfigFile["compiler"]; public constructor(config: RawEvaluatedKipperConfigFile) { + this.raw = config; this.basePath = config.basePath; this.outDir = config.outDir; this.srcDir = config.srcDir; this.files = config.files; this.resources = config.resources; this.compiler = config.compiler; - this.raw = config; } } diff --git a/kipper/config/src/kipper-config-file.ts b/kipper/config/src/kipper-config-file.ts index 1f5b3253c..2d7caccbf 100644 --- a/kipper/config/src/kipper-config-file.ts +++ b/kipper/config/src/kipper-config-file.ts @@ -3,14 +3,20 @@ import { ConfigFile } from "./abstract/config-file"; import * as path from "node:path"; import * as fs from "node:fs/promises"; import { ensureExistsHasPermAndIsOfType } from "./tools"; +import { ConfigErrorMetaData } from "./errors"; /** * A class that represents a Kipper config file. * @since 0.11.0 */ export class KipperConfigFile extends ConfigFile { - protected constructor(content: string, fileName: string = "", encoding: KipperEncoding = "utf8") { - super(content, fileName, encoding); + protected constructor( + content: string, + fileName: string = "", + encoding: KipperEncoding = "utf8", + meta?: ConfigErrorMetaData + ) { + super(content, fileName, encoding, meta); } /** @@ -28,13 +34,15 @@ export class KipperConfigFile extends ConfigFile { * Create a new KipperConfigFile from a file. * @param file The file to read. * @param encoding The encoding of the file. + * @param meta The metadata for the error. This is primarily only used when resolving extension files, and does not + * need to be provided when manually creating a KipperConfigFile. * @since 0.11.0 */ - static async fromFile(file: string, encoding: KipperEncoding): Promise { - await ensureExistsHasPermAndIsOfType(file, "r", "file"); + static async fromFile(file: string, encoding: KipperEncoding, meta?: ConfigErrorMetaData): Promise { + await ensureExistsHasPermAndIsOfType(file, "r", "file", meta); const fileContent = await fs.readFile(file, { encoding }); const fileName = path.basename(file); - return new KipperConfigFile(fileContent, fileName, encoding); + return new KipperConfigFile(fileContent, fileName, encoding, meta); } } diff --git a/kipper/config/src/kipper-config-interpreter.ts b/kipper/config/src/kipper-config-interpreter.ts index 75d724dbe..24d0538b8 100644 --- a/kipper/config/src/kipper-config-interpreter.ts +++ b/kipper/config/src/kipper-config-interpreter.ts @@ -11,6 +11,8 @@ import { ensureExistsHasPermAndIsOfType } from "./tools"; import { version as kipperConfigVersion } from "./index"; import * as semver from "semver"; import * as path from "node:path"; +import * as deepmerge from "deepmerge"; +import { isPlainObject } from "is-plain-object"; /** * A type that represents a Kipper config file. @@ -22,8 +24,12 @@ export const KipperConfigScheme = { * @since 0.11.0 */ extends: { - type: "string", + type: "union", required: false, + possibilities: [ + { type: "string" }, + { type: "array", itemType: "string" } + ], }, /** * The base path of the project. This is the path that all other paths are relative to. @@ -108,18 +114,18 @@ export const KipperConfigScheme = { */ compiler: { type: "object", - required: true, + required: false, properties: { /** - * The target of the compiler. + * The target of the compiler. Defaults to "js". * @since 0.11.0 */ target: { type: "string", - required: true, + required: false, }, /** - * The version of the compiler. + * The version of the compiler. Defaults to "*" i.e. any version. * * Standard NPM-like versioning is used, i.e. the following rules apply: * - "1.2.3" will match only "1.2.3". @@ -131,7 +137,7 @@ export const KipperConfigScheme = { */ version: { type: "string", - required: true, + required: false, }, }, }, @@ -176,33 +182,48 @@ export class KipperConfigInterpreter extends ConfigInterpreter fileB -> * fileC -> ..."). This will usually not be needed by the user and is primarily used for internal purposes. */ async loadConfig( configFile: KipperConfigFile, envInfo: KipperConfigEnvInfo = { workDir: process.cwd() }, - parentFiles: string[] = [], + refChain: string[] = [], ): Promise { // Create the meta object which is used to provide more descriptive error messages (will be reused throughout the // whole analysis and processing of the config file) - const meta: ConfigErrorMetaData = { fileName: configFile.fileName, parentFiles }; + const meta: ConfigErrorMetaData = { fileName: configFile.fileName, refChain: refChain }; const rawConfig = configFile.parsedJSON; // Evaluate any "extends" fields in the config file - let extendedConfig: EvaluatedKipperConfigFile | undefined; + let extendedConfig: RawEvaluatedKipperConfigFile | undefined; + if (rawConfig.extends && typeof rawConfig.extends === "string") { - extendedConfig = await this.loadConfig( - await KipperConfigFile.fromFile(rawConfig.extends, configFile.encoding), - envInfo, - [...parentFiles, configFile.fileName], + rawConfig.extends = [rawConfig.extends]; + } + if (Array.isArray(rawConfig.extends)) { + const extensionParentFiles = [...refChain, configFile.fileName]; + const extendedConfigs = await Promise.all( + rawConfig.extends.map(async (extendFile) => (await this.loadConfig( + await KipperConfigFile.fromFile( + extendFile, + configFile.encoding, + { fileName: path.basename(extendFile), refChain: extensionParentFiles }, + ), + envInfo, + extensionParentFiles, + )).raw + ) ); + extendedConfig = deepmerge.all(extendedConfigs); } // Ensure that the config file is "on a basic level" valid (all required fields are present, etc.) - this.validateConfigBasedOffScheme(rawConfig, meta, extendedConfig?.raw); + // (We skip this if this file is included in another file, as we only want to make sure that the final file is + // valid) + this.validateConfigBasedOffScheme(rawConfig, meta, extendedConfig); const validatedConfigFile = rawConfig as KipperConfig; // Make "outDir" and "basePath" absolute and ensure that "basePath" exist, are directories and readable/writable @@ -235,21 +256,31 @@ export class KipperConfigInterpreter extends ConfigInterpreter { + private async validateCompilerVersion(providedVersion: string | undefined, meta: ConfigErrorMetaData): Promise { // First get the current version of the compiler - As every kipper package has to have the same version when used // together, we can simply import 'version' from index.ts const currentKipperVersion = kipperConfigVersion; // If '*' is provided, we'll simply resolve it to the currently installed version - if (providedVersion.trim() === "*") { + if (providedVersion === undefined || providedVersion.trim() === "*") { return semver.parse(semver.clean(currentKipperVersion))!; } // Validate the provided version - const cleanVersion = semver.clean(providedVersion); - if (!cleanVersion || !semver.valid(cleanVersion)) { + const cleanVersion = semver.validRange(providedVersion); + if (!cleanVersion) { throw new InvalidVersionSyntaxError(providedVersion, meta); } From 78a216be9fc55099fb1dc29ac46b1efaf5e0e36c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 14 Feb 2024 00:04:50 +0100 Subject: [PATCH 095/257] test (#508): Implemented proper tests for the @kipper/config functionality --- .../errors/incompatible-version.json | 15 ++++ .../errors/invalid-array-element-type.json | 15 ++++ test/config-files/errors/invalid-json.json | 1 + test/config-files/errors/invalid-mapping.json | 15 ++++ test/config-files/errors/invalid-type.json | 10 +++ .../errors/invalid-version-syntax.json | 15 ++++ .../errors/missing-required-field.json | 3 + test/config-files/errors/unknown-field.json | 16 ++++ test/config-files/kip-config.basic.json | 3 +- test/config-files/kip-config.extended.json | 16 ++++ test/config-files/kip-config.extension.json | 14 ++++ .../kip-config.sec-extension.json | 13 +++ .../config/kipper-config-file-interpreter.ts | 79 ++++++++++++++++++- 13 files changed, 210 insertions(+), 5 deletions(-) create mode 100644 test/config-files/errors/incompatible-version.json create mode 100644 test/config-files/errors/invalid-array-element-type.json create mode 100644 test/config-files/errors/invalid-json.json create mode 100644 test/config-files/errors/invalid-mapping.json create mode 100644 test/config-files/errors/invalid-type.json create mode 100644 test/config-files/errors/invalid-version-syntax.json create mode 100644 test/config-files/errors/missing-required-field.json create mode 100644 test/config-files/errors/unknown-field.json create mode 100644 test/config-files/kip-config.extended.json create mode 100644 test/config-files/kip-config.extension.json create mode 100644 test/config-files/kip-config.sec-extension.json diff --git a/test/config-files/errors/incompatible-version.json b/test/config-files/errors/incompatible-version.json new file mode 100644 index 000000000..0044bfd70 --- /dev/null +++ b/test/config-files/errors/incompatible-version.json @@ -0,0 +1,15 @@ +{ + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "version": ">=99.99.99", + "target": "ts" + }, + "files": [ + "test/kipper-files/main.kip" + ], + "resources": [ + "img/icon.png", + "img/Kipper-Logo-without-head.png:icon.png" + ] +} diff --git a/test/config-files/errors/invalid-array-element-type.json b/test/config-files/errors/invalid-array-element-type.json new file mode 100644 index 000000000..369a4097c --- /dev/null +++ b/test/config-files/errors/invalid-array-element-type.json @@ -0,0 +1,15 @@ +{ + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "version": "*", + "target": "ts" + }, + "files": [ + true + ], + "resources": [ + "img/icon.png", + "img/Kipper-Logo-without-head.png:icon.png" + ] +} diff --git a/test/config-files/errors/invalid-json.json b/test/config-files/errors/invalid-json.json new file mode 100644 index 000000000..7964fd5cf --- /dev/null +++ b/test/config-files/errors/invalid-json.json @@ -0,0 +1 @@ +This is invalid JSON diff --git a/test/config-files/errors/invalid-mapping.json b/test/config-files/errors/invalid-mapping.json new file mode 100644 index 000000000..219d1f544 --- /dev/null +++ b/test/config-files/errors/invalid-mapping.json @@ -0,0 +1,15 @@ +{ + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "version": "*", + "target": "ts" + }, + "files": [ + "test/kipper-files/main.kip" + ], + "resources": [ + "img/icon.png", + "img/Kipper-Logo-without-head.png::" + ] +} diff --git a/test/config-files/errors/invalid-type.json b/test/config-files/errors/invalid-type.json new file mode 100644 index 000000000..c4f89aa80 --- /dev/null +++ b/test/config-files/errors/invalid-type.json @@ -0,0 +1,10 @@ +{ + "outDir": true, + "srcDir": true, + "compiler": { + "version": true, + "target": true + }, + "files": true, + "resources": true +} diff --git a/test/config-files/errors/invalid-version-syntax.json b/test/config-files/errors/invalid-version-syntax.json new file mode 100644 index 000000000..3001d88fe --- /dev/null +++ b/test/config-files/errors/invalid-version-syntax.json @@ -0,0 +1,15 @@ +{ + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "version": "02xi2ka018ncx", + "target": "ts" + }, + "files": [ + "test/kipper-files/main.kip" + ], + "resources": [ + "img/icon.png", + "img/Kipper-Logo-without-head.png:icon.png" + ] +} diff --git a/test/config-files/errors/missing-required-field.json b/test/config-files/errors/missing-required-field.json new file mode 100644 index 000000000..0db3279e4 --- /dev/null +++ b/test/config-files/errors/missing-required-field.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/test/config-files/errors/unknown-field.json b/test/config-files/errors/unknown-field.json new file mode 100644 index 000000000..0d3cbeeba --- /dev/null +++ b/test/config-files/errors/unknown-field.json @@ -0,0 +1,16 @@ +{ + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "version": "*", + "target": "ts" + }, + "files": [ + "test/kipper-files/main.kip" + ], + "resources": [ + "img/icon.png", + "img/Kipper-Logo-without-head.png:icon.png" + ], + "i-am-new": true +} diff --git a/test/config-files/kip-config.basic.json b/test/config-files/kip-config.basic.json index 1ef8ec835..f781b70f5 100644 --- a/test/config-files/kip-config.basic.json +++ b/test/config-files/kip-config.basic.json @@ -9,6 +9,7 @@ "test/kipper-files/main.kip" ], "resources": [ - "img/icon.png" + "img/icon.png", + "img/Kipper-Logo-without-head.png:new-img-folder/icon.png" ] } diff --git a/test/config-files/kip-config.extended.json b/test/config-files/kip-config.extended.json new file mode 100644 index 000000000..438acb43a --- /dev/null +++ b/test/config-files/kip-config.extended.json @@ -0,0 +1,16 @@ +{ + "extends": "./test/config-files/kip-config.extension.json", + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "version": "*", + "target": "ts" + }, + "files": [ + "test/kipper-files/main.kip" + ], + "resources": [ + "img/icon.png", + "img/Kipper-Logo-without-head.png:new-img-folder/icon.png" + ] +} diff --git a/test/config-files/kip-config.extension.json b/test/config-files/kip-config.extension.json new file mode 100644 index 000000000..82c91ce6f --- /dev/null +++ b/test/config-files/kip-config.extension.json @@ -0,0 +1,14 @@ +{ + "extends": "./test/config-files/kip-config.sec-extension.json", + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "target": "js" + }, + "files": [ + "test/kipper-files/multi-function-call.kip" + ], + "resources": [ + "img/Kipper-Icon.png" + ] +} diff --git a/test/config-files/kip-config.sec-extension.json b/test/config-files/kip-config.sec-extension.json new file mode 100644 index 000000000..296d3ff36 --- /dev/null +++ b/test/config-files/kip-config.sec-extension.json @@ -0,0 +1,13 @@ +{ + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "target": "ext" + }, + "files": [ + "test/kipper-files/multi-function-definition.kip" + ], + "resources": [ + "img/Kipper-Logo-with-head.png" + ] +} diff --git a/test/module/config/kipper-config-file-interpreter.ts b/test/module/config/kipper-config-file-interpreter.ts index e2a04614e..df88e8989 100644 --- a/test/module/config/kipper-config-file-interpreter.ts +++ b/test/module/config/kipper-config-file-interpreter.ts @@ -1,15 +1,32 @@ import { getFileName } from "./utils/utils"; import { assert } from "chai"; -import { KipperConfigFile, KipperConfigInterpreter, version as kipConfigVersion } from "@kipper/config"; +import { + KipperConfigFile, + KipperConfigInterpreter, + version as kipConfigVersion +} from "@kipper/config"; import * as semver from "semver"; +import * as path from "node:path"; const basicKipConfig = getFileName("kip-config.basic.json"); +const extendsKipConfig = getFileName("kip-config.extended.json"); describe("KipperConfigInterpreter", () => { describe("loadConfig", () => { - describe("no extends", () => { - const interpreter = new KipperConfigInterpreter(); + const interpreter = new KipperConfigInterpreter(); + const errorTestCases =[ + { file: getFileName("errors/does-not-exist.json"), error: "FileNotFoundError" }, + { file: getFileName("errors/invalid-json.json"), error: "JSONSyntaxError" }, + { file: getFileName("errors/invalid-version-syntax.json"), error: "InvalidVersionSyntaxError" }, + { file: getFileName("errors/incompatible-version.json"), error: "IncompatibleVersionError" }, + { file: getFileName("errors/invalid-mapping.json"), error: "InvalidMappingSyntaxError" }, + { file: getFileName("errors/unknown-field.json"), error: "UnknownFieldError" }, + { file: getFileName("errors/missing-required-field.json"), error: "ConfigValidationError" }, + { file: getFileName("errors/invalid-type.json"), error: "ConfigValidationError" }, + { file: getFileName("errors/invalid-array-element-type.json"), error: "ConfigValidationError" }, + ]; + describe("no extends", () => { it("should load a basic config", async () => { const kipperConfigFile = await KipperConfigFile.fromFile(basicKipConfig, "utf8"); const config = await interpreter.loadConfig(kipperConfigFile); @@ -27,10 +44,64 @@ describe("KipperConfigInterpreter", () => { { src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` } ], resources: [ - { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` } + { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, + { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, ] }); }); + + errorTestCases.forEach(({ file, error }) => { + it(`should throw '${error}' if the file is '${path.basename(file)}'`, async () => { + try { + const kipperConfigFile = await KipperConfigFile.fromFile(file, "utf8"); + await interpreter.loadConfig(kipperConfigFile); + assert.fail("Expected an error to be thrown"); + } catch (err) { + assert.equal((err).constructor.name, error); + } + }); + }); + }); + + describe("with extends", () => { + it("should load a config with extends", async () => { + const kipperConfigFile = await KipperConfigFile.fromFile(extendsKipConfig, "utf8"); + const config = await interpreter.loadConfig(kipperConfigFile); + + const pwd = process.cwd(); + assert.deepEqual(config.raw, { + basePath: pwd, + srcDir: `${pwd}/test/kipper-files`, + outDir: `${pwd}/dist`, + compiler: { + version: semver.parse(semver.clean(kipConfigVersion))!, + target: "ts" + }, + files: [ + { src: `${pwd}/test/kipper-files/multi-function-definition.kip`, outDir: `${pwd}/dist` }, + { src: `${pwd}/test/kipper-files/multi-function-call.kip`, outDir: `${pwd}/dist` }, + { src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` }, + ], + resources: [ + { src: `${pwd}/img/Kipper-Logo-with-head.png`, out: `${pwd}/dist/img/Kipper-Logo-with-head.png` }, + { src: `${pwd}/img/Kipper-Icon.png`, out: `${pwd}/dist/img/Kipper-Icon.png` }, + { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, + { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, + ], + }); + }); + + errorTestCases.forEach(({ file, error }) => { + it(`should throw '${error}' if the file is '${path.basename(file)}'`, async () => { + try { + const kipperConfigFile = await KipperConfigFile.fromFile(file, "utf8"); + await interpreter.loadConfig(kipperConfigFile); + assert.fail("Expected an error to be thrown"); + } catch (err) { + assert.equal((err).constructor.name, error); + } + }); + }); }); }); }); From bf64d2ac7d5394c012255b200eb739e6ede702ca Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 14 Feb 2024 00:06:50 +0100 Subject: [PATCH 096/257] other: Prettified files --- kipper/config/README.md | 1 - .../config/src/abstract/config-interpreter.ts | 51 ++++++++++--------- kipper/config/src/kipper-config-file.ts | 2 +- .../config/src/kipper-config-interpreter.ts | 49 +++++++++--------- kipper/core/README.md | 1 - .../config/kipper-config-file-interpreter.ts | 18 +++---- 6 files changed, 58 insertions(+), 64 deletions(-) diff --git a/kipper/config/README.md b/kipper/config/README.md index cd5030340..e4405b0f8 100644 --- a/kipper/config/README.md +++ b/kipper/config/README.md @@ -19,7 +19,6 @@ straightforward, simple, secure and type-safe coding with better efficiency and It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 - _For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ diff --git a/kipper/config/src/abstract/config-interpreter.ts b/kipper/config/src/abstract/config-interpreter.ts index bc44f2125..2c4cb4da7 100644 --- a/kipper/config/src/abstract/config-interpreter.ts +++ b/kipper/config/src/abstract/config-interpreter.ts @@ -6,33 +6,34 @@ import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "../eval * A type that represents a configuration scheme definition. * @since 0.11.0 */ -export type ConfigInterpreterSchemeDefinition = { - type: "string" | "number" | "boolean"; - required: boolean; - // eslint-disable-next-line no-mixed-spaces-and-tabs - } +export type ConfigInterpreterSchemeDefinition = | { - type: "array"; - required: boolean; - itemType: "string" | "number" | "boolean"; - // eslint-disable-next-line no-mixed-spaces-and-tabs - } + type: "string" | "number" | "boolean"; + required: boolean; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } | { - type: "object"; - required: boolean; - properties: ConfigInterpreterScheme; - // eslint-disable-next-line no-mixed-spaces-and-tabs - } + type: "array"; + required: boolean; + itemType: "string" | "number" | "boolean"; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + | { + type: "object"; + required: boolean; + properties: ConfigInterpreterScheme; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } | { - type: "union"; - required: boolean; - possibilities: ( - { type: "string" | "number" | "boolean" } | - { type: "array"; itemType: "string" | "number" | "boolean" } | - { type: "object"; properties: ConfigInterpreterScheme } - )[] - // eslint-disable-next-line no-mixed-spaces-and-tabs - }; + type: "union"; + required: boolean; + possibilities: ( + | { type: "string" | "number" | "boolean" } + | { type: "array"; itemType: "string" | "number" | "boolean" } + | { type: "object"; properties: ConfigInterpreterScheme } + )[]; + // eslint-disable-next-line no-mixed-spaces-and-tabs + }; /** * A type that represents a configuration scheme. @@ -150,7 +151,7 @@ export abstract class ConfigInterpreter (await this.loadConfig( - await KipperConfigFile.fromFile( - extendFile, - configFile.encoding, - { fileName: path.basename(extendFile), refChain: extensionParentFiles }, - ), - envInfo, - extensionParentFiles, - )).raw - ) + rawConfig.extends.map( + async (extendFile) => + ( + await this.loadConfig( + await KipperConfigFile.fromFile(extendFile, configFile.encoding, { + fileName: path.basename(extendFile), + refChain: extensionParentFiles, + }), + envInfo, + extensionParentFiles, + ) + ).raw, + ), ); extendedConfig = deepmerge.all(extendedConfigs); } @@ -261,7 +262,7 @@ export class KipperConfigInterpreter extends ConfigInterpreter { + private async validateCompilerVersion( + providedVersion: string | undefined, + meta: ConfigErrorMetaData, + ): Promise { // First get the current version of the compiler - As every kipper package has to have the same version when used // together, we can simply import 'version' from index.ts const currentKipperVersion = kipperConfigVersion; diff --git a/kipper/core/README.md b/kipper/core/README.md index 42dd6c9f1..25a4e4a46 100644 --- a/kipper/core/README.md +++ b/kipper/core/README.md @@ -18,7 +18,6 @@ straightforward, simple, secure and type-safe coding with better efficiency and It compiles to both JavaScript and TypeScript, and can be set up in your terminal, Node.js or ES6+ browser. 🦊💻 - _For more details, you can read more about this project on the [project repository](https://github.com/Kipper-Lang/Kipper) and the [Kipper website](https://kipper-lang.org)._ diff --git a/test/module/config/kipper-config-file-interpreter.ts b/test/module/config/kipper-config-file-interpreter.ts index df88e8989..dea4c8d8b 100644 --- a/test/module/config/kipper-config-file-interpreter.ts +++ b/test/module/config/kipper-config-file-interpreter.ts @@ -1,10 +1,6 @@ import { getFileName } from "./utils/utils"; import { assert } from "chai"; -import { - KipperConfigFile, - KipperConfigInterpreter, - version as kipConfigVersion -} from "@kipper/config"; +import { KipperConfigFile, KipperConfigInterpreter, version as kipConfigVersion } from "@kipper/config"; import * as semver from "semver"; import * as path from "node:path"; @@ -14,7 +10,7 @@ const extendsKipConfig = getFileName("kip-config.extended.json"); describe("KipperConfigInterpreter", () => { describe("loadConfig", () => { const interpreter = new KipperConfigInterpreter(); - const errorTestCases =[ + const errorTestCases = [ { file: getFileName("errors/does-not-exist.json"), error: "FileNotFoundError" }, { file: getFileName("errors/invalid-json.json"), error: "JSONSyntaxError" }, { file: getFileName("errors/invalid-version-syntax.json"), error: "InvalidVersionSyntaxError" }, @@ -38,15 +34,13 @@ describe("KipperConfigInterpreter", () => { outDir: `${pwd}/dist`, compiler: { version: semver.parse(semver.clean(kipConfigVersion))!, - target: "ts" + target: "ts", }, - files: [ - { src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` } - ], + files: [{ src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` }], resources: [ { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, - ] + ], }); }); @@ -75,7 +69,7 @@ describe("KipperConfigInterpreter", () => { outDir: `${pwd}/dist`, compiler: { version: semver.parse(semver.clean(kipConfigVersion))!, - target: "ts" + target: "ts", }, files: [ { src: `${pwd}/test/kipper-files/multi-function-definition.kip`, outDir: `${pwd}/dist` }, From fd78fd8175097e3f649c33025ab6bb2351a8df39 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 14 Feb 2024 00:07:13 +0100 Subject: [PATCH 097/257] other: Fixed pnpm-lock.yaml --- kipper/config/pnpm-lock.yaml | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index ee21910a8..bb3e6638f 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -22,12 +22,6 @@ devDependencies: '@kipper/cli': specifier: workspace:~ version: link:../cli - '@types/deepmerge': - specifier: 2.2.0 - version: 2.2.0 - '@types/is-plain-object': - specifier: 2.0.4 - version: 2.0.4 '@types/semver': specifier: 7.5.7 version: 7.5.7 @@ -37,20 +31,6 @@ devDependencies: packages: - /@types/deepmerge@2.2.0: - resolution: {integrity: sha512-FEQYDHh6+Q+QXKSrIY46m+/lAmAj/bk4KpLaam+hArmzaVpMBHLcfwOH2Q2UOkWM7XsdY9PmZpGyPAjh/JRGhQ==} - deprecated: This is a stub types definition. deepmerge provides its own type definitions, so you do not need this installed. - dependencies: - deepmerge: 4.3.1 - dev: true - - /@types/is-plain-object@2.0.4: - resolution: {integrity: sha512-najbe//S/ThT7nEh+iLmXNUFMWQHf7x2QUrsMgtF/apA8dJl8rCsfWr9f8XG9nBo+NyT5TbT92IFIJji9ZmsRQ==} - deprecated: This is a stub types definition for is-plain-object (https://github.com/jonschlinkert/is-plain-object). is-plain-object provides its own type definitions, so you don't need @types/is-plain-object installed! - dependencies: - is-plain-object: 5.0.0 - dev: true - /@types/semver@7.5.7: resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} dev: true @@ -58,10 +38,12 @@ packages: /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + dev: false /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + dev: false /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} From 7e331ba9b314e37b6c98c5d291db02a9164a06e8 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 14 Feb 2024 18:44:34 +0100 Subject: [PATCH 098/257] major (#508): Implemented project setup-wizard for the @kipper/cli --- kipper/cli/.gitignore | 76 ------- kipper/cli/package.json | 15 +- kipper/cli/pnpm-lock.yaml | 150 +++++++++++++ kipper/cli/src/commands/new.ts | 198 ++++++++++++++++++ kipper/cli/src/prompt-module.ts | 65 ++++++ kipper/cli/src/templates/.gitignore.template | 130 ++++++++++++ .../src/templates/kip-config.json.template | 12 ++ kipper/cli/src/templates/main.kip.template | 12 ++ .../cli/src/templates/package.json.template | 19 ++ kipper/cli/tsconfig.json | 7 +- kipper/config/package.json | 3 +- kipper/config/pnpm-lock.yaml | 3 - kipper/config/src/abstract/config-file.ts | 5 +- kipper/config/src/kipper-config-file.ts | 11 +- 14 files changed, 612 insertions(+), 94 deletions(-) create mode 100644 kipper/cli/src/commands/new.ts create mode 100644 kipper/cli/src/prompt-module.ts create mode 100644 kipper/cli/src/templates/.gitignore.template create mode 100644 kipper/cli/src/templates/kip-config.json.template create mode 100644 kipper/cli/src/templates/main.kip.template create mode 100644 kipper/cli/src/templates/package.json.template diff --git a/kipper/cli/.gitignore b/kipper/cli/.gitignore index 15eaa79e7..e69de29bb 100644 --- a/kipper/cli/.gitignore +++ b/kipper/cli/.gitignore @@ -1,76 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# oclif .gitignore ttttt -*-debug.log -*-error.log -/.nyc_output -/lib -/tmp -/yarn.lock -node_modules - -# Runtime data -pids -*.pid -*.seed -*.pid.lock -gen/ - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc __tests__ coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript controller_v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# Transpiled JavaScript files from Typescript -/dist - -# Cache used by TypeScript's incremental build -*.tsbuildinfo - -*.idea diff --git a/kipper/cli/package.json b/kipper/cli/package.json index c2739361d..c3adc0f7b 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -7,6 +7,7 @@ "kipper": "./bin/run" }, "dependencies": { + "@kipper/config": "workspace:~", "@kipper/core": "workspace:~", "@kipper/target-js": "workspace:~", "@kipper/target-ts": "workspace:~", @@ -17,11 +18,14 @@ "@oclif/errors": "1.3.6", "@oclif/plugin-warn-if-update-available": "2.0.37", "tslib": "~2.6.2", - "tslog": "3.3.4" + "tslog": "3.3.4", + "chalk": "4.1.2", + "inquirer": "7.3.3" }, "devDependencies": { "@types/node": "18.16.16", "@types/sinon": "10.0.15", + "@types/inquirer": "7.3.3", "typescript": "5.1.3", "prettier": "2.8.8" }, @@ -74,8 +78,15 @@ "lint": "pnpm run tslint && pnpm run prettier", "lint:fix": "pnpm run tslint:fix && pnpm run prettier", "build": "tsc", + "postbuild": "cp -r ./src/templates ./lib/templates", "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix", - "start": "node ./bin/run" + "start": "node ./bin/run", + "start:analyse": "node ./bin/run analyse", + "start:compile": "node ./bin/run compile", + "start:help": "node ./bin/run help", + "start:new": "node ./bin/run new", + "start:run": "node ./bin/run run", + "start:version": "node ./bin/run version" } } diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index abf614cda..026528190 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@kipper/config': + specifier: workspace:~ + version: link:../config '@kipper/core': specifier: workspace:~ version: link:../core @@ -32,6 +35,12 @@ dependencies: '@oclif/plugin-warn-if-update-available': specifier: 2.0.37 version: 2.0.37(@types/node@18.16.16)(typescript@5.1.3) + chalk: + specifier: 4.1.2 + version: 4.1.2 + inquirer: + specifier: 7.3.3 + version: 7.3.3 tslib: specifier: ~2.6.2 version: 2.6.2 @@ -40,6 +49,9 @@ dependencies: version: 3.3.4 devDependencies: + '@types/inquirer': + specifier: 7.3.3 + version: 7.3.3 '@types/node': specifier: 18.16.16 version: 18.16.16 @@ -336,6 +348,13 @@ packages: '@types/node': 18.16.16 dev: false + /@types/inquirer@7.3.3: + resolution: {integrity: sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==} + dependencies: + '@types/through': 0.0.33 + rxjs: 6.6.7 + dev: true + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} @@ -349,6 +368,12 @@ packages: resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} dev: true + /@types/through@0.0.33: + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + dependencies: + '@types/node': 18.16.16 + dev: true + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} @@ -454,6 +479,10 @@ packages: supports-color: 7.2.0 dev: false + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: false + /clean-stack@3.0.1: resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} engines: {node: '>=10'} @@ -461,6 +490,13 @@ packages: escape-string-regexp: 4.0.0 dev: false + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: false + /cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} @@ -468,6 +504,11 @@ packages: string-width: 4.2.3 dev: false + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: false + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -545,6 +586,11 @@ packages: is-arrayish: 0.2.1 dev: false + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: false + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -555,6 +601,15 @@ packages: engines: {node: '>=4'} dev: false + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: false + /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} engines: {node: '>=8.6.0'} @@ -572,6 +627,13 @@ packages: reusify: 1.0.4 dev: false + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: false + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -656,6 +718,13 @@ packages: engines: {node: '>=4'} dev: false + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} @@ -666,6 +735,25 @@ packages: engines: {node: '>=8'} dev: false + /inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + dev: false + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false @@ -781,6 +869,11 @@ packages: picomatch: 2.3.1 dev: false + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -798,6 +891,10 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: false + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: false + /natural-orderby@2.0.3: resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} dev: false @@ -811,6 +908,18 @@ packages: engines: {node: '>= 10'} dev: false + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: false + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: false + /parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -857,21 +966,44 @@ packages: esprima: 4.0.1 dev: false + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: false + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: false + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: false + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} dev: false @@ -902,6 +1034,10 @@ packages: engines: {node: '>=0.10.0'} dev: false + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -961,6 +1097,17 @@ packages: supports-color: 7.2.0 dev: false + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: false + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: false + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -999,6 +1146,9 @@ packages: yn: 3.1.1 dev: false + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false diff --git a/kipper/cli/src/commands/new.ts b/kipper/cli/src/commands/new.ts new file mode 100644 index 000000000..c15e265b7 --- /dev/null +++ b/kipper/cli/src/commands/new.ts @@ -0,0 +1,198 @@ +/** + * 'new' command for generating a new Kipper project. + * @since 0.11.0 + */ +import type { args } from "@oclif/parser"; +import { Command, flags } from "@oclif/command"; +import { prettifiedErrors } from "../decorators"; +import { PromptModule } from "../prompt-module"; +import { version } from ".."; +import * as path from "node:path"; +import * as fs from "node:fs/promises"; +import chalk from "chalk"; + +const templates = { + kipConfig: path.resolve(`${__dirname}/../templates/kip-config.json.template`), + mainFile: path.resolve(`${__dirname}/../templates/main.kip.template`), + gitignore: path.resolve(`${__dirname}/../templates/.gitignore.template`), + packageJson: path.resolve(`${__dirname}/../templates/package.json.template`), +}; + +export default class New extends Command { + static override description: string = "Generate a new Kipper using a setup wizard. (Node-only for now)"; + + // TODO! Add examples when the command moves out of development + static override examples: Array = []; + + static override args: args.Input = [ + { + name: "location", + required: false, + default: process.cwd(), + description: "The directory where the new project should be created. Defaults to the current directory.", + }, + ]; + + static override flags: flags.Input = { + default: flags.boolean({ + char: "d", + default: false, + description: "Use the default settings for the new project. Skips the setup wizard.", + }), + }; + + /** + * Gets the configuration for the invocation of this command. + * @private + */ + private async getRunConfig() { + const { args, flags } = this.parse(New); + + return { + args, + flags, + }; + } + + private async fileExists(filePath: string): Promise { + return !!(await fs.stat(filePath).catch(() => false)); + } + + private async genKipConfig(rootDir: string, config: {target: string}): Promise { + const kipConfig = await fs.readFile(templates.kipConfig, { encoding: "utf8" }); + const kipConfigPath = path.join( + rootDir, + path + .basename(templates.kipConfig) + .replace(".template", "") + ); + await fs.writeFile( + kipConfigPath, + kipConfig + .replace("", config.target) + .replace("", `^${version}`) + ); + } + + private async genMainFile(rootDir: string): Promise { + const mainFile = await fs.readFile(templates.mainFile, { encoding: "utf8" }); + const mainFilePath = path.join( + rootDir, + "src", + path + .basename(templates.mainFile) + .replace(".template", "") + ); + await fs.writeFile(mainFilePath, mainFile); + } + + private async genGitignore(rootDir: string): Promise { + const gitignore = await fs.readFile(templates.gitignore, { encoding: "utf8" }); + const gitignorePath = path.join( + rootDir, + path + .basename(templates.gitignore) + .replace(".template", "") + ); + await fs.writeFile(gitignorePath, gitignore); + } + + private async genPackageJson( + rootDir: string, + config: { + name: string, + description: string, + version: string, + license: string, + author: string, + repo: string | undefined, + } + ): Promise { + const packageJson = await fs.readFile(templates.packageJson, { encoding: "utf8" }); + const packageJsonPath = path.join( + rootDir, + path + .basename(templates.packageJson) + .replace(".template", "") + ); + await fs.writeFile( + packageJsonPath, + packageJson + .replace("", config.name) + .replace("", config.description) + .replace("", config.version) + .replace("", config.author) + .replace("", config.license) + .replace( + "", + config.repo ? ` "repository": {\n "type": "git",\n "url": "${config.repo}"\n },` : "" + ) + .replace("", `^${version}`) + ); + } + @prettifiedErrors() + public async run() { + const { args, flags } = await this.getRunConfig(); + const rootDir = args.location; + const promptModule = await PromptModule.create(); + + // For the setup wizard we will ask the following questions + // - What is the name of the project? + // - What is the description of the project? + // - What is the version of the project? (defaults to 1.0.0) + // - What is the license of the project? (defaults to MIT) + // - What is the author of the project? + // - What is the repo for the project? (Defaults to none) + // - What is the compilation target? (Defaults to js) + // Afterwards, we will generate a new Kipper main file in 'src/', generate a new kip-config.json file in the given + // location, a new package.json and a new .gitignore. + + // Initialize variables for user input + let projectName: string = "new-kipper-project"; + let projectDescription: string = "A new Kipper project"; + let projectVersion: string = "1.0.0"; + let projectLicense: string = "MIT"; + let projectAuthor: string = "Anonymous"; + let projectRepo: string | undefined = undefined; + let projectTarget: string = "js"; + + // Skip setup wizard if default settings are used + if (flags.default) { + this.log(chalk.yellow("Using default settings. Skipping setup wizard.")); + } else { + projectName = await promptModule.prompt("What is the name of your project?"); + projectDescription = await promptModule.prompt("Describe your project briefly:"); + projectVersion = await promptModule.prompt("Enter project version (default: 1.0.0):", projectVersion); + projectLicense = await promptModule.prompt("Choose project license (default: MIT):", projectLicense); + projectAuthor = await promptModule.prompt("Enter your name or organization:"); + projectRepo = await promptModule.confirm("Would you like to link a project repository?") + ? await promptModule.prompt("Enter the repository URL:") + : undefined; + projectTarget = await promptModule.choice("Choose compilation target (default: js):", ["js", "ts"], "js"); + } + + // Create the project and source directories if they don't exist + if (!(await this.fileExists(rootDir))) { + await fs.mkdir(rootDir, { recursive: true }); + } + const srcDir = path.join(rootDir, "src"); + if (!(await this.fileExists(srcDir))) { + await fs.mkdir(srcDir, { recursive: true }); + } + + // Create the project files + await this.genKipConfig(rootDir, {target: projectTarget}); + await this.genMainFile(rootDir); + await this.genGitignore(rootDir); + await this.genPackageJson(rootDir, { + name: projectName, + description: projectDescription, + version: projectVersion, + license: projectLicense, + author: projectAuthor, + repo: projectRepo, + }); + + this.log(chalk.green(`\nProject '${projectName}' created successfully!`)); + } +} diff --git a/kipper/cli/src/prompt-module.ts b/kipper/cli/src/prompt-module.ts new file mode 100644 index 000000000..c4f731d0d --- /dev/null +++ b/kipper/cli/src/prompt-module.ts @@ -0,0 +1,65 @@ +import { PromptModule as InquirerPromptModule } from "inquirer"; +import chalk from "chalk"; +import inquirer from "inquirer"; + +/** + * A wrapper around the inquirer prompt module to make it easier to use. + * + * This class is used to prompt the user for input. + * @since 0.11.0 + */ +export class PromptModule { + private readonly promptModule: InquirerPromptModule; + + private constructor(promptModule: InquirerPromptModule) { + this.promptModule = promptModule; + } + + static async create() { + const promptModule = inquirer.createPromptModule(); + return new PromptModule(promptModule); + } + + public async prompt(question: string, defaultValue?: string): Promise { + const prefix = chalk.cyan("~ "); + const answer = await this.promptModule([ + { + type: "input", + name: "answer", + message: `${prefix}${question}`, + default: defaultValue, + }, + ]); + + return answer.answer; + } + + public async confirm(question: string): Promise { + const prefix = chalk.cyan("~ "); + const answer = await this.promptModule([ + { + type: "confirm", + name: "answer", + message: `${prefix}${question}`, + default: false, + }, + ]); + + return answer.answer; + } + + public async choice(question: string, possibilities: string[], defaultValue: string) { + const prefix = chalk.cyan("~ "); + const answer = await this.promptModule([ + { + type: "list", + name: "answer", + message: `${prefix}${question}`, + choices: possibilities, + default: defaultValue, + }, + ]); + + return answer.answer; + } +} diff --git a/kipper/cli/src/templates/.gitignore.template b/kipper/cli/src/templates/.gitignore.template new file mode 100644 index 000000000..c6bba5913 --- /dev/null +++ b/kipper/cli/src/templates/.gitignore.template @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/kipper/cli/src/templates/kip-config.json.template b/kipper/cli/src/templates/kip-config.json.template new file mode 100644 index 000000000..6e112a982 --- /dev/null +++ b/kipper/cli/src/templates/kip-config.json.template @@ -0,0 +1,12 @@ +{ + "outDir": "build", + "srcDir": "src", + "compiler": { + "version": "", + "target": "" + }, + "files": [ + "./src/main.kip" + ], + "resources": [] +} diff --git a/kipper/cli/src/templates/main.kip.template b/kipper/cli/src/templates/main.kip.template new file mode 100644 index 000000000..8fcd87080 --- /dev/null +++ b/kipper/cli/src/templates/main.kip.template @@ -0,0 +1,12 @@ +/** + * This is the source file of your program. Here all the logic will be written and then executed during runtime. + * + * Visit our quickstart guide to learn more about the language and how to use it: + * https://kipper-lang.org/docs/quickstart + */ + +def main() -> void { + print("Hello world!"); +} + +main(); diff --git a/kipper/cli/src/templates/package.json.template b/kipper/cli/src/templates/package.json.template new file mode 100644 index 000000000..352e17c5b --- /dev/null +++ b/kipper/cli/src/templates/package.json.template @@ -0,0 +1,19 @@ +{ + "name": "", + "description": "", + "version": "", + "scripts": { + "run": "kipper run ./src/main.kip", + "build": "kipper compile" + }, + "dependencies": { + "@kipper/cli": "" + }, + + "keywords": [ + "kipper" + ], + "author": "", + "license": "", + "homepage": "" +} diff --git a/kipper/cli/tsconfig.json b/kipper/cli/tsconfig.json index 048c3fce2..61d30d1c3 100644 --- a/kipper/cli/tsconfig.json +++ b/kipper/cli/tsconfig.json @@ -3,12 +3,15 @@ "compilerOptions": { "outDir": "./lib", "rootDir": "./src", - "target": "es2016", + "target": "es2020", + "module": "CommonJS", + "moduleResolution": "node16", "noImplicitOverride": false, "experimentalDecorators": true, + "esModuleInterop": true, "skipLibCheck": true, "lib": [ - "ES7" // ES7 -> ES2016 + "ES2020" ] }, "include": [ diff --git a/kipper/config/package.json b/kipper/config/package.json index 197cd5356..b8e08908c 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -4,14 +4,13 @@ "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { - "deepmerge": "4.3.1", "is-plain-object": "5.0.0", + "deepmerge": "4.3.1", "semver": "7.6.0", "tslib": "~2.6.2" }, "devDependencies": { "@types/semver": "7.5.7", - "@kipper/cli": "workspace:~", "typescript": "5.1.3" }, "engines": { diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index bb3e6638f..cc474b04f 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -19,9 +19,6 @@ dependencies: version: 2.6.2 devDependencies: - '@kipper/cli': - specifier: workspace:~ - version: link:../cli '@types/semver': specifier: 7.5.7 version: 7.5.7 diff --git a/kipper/config/src/abstract/config-file.ts b/kipper/config/src/abstract/config-file.ts index fafda3043..1096a63e3 100644 --- a/kipper/config/src/abstract/config-file.ts +++ b/kipper/config/src/abstract/config-file.ts @@ -1,4 +1,3 @@ -import type { KipperEncoding } from "@kipper/cli"; import { ConfigErrorMetaData, JSONSyntaxError } from "../errors"; /** @@ -9,9 +8,9 @@ export abstract class ConfigFile { public readonly content: string; public readonly parsedJSON: { [key: string]: any }; public readonly fileName: string; - public readonly encoding: KipperEncoding; + public readonly encoding: BufferEncoding; - protected constructor(content: string, fileName: string, encoding: KipperEncoding, meta?: ConfigErrorMetaData) { + protected constructor(content: string, fileName: string, encoding: BufferEncoding, meta?: ConfigErrorMetaData) { this.content = content; this.fileName = fileName; this.encoding = encoding; diff --git a/kipper/config/src/kipper-config-file.ts b/kipper/config/src/kipper-config-file.ts index 17bf05d0a..b628f8ca0 100644 --- a/kipper/config/src/kipper-config-file.ts +++ b/kipper/config/src/kipper-config-file.ts @@ -1,5 +1,4 @@ -import type { KipperEncoding } from "@kipper/cli"; -import { ConfigFile } from "./abstract/config-file"; +import { ConfigFile } from "./abstract"; import * as path from "node:path"; import * as fs from "node:fs/promises"; import { ensureExistsHasPermAndIsOfType } from "./tools"; @@ -13,7 +12,7 @@ export class KipperConfigFile extends ConfigFile { protected constructor( content: string, fileName: string = "", - encoding: KipperEncoding = "utf8", + encoding: BufferEncoding = "utf8", meta?: ConfigErrorMetaData, ) { super(content, fileName, encoding, meta); @@ -26,7 +25,7 @@ export class KipperConfigFile extends ConfigFile { * {@link encoding} is always assumed to be the internal encoding of the JavaScript environment i.e. UTF-16 (utf16le). * @since 0.11.0 */ - static fromString(content: string, encoding: KipperEncoding = "utf16le"): KipperConfigFile { + static fromString(content: string, encoding: BufferEncoding = "utf16le"): KipperConfigFile { return new KipperConfigFile(content, "", encoding); } @@ -38,10 +37,10 @@ export class KipperConfigFile extends ConfigFile { * need to be provided when manually creating a KipperConfigFile. * @since 0.11.0 */ - static async fromFile(file: string, encoding: KipperEncoding, meta?: ConfigErrorMetaData): Promise { + static async fromFile(file: string, encoding: BufferEncoding, meta?: ConfigErrorMetaData): Promise { await ensureExistsHasPermAndIsOfType(file, "r", "file", meta); - const fileContent = await fs.readFile(file, { encoding }); + const fileContent = await fs.readFile(file, encoding); const fileName = path.basename(file); return new KipperConfigFile(fileContent, fileName, encoding, meta); } From b75b14e543a53e9055ed613a169a2642a5487646 Mon Sep 17 00:00:00 2001 From: luna Date: Wed, 28 Feb 2024 15:22:31 +0100 Subject: [PATCH 099/257] major (#508): Implemented auto-loading for the kipper config in the CLI --- kipper/cli/package.json | 1 + kipper/cli/pnpm-lock.yaml | 10 +- kipper/cli/src/commands/analyse.ts | 6 +- kipper/cli/src/commands/compile.ts | 65 +- kipper/cli/src/commands/new.ts | 56 +- kipper/cli/src/commands/run.ts | 111 +- kipper/cli/src/config-loader.ts | 66 + kipper/cli/src/copy-resources.ts | 21 + kipper/cli/src/decorators.ts | 6 +- kipper/cli/src/errors.ts | 10 + kipper/cli/src/index.ts | 2 +- kipper/cli/src/input/file-stream.ts | 26 +- kipper/cli/src/output/compile.ts | 18 +- .../cli/src/templates/package.json.template | 3 +- kipper/config/package.json | 2 +- .../config/src/abstract/config-interpreter.ts | 2 +- kipper/config/src/errors.ts | 12 +- .../src/evaluated-kipper-config-file.ts | 15 +- .../config/src/kipper-config-interpreter.ts | 27 +- package.json | 36 +- pnpm-lock.yaml | 1297 +++++++++-------- 21 files changed, 986 insertions(+), 806 deletions(-) create mode 100644 kipper/cli/src/config-loader.ts create mode 100644 kipper/cli/src/copy-resources.ts diff --git a/kipper/cli/package.json b/kipper/cli/package.json index c3adc0f7b..5a885ffaf 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -19,6 +19,7 @@ "@oclif/plugin-warn-if-update-available": "2.0.37", "tslib": "~2.6.2", "tslog": "3.3.4", + "ts-node": "10.9.2", "chalk": "4.1.2", "inquirer": "7.3.3" }, diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 026528190..f23e7c806 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -41,6 +41,9 @@ dependencies: inquirer: specifier: 7.3.3 version: 7.3.3 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@types/node@18.16.16)(typescript@5.1.3) tslib: specifier: ~2.6.2 version: 2.6.2 @@ -213,7 +216,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.2.0 - ts-node: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.1.3) tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -382,6 +385,7 @@ packages: /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} + hasBin: true dev: false /ansi-escapes@3.2.0: @@ -1115,8 +1119,8 @@ packages: is-number: 7.0.0 dev: false - /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@18.16.16)(typescript@5.1.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' diff --git a/kipper/cli/src/commands/analyse.ts b/kipper/cli/src/commands/analyse.ts index 0b833ad0c..94dfaa0d4 100644 --- a/kipper/cli/src/commands/analyse.ts +++ b/kipper/cli/src/commands/analyse.ts @@ -8,6 +8,7 @@ import { KipperCompiler, KipperLogger, KipperParseStream, LogLevel } from "@kipp import { CLIEmitHandler } from "../logger"; import { getParseStream, KipperEncodings, verifyEncoding } from "../input/"; import { prettifiedErrors } from "../decorators"; +import { loadAutoConfig } from "../config-loader"; export default class Analyse extends Command { static override description: string = "Analyse a Kipper file and validate its syntax and semantic integrity."; @@ -49,8 +50,11 @@ export default class Analyse extends Command { private async getRunConfig() { const { args, flags } = this.parse(Analyse); + // Load the pre-existing configuration + const preExistingConfig = await loadAutoConfig(); + // Compilation-required - const stream: KipperParseStream = await getParseStream(args, flags); + const { stream } = await getParseStream(args, flags, preExistingConfig); return { args, diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index b5f79ff6b..08fb0f102 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -14,13 +14,15 @@ import { KipperCompileTarget, KipperError, KipperLogger, - KipperParseStream, LogLevel, } from "@kipper/core"; import { CLIEmitHandler, defaultKipperLoggerConfig } from "../logger"; -import { getParseStream, getTarget, KipperEncoding, KipperEncodings, verifyEncoding } from "../input/"; +import { getParseStream, getTarget, KipperEncoding, KipperEncodings, KipperParseFile, verifyEncoding } from "../input/"; import { writeCompilationResult } from "../output"; import { prettifiedErrors } from "../decorators"; +import { loadAutoConfig } from "../config-loader"; +import { copyConfigResources } from "../copy-resources"; +import path from "node:path"; export default class Compile extends Command { static override description: string = "Compile a Kipper program into the specified target language."; @@ -32,7 +34,8 @@ export default class Compile extends Command { { name: "file", required: false, - description: "The file that should be compiled.", + description: + "The file that should be compiled. Takes precedence over the 'string-code' flag and the config file.", }, ]; @@ -51,13 +54,13 @@ export default class Compile extends Command { }), "output-dir": flags.string({ char: "o", - default: "build", description: - "The build directory where the compiled files should be placed. If the path does not exist, it will be created.", + "The build directory where the compiled files should be placed. If the path does not exist, it will be created. Takes precedence over the config file, defaults to 'build' if both are not provided", }), "string-code": flags.string({ char: "s", - description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter.", + description: + "The content of a Kipper file that can be passed as a replacement for the 'file' parameter. Takes precedence over the config file.", }), "optimise-internals": flags.boolean({ char: "i", @@ -103,12 +106,22 @@ export default class Compile extends Command { * Gets the configuration for the invocation of this command. * @private */ - private async getRunConfig() { + protected async getRunConfig() { const { args, flags } = this.parse(Compile); + // Load the pre-existing configuration + const preExistingConfig = await loadAutoConfig(); + const preExistingCompileConfig = preExistingConfig?.genCompilerConfig(); + // Compilation-required - const stream: KipperParseStream = await getParseStream(args, flags); - const target: KipperCompileTarget = await getTarget(flags["target"]); + const { stream, outDir } = await getParseStream(args, flags, preExistingConfig); + const target: KipperCompileTarget = preExistingCompileConfig?.target ?? getTarget(flags["target"]); + + // Output + const encoding = flags["encoding"] as KipperEncoding; + const outPath = `${path.resolve(outDir)}/${stream instanceof KipperParseFile ? stream.path.name : stream.name}.${ + target.fileExtension + }`; return { args, @@ -116,23 +129,31 @@ export default class Compile extends Command { config: { stream, target, + outDir, + outPath, + encoding, + resources: preExistingConfig?.resources ?? [], compilerOptions: { + ...preExistingCompileConfig, target: target, optimisationOptions: { - optimiseInternals: flags["optimise-internals"], - optimiseBuiltIns: flags["optimise-builtins"], + optimiseInternals: + preExistingCompileConfig?.optimisationOptions?.optimiseInternals ?? flags["optimise-internals"], + optimiseBuiltIns: + preExistingCompileConfig?.optimisationOptions?.optimiseBuiltIns ?? flags["optimise-builtins"], }, - recover: flags["recover"], - abortOnFirstError: flags["abort-on-first-error"], + recover: preExistingCompileConfig?.recover ?? flags["recover"], + abortOnFirstError: preExistingCompileConfig?.abortOnFirstError ?? flags["abort-on-first-error"], } as CompileConfig, }, }; } @prettifiedErrors() - public async run() { + public async run(logger?: KipperLogger) { const { flags, config } = await this.getRunConfig(); - const logger = new KipperLogger(CLIEmitHandler.emit, LogLevel.INFO, flags["warnings"]); + + logger = logger ?? new KipperLogger(CLIEmitHandler.emit, LogLevel.INFO, flags["warnings"]); const compiler = new KipperCompiler(logger); // If 'log-timestamp' is set, set the logger to use the timestamp @@ -162,15 +183,15 @@ export default class Compile extends Command { } // Write the file output for this compilation - const out = await writeCompilationResult( - result, - config.stream, - flags["output-dir"], - config.target, - flags["encoding"] as KipperEncoding, - ); + const out = await writeCompilationResult(result, config.outDir, config.outPath, config.encoding); logger.debug(`Generated file '${out}'.`); + // Copy resources if they exist + if (config.resources) { + await copyConfigResources(config.resources); + logger.debug(`Finished copying resources specified in config.`); + } + // Finished! const duration: number = (new Date().getTime() - startTime) / 1000; logger.info(`Done in ${duration}s.`); diff --git a/kipper/cli/src/commands/new.ts b/kipper/cli/src/commands/new.ts index c15e265b7..ff47d6f95 100644 --- a/kipper/cli/src/commands/new.ts +++ b/kipper/cli/src/commands/new.ts @@ -58,63 +58,40 @@ export default class New extends Command { return !!(await fs.stat(filePath).catch(() => false)); } - private async genKipConfig(rootDir: string, config: {target: string}): Promise { + private async genKipConfig(rootDir: string, config: { target: string }): Promise { const kipConfig = await fs.readFile(templates.kipConfig, { encoding: "utf8" }); - const kipConfigPath = path.join( - rootDir, - path - .basename(templates.kipConfig) - .replace(".template", "") - ); + const kipConfigPath = path.join(rootDir, path.basename(templates.kipConfig).replace(".template", "")); await fs.writeFile( kipConfigPath, - kipConfig - .replace("", config.target) - .replace("", `^${version}`) + kipConfig.replace("", config.target).replace("", `^${version}`), ); } private async genMainFile(rootDir: string): Promise { const mainFile = await fs.readFile(templates.mainFile, { encoding: "utf8" }); - const mainFilePath = path.join( - rootDir, - "src", - path - .basename(templates.mainFile) - .replace(".template", "") - ); + const mainFilePath = path.join(rootDir, "src", path.basename(templates.mainFile).replace(".template", "")); await fs.writeFile(mainFilePath, mainFile); } private async genGitignore(rootDir: string): Promise { const gitignore = await fs.readFile(templates.gitignore, { encoding: "utf8" }); - const gitignorePath = path.join( - rootDir, - path - .basename(templates.gitignore) - .replace(".template", "") - ); + const gitignorePath = path.join(rootDir, path.basename(templates.gitignore).replace(".template", "")); await fs.writeFile(gitignorePath, gitignore); } private async genPackageJson( rootDir: string, config: { - name: string, - description: string, - version: string, - license: string, - author: string, - repo: string | undefined, - } + name: string; + description: string; + version: string; + license: string; + author: string; + repo: string | undefined; + }, ): Promise { const packageJson = await fs.readFile(templates.packageJson, { encoding: "utf8" }); - const packageJsonPath = path.join( - rootDir, - path - .basename(templates.packageJson) - .replace(".template", "") - ); + const packageJsonPath = path.join(rootDir, path.basename(templates.packageJson).replace(".template", "")); await fs.writeFile( packageJsonPath, packageJson @@ -125,9 +102,10 @@ export default class New extends Command { .replace("", config.license) .replace( "", - config.repo ? ` "repository": {\n "type": "git",\n "url": "${config.repo}"\n },` : "" + config.repo ? ` "repository": {\n "type": "git",\n "url": "${config.repo}"\n },` : "", ) .replace("", `^${version}`) + .replace(',\n "homepage": ""', config.repo ? `,\n "homepage": "${config.repo}"` : ""), ); } @prettifiedErrors() @@ -165,7 +143,7 @@ export default class New extends Command { projectVersion = await promptModule.prompt("Enter project version (default: 1.0.0):", projectVersion); projectLicense = await promptModule.prompt("Choose project license (default: MIT):", projectLicense); projectAuthor = await promptModule.prompt("Enter your name or organization:"); - projectRepo = await promptModule.confirm("Would you like to link a project repository?") + projectRepo = (await promptModule.confirm("Would you like to link a project repository?")) ? await promptModule.prompt("Enter the repository URL:") : undefined; projectTarget = await promptModule.choice("Choose compilation target (default: js):", ["js", "ts"], "js"); @@ -181,7 +159,7 @@ export default class New extends Command { } // Create the project files - await this.genKipConfig(rootDir, {target: projectTarget}); + await this.genKipConfig(rootDir, { target: projectTarget }); await this.genMainFile(rootDir); await this.genGitignore(rootDir); await this.genPackageJson(rootDir, { diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index 7ab2fc0bf..64f5fd949 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -3,27 +3,15 @@ * @since 0.0.3 */ import type { args } from "@oclif/parser"; -import { Command, flags } from "@oclif/command"; -import { Logger } from "tslog"; -import { - CompileConfig, - defaultOptimisationOptions, - EvaluatedCompileConfig, - KipperCompiler, - KipperCompileResult, - KipperCompileTarget, - KipperError, - KipperLogger, - KipperParseStream, - LogLevel, -} from "@kipper/core"; +import { flags } from "@oclif/command"; +import { defaultOptimisationOptions, EvaluatedCompileConfig, KipperLogger, LogLevel } from "@kipper/core"; import { spawn } from "child_process"; -import { CLIEmitHandler, defaultKipperLoggerConfig } from "../logger"; -import { getParseStream, getTarget, KipperEncoding, KipperEncodings, verifyEncoding } from "../input/"; -import { writeCompilationResult } from "../output"; +import { CLIEmitHandler } from "../logger"; +import { KipperEncodings, verifyEncoding } from "../input/"; import { prettifiedErrors } from "../decorators"; +import Compile from "./compile"; -export default class Run extends Command { +export default class Run extends Compile { static override description: string = "Compile and execute a Kipper program."; // TODO! Add examples when the command moves out of development @@ -100,48 +88,12 @@ export default class Run extends Command { }), }; - /** - * Gets the configuration for the invocation of this command. - * @private - */ - private async getRunConfig() { - const { args, flags } = this.parse(Run); - - // Compilation-required - const stream: KipperParseStream = await getParseStream(args, flags); - const target: KipperCompileTarget = await getTarget(flags["target"]); - - // Output - const outputDir: string = flags["output-dir"]; - const encoding = flags["encoding"] as KipperEncoding; - - return { - args, - flags, - config: { - stream, - target, - outputDir, - encoding, - compilerOptions: { - target: target, - optimisationOptions: { - optimiseInternals: flags["optimise-internals"], - optimiseBuiltIns: flags["optimise-builtins"], - }, - recover: flags["recover"], - abortOnFirstError: flags["abort-on-first-error"], - } as CompileConfig, - }, - }; - } - /** * Run the Kipper program in a new spawned process. - * @param jsCode The JavaScript code to execute using the same JavaScript runtime as this CLI is being executed from. + * @param entryFile The file that should be executed. */ - private async executeKipperProgram(jsCode: string): Promise { - const kipperProgram = spawn(process.execPath, ["-e", jsCode]); + private async executeKipperProgram(entryFile: string): Promise { + const kipperProgram = spawn("ts-node", [entryFile]); // Per default the encoding should be 'utf-8' kipperProgram.stdin.setDefaultEncoding("utf-8"); @@ -157,48 +109,9 @@ export default class Run extends Command { @prettifiedErrors() public async run() { const { flags, config } = await this.getRunConfig(); - const logger = new KipperLogger(CLIEmitHandler.emit, LogLevel.ERROR, flags["warnings"]); - const compiler = new KipperCompiler(logger); - - // If 'log-timestamp' is set, set the logger to use the timestamp - if (flags["log-timestamp"]) { - CLIEmitHandler.cliLogger = new Logger({ ...defaultKipperLoggerConfig, displayDateTime: true }); - } - - let result: KipperCompileResult; - try { - result = await compiler.compile(config.stream, config.compilerOptions); - } catch (e) { - if (e instanceof KipperError && config.compilerOptions.abortOnFirstError) { - // Ignore the error thrown by the compiler (the logger already logged it) - // TODO! This will be removed once 'abortOnFirstError' has been fully removed with v0.11.0 -> #501 - return; - } - throw e; - } - - // If the compilation failed, abort - if (!result.success) { - return; - } - - // Write the file output for this compilation - await writeCompilationResult(result, config.stream, config.outputDir, config.target, config.encoding); - - // Get the JS code that should be evaluated - let jsProgram: string; - if (config.target.targetName === "typescript") { - // Also do the compilation now with the JavaScript target - let jsProgramCtx = await compiler.compile(config.stream, { - ...config.compilerOptions, - target: getTarget("js"), - }); - jsProgram = jsProgramCtx.write(); - } else { - jsProgram = result.write(); - } + const logger = new KipperLogger(CLIEmitHandler.emit, LogLevel.WARN, flags["warnings"]); - // Execute the program - await this.executeKipperProgram(jsProgram); + await super.run(logger); + await this.executeKipperProgram(config.outPath); } } diff --git a/kipper/cli/src/config-loader.ts b/kipper/cli/src/config-loader.ts new file mode 100644 index 000000000..93e9af72c --- /dev/null +++ b/kipper/cli/src/config-loader.ts @@ -0,0 +1,66 @@ +/** + * Load a Kipper configuration file for the CLI. + * @since 0.11.0 + */ +import { EvaluatedKipperConfigFile, KipperConfigFile, KipperConfigInterpreter } from "@kipper/config"; + +export let defaultConfigInterpreter = new KipperConfigInterpreter(); + +/** + * Set the default configuration interpreter for the CLI. + * + * This can be used to inject custom behaviour into the CLI for loading Kipper configuration files. + * @param interpreter The interpreter to use for the configuration file. + */ +export function setDefaultConfigInterpreter(interpreter: KipperConfigInterpreter): void { + defaultConfigInterpreter = interpreter; +} + +/** + * Load a Kipper configuration file for the CLI. + * @param options The options for the configuration file. + * @param interpreter The interpreter to use for the configuration file. + * @since 0.11.0 + */ +export async function loadConfig( + options: + | { + path: string; + encoding: BufferEncoding; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + | { + content: string; + encoding: BufferEncoding; + // eslint-disable-next-line no-mixed-spaces-and-tabs + }, + interpreter?: KipperConfigInterpreter, +): Promise { + interpreter = interpreter ?? defaultConfigInterpreter; + if ("path" in options) { + return interpreter.loadConfig(await KipperConfigFile.fromFile(options.path, options.encoding)); + } else { + return interpreter.loadConfig(KipperConfigFile.fromString(options.content, options.encoding)); + } +} + +/** + * Load the autoconfiguration file for the CLI. + * + * This attempts to load a config from the following locations: + * - `./kip-config.json` + * - `./kipper-config.json` + * @since 0.11.0 + */ +export async function loadAutoConfig(): Promise { + const workdir = process.cwd(); + try { + return await loadConfig({ path: `${workdir}/kip-config.json`, encoding: "utf8" }); + } catch (e) { + try { + return await loadConfig({ path: `${workdir}/kipper-config.json`, encoding: "utf8" }); + } catch (e) { + return undefined; + } + } +} diff --git a/kipper/cli/src/copy-resources.ts b/kipper/cli/src/copy-resources.ts new file mode 100644 index 000000000..d2e02fdc9 --- /dev/null +++ b/kipper/cli/src/copy-resources.ts @@ -0,0 +1,21 @@ +import { EvaluatedKipperConfigFile } from "@kipper/config"; +import * as fs from "node:fs/promises"; +import { KipperLogger } from "@kipper/core"; + +/** + * Copy resources from the source to the destination. + * @param resources The resources to copy. + * @param logger The logger to use. If not provided, no logs will be emitted. + * @since 0.11.0 + */ +export async function copyConfigResources( + resources: EvaluatedKipperConfigFile["resources"], + logger?: KipperLogger, +): Promise { + for (const resource of resources) { + await fs.copyFile(resource.src, resource.out); + if (logger) { + logger.debug(`Copied resource from ${resource.src} to ${resource.out}`); + } + } +} diff --git a/kipper/cli/src/decorators.ts b/kipper/cli/src/decorators.ts index 8f7f4ee58..0cc8757a9 100644 --- a/kipper/cli/src/decorators.ts +++ b/kipper/cli/src/decorators.ts @@ -17,9 +17,9 @@ export function prettifiedErrors() { return function (target: TProto, propertyKey: keyof TProto, descriptor: PropertyDescriptor) { const originalFunc: Function = descriptor.value; - const func = async function (this: Command): Promise { + const func = async function (this: Command, ...argArray: Array): Promise { try { - await originalFunc.call(this); + await originalFunc.call(this, ...argArray); } catch (error) { const cliError = error instanceof KipperCLIError || error instanceof OclifCLIError; const internalError = error instanceof KipperInternalError; @@ -56,6 +56,6 @@ export function prettifiedErrors() { // Modify the prototype and return the property descriptor target[propertyKey] = func as TProto[keyof TProto]; - return func as TypedPropertyDescriptor<() => Promise>; + return func as TypedPropertyDescriptor<(...argArray: Array) => Promise>; }; } diff --git a/kipper/cli/src/errors.ts b/kipper/cli/src/errors.ts index 3b3c53587..3d4ea6dc6 100644 --- a/kipper/cli/src/errors.ts +++ b/kipper/cli/src/errors.ts @@ -53,3 +53,13 @@ export class KipperInvalidInputError extends KipperCLIError { super(err); } } + +/** + * Represents an error that is thrown whenever an unsupported configuration is used. + * @since 0.11.0 + */ +export class KipperUnsupportedConfigError extends KipperCLIError { + constructor(err: string) { + super(err); + } +} diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 66754146c..43aaf4e5a 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -5,7 +5,7 @@ */ export { run } from "@oclif/command"; -export * from "./input/file-stream"; +export * from "./input"; export * from "./logger"; export * from "./errors"; export * from "./output/compile"; diff --git a/kipper/cli/src/input/file-stream.ts b/kipper/cli/src/input/file-stream.ts index 8051f3554..00d911c0c 100644 --- a/kipper/cli/src/input/file-stream.ts +++ b/kipper/cli/src/input/file-stream.ts @@ -8,6 +8,7 @@ import * as path from "path"; import { KipperParseStream } from "@kipper/core"; import { KipperFileAccessError, KipperInvalidInputError, KipperUnsupportedEncodingError } from "../errors"; import { OutputArgs, OutputFlags } from "@oclif/parser/lib/parse"; +import { EvaluatedKipperConfigFile } from "@kipper/config"; /** * Valid encodings that Kipper supports. @@ -36,23 +37,42 @@ export function verifyEncoding(encoding: string): KipperEncoding { } } +function ensureCompatibleFiles(files: Array<{ src: string; outDir: string }> | undefined): void { + if ((files?.length ?? 0) >= 2) { + throw new KipperInvalidInputError( + "Multiple files are not supported in the CLI. This will be updated in a future release.", + ); + } +} + /** * Evaluates the file or stream provided by the command arguments or flags. * @param args The arguments that were passed to the command. * @param flags The flags that were passed to the command. + * @param config The configuration file that was loaded. * @since 0.10.0 */ export async function getParseStream( args: OutputArgs, flags: OutputFlags, -): Promise { + config: EvaluatedKipperConfigFile | undefined, +): Promise<{ stream: KipperParseFile | KipperParseStream; outDir: string }> { + let stream: KipperParseFile | KipperParseStream; if (args.file) { - return await KipperParseFile.fromFile(args.file, flags["encoding"] as KipperEncoding); + stream = await KipperParseFile.fromFile(args.file, flags["encoding"] as KipperEncoding); } else if (flags["string-code"]) { - return new KipperParseStream({ stringContent: flags["string-code"] }); + stream = new KipperParseStream({ stringContent: flags["string-code"] }); + } else if (config?.files) { + ensureCompatibleFiles(config.files); + stream = await KipperParseFile.fromFile(config.files[0].src, flags["encoding"]); } else { throw new KipperInvalidInputError("Argument 'file' or flag '-s/--string-code' must be populated"); } + + return { + stream: stream, + outDir: args["output-dir"] ?? config?.outDir ?? "build", + }; } /** diff --git a/kipper/cli/src/output/compile.ts b/kipper/cli/src/output/compile.ts index 4442d4dd8..ef9548bb8 100644 --- a/kipper/cli/src/output/compile.ts +++ b/kipper/cli/src/output/compile.ts @@ -11,29 +11,23 @@ import { KipperEncoding, KipperParseFile } from "../input"; /** * Writes the file that exist inside the {@link KipperCompileResult compilation result}. * @param result The result instance containing the program metadata. - * @param srcFile The source parse file or stream. - * @param outputDir The output dir where the files should be placed. This will be created if it does not exist. - * @param target The target that the program should compile to. + * @param outDir The output dir where the files should be placed. This will be created if it does not exist. + * @param outPath The output path where the compiled file should be placed. * @param encoding The encoding to write the file with. * @returns The path to the output file. */ export async function writeCompilationResult( result: KipperCompileResult, - srcFile: KipperParseFile | KipperParseStream, - outputDir: string, - target: KipperCompileTarget, + outDir: string, + outPath: string, encoding: KipperEncoding, ): Promise { - const buildPath = path.resolve(outputDir); - const outPath = `${buildPath}/${srcFile instanceof KipperParseFile ? srcFile.path.name : srcFile.name}.${ - target.fileExtension - }`; try { // Create the directory if it does not exist try { - await fs.access(buildPath, constants.R_OK); + await fs.access(outDir, constants.R_OK); } catch (e) { - await fs.mkdir(buildPath); + await fs.mkdir(outDir); } // Write the output code diff --git a/kipper/cli/src/templates/package.json.template b/kipper/cli/src/templates/package.json.template index 352e17c5b..a5989a0fb 100644 --- a/kipper/cli/src/templates/package.json.template +++ b/kipper/cli/src/templates/package.json.template @@ -8,8 +8,7 @@ }, "dependencies": { "@kipper/cli": "" - }, - + }, "keywords": [ "kipper" ], diff --git a/kipper/config/package.json b/kipper/config/package.json index b8e08908c..79d604789 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,6 +1,6 @@ { "name": "@kipper/config", - "description": "The config file support package adding support for kip-config.json 🦊", + "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { diff --git a/kipper/config/src/abstract/config-interpreter.ts b/kipper/config/src/abstract/config-interpreter.ts index 2c4cb4da7..2f99423bf 100644 --- a/kipper/config/src/abstract/config-interpreter.ts +++ b/kipper/config/src/abstract/config-interpreter.ts @@ -1,6 +1,6 @@ import { ConfigFile } from "./config-file"; import { ConfigErrorMetaData, ConfigValidationError, UnknownFieldError } from "../errors"; -import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "../evaluated-kipper-config-file"; +import { RawEvaluatedKipperConfigFile } from "../evaluated-kipper-config-file"; /** * A type that represents a configuration scheme definition. diff --git a/kipper/config/src/errors.ts b/kipper/config/src/errors.ts index ac0107836..43f6e56d1 100644 --- a/kipper/config/src/errors.ts +++ b/kipper/config/src/errors.ts @@ -1,5 +1,3 @@ -import { clean } from "semver"; - /** * The metadata for a config error, which is used to provide verbose error messages. * @since 0.11.0 @@ -130,3 +128,13 @@ export class IncompatibleVersionError extends ConfigInterpreterError { ); } } + +/** + * Error that is thrown whenever an unknown target is encountered. + * @since 0.11.0 + */ +export class UnknownTargetError extends ConfigInterpreterError { + public constructor(provided: string, meta: ConfigErrorMetaData) { + super(`Unknown target ~ '${provided}'`, meta); + } +} diff --git a/kipper/config/src/evaluated-kipper-config-file.ts b/kipper/config/src/evaluated-kipper-config-file.ts index c194bc459..1ed2ea742 100644 --- a/kipper/config/src/evaluated-kipper-config-file.ts +++ b/kipper/config/src/evaluated-kipper-config-file.ts @@ -1,5 +1,6 @@ -import type { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract/evaluated-config-file"; +import type { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract"; import type * as semver from "semver"; +import type { CompileConfig, KipperCompileTarget } from "@kipper/core"; /** * A type that represents a path-like object. @@ -20,7 +21,7 @@ export interface RawEvaluatedKipperConfigFile extends EvaluatedConfigFile { files: Array<{ src: PathLike; outDir: PathLike }>; resources: Array<{ src: PathLike; out: PathLike }>; compiler: { - target: string; + target: KipperCompileTarget; version: semver.SemVer; }; } @@ -51,4 +52,14 @@ export class EvaluatedKipperConfigFile implements RawEvaluatedKipperConfigFile { this.resources = config.resources; this.compiler = config.compiler; } + + /** + * Generates a compile configuration from the evaluated config file. + * @since 0.11.0 + */ + public genCompilerConfig(): CompileConfig { + return { + target: this.compiler.target, + } satisfies CompileConfig; + } } diff --git a/kipper/config/src/kipper-config-interpreter.ts b/kipper/config/src/kipper-config-interpreter.ts index 055838d34..f55930180 100644 --- a/kipper/config/src/kipper-config-interpreter.ts +++ b/kipper/config/src/kipper-config-interpreter.ts @@ -7,6 +7,7 @@ import { InvalidMappingSyntaxError, InvalidVersionSyntaxError, RefInvalidPathError, + UnknownTargetError, } from "./errors"; import { ensureExistsHasPermAndIsOfType } from "./tools"; import { version as kipperConfigVersion } from "./index"; @@ -14,6 +15,9 @@ import * as semver from "semver"; import * as path from "node:path"; import * as deepmerge from "deepmerge"; import { isPlainObject } from "is-plain-object"; +import { KipperJavaScriptTarget } from "@kipper/target-js"; +import { KipperTypeScriptTarget } from "@kipper/target-ts"; +import { KipperCompileTarget } from "@kipper/core"; /** * A type that represents a Kipper config file. @@ -158,9 +162,6 @@ export interface KipperConfigEnvInfo { * @since 0.11.0 */ workDir: string; - /** - * - */ } export class KipperConfigInterpreter extends ConfigInterpreter { @@ -259,6 +260,11 @@ export class KipperConfigInterpreter extends ConfigInterpreter { + switch (target) { + case "js": + case "javascript": + return new KipperJavaScriptTarget(); + case "ts": + case "typescript": + return new KipperTypeScriptTarget(); + default: + throw new UnknownTargetError(target, meta); + } + } } diff --git a/package.json b/package.json index 2befff11c..6b22950f0 100644 --- a/package.json +++ b/package.json @@ -4,46 +4,46 @@ "version": "0.11.0-alpha.1", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { - "@kipper/config": "workspace:~", "@kipper/cli": "workspace:~", + "@kipper/config": "workspace:~", "@kipper/core": "workspace:~", "@kipper/target-js": "workspace:~", "@kipper/target-ts": "workspace:~", - "tslib": "~2.6.2" + "tslib": "~2.6.2" }, "devDependencies": { - "@types/chai": "4.3.0", - "@types/mocha": "10.0.1", - "@types/node": "18.16.16", - "@types/semver": "7.5.7", + "@istanbuljs/nyc-config-typescript": "1.0.2", "@oclif/test": "2.3.21", "@size-limit/preset-big-lib": "8.2.4", - "@istanbuljs/nyc-config-typescript": "1.0.2", + "@types/chai": "4.3.0", + "@types/mocha": "10.0.1", + "@types/node": "18.16.16", + "@types/semver": "7.5.7", "@typescript-eslint/eslint-plugin": "6.21.0", - "eslint": "8.56.0", - "json-parse-even-better-errors": "3.0.0", "ansi-regex": "6.0.1", + "antlr4ts": "0.5.0-alpha.4", "browserify": "17.0.0", "chai": "4.3.6", "coverage-badge-creator": "1.0.17", - "typescript": "5.1.3", + "eslint": "8.56.0", + "json-parse-even-better-errors": "3.0.0", "minimist": "1.2.8", "mkdirp": "3.0.1", "mocha": "10.2.0", "nyc": "15.1.0", "prettier": "2.8.8", "run-script-os": "1.1.6", + "semver": "7.6.0", "size-limit": "8.2.4", "source-map-support": "0.5.21", "ts-mocha": "10.0.0", - "ts-node": "10.9.1", + "ts-node": "10.9.2", "tsify": "5.0.4", + "typescript": "5.1.3", "uglify-js": "3.17.4", "uuid": "9.0.0", - "watchify": "4.0.0", - "antlr4ts": "^0.5.0-alpha.4", - "semver": "7.6.0" - }, + "watchify": "4.0.0" + }, "engines": { "node": ">=16.0.0", "pnpm": ">=8" @@ -105,8 +105,8 @@ "cleanup": "run-script-os", "cleanup:linux:macos:default": "rm -rf ./lib/; rm -rf ./kipper/**/lib", "cleanup:windows": "powershell.exe Remove-Item -R -Force ./lib/; powershell.exe Remove-Item -R -Force ./kipper/**/lib", - "add-next-tag": "run-script-os", - "add-next-tag:linux:macos:default": "bash ./add-next-tag.sh", - "add-next-tag:windows": "powershell.exe .\\add-next-tag.ps1" + "add-next-tag": "run-script-os", + "add-next-tag:linux:macos:default": "bash ./add-next-tag.sh", + "add-next-tag:windows": "powershell.exe .\\add-next-tag.ps1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 329d53f0c..17887c071 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,7 +53,7 @@ devDependencies: specifier: 6.0.1 version: 6.0.1 antlr4ts: - specifier: ^0.5.0-alpha.4 + specifier: 0.5.0-alpha.4 version: 0.5.0-alpha.4 browserify: specifier: 17.0.0 @@ -101,8 +101,8 @@ devDependencies: specifier: 10.0.0 version: 10.0.0(mocha@10.2.0) ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + specifier: 10.9.2 + version: 10.9.2(@types/node@18.16.16)(typescript@5.1.3) tsify: specifier: 5.0.4 version: 5.0.4(browserify@17.0.0)(typescript@5.1.3) @@ -126,203 +126,202 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@ampproject/remapping@2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 dev: true - /@babel/code-frame@7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.23.4 + chalk: 2.4.2 dev: true - /@babel/compat-data@7.20.1: - resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.20.2: - resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==} + /@babel/core@7.24.0: + resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 - '@babel/helper-compilation-targets': 7.20.0(@babel/core@7.20.2) - '@babel/helper-module-transforms': 7.20.2 - '@babel/helpers': 7.20.1 - '@babel/parser': 7.20.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - convert-source-map: 1.9.0 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helpers': 7.24.0 + '@babel/parser': 7.24.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 + convert-source-map: 2.0.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 - json5: 2.2.1 - semver: 6.3.0 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/generator@7.20.4: - resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 - '@jridgewell/gen-mapping': 0.3.2 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.20.0(@babel/core@7.20.2): - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 dev: true - /@babel/helper-environment-visitor@7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-function-name@7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.2 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: true - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.24.0 dev: true - /@babel/helper-module-imports@7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.24.0 dev: true - /@babel/helper-module-transforms@7.20.2: - resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/helper-simple-access@7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.24.0 dev: true - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.24.0 dev: true - /@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.20.1: - resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} + /@babel/helpers@7.24.0: + resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: true - /@babel/parser@7.20.3: - resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} + hasBin: true dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.24.0 dev: true - /@babel/template@7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 dev: true - /@babel/traverse@7.20.1: - resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} + /@babel/traverse@7.24.0: + resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.20.2: - resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true @@ -355,8 +354,8 @@ packages: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 - globals: 13.19.0 - ignore: 5.2.0 + globals: 13.24.0 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -416,25 +415,17 @@ packages: engines: {node: '>=8'} dev: true - /@jridgewell/gen-mapping@0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - - /@jridgewell/gen-mapping@0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + /@jridgewell/gen-mapping@0.3.4: + resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.23 dev: true - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true @@ -443,29 +434,29 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 dev: true - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + /@jridgewell/trace-mapping@0.3.23: + resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@nodelib/fs.scandir@2.1.5: @@ -486,14 +477,14 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.17.1 dev: true - /@oclif/core@2.8.5(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==} + /@oclif/core@2.15.0(@types/node@18.16.16)(typescript@5.1.3): + resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} engines: {node: '>=14.0.0'} dependencies: - '@types/cli-progress': 3.11.0 + '@types/cli-progress': 3.11.5 ansi-escapes: 4.3.2 ansi-styles: 4.3.0 cardinal: 2.1.1 @@ -501,8 +492,7 @@ packages: clean-stack: 3.0.1 cli-progress: 3.12.0 debug: 4.3.4(supports-color@8.1.1) - ejs: 3.1.8 - fs-extra: 9.1.0 + ejs: 3.1.9 get-package-type: 0.1.0 globby: 11.1.0 hyperlinker: 1.0.0 @@ -511,13 +501,13 @@ packages: js-yaml: 3.14.1 natural-orderby: 2.0.3 object-treeify: 1.1.33 - password-prompt: 1.1.2 - semver: 7.6.0 + password-prompt: 1.1.3 + slice-ansi: 4.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.1(@types/node@18.16.16)(typescript@5.1.3) + ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.1.3) tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -533,8 +523,8 @@ packages: resolution: {integrity: sha512-RaFNf3/PMwBLrL9yu8aFsONsUSpyI16AGC6HiAabDyu534Rh+jBtqy/dPZ53/SOCBOholhZmVs7jT0UE5Utwew==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.8.5(@types/node@18.16.16)(typescript@5.1.3) - fancy-test: 2.0.23 + '@oclif/core': 2.15.0(@types/node@18.16.16)(typescript@5.1.3) + fancy-test: 2.0.42 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -604,9 +594,9 @@ packages: peerDependencies: size-limit: 8.2.4 dependencies: - nanoid: 3.3.4 + nanoid: 3.3.7 size-limit: 8.2.4 - webpack: 5.75.0(uglify-js@3.17.4) + webpack: 5.90.3(uglify-js@3.17.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -626,40 +616,36 @@ packages: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true /@types/chai@4.3.0: resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} dev: true - /@types/cli-progress@3.11.0: - resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} + /@types/cli-progress@3.11.5: + resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} dependencies: '@types/node': 18.16.16 dev: true - /@types/eslint-scope@3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.4.10 - '@types/estree': 0.0.51 + '@types/eslint': 8.56.4 + '@types/estree': 1.0.5 dev: true - /@types/eslint@8.4.10: - resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==} + /@types/eslint@8.56.4: + resolution: {integrity: sha512-lG1GLUnL5vuRBGb3MgWUWLdGMH2Hps+pERuyQXCfWozuGKdnhf9Pbg4pkcrVUHjKrU7Rl+GCZ/299ObBXZFAxg==} dependencies: - '@types/estree': 0.0.51 - '@types/json-schema': 7.0.11 - dev: true - - /@types/estree@0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true /@types/json-schema@7.0.15: @@ -672,8 +658,8 @@ packages: dev: true optional: true - /@types/lodash@4.14.189: - resolution: {integrity: sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==} + /@types/lodash@4.14.202: + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} dev: true /@types/mocha@10.0.1: @@ -688,18 +674,18 @@ packages: resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} dev: true - /@types/sinon@10.0.13: - resolution: {integrity: sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==} + /@types/sinon@17.0.3: + resolution: {integrity: sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==} dependencies: - '@types/sinonjs__fake-timers': 8.1.2 + '@types/sinonjs__fake-timers': 8.1.5 dev: true - /@types/sinonjs__fake-timers@8.1.2: - resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} + /@types/sinonjs__fake-timers@8.1.5: + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} dev: true - /@types/yauzl@2.10.0: - resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: '@types/node': 18.16.16 @@ -842,109 +828,109 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@webassemblyjs/ast@1.11.1: - resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: - '@webassemblyjs/helper-numbers': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.1: - resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} dev: true - /@webassemblyjs/helper-api-error@1.11.1: - resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} dev: true - /@webassemblyjs/helper-buffer@1.11.1: - resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} dev: true - /@webassemblyjs/helper-numbers@1.11.1: - resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.1: - resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} dev: true - /@webassemblyjs/helper-wasm-section@1.11.1: - resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 dev: true - /@webassemblyjs/ieee754@1.11.1: - resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128@1.11.1: - resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8@1.11.1: - resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} dev: true - /@webassemblyjs/wasm-edit@1.11.1: - resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/helper-wasm-section': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-opt': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - '@webassemblyjs/wast-printer': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 dev: true - /@webassemblyjs/wasm-gen@1.11.1: - resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-opt@1.11.1: - resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 dev: true - /@webassemblyjs/wasm-parser@1.11.1: - resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wast-printer@1.11.1: - resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} dependencies: - '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 dev: true @@ -958,17 +944,18 @@ packages: /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.1): - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + /acorn-import-assertions@1.9.0(acorn@8.11.3): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.1 + acorn: 8.11.3 dev: true /acorn-jsx@5.3.2(acorn@8.11.3): @@ -992,14 +979,15 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} + hasBin: true dev: true /acorn@8.11.3: @@ -1008,11 +996,6 @@ packages: hasBin: true dev: true - /acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} - engines: {node: '>=0.4.0'} - dev: true - /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -1052,11 +1035,6 @@ packages: engines: {node: '>=6'} dev: true - /ansi-escapes@3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} - dev: true - /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1152,29 +1130,31 @@ packages: safer-buffer: 2.1.2 dev: true - /assert@1.5.0: - resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + /assert@1.5.1: + resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} dependencies: - object-assign: 4.1.1 - util: 0.10.3 + object.assign: 4.1.5 + util: 0.10.4 dev: true /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} dev: true - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true /balanced-match@1.0.2: @@ -1195,7 +1175,7 @@ packages: dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /bn.js@4.12.0: @@ -1232,6 +1212,7 @@ packages: /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} + hasBin: true dependencies: JSONStream: 1.3.5 combine-source-map: 0.8.0 @@ -1244,7 +1225,7 @@ packages: /browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: - resolve: 1.22.1 + resolve: 1.22.8 dev: true /browser-stdout@1.3.1: @@ -1274,7 +1255,7 @@ packages: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 - des.js: 1.0.1 + des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 dev: true @@ -1286,8 +1267,9 @@ packages: randombytes: 2.1.0 dev: true - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + /browserify-sign@4.2.2: + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.0 @@ -1296,7 +1278,7 @@ packages: elliptic: 6.5.4 inherits: 2.0.4 parse-asn1: 5.1.6 - readable-stream: 3.6.0 + readable-stream: 3.6.2 safe-buffer: 5.2.1 dev: true @@ -1309,9 +1291,10 @@ packages: /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} + hasBin: true dependencies: JSONStream: 1.3.5 - assert: 1.5.0 + assert: 1.5.1 browser-pack: 6.1.0 browser-resolve: 2.0.0 browserify-zlib: 0.2.0 @@ -1327,7 +1310,7 @@ packages: duplexer2: 0.1.4 events: 3.3.0 glob: 7.2.3 - has: 1.0.3 + has: 1.0.4 htmlescape: 1.1.1 https-browserify: 1.0.0 inherits: 2.0.4 @@ -1342,10 +1325,10 @@ packages: punycode: 1.4.1 querystring-es3: 0.2.1 read-only-stream: 2.0.0 - readable-stream: 2.3.7 - resolve: 1.22.1 + readable-stream: 2.3.8 + resolve: 1.22.8 shasum-object: 1.0.0 - shell-quote: 1.7.4 + shell-quote: 1.8.1 stream-browserify: 3.0.0 stream-http: 3.2.0 string_decoder: 1.3.0 @@ -1354,20 +1337,21 @@ packages: through2: 2.0.5 timers-browserify: 1.4.2 tty-browserify: 0.0.1 - url: 0.11.0 + url: 0.11.3 util: 0.12.5 vm-browserify: 1.1.2 xtend: 4.0.2 dev: true - /browserslist@4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - caniuse-lite: 1.0.30001434 - electron-to-chromium: 1.4.284 - node-releases: 2.0.6 - update-browserslist-db: 1.0.10(browserslist@4.21.4) + caniuse-lite: 1.0.30001591 + electron-to-chromium: 1.4.685 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true /buffer-crc32@0.2.13: @@ -1419,11 +1403,15 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.3 + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.1 dev: true /callsites@3.1.0: @@ -1441,12 +1429,13 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001434: - resolution: {integrity: sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==} + /caniuse-lite@1.0.30001591: + resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} dev: true /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 @@ -1457,10 +1446,10 @@ packages: engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 - check-error: 1.0.2 + check-error: 1.0.3 deep-eql: 3.0.1 - get-func-name: 2.0.0 - loupe: 2.3.6 + get-func-name: 2.0.2 + loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 dev: true @@ -1482,8 +1471,10 @@ packages: supports-color: 7.2.0 dev: true - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 dev: true /chokidar@3.5.3: @@ -1498,7 +1489,22 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 + dev: true + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 dev: true /chownr@1.1.4: @@ -1577,7 +1583,7 @@ packages: resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} dependencies: convert-source-map: 1.1.3 - inline-source-map: 0.6.2 + inline-source-map: 0.6.3 lodash.memoize: 3.0.4 source-map: 0.5.7 dev: true @@ -1586,8 +1592,8 @@ packages: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander@9.4.1: - resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} dev: true @@ -1605,7 +1611,7 @@ packages: dependencies: buffer-from: 1.1.2 inherits: 2.0.4 - readable-stream: 2.3.7 + readable-stream: 2.3.8 typedarray: 0.0.6 dev: true @@ -1625,12 +1631,17 @@ packages: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true /coverage-badge-creator@1.0.17: resolution: {integrity: sha512-9agGAXGNafW9avCVg5eJF7rzpTRjTbSf3acNxEUQqxUn7WDrnEAlomHyPIosucZuChPxVPgW6Kg3W4nStj/jCg==} + hasBin: true dev: true /create-ecdh@4.0.4: @@ -1673,17 +1684,6 @@ packages: - encoding dev: true - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.1 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1697,7 +1697,7 @@ packages: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 + browserify-sign: 4.2.2 create-ecdh: 4.0.4 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -1754,12 +1754,31 @@ packages: strip-bom: 4.0.0 dev: true + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + /defined@1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} dev: true /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} + hasBin: true dependencies: JSONStream: 1.3.5 shasum-object: 1.0.0 @@ -1767,8 +1786,8 @@ packages: through2: 2.0.5 dev: true - /des.js@1.0.1: - resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + /des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -1777,6 +1796,7 @@ packages: /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} + hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.1 @@ -1832,18 +1852,19 @@ packages: /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true - /ejs@3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} + hasBin: true dependencies: - jake: 10.8.5 + jake: 10.8.7 dev: true - /electron-to-chromium@1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + /electron-to-chromium@1.4.685: + resolution: {integrity: sha512-yDYeobbTEe4TNooEzOQO6xFqg9XnAkVy2Lod1C1B2it8u47JNLYvl9nLDWBamqUakWB8Jc1hhS1uHUNYTNQdfw==} dev: true /elliptic@6.5.4: @@ -1868,11 +1889,11 @@ packages: once: 1.4.0 dev: true - /enhanced-resolve@5.11.0: - resolution: {integrity: sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==} + /enhanced-resolve@5.15.1: + resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 dev: true @@ -1882,16 +1903,28 @@ packages: is-arrayish: 0.2.1 dev: true - /es-module-lexer@0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} dev: true /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -1948,15 +1981,15 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.4.2 + esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.0 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -1985,10 +2018,11 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true dev: true - /esquery@1.4.2: - resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==} + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -2004,11 +2038,12 @@ packages: /estimo@2.3.6: resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} engines: {node: '>=12'} + hasBin: true dependencies: '@sitespeed.io/tracium': 0.3.3 - commander: 9.4.1 + commander: 9.5.0 find-chrome-bin: 0.1.0 - nanoid: 3.3.4 + nanoid: 3.3.7 puppeteer-core: 13.7.0 transitivePeerDependencies: - bufferutil @@ -2047,27 +2082,28 @@ packages: /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} + hasBin: true dependencies: debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: - '@types/yauzl': 2.10.0 + '@types/yauzl': 2.10.3 transitivePeerDependencies: - supports-color dev: true - /fancy-test@2.0.23: - resolution: {integrity: sha512-RPX4iAzAioH9nxkqk2yrcunBLBmnMLxtIsw3Pjgj2PGPHTdT3wZ6asKv9U332+UQyZwZWWc4bP64JOa6DcVhnQ==} + /fancy-test@2.0.42: + resolution: {integrity: sha512-TX8YTALYAmExny+f+G24MFxWry3Pk09+9uykwRjfwjibRxJ9ZjJzrnHYVBZK46XQdyli7d+rQc5U/KK7V6uLsw==} engines: {node: '>=12.0.0'} dependencies: '@types/chai': 4.3.0 - '@types/lodash': 4.14.189 + '@types/lodash': 4.14.202 '@types/node': 18.16.16 - '@types/sinon': 10.0.13 + '@types/sinon': 17.0.3 lodash: 4.17.21 mock-stdin: 1.0.0 - nock: 13.3.1 + nock: 13.5.4 stdout-stderr: 0.1.13 transitivePeerDependencies: - supports-color @@ -2077,8 +2113,8 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2106,8 +2142,8 @@ packages: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} dev: true - /fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -2122,13 +2158,13 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 dev: true /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: - minimatch: 5.1.0 + minimatch: 5.1.6 dev: true /fill-range@7.0.1: @@ -2168,20 +2204,22 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.7 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 dev: true /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true /for-each@0.3.3: @@ -2206,30 +2244,20 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true /gensync@1.0.0-beta.2: @@ -2246,16 +2274,19 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 has-symbols: 1.0.3 + hasown: 2.0.1 dev: true /get-package-type@0.1.0: @@ -2315,8 +2346,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -2328,8 +2359,8 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.0 + fast-glob: 3.3.2 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -2337,11 +2368,11 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.4 dev: true - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true /graphemer@1.4.0: @@ -2358,23 +2389,32 @@ packages: engines: {node: '>=8'} dev: true + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 dev: true /hash-base@3.1.0: @@ -2382,7 +2422,7 @@ packages: engines: {node: '>=4'} dependencies: inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 safe-buffer: 5.2.1 dev: true @@ -2401,8 +2441,16 @@ packages: type-fest: 0.8.1 dev: true + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true dev: true /hmac-drbg@1.0.1: @@ -2445,11 +2493,6 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore@5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} - engines: {node: '>= 4'} - dev: true - /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -2480,22 +2523,23 @@ packages: wrappy: 1.0.2 dev: true - /inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-source-map@0.6.2: - resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} + /inline-source-map@0.6.3: + resolution: {integrity: sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w==} dependencies: source-map: 0.5.7 dev: true /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} + hasBin: true dependencies: JSONStream: 1.3.5 acorn-node: 1.8.2 @@ -2513,8 +2557,8 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-arrayish@0.2.1: @@ -2537,15 +2581,16 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.3 + hasown: 2.0.1 dev: true /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} + hasBin: true dev: true /is-extglob@2.1.1: @@ -2562,7 +2607,7 @@ packages: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-glob@4.0.3: @@ -2592,15 +2637,11 @@ packages: engines: {node: '>=8'} dev: true - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + which-typed-array: 1.1.14 dev: true /is-typedarray@1.0.0: @@ -2636,8 +2677,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: true @@ -2652,10 +2693,10 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.24.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true @@ -2666,18 +2707,18 @@ packages: dependencies: archy: 1.0.0 cross-spawn: 7.0.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 p-map: 3.0.0 rimraf: 3.0.2 uuid: 8.3.2 dev: true - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 supports-color: 7.2.0 dev: true @@ -2686,25 +2727,26 @@ packages: engines: {node: '>=10'} dependencies: debug: 4.3.4(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 dev: true - /jake@10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} + hasBin: true dependencies: - async: 3.2.4 + async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 @@ -2725,6 +2767,7 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -2732,6 +2775,7 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 dev: true @@ -2739,6 +2783,11 @@ packages: /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true /json-parse-even-better-errors@2.3.1: @@ -2762,25 +2811,19 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /json5@1.0.1: - resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true requiresBuild: true dependencies: minimist: 1.2.8 dev: true optional: true - /json5@2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - dev: true - - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.10 + hasBin: true dev: true /jsonparse@1.3.1: @@ -2788,6 +2831,12 @@ packages: engines: {'0': node >= 0.2.0} dev: true + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + /labeled-stream-splicer@2.0.2: resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} dependencies: @@ -2803,8 +2852,8 @@ packages: type-check: 0.4.0 dev: true - /lilconfig@2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true @@ -2853,14 +2902,21 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 dev: true - /loupe@2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: - get-func-name: 2.0.0 + yallist: 3.1.1 dev: true /lru-cache@6.0.0: @@ -2874,7 +2930,14 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 + dev: true + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.6.0 dev: true /make-error@1.3.6: @@ -2908,6 +2971,7 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -2946,8 +3010,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 @@ -2970,6 +3034,7 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true dependencies: minimist: 1.2.8 dev: true @@ -2977,11 +3042,13 @@ packages: /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} + hasBin: true dev: true /mocha@10.2.0: resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} engines: {node: '>= 14.0.0'} + hasBin: true dependencies: ansi-colors: 4.1.1 browser-stdout: 1.3.1 @@ -3013,6 +3080,7 @@ packages: /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} + hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 2.0.0 @@ -3023,8 +3091,8 @@ packages: duplexer2: 0.1.4 inherits: 2.0.4 parents: 1.0.1 - readable-stream: 2.3.7 - resolve: 1.22.1 + readable-stream: 2.3.8 + resolve: 1.22.8 stream-combiner2: 1.1.1 subarg: 1.0.0 through2: 2.0.5 @@ -3042,11 +3110,13 @@ packages: /nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true dev: true - /nanoid@3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true dev: true /nanospinner@1.1.0: @@ -3067,17 +3137,12 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true - - /nock@13.3.1: - resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} + /nock@13.5.4: + resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} engines: {node: '>= 10.13'} dependencies: debug: 4.3.4(supports-color@8.1.1) json-stringify-safe: 5.0.1 - lodash: 4.17.21 propagate: 2.0.1 transitivePeerDependencies: - supports-color @@ -3102,8 +3167,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true /normalize-path@3.0.0: @@ -3114,6 +3179,7 @@ packages: /nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} + hasBin: true dependencies: '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 @@ -3125,13 +3191,13 @@ packages: foreground-child: 2.0.0 get-package-type: 0.1.0 glob: 7.2.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-hook: 3.0.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-processinfo: 2.0.3 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 + istanbul-reports: 3.1.7 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -3151,11 +3217,30 @@ packages: engines: {node: '>=0.10.0'} dev: true + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + /object-treeify@1.1.33: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} dev: true + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -3181,7 +3266,7 @@ packages: /outpipe@1.1.1: resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} dependencies: - shell-quote: 1.7.4 + shell-quote: 1.8.1 dev: true /p-limit@2.3.0: @@ -3228,7 +3313,7 @@ packages: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 hasha: 5.2.2 lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 @@ -3268,11 +3353,11 @@ packages: error-ex: 1.3.2 dev: true - /password-prompt@1.1.2: - resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} + /password-prompt@1.1.3: + resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} dependencies: - ansi-escapes: 3.2.0 - cross-spawn: 6.0.5 + ansi-escapes: 4.3.2 + cross-spawn: 7.0.3 dev: true /path-browserify@1.0.1: @@ -3289,11 +3374,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: true - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -3348,6 +3428,11 @@ packages: find-up: 4.1.0 dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3356,6 +3441,7 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} + hasBin: true dev: true /process-nextick-args@2.0.1: @@ -3406,16 +3492,12 @@ packages: once: 1.4.0 dev: true - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: true - /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true @@ -3442,13 +3524,15 @@ packages: - utf-8-validate dev: true - /querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} - engines: {node: '>=0.4.x'} + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.5 dev: true - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + /querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} dev: true @@ -3480,11 +3564,11 @@ packages: /read-only-stream@2.0.0: resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -3495,8 +3579,8 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -3543,10 +3627,11 @@ packages: engines: {node: '>=8'} dev: true - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -3558,6 +3643,7 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true dependencies: glob: 7.2.3 dev: true @@ -3577,6 +3663,7 @@ packages: /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} + hasBin: true dev: true /safe-buffer@5.1.2: @@ -3591,22 +3678,17 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /schema-utils@3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true - - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true dev: true @@ -3632,12 +3714,31 @@ packages: randombytes: 2.1.0 dev: true + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + dependencies: + randombytes: 2.1.0 + dev: true + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true + /set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -3649,13 +3750,6 @@ packages: fast-safe-stringify: 2.1.1 dev: true - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - dependencies: - shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3663,18 +3757,23 @@ packages: shebang-regex: 3.0.0 dev: true - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true - /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /shell-quote@1.7.4: - resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + + /side-channel@1.0.5: + resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 dev: true /signal-exit@3.0.7: @@ -3688,11 +3787,12 @@ packages: /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + hasBin: true dependencies: bytes-iec: 3.1.1 - chokidar: 3.5.3 + chokidar: 3.6.0 globby: 11.1.0 - lilconfig: 2.0.6 + lilconfig: 2.1.0 nanospinner: 1.1.0 picocolors: 1.0.0 dev: true @@ -3702,6 +3802,15 @@ packages: engines: {node: '>=8'} dev: true + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -3749,14 +3858,14 @@ packages: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /stream-http@3.2.0: @@ -3764,7 +3873,7 @@ packages: dependencies: builtin-status-codes: 3.0.0 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 xtend: 4.0.2 dev: true @@ -3772,7 +3881,7 @@ packages: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} dependencies: inherits: 2.0.4 - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /string-width@4.2.3: @@ -3902,11 +4011,11 @@ packages: end-of-stream: 1.4.4 fs-constants: 1.0.0 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true - /terser-webpack-plugin@5.3.6(uglify-js@3.17.4)(webpack@5.75.0): - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin@5.3.10(uglify-js@3.17.4)(webpack@5.90.3): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -3921,21 +4030,22 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.23 jest-worker: 27.5.1 - schema-utils: 3.1.1 - serialize-javascript: 6.0.0 - terser: 5.15.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.28.1 uglify-js: 3.17.4 - webpack: 5.75.0(uglify-js@3.17.4) + webpack: 5.90.3(uglify-js@3.17.4) dev: true - /terser@5.15.1: - resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} + /terser@5.28.1: + resolution: {integrity: sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==} engines: {node: '>=10'} + hasBin: true dependencies: - '@jridgewell/source-map': 0.3.2 - acorn: 8.8.1 + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -3956,14 +4066,14 @@ packages: /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 xtend: 4.0.2 dev: true /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /through@2.3.8: @@ -4012,11 +4122,11 @@ packages: mocha: 10.2.0 ts-node: 7.0.1 optionalDependencies: - tsconfig-paths: 3.14.1 + tsconfig-paths: 3.15.0 dev: true - /ts-node@10.9.1(@types/node@18.16.16)(typescript@5.1.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@18.16.16)(typescript@5.1.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -4033,10 +4143,10 @@ packages: '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 + '@tsconfig/node16': 1.0.4 '@types/node': 18.16.16 - acorn: 8.8.1 - acorn-walk: 8.2.0 + acorn: 8.11.3 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -4049,6 +4159,7 @@ packages: /ts-node@7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} + hasBin: true dependencies: arrify: 1.0.1 buffer-from: 1.1.2 @@ -4060,12 +4171,12 @@ packages: yn: 2.0.0 dev: true - /tsconfig-paths@3.14.1: - resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} requiresBuild: true dependencies: '@types/json5': 0.0.29 - json5: 1.0.1 + json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 dev: true @@ -4091,7 +4202,7 @@ packages: convert-source-map: 1.9.0 fs.realpath: 1.0.0 object-assign: 4.1.1 - semver: 6.3.0 + semver: 6.3.1 through2: 2.0.5 tsconfig: 5.0.3 typescript: 5.1.3 @@ -4144,15 +4255,18 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} + hasBin: true dev: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} + hasBin: true dev: true /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} + hasBin: true dev: true /unbzip2-stream@1.4.3: @@ -4164,6 +4278,7 @@ packages: /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} + hasBin: true dependencies: acorn-node: 1.8.2 dash-ast: 1.0.0 @@ -4172,43 +4287,38 @@ packages: xtend: 4.0.2 dev: true - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - dev: true - - /update-browserslist-db@1.0.10(browserslist@4.21.4): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.4 - escalade: 3.1.1 + browserslist: 4.23.0 + escalade: 3.1.2 picocolors: 1.0.0 dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 + punycode: 2.3.1 dev: true - /url@0.11.0: - resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + /url@0.11.3: + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: - punycode: 1.3.2 - querystring: 0.2.0 + punycode: 1.4.1 + qs: 6.11.2 dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util@0.10.3: - resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} + /util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} dependencies: - inherits: 2.0.1 + inherits: 2.0.3 dev: true /util@0.12.5: @@ -4217,16 +4327,18 @@ packages: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.10 - which-typed-array: 1.1.9 + is-typed-array: 1.1.13 + which-typed-array: 1.1.14 dev: true /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true dev: true /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -4240,10 +4352,11 @@ packages: /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} + hasBin: true dependencies: anymatch: 3.1.3 browserify: 17.0.0 - chokidar: 3.5.3 + chokidar: 3.6.0 defined: 1.0.1 outpipe: 1.1.1 through2: 4.0.2 @@ -4255,7 +4368,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /webidl-conversions@3.0.1: @@ -4267,8 +4380,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.75.0(uglify-js@3.17.4): - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack@5.90.3(uglify-js@3.17.4): + resolution: {integrity: sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -4277,28 +4390,28 @@ packages: webpack-cli: optional: true dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 0.0.51 - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/wasm-edit': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.8.1 - acorn-import-assertions: 1.8.0(acorn@8.8.1) - browserslist: 4.21.4 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + browserslist: 4.23.0 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.11.0 - es-module-lexer: 0.9.3 + enhanced-resolve: 5.15.1 + es-module-lexer: 1.4.1 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.1.1 + schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6(uglify-js@3.17.4)(webpack@5.75.0) + terser-webpack-plugin: 5.3.10(uglify-js@3.17.4)(webpack@5.90.3) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -4314,31 +4427,25 @@ packages: webidl-conversions: 3.0.1 dev: true - /which-module@2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + /which-typed-array@1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 - dev: true - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - dependencies: - isexe: 2.0.0 + has-tostringtag: 1.0.2 dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 dev: true @@ -4416,6 +4523,10 @@ packages: engines: {node: '>=10'} dev: true + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true @@ -4455,7 +4566,7 @@ packages: require-main-filename: 2.0.0 set-blocking: 2.0.0 string-width: 4.2.3 - which-module: 2.0.0 + which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 dev: true @@ -4465,7 +4576,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 From e757dfd45ac6b6e464427f0bbb6f3e4e5892999a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 20 Jun 2024 20:05:00 +0200 Subject: [PATCH 100/257] other: Updated CHANGELOG.md --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 385824b81..775727bb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,11 @@ To use development versions of Kipper download the ### Added +- Support for config files with a new monorepo package called `@kipper/config`, which implements config file loading + and parsing. This package is used by the Kipper CLI to automatically load and parse config files. + ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). +- Added setup wizard to the `@kipper/cli` to automatically create a Kipper project with a config file. + ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). - Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. ([#287](https://github.com/Kipper-Lang/Kipper/issues/287)). - New valid conversions: @@ -37,6 +42,7 @@ To use development versions of Kipper download the - `ASTNodeMapper`, which handles the mapping between kind numbers, rule names, AST classes and parser context classes. - `PrimaryExpression`, which is an abstract base class for all primary expressions. - `PostfixExpression`, which is an abstract base class for all postfix expressions. + - `PromptModule` in `@kipper/cli`, which contains all prompt-related functions and classes. - New interfaces: - `PrimaryExpressionSemantics`, which represents the semantics of a primary expression. - `PrimaryExpressionTypeSemantics`, which represents the type semantics of a primary expression. @@ -73,6 +79,9 @@ To use development versions of Kipper download the - `KipperTargetBuiltInGenerator.undefinedToStr()`, for the built-in conversion from `undefined` to `str`. - `replaceObjKeys()`, which replaces the keys of an object with the values returned by a function. - `inverseMap()`, which inverts a map by swapping the keys and values. + - `loadConfig()` in `@kipper/cli`, which loads a config file from the specified path. + - `loadAutoConfig()` in `@kipper/cli`, which loads a config file from the current working directory. + - `copyConfigResources()` in `@kipper/cli`, which copies the resources from the config file to the output directory. ### Changed From 5b234b1b60d9167247193303030f256a5a631339 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 20 Jun 2024 20:07:58 +0200 Subject: [PATCH 101/257] fix: Fixed ESLint warnings --- CHANGELOG.md | 4 ++-- kipper/cli/src/commands/analyse.ts | 2 +- kipper/cli/src/output/compile.ts | 5 ++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 775727bb5..f3a13d97c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,10 +19,10 @@ To use development versions of Kipper download the ### Added - Support for config files with a new monorepo package called `@kipper/config`, which implements config file loading - and parsing. This package is used by the Kipper CLI to automatically load and parse config files. + and parsing. This package is used by the Kipper CLI to automatically load and parse config files. ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). - Added setup wizard to the `@kipper/cli` to automatically create a Kipper project with a config file. - ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). + ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). - Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. ([#287](https://github.com/Kipper-Lang/Kipper/issues/287)). - New valid conversions: diff --git a/kipper/cli/src/commands/analyse.ts b/kipper/cli/src/commands/analyse.ts index 94dfaa0d4..a964c4621 100644 --- a/kipper/cli/src/commands/analyse.ts +++ b/kipper/cli/src/commands/analyse.ts @@ -4,7 +4,7 @@ */ import type { args } from "@oclif/parser"; import { Command, flags } from "@oclif/command"; -import { KipperCompiler, KipperLogger, KipperParseStream, LogLevel } from "@kipper/core"; +import { KipperCompiler, KipperLogger, LogLevel } from "@kipper/core"; import { CLIEmitHandler } from "../logger"; import { getParseStream, KipperEncodings, verifyEncoding } from "../input/"; import { prettifiedErrors } from "../decorators"; diff --git a/kipper/cli/src/output/compile.ts b/kipper/cli/src/output/compile.ts index ef9548bb8..1522711cd 100644 --- a/kipper/cli/src/output/compile.ts +++ b/kipper/cli/src/output/compile.ts @@ -2,11 +2,10 @@ * CLI implementation and wrapper functions for Kipper compilations. * @since 0.1.0 */ -import { KipperCompileResult, KipperCompileTarget, KipperParseStream } from "@kipper/core"; +import { KipperCompileResult } from "@kipper/core"; import { constants, promises as fs } from "fs"; -import * as path from "path"; import { KipperFileWriteError } from "../errors"; -import { KipperEncoding, KipperParseFile } from "../input"; +import { KipperEncoding } from "../input"; /** * Writes the file that exist inside the {@link KipperCompileResult compilation result}. From 0409370e1124296a5a23861d4f74a25da6dd060e Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 20 Jun 2024 20:13:27 +0200 Subject: [PATCH 102/257] fix (#508): Added `core`, `target-js` and `target-ts` to config package dependencies --- kipper/config/package.json | 5 ++++- kipper/config/src/kipper-config-interpreter.ts | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kipper/config/package.json b/kipper/config/package.json index 79d604789..21a05434d 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -7,10 +7,13 @@ "is-plain-object": "5.0.0", "deepmerge": "4.3.1", "semver": "7.6.0", - "tslib": "~2.6.2" + "tslib": "~2.6.2", + "@kipper/target-ts": "workspace:~", + "@kipper/target-js": "workspace:~" }, "devDependencies": { "@types/semver": "7.5.7", + "@kipper/core": "workspace:~", "typescript": "5.1.3" }, "engines": { diff --git a/kipper/config/src/kipper-config-interpreter.ts b/kipper/config/src/kipper-config-interpreter.ts index f55930180..c7762447b 100644 --- a/kipper/config/src/kipper-config-interpreter.ts +++ b/kipper/config/src/kipper-config-interpreter.ts @@ -1,4 +1,4 @@ -import { Config, ConfigInterpreter, ConfigInterpreterScheme } from "./abstract/config-interpreter"; +import { Config, ConfigInterpreter, type ConfigInterpreterScheme } from "./abstract/config-interpreter"; import { KipperConfigFile } from "./kipper-config-file"; import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; import { @@ -17,7 +17,7 @@ import * as deepmerge from "deepmerge"; import { isPlainObject } from "is-plain-object"; import { KipperJavaScriptTarget } from "@kipper/target-js"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; -import { KipperCompileTarget } from "@kipper/core"; +import type { KipperCompileTarget } from "@kipper/core"; /** * A type that represents a Kipper config file. From 61b75a9b26677b07017c24cfd44e28ec1709be69 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 20 Jun 2024 20:13:37 +0200 Subject: [PATCH 103/257] other: Regenerated pnpm-lock.yaml --- kipper/cli/pnpm-lock.yaml | 3 -- kipper/config/pnpm-lock.yaml | 9 ++++++ kipper/core/pnpm-lock.yaml | 3 -- pnpm-lock.yaml | 58 ------------------------------------ 4 files changed, 9 insertions(+), 64 deletions(-) diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index f23e7c806..1301a5936 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -385,7 +385,6 @@ packages: /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} - hasBin: true dev: false /ansi-escapes@3.2.0: @@ -957,7 +956,6 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /queue-microtask@1.2.3: @@ -1121,7 +1119,6 @@ packages: /ts-node@10.9.2(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index cc474b04f..ed0bd85f9 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -5,6 +5,12 @@ settings: excludeLinksFromLockfile: false dependencies: + '@kipper/target-js': + specifier: workspace:~ + version: link:../target-js + '@kipper/target-ts': + specifier: workspace:~ + version: link:../target-ts deepmerge: specifier: 4.3.1 version: 4.3.1 @@ -19,6 +25,9 @@ dependencies: version: 2.6.2 devDependencies: + '@kipper/core': + specifier: workspace:~ + version: link:../core '@types/semver': specifier: 7.5.7 version: 7.5.7 diff --git a/kipper/core/pnpm-lock.yaml b/kipper/core/pnpm-lock.yaml index 270a907ef..addc356c9 100644 --- a/kipper/core/pnpm-lock.yaml +++ b/kipper/core/pnpm-lock.yaml @@ -352,7 +352,6 @@ packages: /antlr4ts-cli@0.5.0-alpha.4: resolution: {integrity: sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==} - hasBin: true dev: true /antlr4ts@0.5.0-alpha.4: @@ -1221,7 +1220,6 @@ packages: /update-browserslist-db@1.0.5(browserslist@4.21.3): resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -1260,7 +1258,6 @@ packages: /webpack@5.75.0: resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} - hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17887c071..06476607c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -284,7 +284,6 @@ packages: /@babel/parser@7.24.0: resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.24.0 dev: true @@ -944,7 +943,6 @@ packages: /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 @@ -987,13 +985,11 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} - hasBin: true dev: true /agent-base@6.0.2: @@ -1212,7 +1208,6 @@ packages: /browser-pack@6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} - hasBin: true dependencies: JSONStream: 1.3.5 combine-source-map: 0.8.0 @@ -1291,7 +1286,6 @@ packages: /browserify@17.0.0: resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} engines: {node: '>= 0.8'} - hasBin: true dependencies: JSONStream: 1.3.5 assert: 1.5.1 @@ -1346,7 +1340,6 @@ packages: /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001591 electron-to-chromium: 1.4.685 @@ -1435,7 +1428,6 @@ packages: /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 @@ -1641,7 +1633,6 @@ packages: /coverage-badge-creator@1.0.17: resolution: {integrity: sha512-9agGAXGNafW9avCVg5eJF7rzpTRjTbSf3acNxEUQqxUn7WDrnEAlomHyPIosucZuChPxVPgW6Kg3W4nStj/jCg==} - hasBin: true dev: true /create-ecdh@4.0.4: @@ -1778,7 +1769,6 @@ packages: /deps-sort@2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} - hasBin: true dependencies: JSONStream: 1.3.5 shasum-object: 1.0.0 @@ -1796,7 +1786,6 @@ packages: /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} - hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.1 @@ -1858,7 +1847,6 @@ packages: /ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} - hasBin: true dependencies: jake: 10.8.7 dev: true @@ -1962,7 +1950,6 @@ packages: /eslint@8.56.0: resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 @@ -2018,7 +2005,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true dev: true /esquery@1.5.0: @@ -2038,7 +2024,6 @@ packages: /estimo@2.3.6: resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} engines: {node: '>=12'} - hasBin: true dependencies: '@sitespeed.io/tracium': 0.3.3 commander: 9.5.0 @@ -2082,7 +2067,6 @@ packages: /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} - hasBin: true dependencies: debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 @@ -2215,7 +2199,6 @@ packages: /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true dev: true /flatted@3.3.1: @@ -2450,7 +2433,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true dev: true /hmac-drbg@1.0.1: @@ -2539,7 +2521,6 @@ packages: /insert-module-globals@7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} - hasBin: true dependencies: JSONStream: 1.3.5 acorn-node: 1.8.2 @@ -2590,7 +2571,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: true /is-extglob@2.1.1: @@ -2744,7 +2724,6 @@ packages: /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} - hasBin: true dependencies: async: 3.2.5 chalk: 4.1.2 @@ -2767,7 +2746,6 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -2775,7 +2753,6 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 dev: true @@ -2783,7 +2760,6 @@ packages: /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true dev: true /json-buffer@3.0.1: @@ -2813,7 +2789,6 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true requiresBuild: true dependencies: minimist: 1.2.8 @@ -2823,7 +2798,6 @@ packages: /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true dev: true /jsonparse@1.3.1: @@ -2902,7 +2876,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 dev: true @@ -2971,7 +2944,6 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -3034,7 +3006,6 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 dev: true @@ -3042,13 +3013,11 @@ packages: /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} - hasBin: true dev: true /mocha@10.2.0: resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} engines: {node: '>= 14.0.0'} - hasBin: true dependencies: ansi-colors: 4.1.1 browser-stdout: 1.3.1 @@ -3080,7 +3049,6 @@ packages: /module-deps@6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} - hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 2.0.0 @@ -3110,13 +3078,11 @@ packages: /nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: true /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: true /nanospinner@1.1.0: @@ -3179,7 +3145,6 @@ packages: /nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} - hasBin: true dependencies: '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 @@ -3441,7 +3406,6 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /process-nextick-args@2.0.1: @@ -3629,7 +3593,6 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 @@ -3643,7 +3606,6 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 dev: true @@ -3663,7 +3625,6 @@ packages: /run-script-os@1.1.6: resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - hasBin: true dev: true /safe-buffer@5.1.2: @@ -3689,13 +3650,11 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true dev: true /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: true @@ -3703,7 +3662,6 @@ packages: /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: true @@ -3738,7 +3696,6 @@ packages: /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -3787,7 +3744,6 @@ packages: /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} - hasBin: true dependencies: bytes-iec: 3.1.1 chokidar: 3.6.0 @@ -4042,7 +3998,6 @@ packages: /terser@5.28.1: resolution: {integrity: sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 acorn: 8.11.3 @@ -4115,7 +4070,6 @@ packages: /ts-mocha@10.0.0(mocha@10.2.0): resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} - hasBin: true peerDependencies: mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X dependencies: @@ -4127,7 +4081,6 @@ packages: /ts-node@10.9.2(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -4159,7 +4112,6 @@ packages: /ts-node@7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} - hasBin: true dependencies: arrify: 1.0.1 buffer-from: 1.1.2 @@ -4255,18 +4207,15 @@ packages: /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - hasBin: true dev: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} - hasBin: true dev: true /umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} - hasBin: true dev: true /unbzip2-stream@1.4.3: @@ -4278,7 +4227,6 @@ packages: /undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} - hasBin: true dependencies: acorn-node: 1.8.2 dash-ast: 1.0.0 @@ -4289,7 +4237,6 @@ packages: /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -4333,12 +4280,10 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true dev: true /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -4352,7 +4297,6 @@ packages: /watchify@4.0.0: resolution: {integrity: sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==} engines: {node: '>= 8.10.0'} - hasBin: true dependencies: anymatch: 3.1.3 browserify: 17.0.0 @@ -4383,7 +4327,6 @@ packages: /webpack@5.90.3(uglify-js@3.17.4): resolution: {integrity: sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==} engines: {node: '>=10.13.0'} - hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: @@ -4445,7 +4388,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 dev: true From 273611c0ee8a2c490f0c779cbd118980a7b1f13f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 20 Jun 2024 20:49:49 +0200 Subject: [PATCH 104/257] other: Fixed test files for the `@kipper/config` package --- test/config-files/errors/unknown-target.json | 15 ++++ .../kip-config.sec-extension.json | 2 +- .../config/kipper-config-file-interpreter.ts | 79 ++++++++----------- 3 files changed, 49 insertions(+), 47 deletions(-) create mode 100644 test/config-files/errors/unknown-target.json diff --git a/test/config-files/errors/unknown-target.json b/test/config-files/errors/unknown-target.json new file mode 100644 index 000000000..017238fcb --- /dev/null +++ b/test/config-files/errors/unknown-target.json @@ -0,0 +1,15 @@ +{ + "outDir": "dist", + "srcDir": "test/kipper-files", + "compiler": { + "version": "*", + "target": "unknown" + }, + "files": [ + "test/kipper-files/main.kip" + ], + "resources": [ + "img/icon.png", + "img/Kipper-Logo-without-head.png:icon.png" + ] +} diff --git a/test/config-files/kip-config.sec-extension.json b/test/config-files/kip-config.sec-extension.json index 296d3ff36..a9d1a6546 100644 --- a/test/config-files/kip-config.sec-extension.json +++ b/test/config-files/kip-config.sec-extension.json @@ -2,7 +2,7 @@ "outDir": "dist", "srcDir": "test/kipper-files", "compiler": { - "target": "ext" + "target": "js" }, "files": [ "test/kipper-files/multi-function-definition.kip" diff --git a/test/module/config/kipper-config-file-interpreter.ts b/test/module/config/kipper-config-file-interpreter.ts index dea4c8d8b..3a1fa592a 100644 --- a/test/module/config/kipper-config-file-interpreter.ts +++ b/test/module/config/kipper-config-file-interpreter.ts @@ -3,6 +3,7 @@ import { assert } from "chai"; import { KipperConfigFile, KipperConfigInterpreter, version as kipConfigVersion } from "@kipper/config"; import * as semver from "semver"; import * as path from "node:path"; +import { KipperTypeScriptTarget } from "@kipper/target-ts"; const basicKipConfig = getFileName("kip-config.basic.json"); const extendsKipConfig = getFileName("kip-config.extended.json"); @@ -20,6 +21,7 @@ describe("KipperConfigInterpreter", () => { { file: getFileName("errors/missing-required-field.json"), error: "ConfigValidationError" }, { file: getFileName("errors/invalid-type.json"), error: "ConfigValidationError" }, { file: getFileName("errors/invalid-array-element-type.json"), error: "ConfigValidationError" }, + { file: getFileName("errors/unknown-target.json"), error: "UnknownTargetError" }, ]; describe("no extends", () => { @@ -28,32 +30,19 @@ describe("KipperConfigInterpreter", () => { const config = await interpreter.loadConfig(kipperConfigFile); const pwd = process.cwd(); - assert.deepEqual(config.raw, { - basePath: pwd, - srcDir: `${pwd}/test/kipper-files`, - outDir: `${pwd}/dist`, - compiler: { - version: semver.parse(semver.clean(kipConfigVersion))!, - target: "ts", - }, - files: [{ src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` }], - resources: [ - { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, - { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, - ], - }); - }); - - errorTestCases.forEach(({ file, error }) => { - it(`should throw '${error}' if the file is '${path.basename(file)}'`, async () => { - try { - const kipperConfigFile = await KipperConfigFile.fromFile(file, "utf8"); - await interpreter.loadConfig(kipperConfigFile); - assert.fail("Expected an error to be thrown"); - } catch (err) { - assert.equal((err).constructor.name, error); - } - }); + assert.equal(config.basePath, pwd); + assert.equal(config.srcDir, `${pwd}/test/kipper-files`); + assert.equal(config.outDir, `${pwd}/dist`); + assert.deepEqual(config.compiler.version, semver.parse(semver.clean(kipConfigVersion))); + assert.instanceOf(config.compiler.target, KipperTypeScriptTarget); + assert.deepEqual(config.files, [{ + src: `${pwd}/test/kipper-files/main.kip`, + outDir: `${pwd}/dist` + }]); + assert.deepEqual(config.resources, [ + { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, + { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, + ]); }); }); @@ -63,28 +52,26 @@ describe("KipperConfigInterpreter", () => { const config = await interpreter.loadConfig(kipperConfigFile); const pwd = process.cwd(); - assert.deepEqual(config.raw, { - basePath: pwd, - srcDir: `${pwd}/test/kipper-files`, - outDir: `${pwd}/dist`, - compiler: { - version: semver.parse(semver.clean(kipConfigVersion))!, - target: "ts", - }, - files: [ - { src: `${pwd}/test/kipper-files/multi-function-definition.kip`, outDir: `${pwd}/dist` }, - { src: `${pwd}/test/kipper-files/multi-function-call.kip`, outDir: `${pwd}/dist` }, - { src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` }, - ], - resources: [ - { src: `${pwd}/img/Kipper-Logo-with-head.png`, out: `${pwd}/dist/img/Kipper-Logo-with-head.png` }, - { src: `${pwd}/img/Kipper-Icon.png`, out: `${pwd}/dist/img/Kipper-Icon.png` }, - { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, - { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, - ], - }); + assert.equal(config.basePath, pwd); + assert.equal(config.srcDir, `${pwd}/test/kipper-files`); + assert.equal(config.outDir, `${pwd}/dist`); + assert.deepEqual(config.compiler.version, semver.parse(semver.clean(kipConfigVersion))); + assert.instanceOf(config.compiler.target, KipperTypeScriptTarget); + assert.deepEqual(config.files, [ + { src: `${pwd}/test/kipper-files/multi-function-definition.kip`, outDir: `${pwd}/dist` }, + { src: `${pwd}/test/kipper-files/multi-function-call.kip`, outDir: `${pwd}/dist` }, + { src: `${pwd}/test/kipper-files/main.kip`, outDir: `${pwd}/dist` }, + ]); + assert.deepEqual(config.resources, [ + { src: `${pwd}/img/Kipper-Logo-with-head.png`, out: `${pwd}/dist/img/Kipper-Logo-with-head.png` }, + { src: `${pwd}/img/Kipper-Icon.png`, out: `${pwd}/dist/img/Kipper-Icon.png` }, + { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, + { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, + ]); }); + }); + describe("errors", () => { errorTestCases.forEach(({ file, error }) => { it(`should throw '${error}' if the file is '${path.basename(file)}'`, async () => { try { From ab870d4381b675d1bfa11c343f9befbc89bdbe2a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 24 Jun 2024 08:40:43 +0200 Subject: [PATCH 105/257] other: Prettified code in kipper-config-file-interpreter.ts --- test/module/config/kipper-config-file-interpreter.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/module/config/kipper-config-file-interpreter.ts b/test/module/config/kipper-config-file-interpreter.ts index 3a1fa592a..b78c43fde 100644 --- a/test/module/config/kipper-config-file-interpreter.ts +++ b/test/module/config/kipper-config-file-interpreter.ts @@ -35,10 +35,12 @@ describe("KipperConfigInterpreter", () => { assert.equal(config.outDir, `${pwd}/dist`); assert.deepEqual(config.compiler.version, semver.parse(semver.clean(kipConfigVersion))); assert.instanceOf(config.compiler.target, KipperTypeScriptTarget); - assert.deepEqual(config.files, [{ - src: `${pwd}/test/kipper-files/main.kip`, - outDir: `${pwd}/dist` - }]); + assert.deepEqual(config.files, [ + { + src: `${pwd}/test/kipper-files/main.kip`, + outDir: `${pwd}/dist`, + }, + ]); assert.deepEqual(config.resources, [ { src: `${pwd}/img/icon.png`, out: `${pwd}/dist/img/icon.png` }, { src: `${pwd}/img/Kipper-Logo-without-head.png`, out: `${pwd}/dist/new-img-folder/icon.png` }, From 2e67210ca3c6941184448782525109622d790802 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 24 Jun 2024 10:43:52 +0200 Subject: [PATCH 106/257] minor (#508): Changed order of precedence to prefer flags over the config file as they are explicitly defined --- kipper/cli/src/commands/compile.ts | 29 ++++++++++++++++++----------- kipper/cli/src/commands/run.ts | 5 ----- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index 08fb0f102..2f7d44a36 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -42,13 +42,11 @@ export default class Compile extends Command { static override flags: flags.Input = { target: flags.string({ char: "t", - default: "js", description: "The target language where the compiled program should be emitted to.", options: ["js", "ts"], }), encoding: flags.string({ char: "e", - default: "utf8", description: `The encoding that should be used to read the file (${KipperEncodings.join()}).`, parse: verifyEncoding, }), @@ -115,13 +113,14 @@ export default class Compile extends Command { // Compilation-required const { stream, outDir } = await getParseStream(args, flags, preExistingConfig); - const target: KipperCompileTarget = preExistingCompileConfig?.target ?? getTarget(flags["target"]); + const target: KipperCompileTarget = flags["target"] ? + getTarget(flags["target"]) : + preExistingCompileConfig?.target ?? getTarget("js"); // Output - const encoding = flags["encoding"] as KipperEncoding; - const outPath = `${path.resolve(outDir)}/${stream instanceof KipperParseFile ? stream.path.name : stream.name}.${ - target.fileExtension - }`; + const encoding = flags["encoding"] || "utf-8"; + const fileName = stream instanceof KipperParseFile ? stream.path.name : stream.name; + const outPath = `${path.resolve(outDir)}/${fileName}.${target.fileExtension}`; return { args, @@ -138,12 +137,20 @@ export default class Compile extends Command { target: target, optimisationOptions: { optimiseInternals: - preExistingCompileConfig?.optimisationOptions?.optimiseInternals ?? flags["optimise-internals"], + flags["optimise-internals"] ?? + preExistingCompileConfig?.optimisationOptions?.optimiseInternals ?? + defaultOptimisationOptions.optimiseInternals, optimiseBuiltIns: - preExistingCompileConfig?.optimisationOptions?.optimiseBuiltIns ?? flags["optimise-builtins"], + flags["optimise-builtins"] ?? + preExistingCompileConfig?.optimisationOptions?.optimiseBuiltIns ?? + defaultOptimisationOptions.optimiseBuiltIns, }, - recover: preExistingCompileConfig?.recover ?? flags["recover"], - abortOnFirstError: preExistingCompileConfig?.abortOnFirstError ?? flags["abort-on-first-error"], + recover: flags["recover"] ?? + preExistingCompileConfig?.recover ?? + EvaluatedCompileConfig.defaults.recover, + abortOnFirstError: flags["abort-on-first-error"] ?? + preExistingCompileConfig?.abortOnFirstError ?? + EvaluatedCompileConfig.defaults.abortOnFirstError, } as CompileConfig, }, }; diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index 64f5fd949..2c51fa810 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -28,19 +28,16 @@ export default class Run extends Compile { static override flags: flags.Input = { target: flags.string({ char: "t", - default: "js", description: "The target language where the compiled program should be emitted to.", options: ["js", "ts"], }), encoding: flags.string({ char: "e", - default: "utf8", description: `The encoding that should be used to read the file (${KipperEncodings.join()}).`, parse: verifyEncoding, }), "output-dir": flags.string({ char: "o", - default: "build", description: "The build directory where the compiled files should be placed. If the path does not exist, it will be created.", }), @@ -50,13 +47,11 @@ export default class Run extends Compile { }), "optimise-internals": flags.boolean({ char: "i", - default: defaultOptimisationOptions.optimiseInternals, description: "Optimise the generated internal functions using tree-shaking to reduce the size of the output.", allowNo: true, }), "optimise-builtins": flags.boolean({ char: "b", - default: defaultOptimisationOptions.optimiseInternals, description: "Optimise the generated built-in functions using tree-shaking to reduce the size of the output.", allowNo: true, }), From 3c86d9293815aa285b46bde50fe5fe30a0bd26c5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 24 Jun 2024 10:45:04 +0200 Subject: [PATCH 107/257] fix (#508): Fixed config file loading bugs in the CLI --- kipper/cli/src/config-loader.ts | 14 +++++++------- kipper/cli/src/copy-resources.ts | 7 +++++++ kipper/cli/src/decorators.ts | 18 ++++++++++++++++-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/kipper/cli/src/config-loader.ts b/kipper/cli/src/config-loader.ts index 93e9af72c..d5250c527 100644 --- a/kipper/cli/src/config-loader.ts +++ b/kipper/cli/src/config-loader.ts @@ -3,6 +3,7 @@ * @since 0.11.0 */ import { EvaluatedKipperConfigFile, KipperConfigFile, KipperConfigInterpreter } from "@kipper/config"; +import * as fs from "fs"; export let defaultConfigInterpreter = new KipperConfigInterpreter(); @@ -54,13 +55,12 @@ export async function loadConfig( */ export async function loadAutoConfig(): Promise { const workdir = process.cwd(); - try { - return await loadConfig({ path: `${workdir}/kip-config.json`, encoding: "utf8" }); - } catch (e) { - try { - return await loadConfig({ path: `${workdir}/kipper-config.json`, encoding: "utf8" }); - } catch (e) { - return undefined; + + const potentialPaths = [`${workdir}/kip-config.json`, `${workdir}/kipper-config.json`]; + for (const path of potentialPaths) { + if (fs.existsSync(path)) { + return loadConfig({ path, encoding: "utf8" }); } } + return undefined; } diff --git a/kipper/cli/src/copy-resources.ts b/kipper/cli/src/copy-resources.ts index d2e02fdc9..4abd88c42 100644 --- a/kipper/cli/src/copy-resources.ts +++ b/kipper/cli/src/copy-resources.ts @@ -1,7 +1,10 @@ import { EvaluatedKipperConfigFile } from "@kipper/config"; import * as fs from "node:fs/promises"; +import * as fsSync from "node:fs"; import { KipperLogger } from "@kipper/core"; +import path from "node:path"; + /** * Copy resources from the source to the destination. * @param resources The resources to copy. @@ -13,6 +16,10 @@ export async function copyConfigResources( logger?: KipperLogger, ): Promise { for (const resource of resources) { + const dir = path.dirname(resource.out); + if (!fsSync.existsSync(dir) || !(await fs.stat(dir)).isDirectory()) { + await fs.mkdir(dir, { recursive: true }); + } await fs.copyFile(resource.src, resource.out); if (logger) { logger.debug(`Copied resource from ${resource.src} to ${resource.out}`); diff --git a/kipper/cli/src/decorators.ts b/kipper/cli/src/decorators.ts index 0cc8757a9..277aeaeac 100644 --- a/kipper/cli/src/decorators.ts +++ b/kipper/cli/src/decorators.ts @@ -5,6 +5,7 @@ import { Command } from "@oclif/command"; import { KipperInternalError } from "@kipper/core"; import { KipperCLIError } from "./errors"; import { CLIError as OclifCLIError, PrettyPrintableError } from "@oclif/errors"; +import { ConfigError } from "@kipper/config"; /** * Wraps the given function with an async error handler that will pretty print errors using the {@link Command.error} @@ -22,10 +23,11 @@ export function prettifiedErrors() { await originalFunc.call(this, ...argArray); } catch (error) { const cliError = error instanceof KipperCLIError || error instanceof OclifCLIError; + const configError = error instanceof ConfigError; const internalError = error instanceof KipperInternalError; // Error configuration - const name: string = cliError ? "Error" : internalError ? "Unexpected Internal Error" : "CLI Error"; + const name: string = getErrorName(cliError, configError, internalError); const msg: string = error && typeof error === "object" && "message" in error && typeof error.message === "string" ? error.message @@ -34,7 +36,7 @@ export function prettifiedErrors() { const errConfig: { exit: number } & PrettyPrintableError = { exit: 1, suggestions: - internalError || !cliError + internalError || (!cliError && !configError) ? [ "Ensure no invalid types or data were passed to module functions or classes. Otherwise report the " + "issue on https://github.com/Kipper-Lang/Kipper. Help us improve Kipper!️", @@ -59,3 +61,15 @@ export function prettifiedErrors() { return func as TypedPropertyDescriptor<(...argArray: Array) => Promise>; }; } + +function getErrorName(cliError: boolean, configError: boolean, internalError: boolean): string { + if (cliError) { + return "Error"; + } else if (configError) { + return "Config Error"; + } else if (internalError) { + return "Internal Error"; + } else { + return "CLI Error"; + } +} From fb028e894a72f6b31867c0759ea54e776a8de144 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 08:11:56 +0200 Subject: [PATCH 108/257] other: Fixed PNPM version to v8 to avoid breaking changes introduced by v9 --- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 5a885ffaf..35d33f132 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -32,7 +32,7 @@ }, "engines": { "node": ">=16.0.0", - "pnpm": ">=8" + "pnpm": "8" }, "files": [ "lib", diff --git a/kipper/config/package.json b/kipper/config/package.json index 21a05434d..bf3d98c79 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -18,7 +18,7 @@ }, "engines": { "node": ">=16.0.0", - "pnpm": ">=8" + "pnpm": "8" }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Kipper-Lang/Kipper/issues", diff --git a/kipper/core/package.json b/kipper/core/package.json index 3bde0d22c..458151e8e 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -17,7 +17,7 @@ }, "engines": { "node": ">=16.0.0", - "pnpm": ">=8" + "pnpm": "8" }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Kipper-Lang/Kipper/issues", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 1fb40743f..41b203d57 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -14,7 +14,7 @@ }, "engines": { "node": ">=16.0.0", - "pnpm": ">=8" + "pnpm": "8" }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Kipper-Lang/Kipper/issues", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index c6b650db5..4a4124ca2 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -15,7 +15,7 @@ }, "engines": { "node": ">=16.0.0", - "pnpm": ">=8" + "pnpm": "8" }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Kipper-Lang/Kipper/issues", diff --git a/kipper/web/package.json b/kipper/web/package.json index 69529e42d..bb5634e3e 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -15,7 +15,7 @@ }, "engines": { "node": ">=16.0.0", - "pnpm": ">=8" + "pnpm": "8" }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Kipper-Lang/Kipper/issues", diff --git a/package.json b/package.json index 6b22950f0..2fa0ddf5b 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ }, "engines": { "node": ">=16.0.0", - "pnpm": ">=8" + "pnpm": "8" }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Kipper-Lang/Kipper/issues", From 7dfa995b2de08e4bb3a50e6c84f82c1fac4c48d5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 08:49:58 +0200 Subject: [PATCH 109/257] fix: Fixed outdated name `arrayLiteralPrimaryExpression` (now `arrayPrimaryExpression`) in KipperParser.g4 --- kipper/cli/src/commands/compile.ts | 21 +- kipper/core/KipperParser.g4 | 4 +- kipper/core/src/compiler/ast/ast-generator.ts | 10 +- .../core/src/compiler/ast/common/ast-types.ts | 4 +- .../compiler/ast/mapping/ast-node-mapper.ts | 6 +- .../variable-declaration.ts | 6 +- .../array-primary-expression.ts | 2 +- .../constant/constant-expression.ts | 2 +- .../src/compiler/parser/antlr/KipperLexer.ts | 3 + .../compiler/parser/antlr/KipperParser.interp | 2 +- .../src/compiler/parser/antlr/KipperParser.ts | 30 +-- .../parser/antlr/KipperParserListener.ts | 197 +++++++++--------- .../parser/antlr/KipperParserVisitor.ts | 193 +++++++++-------- .../parser/parse-rule-kind-mapping.ts | 2 +- 14 files changed, 243 insertions(+), 239 deletions(-) diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index 2f7d44a36..54512ed60 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -113,9 +113,9 @@ export default class Compile extends Command { // Compilation-required const { stream, outDir } = await getParseStream(args, flags, preExistingConfig); - const target: KipperCompileTarget = flags["target"] ? - getTarget(flags["target"]) : - preExistingCompileConfig?.target ?? getTarget("js"); + const target: KipperCompileTarget = flags["target"] + ? getTarget(flags["target"]) + : preExistingCompileConfig?.target ?? getTarget("js"); // Output const encoding = flags["encoding"] || "utf-8"; @@ -138,17 +138,16 @@ export default class Compile extends Command { optimisationOptions: { optimiseInternals: flags["optimise-internals"] ?? - preExistingCompileConfig?.optimisationOptions?.optimiseInternals ?? - defaultOptimisationOptions.optimiseInternals, + preExistingCompileConfig?.optimisationOptions?.optimiseInternals ?? + defaultOptimisationOptions.optimiseInternals, optimiseBuiltIns: flags["optimise-builtins"] ?? - preExistingCompileConfig?.optimisationOptions?.optimiseBuiltIns ?? - defaultOptimisationOptions.optimiseBuiltIns, + preExistingCompileConfig?.optimisationOptions?.optimiseBuiltIns ?? + defaultOptimisationOptions.optimiseBuiltIns, }, - recover: flags["recover"] ?? - preExistingCompileConfig?.recover ?? - EvaluatedCompileConfig.defaults.recover, - abortOnFirstError: flags["abort-on-first-error"] ?? + recover: flags["recover"] ?? preExistingCompileConfig?.recover ?? EvaluatedCompileConfig.defaults.recover, + abortOnFirstError: + flags["abort-on-first-error"] ?? preExistingCompileConfig?.abortOnFirstError ?? EvaluatedCompileConfig.defaults.abortOnFirstError, } as CompileConfig, diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 8e133947d..0fb272adf 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -157,7 +157,7 @@ primaryExpression // Primary expressions, which build up the rest of the more co | stringPrimaryExpression | fStringPrimaryExpression | numberPrimaryExpression - | arrayLiteralPrimaryExpression + | arrayPrimaryExpression | voidOrNullOrUndefinedPrimaryExpression ; @@ -200,7 +200,7 @@ numberPrimaryExpression : IntegerConstant | FloatingConstant ; -arrayLiteralPrimaryExpression +arrayPrimaryExpression : '[' (expression (',' expression)*)? ']' ; diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 54fa9ada6..3cac438a3 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -56,7 +56,7 @@ import type { PassOnLogicalAndExpressionContext, ReturnStatementContext, SliceNotationMemberAccessExpressionContext, - storageTypeSpecifierContext, + StorageTypeSpecifierContext, StringPrimaryExpressionContext, SwitchLabeledStatementContext, SwitchStatementContext, @@ -353,13 +353,13 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi public exitNumberPrimaryExpression: (ctx: NumberPrimaryExpressionContext) => void = this.handleExitingTreeNode; /** - * Enter a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. + * Enter a parse tree produced by `KipperParser.arrayPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ public enterArrayPrimaryExpression: (ctx: ArrayPrimaryExpressionContext) => void = this.handleEnteringTreeNode; /** - * Exit a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. + * Exit a parse tree produced by `KipperParser.arrayPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ public exitArrayPrimaryExpression: (ctx: ArrayPrimaryExpressionContext) => void = this.handleExitingTreeNode; @@ -992,13 +992,13 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi * Enter a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public enterStorageTypeSpecifier?(ctx: storageTypeSpecifierContext): void; + public enterStorageTypeSpecifier?(ctx: StorageTypeSpecifierContext): void; /** * Exit a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). */ - public exitStorageTypeSpecifier?(ctx: storageTypeSpecifierContext): void; + public exitStorageTypeSpecifier?(ctx: StorageTypeSpecifierContext): void; /** * Enter a parse tree produced by `KipperParser.initDeclarator`. diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index 17f5aea7d..6042eb89e 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -145,7 +145,7 @@ export type ASTStatementKind = */ export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_numberPrimaryExpression - | typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression + | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression | typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression @@ -212,7 +212,7 @@ export type ASTStatementRuleName = */ export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_numberPrimaryExpression] - | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_boolPrimaryExpression] diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 6e5f5a83f..8aa123cba 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -122,7 +122,7 @@ export class ASTNodeMapper { */ public static readonly expressionKindToClassMap = { [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpression, - [ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression]: ArrayPrimaryExpression, + [ParseRuleKindMapping.RULE_arrayPrimaryExpression]: ArrayPrimaryExpression, [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpression, [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpression, [ParseRuleKindMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpression, @@ -183,7 +183,7 @@ export class ASTNodeMapper { */ public static readonly expressionKindToRuleContextMap = { [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpressionContext, - [ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression]: ArrayPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_arrayPrimaryExpression]: ArrayPrimaryExpressionContext, [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpressionContext, [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpressionContext, [ParseRuleKindMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpressionContext, @@ -249,7 +249,7 @@ export class ASTNodeMapper { */ public static readonly expressionRuleNameToClassMap = { RULE_numberPrimaryExpression: NumberPrimaryExpression, - RULE_arrayLiteralPrimaryExpression: ArrayPrimaryExpression, + RULE_arrayPrimaryExpression: ArrayPrimaryExpression, RULE_identifierPrimaryExpression: IdentifierPrimaryExpression, RULE_voidOrNullOrUndefinedPrimaryExpression: VoidOrNullOrUndefinedPrimaryExpression, RULE_boolPrimaryExpression: BoolPrimaryExpression, diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts index 162d80f3b..d8c9a2c78 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts @@ -18,7 +18,7 @@ import { InitDeclaratorContext, KindParseRuleMapping, ParseRuleKindMapping, - storageTypeSpecifierContext, + StorageTypeSpecifierContext, VariableDeclarationContext, } from "../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; @@ -133,8 +133,8 @@ export class VariableDeclaration extends Declaration = this.getAntlrRuleChildren(); // Determine the ctx instances - const storageTypeCtx = ( - children.find((val) => val instanceof storageTypeSpecifierContext) + const storageTypeCtx = ( + children.find((val) => val instanceof StorageTypeSpecifierContext) ); const initDeclaratorCtx = ( children.find((val) => val instanceof InitDeclaratorContext) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts index f3decb468..b9fc8986c 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts @@ -28,7 +28,7 @@ export class ArrayPrimaryExpression extends ConstantExpression< * The static kind for this AST Node. * @since 0.11.0 */ - public static readonly kind = ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression; + public static readonly kind = ParseRuleKindMapping.RULE_arrayPrimaryExpression; /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts index a02d0bb21..1dc101d15 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts @@ -19,7 +19,7 @@ export type ASTConstantExpressionKind = | typeof ParseRuleKindMapping.RULE_stringPrimaryExpression | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression - | typeof ParseRuleKindMapping.RULE_arrayLiteralPrimaryExpression; + | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression; /** * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts index c4e3d155b..9c366d450 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts @@ -5,7 +5,10 @@ import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; import { RuleContext } from "antlr4ts/RuleContext"; import { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.interp b/kipper/core/src/compiler/parser/antlr/KipperParser.interp index c8c0930f9..4940e6f5a 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.interp @@ -195,7 +195,7 @@ fStringPrimaryExpression fStringSingleQuoteAtom fStringDoubleQuoteAtom numberPrimaryExpression -arrayLiteralPrimaryExpression +arrayPrimaryExpression voidOrNullOrUndefinedPrimaryExpression computedPrimaryExpression argumentExpressionList diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.ts b/kipper/core/src/compiler/parser/antlr/KipperParser.ts index f42932edd..c09d9ebde 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.ts @@ -2,15 +2,19 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; import { Parser } from "antlr4ts/Parser"; import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; import { RecognitionException } from "antlr4ts/RecognitionException"; import { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; @@ -140,7 +144,7 @@ export class KipperParser extends Parser { public static readonly RULE_fStringSingleQuoteAtom = 35; public static readonly RULE_fStringDoubleQuoteAtom = 36; public static readonly RULE_numberPrimaryExpression = 37; - public static readonly RULE_arrayLiteralPrimaryExpression = 38; + public static readonly RULE_arrayPrimaryExpression = 38; public static readonly RULE_voidOrNullOrUndefinedPrimaryExpression = 39; public static readonly RULE_computedPrimaryExpression = 40; public static readonly RULE_argumentExpressionList = 41; @@ -210,7 +214,7 @@ export class KipperParser extends Parser { "fStringSingleQuoteAtom", "fStringDoubleQuoteAtom", "numberPrimaryExpression", - "arrayLiteralPrimaryExpression", + "arrayPrimaryExpression", "voidOrNullOrUndefinedPrimaryExpression", "computedPrimaryExpression", "argumentExpressionList", @@ -851,8 +855,8 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public storageTypeSpecifier(): storageTypeSpecifierContext { - let _localctx: storageTypeSpecifierContext = new storageTypeSpecifierContext(this._ctx, this.state); + public storageTypeSpecifier(): StorageTypeSpecifierContext { + let _localctx: StorageTypeSpecifierContext = new StorageTypeSpecifierContext(this._ctx, this.state); this.enterRule(_localctx, 16, KipperParser.RULE_storageTypeSpecifier); let _la: number; try { @@ -1889,7 +1893,7 @@ export class KipperParser extends Parser { this.enterOuterAlt(_localctx, 7); { this.state = 321; - this.arrayLiteralPrimaryExpression(); + this.arrayPrimaryExpression(); } break; case KipperParser.Void: @@ -2320,9 +2324,9 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public arrayLiteralPrimaryExpression(): ArrayPrimaryExpressionContext { + public arrayPrimaryExpression(): ArrayPrimaryExpressionContext { let _localctx: ArrayPrimaryExpressionContext = new ArrayPrimaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 76, KipperParser.RULE_arrayLiteralPrimaryExpression); + this.enterRule(_localctx, 76, KipperParser.RULE_arrayPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); @@ -4691,8 +4695,8 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { } export class VariableDeclarationContext extends KipperParserRuleContext { - public storageTypeSpecifier(): storageTypeSpecifierContext { - return this.getRuleContext(0, storageTypeSpecifierContext); + public storageTypeSpecifier(): StorageTypeSpecifierContext { + return this.getRuleContext(0, StorageTypeSpecifierContext); } public initDeclarator(): InitDeclaratorContext { return this.getRuleContext(0, InitDeclaratorContext); @@ -4726,7 +4730,7 @@ export class VariableDeclarationContext extends KipperParserRuleContext { } } -export class storageTypeSpecifierContext extends KipperParserRuleContext { +export class StorageTypeSpecifierContext extends KipperParserRuleContext { public Var(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Var, 0); } @@ -5606,7 +5610,7 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { public numberPrimaryExpression(): NumberPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, NumberPrimaryExpressionContext); } - public arrayLiteralPrimaryExpression(): ArrayPrimaryExpressionContext | undefined { + public arrayPrimaryExpression(): ArrayPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, ArrayPrimaryExpressionContext); } public voidOrNullOrUndefinedPrimaryExpression(): VoidOrNullOrUndefinedPrimaryExpressionContext | undefined { @@ -6028,7 +6032,7 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { } // @Override public get ruleIndex(): number { - return KipperParser.RULE_arrayLiteralPrimaryExpression; + return KipperParser.RULE_arrayPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts index 13856ea89..0de2c55ac 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts @@ -2,104 +2,103 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - IterationStatementContext, - JumpStatementContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NumberPrimaryExpressionContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - storageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; /** * This interface defines a complete listener for a parse tree produced by @@ -523,12 +522,12 @@ export interface KipperParserListener extends ParseTreeListener { * Enter a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx the parse tree */ - enterStorageTypeSpecifier?: (ctx: storageTypeSpecifierContext) => void; + enterStorageTypeSpecifier?: (ctx: StorageTypeSpecifierContext) => void; /** * Exit a parse tree produced by `KipperParser.storageTypeSpecifier`. * @param ctx the parse tree */ - exitStorageTypeSpecifier?: (ctx: storageTypeSpecifierContext) => void; + exitStorageTypeSpecifier?: (ctx: StorageTypeSpecifierContext) => void; /** * Enter a parse tree produced by `KipperParser.declarator`. @@ -850,12 +849,12 @@ export interface KipperParserListener extends ParseTreeListener { exitNumberPrimaryExpression?: (ctx: NumberPrimaryExpressionContext) => void; /** - * Enter a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. + * Enter a parse tree produced by `KipperParser.arrayPrimaryExpression`. * @param ctx the parse tree */ enterArrayPrimaryExpression?: (ctx: ArrayPrimaryExpressionContext) => void; /** - * Exit a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. + * Exit a parse tree produced by `KipperParser.arrayPrimaryExpression`. * @param ctx the parse tree */ exitArrayPrimaryExpression?: (ctx: ArrayPrimaryExpressionContext) => void; diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts index 4801f1c0f..ccc97c4da 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts @@ -2,104 +2,103 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - IterationStatementContext, - JumpStatementContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NumberPrimaryExpressionContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - storageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; /** * This interface defines a complete generic visitor for a parse tree produced @@ -370,7 +369,7 @@ export interface KipperParserVisitor extends ParseTreeVisitor { * @param ctx the parse tree * @return the visitor result */ - visitStorageTypeSpecifier?: (ctx: storageTypeSpecifierContext) => Result; + visitStorageTypeSpecifier?: (ctx: StorageTypeSpecifierContext) => Result; /** * Visit a parse tree produced by `KipperParser.declarator`. @@ -576,7 +575,7 @@ export interface KipperParserVisitor extends ParseTreeVisitor { visitNumberPrimaryExpression?: (ctx: NumberPrimaryExpressionContext) => Result; /** - * Visit a parse tree produced by `KipperParser.arrayLiteralPrimaryExpression`. + * Visit a parse tree produced by `KipperParser.arrayPrimaryExpression`. * @param ctx the parse tree * @return the visitor result */ diff --git a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts index b6ce8d3b6..ec4fc4ff5 100644 --- a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts @@ -57,7 +57,7 @@ export const ParseRuleKindMapping = { RULE_fStringSingleQuoteAtom: 35, RULE_fStringDoubleQuoteAtom: 36, RULE_numberPrimaryExpression: 37, - RULE_arrayLiteralPrimaryExpression: 38, + RULE_arrayPrimaryExpression: 38, RULE_voidOrNullOrUndefinedPrimaryExpression: 39, RULE_computedPrimaryExpression: 40, RULE_argumentExpressionList: 41, From 850c079820a83a161ab665cd27e7ebeacdad0685 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 11:17:45 +0200 Subject: [PATCH 110/257] other: Added new.test.ts --- test/module/cli/new.test.ts | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/module/cli/new.test.ts diff --git a/test/module/cli/new.test.ts b/test/module/cli/new.test.ts new file mode 100644 index 000000000..a09a86e2c --- /dev/null +++ b/test/module/cli/new.test.ts @@ -0,0 +1,54 @@ +import { assert } from "chai"; +import * as path from "path"; +import * as fs from "fs/promises"; +import { test } from "@oclif/test"; +import { version } from "@kipper/core"; + +const originalCwd = process.cwd(); +const tempFolder = path.join(__dirname, "..", "..", "temp"); + +describe("Kipper CLI 'new'", () => { + beforeEach(async () => { + await fs.mkdir(tempFolder, { recursive: true }); + process.chdir(tempFolder); + }); + + test + .stdout() + .command(["new", "-d"]) + .it("using '-d' (Default Config)", async (ctx) => { + assert.isNotEmpty(ctx.stdout); + assert.include(ctx.stdout, "Using default settings. Skipping setup wizard."); + assert.include(ctx.stdout, "Project 'new-kipper-project' created successfully!"); + + // Ensure that the files were created + const files = await fs.readdir(tempFolder); + assert.include(files, "kip-config.json"); + assert.include(files, "src"); + assert.include(files, "package.json"); + assert.include(files, ".gitignore"); + + // Ensure that the package.json file was created + const packageJson = await fs.readFile(path.join(tempFolder, "package.json"), "utf8"); + assert.include(packageJson, "new-kipper-project"); + assert.include(packageJson, "A new Kipper project"); + assert.include(packageJson, "1.0.0"); + assert.include(packageJson, "MIT"); + assert.include(packageJson, "Anonymous"); + + // Ensure that the kip-config.json file was created + const kipConfig = await fs.readFile(path.join(tempFolder, "kip-config.json"), "utf8"); + assert.include(kipConfig, '"target": "js"'); + assert.include(kipConfig, '"srcDir": "src"'); + assert.include(kipConfig, '"outDir": "build"'); + assert.include(kipConfig, '"version": "^' + version + '"'); + assert.include(kipConfig, '"files"'); + assert.include(kipConfig, '"./src/main.kip"'); + assert.include(kipConfig, '"resources": []'); + }); + + afterEach(async () => { + await fs.rm(tempFolder, { recursive: true }); + process.chdir(originalCwd); + }); +}); From 80fcb5775ce958325df0b88fbcb5fb95adafd067 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 15:32:23 +0200 Subject: [PATCH 111/257] other: Fixed error in test new.test.ts --- test/module/cli/new.test.ts | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/test/module/cli/new.test.ts b/test/module/cli/new.test.ts index a09a86e2c..a40ae6300 100644 --- a/test/module/cli/new.test.ts +++ b/test/module/cli/new.test.ts @@ -1,21 +1,32 @@ import { assert } from "chai"; import * as path from "path"; +import * as fsSync from "fs"; import * as fs from "fs/promises"; import { test } from "@oclif/test"; import { version } from "@kipper/core"; -const originalCwd = process.cwd(); const tempFolder = path.join(__dirname, "..", "..", "temp"); +function createTemp(): void { + if (!fsSync.existsSync(tempFolder)) { + fsSync.mkdirSync(tempFolder, { recursive: true }); + } +} + +function removeTemp(): void { + if (fsSync.existsSync(tempFolder)) { + fsSync.rmSync(tempFolder, { recursive: true }); + } +} + describe("Kipper CLI 'new'", () => { - beforeEach(async () => { - await fs.mkdir(tempFolder, { recursive: true }); - process.chdir(tempFolder); + beforeEach(() => { + createTemp(); }); test .stdout() - .command(["new", "-d"]) + .command(["new", tempFolder, "-d"]) .it("using '-d' (Default Config)", async (ctx) => { assert.isNotEmpty(ctx.stdout); assert.include(ctx.stdout, "Using default settings. Skipping setup wizard."); @@ -47,8 +58,7 @@ describe("Kipper CLI 'new'", () => { assert.include(kipConfig, '"resources": []'); }); - afterEach(async () => { - await fs.rm(tempFolder, { recursive: true }); - process.chdir(originalCwd); + afterEach(() => { + removeTemp(); }); }); From 818596b501bae3724569943ab70684c54b9131c6 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 19:57:59 +0200 Subject: [PATCH 112/257] other: Added node support and testing for versions 20.x and 22.x --- .github/workflows/nodejs-cli-run.yml | 6 +++--- .github/workflows/nodejs-test.yml | 4 ++-- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/nodejs-cli-run.yml b/.github/workflows/nodejs-cli-run.yml index 7b454c97f..607ab1415 100644 --- a/.github/workflows/nodejs-cli-run.yml +++ b/.github/workflows/nodejs-cli-run.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x] + node-version: [16.x, 18.x, 20.x, 22.x] steps: - uses: actions/checkout@v3 @@ -34,7 +34,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x] + node-version: [16.x, 18.x, 20.x, 22.x] steps: - uses: actions/checkout@v3 @@ -56,7 +56,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x] + node-version: [16.x, 18.x, 20.x, 22.x] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/nodejs-test.yml b/.github/workflows/nodejs-test.yml index 53fdd2086..f707a4e44 100644 --- a/.github/workflows/nodejs-test.yml +++ b/.github/workflows/nodejs-test.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x] + node-version: [16.x, 18.x, 20.x, 22.x] steps: - uses: actions/checkout@v3 @@ -30,7 +30,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x] + node-version: [16.x, 18.x, 20.x, 22.x] steps: - uses: actions/checkout@v3 diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 35d33f132..862b3bc16 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -31,7 +31,7 @@ "prettier": "2.8.8" }, "engines": { - "node": ">=16.0.0", + "node": "16.x || 18.x || 20.x || 22.x", "pnpm": "8" }, "files": [ diff --git a/kipper/config/package.json b/kipper/config/package.json index bf3d98c79..77e605b51 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -17,7 +17,7 @@ "typescript": "5.1.3" }, "engines": { - "node": ">=16.0.0", + "node": "16.x || 18.x || 20.x || 22.x", "pnpm": "8" }, "homepage": "https://kipper-lang.org", diff --git a/kipper/core/package.json b/kipper/core/package.json index 458151e8e..6049a5c24 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -16,7 +16,7 @@ "antlr4ts-cli": "^0.5.0-alpha.4" }, "engines": { - "node": ">=16.0.0", + "node": "16.x || 18.x || 20.x || 22.x", "pnpm": "8" }, "homepage": "https://kipper-lang.org", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 41b203d57..b3f2fbdc3 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -13,7 +13,7 @@ "prettier": "2.8.8" }, "engines": { - "node": ">=16.0.0", + "node": "16.x || 18.x || 20.x || 22.x", "pnpm": "8" }, "homepage": "https://kipper-lang.org", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 4a4124ca2..3be72c5ee 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -14,7 +14,7 @@ "prettier": "2.8.8" }, "engines": { - "node": ">=16.0.0", + "node": "16.x || 18.x || 20.x || 22.x", "pnpm": "8" }, "homepage": "https://kipper-lang.org", diff --git a/kipper/web/package.json b/kipper/web/package.json index bb5634e3e..67f6d36d9 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -14,7 +14,7 @@ "uglify-js": "3.17.4" }, "engines": { - "node": ">=16.0.0", + "node": "16.x || 18.x || 20.x || 22.x", "pnpm": "8" }, "homepage": "https://kipper-lang.org", diff --git a/package.json b/package.json index 2fa0ddf5b..ca00329bb 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "watchify": "4.0.0" }, "engines": { - "node": ">=16.0.0", + "node": "16.x || 18.x || 20.x || 22.x", "pnpm": "8" }, "homepage": "https://kipper-lang.org", From 64dcf271843b4f8065f7a8eec9a3bcf984d70fe8 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:13:16 +0200 Subject: [PATCH 113/257] other: Updated DEVELOPMENT.md --- DEVELOPMENT.md | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 34df393f5..a69bf118a 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,18 +1,33 @@ # Developer's Guide -We recommend Visual Studio Code or Web-Storm for developing on Kipper. +Welcome to the Developer's Guide for Kipper! Here you can get a general overview of how to get started with +working on the Kipper programming language. + +Please note that there may be changes in the workflow or work process and as such sometimes also inconsistencies in this +file. We will try to keep it as well maintained as possible, but if anything seems off don't hesitate to open up a +[discussion](https://github.com/Kipper-Lang/Kipper/discussions) or an +[issue](https://github.com/Kipper-Lang/Kipper/issues/new/choose) if it is something that's clearly wrong. ## General Setup -### Install the TypeScript Compiler and Node.js +We recommend Web-Storm for developing on Kipper, as that has based on our experience provided the best development +experience, but other options such as VSCode are also viable. Generally speaking it's + +### Install Node.js + +[Download page of Node.js](https://nodejs.org/en/download/) + +Please be aware that Kipper only supports the following versions: -- [Download page of TypeScript](https://www.typescriptlang.org/download) -- [Download page of Node.js](https://nodejs.org/en/download/) +- `16.x` +- `18.x` +- `20.x` +- `22.x` ### Install PNPM for the monorepo management -Before working on Kipper, it's important to install pnpm, since Kipper is a monorepo with many child packages in a -single branch and repo, and therefore depends on the monorepo tools of pnpm. +Before working on Kipper, it's important to install pnpm which provides the toolset required to manage a monorepo such +as the one set up here! For how to install pnpm please refer to the pnpm website, or if you have npm just run: @@ -20,25 +35,22 @@ For how to install pnpm please refer to the pnpm website, or if you have npm jus npm i -g pnpm ``` -### VSCode setup - -Install the following extensions: - -- [eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) -- [prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +Please also be aware that we strictly require PNPM version `8` and anything besides that is currently not supported and +may break! PNPM sometimes introduces breaking changes with their major releases, so using a different version may brick +the setup so please watch out for that too! ## Install dependencies Whenever dependencies in `package.json` are changed, run the following command: ```sh -pnpm install +pnpm i ``` To only install resolved dependencies in `pnpm-lock.yaml`: ```sh -pnpm install --frozen-lockfile +pnpm i --frozen-lockfile ``` ## Force LF line-endings @@ -171,9 +183,11 @@ which can be included and used inside a browser without any dependencies. These changes must be committed yourself with a commit message preferably similar to this: ``` - release: Bumped static index.ts versions to MAJOR.MINOR.PATCH + release: Bumped Kipper project version to MAJOR.MINOR.PATCH ``` + (Previously, before `0.11.0-alpha.2` it was `release: Bumped static index.ts versions to MAJOR.MINOR.PATCH`) + For example: ``` From ebbd21a5aba71626c1ea8a8d552d5fa3196585a1 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:14:29 +0200 Subject: [PATCH 114/257] release: Bumped Kipper project version to 0.11.0-alpha.2 --- CITATION.cff | 8 ++++---- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 04bdbbb18..36c907600 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,8 +13,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.1 - description: The GitHub release URL of tag 0.11.0-alpha.1 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.2 + description: The GitHub release URL of tag 0.11.0-alpha.2 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -31,6 +31,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/LICENSE' -version: 0.11.0-alpha.1 +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/LICENSE' +version: 0.11.0-alpha.2 date-released: '2023-08-15' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 43aaf4e5a..54dd938f0 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.1"; +export const version = "0.11.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 458a1eaf2..c9cedefa0 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.1"; +export const version = "0.11.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index b3377ccfe..3e2788fc7 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.1"; +export const version = "0.11.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index b02503f3f..903441d84 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.1"; +export const version = "0.11.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 436fe830d..e7e1c80d9 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.1"; +export const version = "0.11.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 225d19757..3481712fb 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.1"; +export const version = "0.11.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From de9526102c5fb74c11b916a084995fc77e29d0d9 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:14:39 +0200 Subject: [PATCH 115/257] other: Updated DEVELOPMENT.md --- DEVELOPMENT.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index a69bf118a..7bbd5d7bf 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -141,7 +141,7 @@ which can be included and used inside a browser without any dependencies. (Visit GitHub for the [recommended version](https://github.com/Kipper-Lang/Kipper/releases)): ```bash - MAJOR.MINOR.PATCH + MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT] ``` Add `-alpha.N`, `-beta.N` or `-rc.N` in case it's a development version. @@ -166,7 +166,7 @@ which can be included and used inside a browser without any dependencies. 3. Updated the static `version` identifiers in the `index.ts` files of each package: ```ts - export const version = "MAJOR.MINOR.PATCH"; + export const version = "MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT]"; ``` The easiest way to do this is to run `replace` in an IDE and replace the old versions with the new version. @@ -183,22 +183,22 @@ which can be included and used inside a browser without any dependencies. These changes must be committed yourself with a commit message preferably similar to this: ``` - release: Bumped Kipper project version to MAJOR.MINOR.PATCH + release: Bumped Kipper project version to MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT] ``` - (Previously, before `0.11.0-alpha.2` it was `release: Bumped static index.ts versions to MAJOR.MINOR.PATCH`) + (Previously, before `0.11.0-alpha.2` it was `release: Bumped static index.ts versions to MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT]`) For example: ``` - release: Bumped static index.ts versions to 0.5.0-rc.0 + release: Bumped Kipper project version to 0.5.0-rc.0 ``` 4. Bump version with a pre-written script (This will create a tag with the prefix `v`, make a commit and push to the remote host): ```bash - pnpm run bump MAJOR.MINOR.PATCH + pnpm run bump MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT] ``` It is important that this script is run _AFTER_ the previous step, so that the commits associated with the tags @@ -240,5 +240,5 @@ which can be included and used inside a browser without any dependencies. Afterwards ensure the `next` tag is updated for every package using (Requires `npm` to be installed): ```bash - pnpm run add-next-tag MAJOR.MINOR.PATCH + pnpm run add-next-tag MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT] ``` From 966b254427a10113dc908471c717afea7047450d Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:16:51 +0200 Subject: [PATCH 116/257] other: Prettified DEVELOPMENT.md --- DEVELOPMENT.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 7bbd5d7bf..48bcdf84e 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,11 +1,11 @@ # Developer's Guide -Welcome to the Developer's Guide for Kipper! Here you can get a general overview of how to get started with +Welcome to the Developer's Guide for Kipper! Here you can get a general overview of how to get started with working on the Kipper programming language. Please note that there may be changes in the workflow or work process and as such sometimes also inconsistencies in this -file. We will try to keep it as well maintained as possible, but if anything seems off don't hesitate to open up a -[discussion](https://github.com/Kipper-Lang/Kipper/discussions) or an +file. We will try to keep it as well maintained as possible, but if anything seems off don't hesitate to open up a +[discussion](https://github.com/Kipper-Lang/Kipper/discussions) or an [issue](https://github.com/Kipper-Lang/Kipper/issues/new/choose) if it is something that's clearly wrong. ## General Setup @@ -27,7 +27,7 @@ Please be aware that Kipper only supports the following versions: ### Install PNPM for the monorepo management Before working on Kipper, it's important to install pnpm which provides the toolset required to manage a monorepo such -as the one set up here! +as the one set up here! For how to install pnpm please refer to the pnpm website, or if you have npm just run: @@ -36,7 +36,7 @@ npm i -g pnpm ``` Please also be aware that we strictly require PNPM version `8` and anything besides that is currently not supported and -may break! PNPM sometimes introduces breaking changes with their major releases, so using a different version may brick +may break! PNPM sometimes introduces breaking changes with their major releases, so using a different version may brick the setup so please watch out for that too! ## Install dependencies @@ -186,7 +186,7 @@ which can be included and used inside a browser without any dependencies. release: Bumped Kipper project version to MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT] ``` - (Previously, before `0.11.0-alpha.2` it was `release: Bumped static index.ts versions to MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT]`) + (Previously, before `0.11.0-alpha.2` it was `release: Bumped static index.ts versions to MAJOR.MINOR.PATCH[-SUFFIX_IF_PRESENT]`) For example: From 7bfb40d7b43b8afa54989458164286f590ebbc28 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:17:20 +0200 Subject: [PATCH 117/257] fix: Fixed ESLint warnings --- kipper/cli/src/commands/compile.ts | 2 +- kipper/cli/src/commands/run.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index 54512ed60..cd1d0d2bb 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -17,7 +17,7 @@ import { LogLevel, } from "@kipper/core"; import { CLIEmitHandler, defaultKipperLoggerConfig } from "../logger"; -import { getParseStream, getTarget, KipperEncoding, KipperEncodings, KipperParseFile, verifyEncoding } from "../input/"; +import { getParseStream, getTarget, KipperEncodings, KipperParseFile, verifyEncoding } from "../input/"; import { writeCompilationResult } from "../output"; import { prettifiedErrors } from "../decorators"; import { loadAutoConfig } from "../config-loader"; diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index 2c51fa810..5284b093f 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -4,7 +4,7 @@ */ import type { args } from "@oclif/parser"; import { flags } from "@oclif/command"; -import { defaultOptimisationOptions, EvaluatedCompileConfig, KipperLogger, LogLevel } from "@kipper/core"; +import { EvaluatedCompileConfig, KipperLogger, LogLevel } from "@kipper/core"; import { spawn } from "child_process"; import { CLIEmitHandler } from "../logger"; import { KipperEncodings, verifyEncoding } from "../input/"; From 97eeee2b9f09a5b5e424547114cecbf6bee4a664 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:28:56 +0200 Subject: [PATCH 118/257] other: Added `oclif@2.7.0` as dependency to the CLI --- kipper/cli/package.json | 3 +- kipper/cli/pnpm-lock.yaml | 3994 ++++++++++++++++++++++++++++++++++--- 2 files changed, 3743 insertions(+), 254 deletions(-) diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 862b3bc16..cbb39bad1 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -28,7 +28,8 @@ "@types/sinon": "10.0.15", "@types/inquirer": "7.3.3", "typescript": "5.1.3", - "prettier": "2.8.8" + "prettier": "2.8.8", + "oclif": "2.7.0" }, "engines": { "node": "16.x || 18.x || 20.x || 22.x", diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 1301a5936..004e8a70e 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -61,6 +61,9 @@ devDependencies: '@types/sinon': specifier: 10.0.15 version: 10.0.15 + oclif: + specifier: 2.7.0 + version: 2.7.0(@types/node@18.16.16)(typescript@5.1.3) prettier: specifier: 2.8.8 version: 2.8.8 @@ -70,28 +73,74 @@ devDependencies: packages: + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + dev: true + + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + dev: true + + /@babel/runtime@7.24.7: + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: false + + /@gar/promisify@1.1.3: + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@isaacs/string-locale-compare@1.1.0: + resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} + dev: true /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dev: false /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: false /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: false /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -99,12 +148,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: false /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: false /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -112,7 +159,218 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 - dev: false + + /@npmcli/arborist@4.3.1: + resolution: {integrity: sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + hasBin: true + dependencies: + '@isaacs/string-locale-compare': 1.1.0 + '@npmcli/installed-package-contents': 1.0.7 + '@npmcli/map-workspaces': 2.0.4 + '@npmcli/metavuln-calculator': 2.0.0 + '@npmcli/move-file': 1.1.2 + '@npmcli/name-from-folder': 1.0.1 + '@npmcli/node-gyp': 1.0.3 + '@npmcli/package-json': 1.0.1 + '@npmcli/run-script': 2.0.0 + bin-links: 3.0.3 + cacache: 15.3.0 + common-ancestor-path: 1.0.1 + json-parse-even-better-errors: 2.3.1 + json-stringify-nice: 1.1.4 + mkdirp: 1.0.4 + mkdirp-infer-owner: 2.0.0 + npm-install-checks: 4.0.0 + npm-package-arg: 8.1.5 + npm-pick-manifest: 6.1.1 + npm-registry-fetch: 12.0.2 + pacote: 12.0.3 + parse-conflict-json: 2.0.2 + proc-log: 1.0.0 + promise-all-reject-late: 1.0.1 + promise-call-limit: 1.0.2 + read-package-json-fast: 2.0.3 + readdir-scoped-modules: 1.1.0 + rimraf: 3.0.2 + semver: 7.6.0 + ssri: 8.0.1 + treeverse: 1.0.4 + walk-up-path: 1.0.0 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /@npmcli/fs@1.1.1: + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.6.0 + dev: true + + /@npmcli/fs@2.1.2: + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.6.0 + dev: true + + /@npmcli/fs@3.1.1: + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + semver: 7.6.0 + dev: true + + /@npmcli/git@2.1.0: + resolution: {integrity: sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==} + dependencies: + '@npmcli/promise-spawn': 1.3.2 + lru-cache: 6.0.0 + mkdirp: 1.0.4 + npm-pick-manifest: 6.1.1 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.0 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + dev: true + + /@npmcli/git@4.1.0: + resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/promise-spawn': 6.0.2 + lru-cache: 7.18.3 + npm-pick-manifest: 8.0.2 + proc-log: 3.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.0 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + dev: true + + /@npmcli/installed-package-contents@1.0.7: + resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} + engines: {node: '>= 10'} + hasBin: true + dependencies: + npm-bundled: 1.1.2 + npm-normalize-package-bin: 1.0.1 + dev: true + + /@npmcli/installed-package-contents@2.1.0: + resolution: {integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + npm-bundled: 3.0.1 + npm-normalize-package-bin: 3.0.1 + dev: true + + /@npmcli/map-workspaces@2.0.4: + resolution: {integrity: sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@npmcli/name-from-folder': 1.0.1 + glob: 8.1.0 + minimatch: 5.1.0 + read-package-json-fast: 2.0.3 + dev: true + + /@npmcli/metavuln-calculator@2.0.0: + resolution: {integrity: sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + dependencies: + cacache: 15.3.0 + json-parse-even-better-errors: 2.3.1 + pacote: 12.0.3 + semver: 7.6.0 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /@npmcli/move-file@1.1.2: + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + + /@npmcli/move-file@2.0.1: + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + + /@npmcli/name-from-folder@1.0.1: + resolution: {integrity: sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==} + dev: true + + /@npmcli/node-gyp@1.0.3: + resolution: {integrity: sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==} + dev: true + + /@npmcli/node-gyp@3.0.0: + resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@npmcli/package-json@1.0.1: + resolution: {integrity: sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==} + dependencies: + json-parse-even-better-errors: 2.3.1 + dev: true + + /@npmcli/promise-spawn@1.3.2: + resolution: {integrity: sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==} + dependencies: + infer-owner: 1.0.4 + dev: true + + /@npmcli/promise-spawn@6.0.2: + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + which: 3.0.1 + dev: true + + /@npmcli/run-script@2.0.0: + resolution: {integrity: sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==} + dependencies: + '@npmcli/node-gyp': 1.0.3 + '@npmcli/promise-spawn': 1.3.2 + node-gyp: 8.4.1 + read-package-json-fast: 2.0.3 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /@npmcli/run-script@6.0.2: + resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/node-gyp': 3.0.0 + '@npmcli/promise-spawn': 6.0.2 + node-gyp: 9.4.1 + read-package-json-fast: 3.0.2 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true /@oclif/command@1.8.31(@oclif/config@1.18.2): resolution: {integrity: sha512-5GLT2l8ccxTqog4UBIX6DqdvDXkpDWBIU7tz8Bx+N1CACpY9cXqG6luUqQzLshKaHXx9b/Y4/KF6SvRTg9FN5A==} @@ -188,6 +446,79 @@ packages: - supports-color dev: false + /@oclif/core@1.26.2: + resolution: {integrity: sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==} + engines: {node: '>=14.0.0'} + dependencies: + '@oclif/linewrap': 1.0.0 + '@oclif/screen': 3.0.8 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + debug: 4.3.4(supports-color@8.1.1) + ejs: 3.1.8 + fs-extra: 9.1.0 + get-package-type: 0.1.0 + globby: 11.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.2 + semver: 7.6.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.2.0 + tslib: 2.6.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + dev: true + + /@oclif/core@2.16.0(@types/node@18.16.16)(typescript@5.1.3): + resolution: {integrity: sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/cli-progress': 3.11.0 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + debug: 4.3.4(supports-color@8.1.1) + ejs: 3.1.8 + get-package-type: 0.1.0 + globby: 11.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.2.0 + ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.1.3) + tslib: 2.6.2 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + /@oclif/core@2.8.5(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==} engines: {node: '>=14.0.0'} @@ -226,7 +557,6 @@ packages: - '@swc/wasm' - '@types/node' - typescript - dev: false /@oclif/errors@1.3.5: resolution: {integrity: sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==} @@ -269,7 +599,6 @@ packages: /@oclif/linewrap@1.0.0: resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} - dev: false /@oclif/parser@3.8.10: resolution: {integrity: sha512-J4l/NcnfbIU84+NNdy6bxq9yJt4joFWNvpk59hq+uaQPUNtjmNJDVGuRvf6GUOxHNgRsVK1JRmd/Ez+v7Z9GqQ==} @@ -310,6 +639,32 @@ packages: - supports-color dev: false + /@oclif/plugin-help@5.2.20(@types/node@18.16.16)(typescript@5.1.3): + resolution: {integrity: sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 2.16.0(@types/node@18.16.16)(typescript@5.1.3) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + + /@oclif/plugin-not-found@2.4.3(@types/node@18.16.16)(typescript@5.1.3): + resolution: {integrity: sha512-nIyaR4y692frwh7wIHZ3fb+2L6XEecQwRDIb4zbEam0TvaVmBQWZoColQyWA84ljFBPZ8XWiQyTz+ixSwdRkqg==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 2.16.0(@types/node@18.16.16)(typescript@5.1.3) + chalk: 4.1.2 + fast-levenshtein: 3.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + /@oclif/plugin-warn-if-update-available@2.0.37(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-rfDNvplwgiwV+QSV4JU96ypmWgNJ6Hk5FEAEAKzqF0v0J8AHwZGpwwYO/MCZSkbc7bfYpkqLx/sxjpMO6j6PmQ==} engines: {node: '>=12.0.0'} @@ -327,152 +682,631 @@ packages: - '@types/node' - supports-color - typescript - dev: false - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: false + /@oclif/screen@3.0.8: + resolution: {integrity: sha512-yx6KAqlt3TAHBduS2fMQtJDL2ufIHnDRArrJEOoTTuizxqmjLT+psGYOHpmMl3gvQpFJ11Hs76guUUktzAF9Bg==} + engines: {node: '>=12.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dev: true - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: false + /@octokit/auth-token@2.5.0: + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + dependencies: + '@octokit/types': 6.41.0 + dev: true - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: false + /@octokit/core@3.6.0: + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + dependencies: + '@octokit/auth-token': 2.5.0 + '@octokit/graphql': 4.8.0 + '@octokit/request': 5.6.3 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: true - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: false + /@octokit/endpoint@6.0.12: + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + dependencies: + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + dev: true - /@types/cli-progress@3.11.0: - resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} + /@octokit/graphql@4.8.0: + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} dependencies: - '@types/node': 18.16.16 - dev: false + '@octokit/request': 5.6.3 + '@octokit/types': 6.41.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: true - /@types/inquirer@7.3.3: - resolution: {integrity: sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==} + /@octokit/openapi-types@12.11.0: + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + dev: true + + /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' dependencies: - '@types/through': 0.0.33 - rxjs: 6.6.7 + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 dev: true - /@types/node@18.16.16: - resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} + /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 3.6.0 + dev: true - /@types/sinon@10.0.15: - resolution: {integrity: sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==} + /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' dependencies: - '@types/sinonjs__fake-timers': 8.1.2 + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + deprecation: 2.3.1 dev: true - /@types/sinonjs__fake-timers@8.1.2: - resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} + /@octokit/request-error@2.1.0: + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + dependencies: + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + once: 1.4.0 dev: true - /@types/through@0.0.33: - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + /@octokit/request@5.6.3: + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} dependencies: - '@types/node': 18.16.16 + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + node-fetch: 2.7.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: false + /@octokit/rest@18.12.0: + resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + dependencies: + '@octokit/core': 3.6.0 + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + transitivePeerDependencies: + - encoding + dev: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - dev: false + /@octokit/types@6.41.0: + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + dependencies: + '@octokit/openapi-types': 12.11.0 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@sigstore/bundle@1.1.0: + resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@sigstore/protobuf-specs': 0.2.1 + dev: true + + /@sigstore/protobuf-specs@0.2.1: + resolution: {integrity: sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@sigstore/sign@1.0.0: + resolution: {integrity: sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.1 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@sigstore/tuf@1.0.3: + resolution: {integrity: sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@sigstore/protobuf-specs': 0.2.1 + tuf-js: 1.1.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true + + /@tootallnate/once@2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: true + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + /@tsconfig/node16@1.0.3: + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + + /@tufjs/canonical-json@1.0.0: + resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@tufjs/models@1.0.4: + resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@tufjs/canonical-json': 1.0.0 + minimatch: 9.0.4 + dev: true + + /@types/cli-progress@3.11.0: + resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} + dependencies: + '@types/node': 18.16.16 + + /@types/expect@1.20.4: + resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 18.16.16 + dev: true + + /@types/inquirer@7.3.3: + resolution: {integrity: sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==} + dependencies: + '@types/through': 0.0.33 + rxjs: 6.6.7 + dev: true + + /@types/minimatch@3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: true + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/node@15.14.9: + resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} + dev: true + + /@types/node@18.16.16: + resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/sinon@10.0.15: + resolution: {integrity: sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==} + dependencies: + '@types/sinonjs__fake-timers': 8.1.2 + dev: true + + /@types/sinonjs__fake-timers@8.1.2: + resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} + dev: true + + /@types/through@0.0.33: + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + dependencies: + '@types/node': 18.16.16 + dev: true + + /@types/vinyl@2.0.12: + resolution: {integrity: sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==} + dependencies: + '@types/expect': 1.20.4 + '@types/node': 18.16.16 + dev: true + + /abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: true + + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + + /acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: true + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} - dev: false /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - dev: false + + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: false + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: false + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - dev: false + + /aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: true + + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: true + + /are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: true /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: false /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - dev: false + + /array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + dev: true /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: false + + /arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: false /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - dev: false + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + + /aws-sdk@2.1647.0: + resolution: {integrity: sha512-BKFucC3IKfl40FGRCwJPeJ0cWZEa/Wd9r5HKuNg7h4eAN97G1aBjprDt4hvCHzwwNAVP4r0gBoxKeJ1f3HQWeg==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + buffer: 4.9.2 + events: 1.1.1 + ieee754: 1.1.13 + jmespath: 0.16.0 + querystring: 0.2.0 + sax: 1.2.1 + url: 0.10.3 + util: 0.12.5 + uuid: 8.0.0 + xml2js: 0.6.2 + dev: true /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: false + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: true + + /bin-links@3.0.3: + resolution: {integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + cmd-shim: 5.0.0 + mkdirp-infer-owner: 2.0.0 + npm-normalize-package-bin: 2.0.0 + read-cmd-shim: 3.0.1 + rimraf: 3.0.2 + write-file-atomic: 4.0.2 + dev: true + + /binaryextensions@4.19.0: + resolution: {integrity: sha512-DRxnVbOi/1OgA5pA9EDiRT8gvVYeqfuN7TmPfLyt6cyho3KbHCi3EtDQf39TTmGDrR5dZ9CspdXhPkL/j/WGbg==} + engines: {node: '>=0.8'} + dev: true + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: false /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: false /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: false /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false + /buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.1.13 + isarray: 1.0.0 + dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /builtins@1.0.3: + resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} + dev: true + + /cacache@15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.2.1 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + dev: true + + /cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.1 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + dev: true + + /cacache@17.1.4: + resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/fs': 3.1.1 + fs-minipass: 3.0.3 + glob: 10.4.2 + lru-cache: 7.18.3 + minipass: 7.1.2 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + ssri: 10.0.6 + tar: 6.2.1 + unique-filename: 3.0.0 + dev: true + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 - dev: false + + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -480,61 +1314,186 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: false /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: false + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true /clean-stack@3.0.1: resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} engines: {node: '>=10'} dependencies: escape-string-regexp: 4.0.0 - dev: false + + /cli-boxes@1.0.0: + resolution: {integrity: sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==} + engines: {node: '>=0.10.0'} + dev: true /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - dev: false /cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} dependencies: string-width: 4.2.3 - dev: false + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true + + /cli-table@0.3.11: + resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} + engines: {node: '>= 0.2.0'} + dependencies: + colors: 1.0.3 + dev: true /cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - dev: false - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: - color-name: 1.1.4 - dev: false - + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone-buffer@1.0.0: + resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} + engines: {node: '>= 0.10'} + dev: true + + /clone-stats@1.0.0: + resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + + /cloneable-readable@1.1.3: + resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} + dependencies: + inherits: 2.0.4 + process-nextick-args: 2.0.1 + readable-stream: 2.3.8 + dev: true + + /cmd-shim@5.0.0: + resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + mkdirp-infer-owner: 2.0.0 + dev: true + + /code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false + + /color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + dev: true + + /colors@1.0.3: + resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} + engines: {node: '>=0.1.90'} + dev: true + + /commander@7.1.0: + resolution: {integrity: sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==} + engines: {node: '>= 10'} + dev: true + + /common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: false + + /concurrently@7.6.0: + resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} + engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} + hasBin: true + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.1 + spawn-command: 0.0.2-1 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + dev: true + + /console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: true /content-type@1.0.4: resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} engines: {node: '>= 0.6'} - dev: false + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: false /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} @@ -545,7 +1504,31 @@ packages: semver: 5.7.1 shebang-command: 1.2.0 which: 1.3.1 - dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + dev: true + + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.24.7 + dev: true + + /dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dev: true /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -558,51 +1541,195 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: false + + /debuglog@1.0.1: + resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dev: true + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: true + + /deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: true + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + dev: true /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: false + + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dev: true /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 - dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true /ejs@3.1.8: resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} engines: {node: '>=0.10.0'} dependencies: jake: 10.8.5 - dev: false /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + requiresBuild: true + dependencies: + iconv-lite: 0.6.3 + dev: true + optional: true + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: true + + /err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + dev: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: false + + /error@10.4.0: + resolution: {integrity: sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==} + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: false /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: false /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - dev: false + + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: true + + /events@1.1.1: + resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} + engines: {node: '>=0.4.x'} + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /execa@0.10.0: + resolution: {integrity: sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==} + engines: {node: '>=4'} + dependencies: + cross-spawn: 6.0.5 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + dev: true /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -611,7 +1738,6 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: false /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} @@ -622,33 +1748,101 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: false + + /fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + dependencies: + fastest-levenshtein: 1.0.16 + dev: true + + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 - dev: false /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - dev: false /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.0 - dev: false /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: true + + /find-yarn-workspace-root@2.0.0: + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + dependencies: + micromatch: 4.0.5 + dev: true + + /first-chunk-stream@2.0.0: + resolution: {integrity: sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==} + engines: {node: '>=0.10.0'} + dependencies: + readable-stream: 2.3.8 + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + + /fs-extra@6.0.1: + resolution: {integrity: sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} @@ -657,7 +1851,6 @@ packages: graceful-fs: 4.2.10 jsonfile: 4.0.0 universalify: 0.1.2 - dev: false /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} @@ -667,40 +1860,268 @@ packages: graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 - dev: false + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + minipass: 7.1.2 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: true + + /gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - dev: false + + /get-stdin@4.0.1: + resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} + engines: {node: '>=0.10.0'} + dev: true + + /get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + dev: true + + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + dev: true + + /github-username@6.0.0: + resolution: {integrity: sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ==} + engines: {node: '>=10'} + dependencies: + '@octokit/rest': 18.12.0 + transitivePeerDependencies: + - encoding + dev: true /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: false - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + /glob@10.4.2: + resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.11 + foreground-child: 3.2.1 + jackspeak: 3.4.0 + minimatch: 9.0.4 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.0 + once: 1.4.0 + dev: true + + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + glob: 7.2.3 ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 - dev: false + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: true /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: false + + /grouped-queue@2.0.0: + resolution: {integrity: sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw==} + engines: {node: '>=8.0.0'} + dev: true + + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: false + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + + /hosted-git-info@6.1.1: + resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + lru-cache: 7.18.3 + dev: true + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: true /http-call@5.3.0: resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} @@ -714,29 +2135,119 @@ packages: tunnel-agent: 0.6.0 transitivePeerDependencies: - supports-color - dev: false + + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.2 + dev: true /hyperlinker@1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} - dev: false /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: false + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dependencies: + safer-buffer: 2.1.2 + dev: true + optional: true + + /ieee754@1.1.13: + resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore-walk@4.0.1: + resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} + engines: {node: '>=10'} + dependencies: + minimatch: 3.1.2 + dev: true + + /ignore-walk@6.0.5: + resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + minimatch: 9.0.4 + dev: true /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} - dev: false + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - dev: false + + /infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true /inquirer@7.3.3: resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} @@ -757,57 +2268,194 @@ packages: through: 2.3.8 dev: false + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + dev: true + + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: true + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: true /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - dev: false /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: false + + /is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: true + + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: false + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: false + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + dev: true /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: false + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true /is-retry-allowed@1.2.0: resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} engines: {node: '>=0.10.0'} - dev: false + + /is-scoped@2.1.0: + resolution: {integrity: sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==} + engines: {node: '>=8'} + dependencies: + scoped-regex: 2.1.0 + dev: true + + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: false + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: true + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-utf8@0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + dev: true /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + dev: true + + /isbinaryfile@5.0.2: + resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} + engines: {node: '>= 18.0.0'} + dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: false + + /jackspeak@3.4.0: + resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} @@ -817,24 +2465,46 @@ packages: chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - dev: false + + /jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: false + + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: false + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /json-stringify-nice@1.1.4: + resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} + dev: true /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.10 - dev: false /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -842,131 +2512,1199 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.10 - dev: false - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false + /just-diff-apply@5.5.0: + resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} + dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: false + /just-diff@5.2.0: + resolution: {integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==} + dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: false + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /load-json-file@6.2.0: + resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.10 + parse-json: 5.2.0 + strip-bom: 4.0.0 + type-fest: 0.6.0 + dev: true + + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.10 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + /make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + agentkeepalive: 4.5.0 + cacache: 16.1.3 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /make-fetch-happen@11.1.1: + resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + agentkeepalive: 4.5.0 + cacache: 17.1.4 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 5.0.0 + minipass-fetch: 3.0.5 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 10.0.6 + transitivePeerDependencies: + - supports-color + dev: true + + /make-fetch-happen@9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + dependencies: + agentkeepalive: 4.5.0 + cacache: 15.3.0 + http-cache-semantics: 4.1.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /mem-fs-editor@9.7.0(mem-fs@2.3.0): + resolution: {integrity: sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg==} + engines: {node: '>=12.10.0'} + peerDependencies: + mem-fs: ^2.1.0 + peerDependenciesMeta: + mem-fs: + optional: true + dependencies: + binaryextensions: 4.19.0 + commondir: 1.0.1 + deep-extend: 0.6.0 + ejs: 3.1.8 + globby: 11.1.0 + isbinaryfile: 5.0.2 + mem-fs: 2.3.0 + minimatch: 7.4.6 + multimatch: 5.0.0 + normalize-path: 3.0.0 + textextensions: 5.16.0 + dev: true + + /mem-fs@2.3.0: + resolution: {integrity: sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw==} + engines: {node: '>=12'} + dependencies: + '@types/node': 15.14.9 + '@types/vinyl': 2.0.12 + vinyl: 2.2.1 + vinyl-file: 3.0.0 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: false /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: false /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: false /minimatch@5.1.0: resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: false + + /minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /minipass-fetch@1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: true + + /minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: true + + /minipass-fetch@3.0.5: + resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + minipass: 7.1.2 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: true + + /minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /minipass-json-stream@1.0.1: + resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} + dependencies: + jsonparse: 1.3.1 + minipass: 3.3.6 + dev: true + + /minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + dev: true + + /minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + dev: true + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: true + + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + + /mkdirp-infer-owner@2.0.0: + resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + infer-owner: 1.0.4 + mkdirp: 1.0.4 + dev: true + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false + + /multimatch@5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 3.0.0 + array-union: 2.1.0 + arrify: 2.0.1 + minimatch: 3.1.2 + dev: true /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: false /natural-orderby@2.0.3: resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} - dev: false - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: false + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: true + + /nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-gyp@8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + dependencies: + env-paths: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.10 + make-fetch-happen: 9.1.0 + nopt: 5.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.6.0 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.1 + glob: 7.2.3 + graceful-fs: 4.2.10 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.6.0 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + + /nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.14.0 + semver: 7.6.0 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + hosted-git-info: 6.1.1 + is-core-module: 2.14.0 + semver: 7.6.0 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-bundled@1.1.2: + resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} + dependencies: + npm-normalize-package-bin: 1.0.1 + dev: true + + /npm-bundled@3.0.1: + resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + npm-normalize-package-bin: 3.0.1 + dev: true + + /npm-install-checks@4.0.0: + resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} + engines: {node: '>=10'} + dependencies: + semver: 7.6.0 + dev: true + + /npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + semver: 7.6.0 + dev: true + + /npm-normalize-package-bin@1.0.1: + resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} + dev: true + + /npm-normalize-package-bin@2.0.0: + resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dev: true + + /npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + hosted-git-info: 6.1.1 + proc-log: 3.0.0 + semver: 7.6.0 + validate-npm-package-name: 5.0.1 + dev: true + + /npm-package-arg@8.1.5: + resolution: {integrity: sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.1.0 + semver: 7.6.0 + validate-npm-package-name: 3.0.0 + dev: true + + /npm-packlist@3.0.0: + resolution: {integrity: sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + glob: 7.2.3 + ignore-walk: 4.0.1 + npm-bundled: 1.1.2 + npm-normalize-package-bin: 1.0.1 + dev: true + + /npm-packlist@7.0.4: + resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + ignore-walk: 6.0.5 + dev: true + + /npm-pick-manifest@6.1.1: + resolution: {integrity: sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==} + dependencies: + npm-install-checks: 4.0.0 + npm-normalize-package-bin: 1.0.1 + npm-package-arg: 8.1.5 + semver: 7.6.0 + dev: true + + /npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 10.1.0 + semver: 7.6.0 + dev: true + + /npm-registry-fetch@12.0.2: + resolution: {integrity: sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + dependencies: + make-fetch-happen: 10.2.1 + minipass: 3.3.6 + minipass-fetch: 1.4.1 + minipass-json-stream: 1.0.1 + minizlib: 2.1.2 + npm-package-arg: 8.1.5 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /npm-registry-fetch@14.0.5: + resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + make-fetch-happen: 11.1.1 + minipass: 5.0.0 + minipass-fetch: 3.0.5 + minipass-json-stream: 1.0.1 + minizlib: 2.1.2 + npm-package-arg: 10.1.0 + proc-log: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: true + + /npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + dev: true + + /number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + + /oclif@2.7.0(@types/node@18.16.16)(typescript@5.1.3): + resolution: {integrity: sha512-nmgk/emtEth/0RYTMeovj22zpiT4P7KvIDc3OOT8VeAEDvdbnZfg3tV3YRnHK0zrSKETKqpHWFyNx2PLMl0eKQ==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@oclif/core': 1.26.2 + '@oclif/plugin-help': 5.2.20(@types/node@18.16.16)(typescript@5.1.3) + '@oclif/plugin-not-found': 2.4.3(@types/node@18.16.16)(typescript@5.1.3) + '@oclif/plugin-warn-if-update-available': 2.0.37(@types/node@18.16.16)(typescript@5.1.3) + aws-sdk: 2.1647.0 + concurrently: 7.6.0 + debug: 4.3.4(supports-color@8.1.1) + find-yarn-workspace-root: 2.0.0 + fs-extra: 8.1.0 + github-slugger: 1.5.0 + lodash: 4.17.21 + normalize-package-data: 3.0.3 + qqjs: 0.3.11 + semver: 7.6.0 + tslib: 2.6.2 + yeoman-environment: 3.19.3 + yeoman-generator: 5.10.0(yeoman-environment@3.19.3) + yosay: 2.0.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bluebird + - encoding + - mem-fs + - supports-color + - typescript + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: true + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + + /p-transform@1.3.0: + resolution: {integrity: sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg==} + engines: {node: '>=12.10.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + p-queue: 6.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + dev: true + + /pacote@12.0.3: + resolution: {integrity: sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + hasBin: true + dependencies: + '@npmcli/git': 2.1.0 + '@npmcli/installed-package-contents': 1.0.7 + '@npmcli/promise-spawn': 1.3.2 + '@npmcli/run-script': 2.0.0 + cacache: 15.3.0 + chownr: 2.0.0 + fs-minipass: 2.1.0 + infer-owner: 1.0.4 + minipass: 3.3.6 + mkdirp: 1.0.4 + npm-package-arg: 8.1.5 + npm-packlist: 3.0.0 + npm-pick-manifest: 6.1.1 + npm-registry-fetch: 12.0.2 + promise-retry: 2.0.1 + read-package-json-fast: 2.0.3 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.2.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /pacote@15.2.0: + resolution: {integrity: sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + '@npmcli/git': 4.1.0 + '@npmcli/installed-package-contents': 2.1.0 + '@npmcli/promise-spawn': 6.0.2 + '@npmcli/run-script': 6.0.2 + cacache: 17.1.4 + fs-minipass: 3.0.3 + minipass: 5.0.0 + npm-package-arg: 10.1.0 + npm-packlist: 7.0.4 + npm-pick-manifest: 8.0.2 + npm-registry-fetch: 14.0.5 + proc-log: 3.0.0 + promise-retry: 2.0.1 + read-package-json: 6.0.4 + read-package-json-fast: 3.0.2 + sigstore: 1.9.0 + ssri: 10.0.6 + tar: 6.2.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /pad-component@0.0.1: + resolution: {integrity: sha512-8EKVBxCRSvLnsX1p2LlSFSH3c2/wuhY9/BXXWu8boL78FbVKqn2L5SpURt1x5iw6Gq8PTqJ7MdPoe5nCtX3I+g==} + dev: true + + /parse-conflict-json@2.0.2: + resolution: {integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + json-parse-even-better-errors: 2.3.1 + just-diff: 5.2.0 + just-diff-apply: 5.5.0 + dev: true + + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /password-prompt@1.1.2: + resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} + dependencies: + ansi-escapes: 3.2.0 + cross-spawn: 6.0.5 + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /preferred-pm@3.1.3: + resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + dev: true + + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + + /proc-log@1.0.0: + resolution: {integrity: sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==} + dev: true + + /proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /promise-all-reject-late@1.0.1: + resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} + dev: true + + /promise-call-limit@1.0.2: + resolution: {integrity: sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==} + dev: true + + /promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dev: true + + /promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + dev: true + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode@1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + dev: true + + /qqjs@0.3.11: + resolution: {integrity: sha512-pB2X5AduTl78J+xRSxQiEmga1jQV0j43jOPs/MTgTLApGFEOn6NgdE2dEjp7nvDtjkIOZbvFIojAiYUx6ep3zg==} + engines: {node: '>=8.0.0'} + dependencies: + chalk: 2.4.2 + debug: 4.3.4(supports-color@8.1.1) + execa: 0.10.0 + fs-extra: 6.0.1 + get-stream: 5.2.0 + glob: 7.2.3 + globby: 10.0.2 + http-call: 5.3.0 + load-json-file: 6.2.0 + pkg-dir: 4.2.0 + tar-fs: 2.1.1 + tmp: 0.1.0 + write-json-file: 4.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /querystring@0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /read-cmd-shim@3.0.1: + resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dev: true - /object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} - dev: false + /read-package-json-fast@2.0.3: + resolution: {integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==} + engines: {node: '>=10'} + dependencies: + json-parse-even-better-errors: 2.3.1 + npm-normalize-package-bin: 1.0.1 + dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + /read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - mimic-fn: 2.1.0 - dev: false + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: false + /read-package-json@6.0.4: + resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. + dependencies: + glob: 10.4.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + npm-normalize-package-bin: 3.0.1 + dev: true - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - dev: false + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true - /password-prompt@1.1.2: - resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} dependencies: - ansi-escapes: 3.2.0 - cross-spawn: 6.0.5 - dev: false + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: false + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: false + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: false + /readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + /readdir-scoped-modules@1.1.0: + resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + debuglog: 1.0.1 + dezalgo: 1.0.4 + graceful-fs: 4.2.10 + once: 1.4.0 dev: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.8 + dev: true /redeyed@2.1.1: resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} dependencies: esprima: 4.0.1 - dev: false + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + + /replace-ext@1.0.1: + resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} + engines: {node: '>= 0.10'} + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.14.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -974,23 +3712,40 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: false + + /retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: false + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - dev: false /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: false /rxjs@6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} @@ -998,98 +3753,384 @@ packages: dependencies: tslib: 1.14.1 + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false + + /sax@1.2.1: + resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} + dev: true + + /scoped-regex@2.1.0: + resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} + engines: {node: '>=8'} + dev: true /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true /semver@7.5.1: resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 - dev: false /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 - dev: false + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 - dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - dev: false + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /sigstore@1.9.0: + resolution: {integrity: sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.1 + '@sigstore/sign': 1.0.0 + '@sigstore/tuf': 1.0.3 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + dev: true /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: false + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + + /socks-proxy-agent@6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + dev: true + + /socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + dev: true + + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: true + + /sort-keys@4.2.0: + resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} + engines: {node: '>=8'} + dependencies: + is-plain-obj: 2.1.0 + dev: true /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: false + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /spawn-command@0.0.2-1: + resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.18 + dev: true + + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.18 + dev: true + + /spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + + /ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + minipass: 7.1.2 + dev: true + + /ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minipass: 3.3.6 + dev: true + + /string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: true + + /string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-bom-buf@1.0.0: + resolution: {integrity: sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==} + engines: {node: '>=4'} + dependencies: + is-utf8: 0.2.1 + dev: true + + /strip-bom-stream@2.0.0: + resolution: {integrity: sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==} + engines: {node: '>=0.10.0'} + dependencies: + first-chunk-stream: 2.0.0 + strip-bom: 2.0.0 + dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + /strip-bom@2.0.0: + resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} - dev: false + dependencies: + is-utf8: 0.2.1 + dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: false + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: false + dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + /strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: - ansi-regex: 5.0.1 - dev: false + has-flag: 3.0.0 + dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: false /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: false /supports-hyperlinks@2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} @@ -1097,28 +4138,98 @@ packages: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 - dev: false + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /taketalk@1.0.0: + resolution: {integrity: sha512-kS7E53It6HA8S1FVFBWP7HDwgTiJtkmYk7TsowGlizzVrivR1Mf9mgjXHY1k7rOfozRVMZSfwjB3bevO4QEqpg==} + dependencies: + get-stdin: 4.0.1 + minimist: 1.2.8 + dev: true + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /textextensions@5.16.0: + resolution: {integrity: sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw==} + engines: {node: '>=0.8'} + dev: true /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: false /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - dev: false + + /tmp@0.1.0: + resolution: {integrity: sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==} + engines: {node: '>=6'} + dependencies: + rimraf: 2.7.1 + dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + + /treeverse@1.0.4: + resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} + dev: true /ts-node@10.9.2(@types/node@18.16.16)(typescript@5.1.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -1145,14 +4256,12 @@ packages: typescript: 5.1.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false /tslog@3.3.4: resolution: {integrity: sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==} @@ -1161,51 +4270,256 @@ packages: source-map-support: 0.5.21 dev: false + /tuf-js@1.1.7: + resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@tufjs/models': 1.0.4 + debug: 4.3.4(supports-color@8.1.1) + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 - dev: false /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - dev: false + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} + /unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: true + + /unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + unique-slug: 3.0.0 + dev: true + + /unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + unique-slug: 4.0.0 + dev: true + + /unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: true + + /unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + dev: true + + /unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + imurmurhash: 0.1.4 + dev: true + + /universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: false /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - dev: false + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /url@0.10.3: + resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: true + + /uuid@8.0.0: + resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + hasBin: true + dev: true /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: false + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /validate-npm-package-name@3.0.0: + resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} + dependencies: + builtins: 1.0.3 + dev: true + + /validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /vinyl-file@3.0.0: + resolution: {integrity: sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.10 + pify: 2.3.0 + strip-bom-buf: 1.0.0 + strip-bom-stream: 2.0.0 + vinyl: 2.2.1 + dev: true + + /vinyl@2.2.1: + resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} + engines: {node: '>= 0.10'} + dependencies: + clone: 2.1.2 + clone-buffer: 1.0.0 + clone-stats: 1.0.0 + cloneable-readable: 1.1.3 + remove-trailing-separator: 1.1.0 + replace-ext: 1.0.1 + dev: true + + /walk-up-path@1.0.0: + resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==} + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: true + + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} dependencies: isexe: 2.0.0 - dev: false + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: true /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} dependencies: string-width: 4.2.3 - dev: false /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: false + + /wrap-ansi@2.1.0: + resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} + engines: {node: '>=0.10.0'} + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + dev: true /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -1214,7 +4528,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -1223,13 +4536,188 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + + /write-json-file@4.3.0: + resolution: {integrity: sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==} + engines: {node: '>=8.3'} + dependencies: + detect-indent: 6.1.0 + graceful-fs: 4.2.10 + is-plain-obj: 2.1.0 + make-dir: 3.1.0 + sort-keys: 4.2.0 + write-file-atomic: 3.0.3 + dev: true + + /xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.2.1 + xmlbuilder: 11.0.1 + dev: true + + /xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yeoman-environment@3.19.3: + resolution: {integrity: sha512-/+ODrTUHtlDPRH9qIC0JREH8+7nsRcjDl3Bxn2Xo/rvAaVvixH5275jHwg0C85g4QsF4P6M2ojfScPPAl+pLAg==} + engines: {node: '>=12.10.0'} + hasBin: true + dependencies: + '@npmcli/arborist': 4.3.1 + are-we-there-yet: 2.0.0 + arrify: 2.0.1 + binaryextensions: 4.19.0 + chalk: 4.1.2 + cli-table: 0.3.11 + commander: 7.1.0 + dateformat: 4.6.3 + debug: 4.3.4(supports-color@8.1.1) + diff: 5.2.0 + error: 10.4.0 + escape-string-regexp: 4.0.0 + execa: 5.1.1 + find-up: 5.0.0 + globby: 11.1.0 + grouped-queue: 2.0.0 + inquirer: 8.2.6 + is-scoped: 2.1.0 + isbinaryfile: 4.0.10 + lodash: 4.17.21 + log-symbols: 4.1.0 + mem-fs: 2.3.0 + mem-fs-editor: 9.7.0(mem-fs@2.3.0) + minimatch: 3.1.2 + npmlog: 5.0.1 + p-queue: 6.6.2 + p-transform: 1.3.0 + pacote: 12.0.3 + preferred-pm: 3.1.3 + pretty-bytes: 5.6.0 + readable-stream: 4.5.2 + semver: 7.6.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + text-table: 0.2.0 + textextensions: 5.16.0 + untildify: 4.0.0 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /yeoman-generator@5.10.0(yeoman-environment@3.19.3): + resolution: {integrity: sha512-iDUKykV7L4nDNzeYSedRmSeJ5eMYFucnKDi6KN1WNASXErgPepKqsQw55TgXPHnmpcyOh2Dd/LAZkyc+f0qaAw==} + engines: {node: '>=12.10.0'} + peerDependencies: + yeoman-environment: ^3.2.0 + peerDependenciesMeta: + yeoman-environment: + optional: true + dependencies: + chalk: 4.1.2 + dargs: 7.0.0 + debug: 4.3.4(supports-color@8.1.1) + execa: 5.1.1 + github-username: 6.0.0 + lodash: 4.17.21 + mem-fs-editor: 9.7.0(mem-fs@2.3.0) + minimist: 1.2.8 + pacote: 15.2.0 + read-pkg-up: 7.0.1 + run-async: 2.4.1 + semver: 7.6.0 + shelljs: 0.8.5 + sort-keys: 4.2.0 + text-table: 0.2.0 + yeoman-environment: 3.19.3 + transitivePeerDependencies: + - bluebird + - encoding + - mem-fs + - supports-color + dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yosay@2.0.2: + resolution: {integrity: sha512-avX6nz2esp7IMXGag4gu6OyQBsMh/SEn+ZybGu3yKPlOTE6z9qJrzG/0X5vCq/e0rPFy0CUYCze0G5hL310ibA==} + engines: {node: '>=4'} + hasBin: true + dependencies: + ansi-regex: 2.1.1 + ansi-styles: 3.2.1 + chalk: 1.1.3 + cli-boxes: 1.0.0 + pad-component: 0.0.1 + string-width: 2.1.1 + strip-ansi: 3.0.1 + taketalk: 1.0.0 + wrap-ansi: 2.1.0 + dev: true From 49a06e914e4196fec4a51624586b878d889f4dc7 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:29:53 +0200 Subject: [PATCH 119/257] Release 0.11.0-alpha.2 --- kipper/cli/README.md | 73 +++++++++++++++++++++-------------- kipper/cli/package.json | 34 ++++++++-------- kipper/config/package.json | 10 ++--- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 8 ++-- package.json | 2 +- 8 files changed, 74 insertions(+), 59 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index f5a9accae..71be0fe45 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊🖥️](#kipper-cli---kippercli-️) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,28 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.1 linux-x64 node-v20.10.0 +@kipper/cli/0.11.0-alpha.2 linux-x64 node-v20.10.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -85,7 +82,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -96,24 +93,25 @@ USAGE $ kipper compile [FILE] ARGUMENTS - FILE The file that should be compiled. + FILE The file that should be compiled. Takes precedence over the 'string-code' flag and the config file. OPTIONS -b, --[no-]optimise-builtins Optimise the generated built-in functions using tree-shaking to reduce the size of the output. - -e, --encoding=encoding [default: utf8] The encoding that should be used to read the file (ascii,utf8,utf16le). + -e, --encoding=encoding The encoding that should be used to read the file (ascii,utf8,utf16le). -i, --[no-]optimise-internals Optimise the generated internal functions using tree-shaking to reduce the size of the output. - -o, --output-dir=output-dir [default: build] The build directory where the compiled files should be placed. If the - path does not exist, it will be created. + -o, --output-dir=output-dir The build directory where the compiled files should be placed. If the path does not + exist, it will be created. Takes precedence over the config file, defaults to 'build' + if both are not provided -s, --string-code=string-code The content of a Kipper file that can be passed as a replacement for the 'file' - parameter. + parameter. Takes precedence over the config file. - -t, --target=js|ts [default: js] The target language where the compiled program should be emitted to. + -t, --target=js|ts The target language where the compiled program should be emitted to. -w, --[no-]warnings Show warnings that were emitted during the compilation. @@ -124,7 +122,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -141,7 +139,25 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/help.ts)_ + +## `kipper new [LOCATION]` + +Generate a new Kipper using a setup wizard. (Node-only for now) + +``` +USAGE + $ kipper new [LOCATION] + +ARGUMENTS + LOCATION [default: /home/luna/data/Documents/Kipper/Kipper/kipper/cli] The directory where the new project should be + created. Defaults to the current directory. + +OPTIONS + -d, --default Use the default settings for the new project. Skips the setup wizard. +``` + +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -158,18 +174,18 @@ OPTIONS -b, --[no-]optimise-builtins Optimise the generated built-in functions using tree-shaking to reduce the size of the output. - -e, --encoding=encoding [default: utf8] The encoding that should be used to read the file (ascii,utf8,utf16le). + -e, --encoding=encoding The encoding that should be used to read the file (ascii,utf8,utf16le). -i, --[no-]optimise-internals Optimise the generated internal functions using tree-shaking to reduce the size of the output. - -o, --output-dir=output-dir [default: build] The build directory where the compiled files should be placed. If the - path does not exist, it will be created. + -o, --output-dir=output-dir The build directory where the compiled files should be placed. If the path does not + exist, it will be created. -s, --string-code=string-code The content of a Kipper file that can be passed as a replacement for the 'file' parameter. - -t, --target=js|ts [default: js] The target language where the compiled program should be emitted to. + -t, --target=js|ts The target language where the compiled program should be emitted to. -w, --[no-]warnings Show warnings that were emitted during the compilation. @@ -180,7 +196,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -191,8 +207,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.1/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index cbb39bad1..05711cc01 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,13 +1,13 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.11.0-alpha.1", + "version": "0.11.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run" }, "dependencies": { - "@kipper/config": "workspace:~", + "@kipper/config": "workspace:~", "@kipper/core": "workspace:~", "@kipper/target-js": "workspace:~", "@kipper/target-ts": "workspace:~", @@ -17,19 +17,19 @@ "@oclif/parser": "3.8.10", "@oclif/errors": "1.3.6", "@oclif/plugin-warn-if-update-available": "2.0.37", - "tslib": "~2.6.2", + "tslib": "~2.6.2", "tslog": "3.3.4", - "ts-node": "10.9.2", - "chalk": "4.1.2", - "inquirer": "7.3.3" + "ts-node": "10.9.2", + "chalk": "4.1.2", + "inquirer": "7.3.3" }, "devDependencies": { "@types/node": "18.16.16", "@types/sinon": "10.0.15", - "@types/inquirer": "7.3.3", - "typescript": "5.1.3", - "prettier": "2.8.8", - "oclif": "2.7.0" + "@types/inquirer": "7.3.3", + "typescript": "5.1.3", + "prettier": "2.8.8", + "oclif": "2.7.0" }, "engines": { "node": "16.x || 18.x || 20.x || 22.x", @@ -80,15 +80,15 @@ "lint": "pnpm run tslint && pnpm run prettier", "lint:fix": "pnpm run tslint:fix && pnpm run prettier", "build": "tsc", - "postbuild": "cp -r ./src/templates ./lib/templates", + "postbuild": "cp -r ./src/templates ./lib/templates", "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix", "start": "node ./bin/run", - "start:analyse": "node ./bin/run analyse", - "start:compile": "node ./bin/run compile", - "start:help": "node ./bin/run help", - "start:new": "node ./bin/run new", - "start:run": "node ./bin/run run", - "start:version": "node ./bin/run version" + "start:analyse": "node ./bin/run analyse", + "start:compile": "node ./bin/run compile", + "start:help": "node ./bin/run help", + "start:new": "node ./bin/run new", + "start:run": "node ./bin/run run", + "start:version": "node ./bin/run version" } } diff --git a/kipper/config/package.json b/kipper/config/package.json index 77e605b51..8019abc53 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.11.0-alpha.1", + "version": "0.11.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", @@ -16,10 +16,10 @@ "@kipper/core": "workspace:~", "typescript": "5.1.3" }, - "engines": { - "node": "16.x || 18.x || 20.x || 22.x", - "pnpm": "8" - }, + "engines": { + "node": "16.x || 18.x || 20.x || 22.x", + "pnpm": "8" + }, "homepage": "https://kipper-lang.org", "bugs": "https://github.com/Kipper-Lang/Kipper/issues", "repository": { diff --git a/kipper/core/package.json b/kipper/core/package.json index 6049a5c24..aac801454 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.11.0-alpha.1", + "version": "0.11.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index b3f2fbdc3..2db3d7b07 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.1", + "version": "0.11.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 3be72c5ee..c24eb810f 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.1", + "version": "0.11.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index 67f6d36d9..1b94039cc 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,15 +1,15 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.11.0-alpha.1", + "version": "0.11.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", "@kipper/target-ts": "workspace:~", "@kipper/core": "workspace:~", - "@types/node": "18.16.16", - "typescript": "5.1.3", - "prettier": "2.8.8", + "@types/node": "18.16.16", + "typescript": "5.1.3", + "prettier": "2.8.8", "browserify": "17.0.0", "uglify-js": "3.17.4" }, diff --git a/package.json b/package.json index ca00329bb..80b2a2efe 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.11.0-alpha.1", + "version": "0.11.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 79c565d457b7dad243d6600453bcf9b73b456c4f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 20:53:45 +0200 Subject: [PATCH 120/257] other: Added `@kipper/config` to add-next-tag scripts --- add-next-tag.ps1 | 1 + add-next-tag.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/add-next-tag.ps1 b/add-next-tag.ps1 index 0b95a9c68..69782a2c0 100644 --- a/add-next-tag.ps1 +++ b/add-next-tag.ps1 @@ -9,6 +9,7 @@ $(npm dist-tag add @kipper/cli@$version next) $(npm dist-tag add @kipper/core@$version next) $(npm dist-tag add @kipper/target-js@$version next) $(npm dist-tag add @kipper/target-ts@$version next) +$(npm dist-tag add @kipper/config@$version next) $(npm dist-tag add @kipper/web@$version next) ExitOnFailure diff --git a/add-next-tag.sh b/add-next-tag.sh index 7d765182e..e15454da7 100644 --- a/add-next-tag.sh +++ b/add-next-tag.sh @@ -14,4 +14,5 @@ npm dist-tag add @kipper/cli@$version next npm dist-tag add @kipper/core@$version next npm dist-tag add @kipper/target-js@$version next npm dist-tag add @kipper/target-ts@$version next +npm dist-tag add @kipper/config@$version next npm dist-tag add @kipper/web@$version next From 129c4a22e951a0b59aebbf11506b1d2a819a5606 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 21:00:49 +0200 Subject: [PATCH 121/257] other: Added rimraf to CLI dev dependencies --- kipper/cli/package.json | 3 ++- kipper/cli/pnpm-lock.yaml | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 05711cc01..9e0b1e2ce 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -29,7 +29,8 @@ "@types/inquirer": "7.3.3", "typescript": "5.1.3", "prettier": "2.8.8", - "oclif": "2.7.0" + "oclif": "2.7.0", + "rimraf": "5.0.7" }, "engines": { "node": "16.x || 18.x || 20.x || 22.x", diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 004e8a70e..3657194a0 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -67,6 +67,9 @@ devDependencies: prettier: specifier: 2.8.8 version: 2.8.8 + rimraf: + specifier: 5.0.7 + version: 5.0.7 typescript: specifier: 5.1.3 version: 5.1.3 @@ -3738,6 +3741,14 @@ packages: glob: 7.2.3 dev: true + /rimraf@5.0.7: + resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} + engines: {node: '>=14.18'} + hasBin: true + dependencies: + glob: 10.4.2 + dev: true + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} From 11f4cbaff5c9225f493c58edc4974127608c85c6 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 21:28:58 +0200 Subject: [PATCH 122/257] fix: Fixed cwd showing in `--help` of `kipper new` --- kipper/cli/README.md | 22 +++++++++++++--------- kipper/cli/src/commands/new.ts | 8 ++++---- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 71be0fe45..84571d514 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +39,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,17 +51,19 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -208,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/cli/src/commands/new.ts b/kipper/cli/src/commands/new.ts index ff47d6f95..cbfbfd626 100644 --- a/kipper/cli/src/commands/new.ts +++ b/kipper/cli/src/commands/new.ts @@ -19,7 +19,7 @@ const templates = { }; export default class New extends Command { - static override description: string = "Generate a new Kipper using a setup wizard. (Node-only for now)"; + static override description: string = "Generate a new Kipper using a setup wizard."; // TODO! Add examples when the command moves out of development static override examples: Array = []; @@ -28,8 +28,8 @@ export default class New extends Command { { name: "location", required: false, - default: process.cwd(), - description: "The directory where the new project should be created. Defaults to the current directory.", + default: ".", + description: "The directory where the new project should be created.", }, ]; @@ -111,7 +111,7 @@ export default class New extends Command { @prettifiedErrors() public async run() { const { args, flags } = await this.getRunConfig(); - const rootDir = args.location; + const rootDir = path.resolve(args.location); const promptModule = await PromptModule.create(); // For the setup wizard we will ask the following questions From d596c042a825eea3e281503e676f036538066bd7 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 21:29:33 +0200 Subject: [PATCH 123/257] fix: Fixed TS error when running Kipper files --- kipper/target-js/src/code-generator.ts | 10 ++++++---- kipper/target-ts/src/code-generator.ts | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 2f82c2945..c73e58f3a 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -84,7 +84,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { // Determine the global scope in the JS execution environment ["// @ts-ignore"], [ - 'var __kipperGlobalScope = typeof __kipperGlobalScope !== "undefined" ? __kipperGlobalScope : typeof' + + 'var __globalScope = typeof __globalScope !== "undefined" ? __globalScope : typeof' + ' globalThis !== "undefined" ?' + " globalThis : typeof" + ' window !== "undefined" ?' + @@ -93,15 +93,17 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { ], // Create global kipper object - Always prefer the global '__kipper' instance ["// @ts-ignore"], - ["var __kipper = __kipperGlobalScope.__kipper = __kipperGlobalScope.__kipper || __kipper || {}", ";"], + ["var __kipper = __globalScope.__kipper = __globalScope.__kipper || __kipper || {}", ";"], // The following error classes are simply used for errors thrown in internal Kipper functions and should be used // when the user code uses a Kipper-specific feature, syntax or function incorrectly. + ["// @ts-ignore"], [ - '__kipper.TypeError = __kipper.TypeError || (class KipperTypeError extends TypeError { constructor(msg) { super(msg); this.name="TypeError"; }})', + '__kipper.TypeError = __kipper.TypeError || (class KipperTypeError extends TypeError { constructor(msg) { super(msg); this.name="TypeError"; }})', ";", ], + ["// @ts-ignore"], [ - '__kipper.IndexError = __kipper.IndexError || (class KipperIndexError extends Error { constructor(msg) { super(msg); this.name="IndexError"; }})', + '__kipper.IndexError = __kipper.IndexError || (class KipperIndexError extends Error { constructor(msg) { super(msg); this.name="IndexError"; }})', ";", ], ]; diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 442c12ae5..4e6f8db98 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -2,7 +2,7 @@ * The TypeScript target-specific code generator for translating Kipper code into TypeScript. * @since 0.8.0 */ -import type { TranslatedCodeLine, VariableDeclaration } from "@kipper/core"; +import { TranslatedCodeLine, VariableDeclaration } from "@kipper/core"; import { FunctionDeclaration } from "@kipper/core"; import { createTSFunctionSignature, getTSFunctionSignature } from "./tools"; import { JavaScriptTargetCodeGenerator } from "@kipper/target-js"; From 615c88af6b01b5b2cc55179bba715c8a2e8b864e Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 25 Jun 2024 21:32:14 +0200 Subject: [PATCH 124/257] other: Prettified README.md --- kipper/cli/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 84571d514..688aec330 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,6 +22,7 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) + - [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) - [Usage](#usage) - [Commands](#commands) From 026bade7b686a37232d06f5806a030743a181fb3 Mon Sep 17 00:00:00 2001 From: Luna Date: Wed, 26 Jun 2024 08:13:49 +0200 Subject: [PATCH 125/257] minor: Moved `@kipper/cli` to `devDependencies` in package.json.template Signed-off-by: Luna --- kipper/cli/src/templates/package.json.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kipper/cli/src/templates/package.json.template b/kipper/cli/src/templates/package.json.template index a5989a0fb..fdfbdb4d4 100644 --- a/kipper/cli/src/templates/package.json.template +++ b/kipper/cli/src/templates/package.json.template @@ -6,7 +6,7 @@ "run": "kipper run ./src/main.kip", "build": "kipper compile" }, - "dependencies": { + "devDependencies": { "@kipper/cli": "" }, "keywords": [ From cb2b39fdfc28cb04985068dd4dcd6a8f6d24ef84 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 26 Jun 2024 09:12:46 +0200 Subject: [PATCH 126/257] fix: Fixed CLI library not containing required file templates --- kipper/cli/README.md | 30 +++++------- kipper/cli/package.json | 5 +- kipper/cli/pnpm-lock.yaml | 96 +++++++++++++++++++++++++++++++++++---- 3 files changed, 102 insertions(+), 29 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 688aec330..aa1f3c728 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,31 +39,28 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.2 linux-x64 node-v20.10.0 +@kipper/cli/0.11.0-alpha.2 linux-x64 node-v18.18.2 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -147,15 +143,14 @@ _See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0. ## `kipper new [LOCATION]` -Generate a new Kipper using a setup wizard. (Node-only for now) +Generate a new Kipper using a setup wizard. ``` USAGE $ kipper new [LOCATION] ARGUMENTS - LOCATION [default: /home/luna/data/Documents/Kipper/Kipper/kipper/cli] The directory where the new project should be - created. Defaults to the current directory. + LOCATION [default: .] The directory where the new project should be created. OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. @@ -212,7 +207,6 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/version.ts)_ - ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 9e0b1e2ce..66b4bf634 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -30,7 +30,8 @@ "typescript": "5.1.3", "prettier": "2.8.8", "oclif": "2.7.0", - "rimraf": "5.0.7" + "rimraf": "5.0.7", + "copyfiles": "2.4.1" }, "engines": { "node": "16.x || 18.x || 20.x || 22.x", @@ -81,7 +82,7 @@ "lint": "pnpm run tslint && pnpm run prettier", "lint:fix": "pnpm run tslint:fix && pnpm run prettier", "build": "tsc", - "postbuild": "cp -r ./src/templates ./lib/templates", + "postbuild": "copyfiles ./src/templates/* ./lib/templates/ --flat", "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix", "start": "node ./bin/run", diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 3657194a0..8d0b3f088 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -61,6 +61,9 @@ devDependencies: '@types/sinon': specifier: 10.0.15 version: 10.0.15 + copyfiles: + specifier: 2.4.1 + version: 2.4.1 oclif: specifier: 2.7.0 version: 2.7.0(@types/node@18.16.16)(typescript@5.1.3) @@ -871,7 +874,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.4 + minimatch: 9.0.5 dev: true /@types/cli-progress@3.11.0: @@ -1104,8 +1107,8 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /aws-sdk@2.1647.0: - resolution: {integrity: sha512-BKFucC3IKfl40FGRCwJPeJ0cWZEa/Wd9r5HKuNg7h4eAN97G1aBjprDt4hvCHzwwNAVP4r0gBoxKeJ1f3HQWeg==} + /aws-sdk@2.1648.0: + resolution: {integrity: sha512-E2QmoQVUBuKDCIZwn3u4DNrZHScKuEaJ8dUYquov1lhQtKVZDBgaQmcJ9/58sUbgupPpc6Q1F/eYLOgVyNSjRQ==} engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: @@ -1374,6 +1377,14 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1491,6 +1502,19 @@ packages: resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} engines: {node: '>= 0.6'} + /copyfiles@2.4.1: + resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} + hasBin: true + dependencies: + glob: 7.2.3 + minimatch: 3.1.2 + mkdirp: 1.0.4 + noms: 0.0.0 + through2: 2.0.5 + untildify: 4.0.0 + yargs: 16.2.0 + dev: true + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true @@ -1985,7 +2009,7 @@ packages: dependencies: foreground-child: 3.2.1 jackspeak: 3.4.0 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -2220,7 +2244,7 @@ packages: resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minimatch: 9.0.4 + minimatch: 9.0.5 dev: true /ignore@5.2.0: @@ -2434,6 +2458,10 @@ packages: dependencies: is-docker: 2.2.1 + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true @@ -2746,8 +2774,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -2950,6 +2978,13 @@ packages: - supports-color dev: true + /noms@0.0.0: + resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} + dependencies: + inherits: 2.0.4 + readable-stream: 1.0.34 + dev: true + /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -3185,7 +3220,7 @@ packages: '@oclif/plugin-help': 5.2.20(@types/node@18.16.16)(typescript@5.1.3) '@oclif/plugin-not-found': 2.4.3(@types/node@18.16.16)(typescript@5.1.3) '@oclif/plugin-warn-if-update-available': 2.0.37(@types/node@18.16.16)(typescript@5.1.3) - aws-sdk: 2.1647.0 + aws-sdk: 2.1648.0 concurrently: 7.6.0 debug: 4.3.4(supports-color@8.1.1) find-yarn-workspace-root: 2.0.0 @@ -3628,6 +3663,15 @@ packages: type-fest: 0.6.0 dev: true + /readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: @@ -3645,7 +3689,7 @@ packages: engines: {node: '>= 6'} dependencies: inherits: 2.0.4 - string_decoder: 1.3.0 + string_decoder: 1.1.1 util-deprecate: 1.0.2 dev: true @@ -4038,6 +4082,10 @@ packages: strip-ansi: 7.1.0 dev: true + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -4203,6 +4251,13 @@ packages: engines: {node: '>=0.8'} dev: true + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: true + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -4603,6 +4658,11 @@ packages: engines: {node: '>=4.0'} dev: true + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -4611,11 +4671,29 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: true + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} From ace8a06a7b41512613e8de3d5e898022492b9f86 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 26 Jun 2024 09:30:15 +0200 Subject: [PATCH 127/257] fix: Fixed gitignore template missing in CLI package --- kipper/cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 66b4bf634..ffd5df7b1 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -82,7 +82,7 @@ "lint": "pnpm run tslint && pnpm run prettier", "lint:fix": "pnpm run tslint:fix && pnpm run prettier", "build": "tsc", - "postbuild": "copyfiles ./src/templates/* ./lib/templates/ --flat", + "postbuild": "copyfiles ./src/templates/**/* ./lib/templates/ --flat --all", "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix", "start": "node ./bin/run", From 8a4cbd756038878d37d15bfa3ab2767fe8a58621 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 26 Jun 2024 09:30:34 +0200 Subject: [PATCH 128/257] release: Bumped Kipper project version to 0.11.0-alpha.3 --- CITATION.cff | 8 ++++---- kipper/cli/README.md | 23 ++++++++++++++--------- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 8 files changed, 24 insertions(+), 19 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 36c907600..2455b4cb9 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,8 +13,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.2 - description: The GitHub release URL of tag 0.11.0-alpha.2 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.3 + description: The GitHub release URL of tag 0.11.0-alpha.3 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -31,6 +31,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/LICENSE' -version: 0.11.0-alpha.2 +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/LICENSE' +version: 0.11.0-alpha.3 date-released: '2023-08-15' diff --git a/kipper/cli/README.md b/kipper/cli/README.md index aa1f3c728..e066a5d6e 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,17 +52,19 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -207,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 54dd938f0..fc87321f9 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.2"; +export const version = "0.11.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index c9cedefa0..980ac0993 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.2"; +export const version = "0.11.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 3e2788fc7..482fec6c4 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.2"; +export const version = "0.11.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 903441d84..424ff92f9 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.2"; +export const version = "0.11.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index e7e1c80d9..47e48ee5b 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.2"; +export const version = "0.11.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 3481712fb..5120bffad 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.2"; +export const version = "0.11.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From ff5856da73cc12f1bf41fbc0038b91b510ab347c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 26 Jun 2024 09:34:02 +0200 Subject: [PATCH 129/257] Release 0.11.0-alpha.3 --- kipper/cli/README.md | 37 +++++++++++++++-------------------- kipper/cli/package.json | 8 ++++---- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 26 insertions(+), 31 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index e066a5d6e..0351c2226 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,31 +39,28 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.2 linux-x64 node-v18.18.2 +@kipper/cli/0.11.0-alpha.3 linux-x64 node-v18.18.2 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -86,7 +82,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -126,7 +122,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -143,7 +139,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -160,7 +156,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -199,7 +195,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -210,8 +206,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.2/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index ffd5df7b1..23aa0384b 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.11.0-alpha.2", + "version": "0.11.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run" @@ -30,8 +30,8 @@ "typescript": "5.1.3", "prettier": "2.8.8", "oclif": "2.7.0", - "rimraf": "5.0.7", - "copyfiles": "2.4.1" + "rimraf": "5.0.7", + "copyfiles": "2.4.1" }, "engines": { "node": "16.x || 18.x || 20.x || 22.x", @@ -82,7 +82,7 @@ "lint": "pnpm run tslint && pnpm run prettier", "lint:fix": "pnpm run tslint:fix && pnpm run prettier", "build": "tsc", - "postbuild": "copyfiles ./src/templates/**/* ./lib/templates/ --flat --all", + "postbuild": "copyfiles ./src/templates/**/* ./lib/templates/ --flat --all", "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", "tslint:fix": "eslint ./src/ --ext .ts --config ./../../.eslintrc --fix", "start": "node ./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index 8019abc53..42e31509b 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.11.0-alpha.2", + "version": "0.11.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index aac801454..d26b6d06b 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.11.0-alpha.2", + "version": "0.11.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 2db3d7b07..8731b5c76 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.2", + "version": "0.11.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index c24eb810f..7a82bf468 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.2", + "version": "0.11.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index 1b94039cc..3cece100e 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.11.0-alpha.2", + "version": "0.11.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index 80b2a2efe..a426c587a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.11.0-alpha.2", + "version": "0.11.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From b3c0ddb3e75a5bb37ac8e4e3388eaa96a249a056 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Wed, 26 Jun 2024 10:41:33 +0200 Subject: [PATCH 130/257] [Related to #478] Added support for string multiplication --- .../analysis/analyser/type-checker.ts | 6 ++++ .../multiplicative-expression.ts | 19 ++++++++---- .../cast-or-convert-expression.ts | 7 +++-- kipper/core/src/compiler/runtime-built-ins.ts | 18 ++++++++++-- .../translation/built-ins-generator.ts | 12 ++++++++ kipper/target-js/src/built-in-generator.ts | 8 +++++ kipper/target-js/src/code-generator.ts | 6 ++++ kipper/target-ts/src/built-in-generator.ts | 8 +++++ test/kipper-files/string-multiplication.kip | 3 ++ .../type-errors/arithmetic-operation.ts | 29 +++++++++++-------- 10 files changed, 94 insertions(+), 22 deletions(-) create mode 100644 test/kipper-files/string-multiplication.kip diff --git a/kipper/core/src/compiler/analysis/analyser/type-checker.ts b/kipper/core/src/compiler/analysis/analyser/type-checker.ts index dffcdd1a5..470402d31 100644 --- a/kipper/core/src/compiler/analysis/analyser/type-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/type-checker.ts @@ -33,6 +33,7 @@ import { KipperCompilableType, kipperCompilableTypes, kipperIncrementOrDecrementOperators, + kipperMultiplicativeOperators, kipperPlusOperator, KipperReferenceable, KipperReferenceableFunction, @@ -395,6 +396,11 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { return; } + // Strings can use * to repeat a string n times + if (op === kipperMultiplicativeOperators[0] && leftOpType == kipperStrType && rightOpType == "num") { + return; + } + // If types are not matching, not numeric, and they are not of string-like types, throw an error throw this.assertError(new ArithmeticOperationTypeError(leftOpType, rightOpType)); } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts index 77c087d85..5ebafd7f9 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts @@ -17,8 +17,8 @@ import { KindParseRuleMapping, MultiplicativeExpressionContext, ParseRuleKindMap import { KipperMultiplicativeOperator, kipperMultiplicativeOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; -import { CheckedType } from "../../../../../analysis"; import { ArithmeticExpression } from "../arithmetic-expression"; +import { kipperInternalBuiltInFunctions } from "../../../../../runtime-built-ins"; /** * Multiplicative expression, which can be used to perform multiplicative operations on two expressions. @@ -37,7 +37,7 @@ export class MultiplicativeExpression extends ArithmeticExpression< > { /** * The private field '_antlrRuleCtx' that actually stores the variable data, - * which is returned inside the {@link this.antlrRuleCtx}. + * which is returned inside the {@link antlrRuleCtx}. * @private */ protected override readonly _antlrRuleCtx: MultiplicativeExpressionContext; @@ -87,7 +87,7 @@ export class MultiplicativeExpression extends ArithmeticExpression< * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} * and throw errors if encountered. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * This will not run in case that {@link hasFailed} is true, as that indicates that the semantic analysis of * the children has already failed and as such no parent node should run type checking. */ public async primarySemanticAnalysis(): Promise { @@ -121,7 +121,7 @@ export class MultiplicativeExpression extends ArithmeticExpression< * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} * and throw errors if encountered. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * This will not run in case that {@link hasFailed} is true, as that indicates that the type checking of * the children has already failed and as such no parent node should run type checking. * @since 0.7.0 */ @@ -133,10 +133,17 @@ export class MultiplicativeExpression extends ArithmeticExpression< .typeCheck(this) .validArithmeticExpression(semanticData.leftOp, semanticData.rightOp, semanticData.operator); - // A multiplicative expression will always be of type 'num' + // A multiplicative will always have the type of the first operant. This is also the case for string multiplication this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("num"), + evaluatedType: semanticData.leftOp.getTypeSemanticData().evaluatedType, }; + + if ( + semanticData.leftOp.getTypeSemanticData().evaluatedType.getCompilableType() === "str" && + semanticData.rightOp.getTypeSemanticData().evaluatedType.getCompilableType() === "num" + ) { + this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions["repeatString"]); + } } /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts index 0c403daea..7ef4c8204 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts @@ -134,14 +134,17 @@ export class CastOrConvertExpression extends Expression< semanticData.castType.identifier, ); if (internalIdentifier in kipperInternalBuiltInFunctions) { - this.programCtx.addInternalReference(this, kipperInternalBuiltInFunctions[internalIdentifier]); + this.programCtx.addInternalReference( + this, + kipperInternalBuiltInFunctions[internalIdentifier as keyof typeof kipperInternalBuiltInFunctions], + ); } } /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * This will log all warnings using {@link this.programCtx.logger} and store them in {@link this.KipperProgramContext.warnings}. * @since 0.9.0 */ public checkForWarnings = undefined; // TODO! diff --git a/kipper/core/src/compiler/runtime-built-ins.ts b/kipper/core/src/compiler/runtime-built-ins.ts index 2eb370235..3e44c9814 100644 --- a/kipper/core/src/compiler/runtime-built-ins.ts +++ b/kipper/core/src/compiler/runtime-built-ins.ts @@ -181,7 +181,7 @@ export const kipperRuntimeBuiltInFunctions: Record = { * This contains *every* builtin that also must be implemented by every target in the {@link KipperTargetBuiltInGenerator}. * @since 0.8.0 */ -export const kipperInternalBuiltInFunctions: Record = { +export const kipperInternalBuiltInFunctions = { numToStr: { identifier: "numToStr", params: [ @@ -284,7 +284,21 @@ export const kipperInternalBuiltInFunctions: Record = ], returnType: "str", // TODO: Implement this for all arrayLike types (At the moment only strings are supported) }, -}; + repeatString: { + identifier: "repeatString", + params: [ + { + identifier: "toRepeat", + valueType: "str", + }, + { + identifier: "times", + valueType: "num", + }, + ], + returnType: "str", + }, +} satisfies Record; /** * Contains all the built-in variables in Kipper that are available per default in every program. diff --git a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts index 884a43367..e9f51f2f7 100644 --- a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts @@ -104,6 +104,18 @@ export abstract class KipperTargetBuiltInGenerator { */ abstract index(funcSpec: InternalFunction, programCtx: KipperProgramContext): Promise>; + /** + * Repeat string function which provides the ability to repeat a string a given number of times. + * @param funcSpec The specification for the function. This contains the overall metadata for the function that + * should be followed. This is auto-inserted by the code-generator in {@link KipperProgramContext}. + * @param programCtx The program context of the environment that is being compiled. + * @since 0.10.0 + */ + abstract repeatString( + funcSpec: InternalFunction, + programCtx: KipperProgramContext, + ): Promise>; + /** * Print function which provides default IO console output functionality. * @param funcSpec The specification for the function. This contains the overall metadata for the function that diff --git a/kipper/target-js/src/built-in-generator.ts b/kipper/target-js/src/built-in-generator.ts index 3b77aa0fa..f60fad51a 100644 --- a/kipper/target-js/src/built-in-generator.ts +++ b/kipper/target-js/src/built-in-generator.ts @@ -135,4 +135,12 @@ export class JavaScriptTargetBuiltInGenerator extends KipperTargetBuiltInGenerat async __name__(varSpec: BuiltInVariable, programCtx: KipperProgramContext): Promise> { return [genJSVariable(varSpec, `"${programCtx.fileName}"`)]; } + + async repeatString(funcSpec: InternalFunction): Promise> { + const signature = getJSFunctionSignature(funcSpec); + const toRepeatIdentifier = signature.params[0]; + const timesIdentifier = signature.params[1]; + + return genJSFunction(signature, `{ return ${toRepeatIdentifier}.repeat(${timesIdentifier}); }`); + } } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 2f82c2945..b401450e9 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -595,9 +595,15 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { multiplicativeExpression = async (node: MultiplicativeExpression): Promise => { // Get the semantic data const semanticData = node.getSemanticData(); + const stringRepeatFunction = TargetJS.getBuiltInIdentifier("repeatString"); const exp1: TranslatedExpression = await semanticData.leftOp.translateCtxAndChildren(); const exp2: TranslatedExpression = await semanticData.rightOp.translateCtxAndChildren(); + + if (semanticData.leftOp.getTypeSemanticData().evaluatedType.getCompilableType() === "str") { + return [stringRepeatFunction, "(", ...exp1, ", ", ...exp2, ")"]; + } + return [...exp1, " ", semanticData.operator, " ", ...exp2]; }; diff --git a/kipper/target-ts/src/built-in-generator.ts b/kipper/target-ts/src/built-in-generator.ts index 56c26c7bb..2930d52a6 100644 --- a/kipper/target-ts/src/built-in-generator.ts +++ b/kipper/target-ts/src/built-in-generator.ts @@ -149,6 +149,14 @@ export class TypeScriptTargetBuiltInGenerator extends JavaScriptTargetBuiltInGen return genTSFunction(signature, `{ return ${lenArgIdentifier}.length; }`); } + async repeatString(funcSpec: BuiltInFunction): Promise> { + const signature = getTSFunctionSignature(funcSpec); + const repeatArgIdentifier = signature.params[0].identifier; + const timesArgIdentifier = signature.params[1].identifier; + + return genTSFunction(signature, `{ return ${repeatArgIdentifier}.repeat(${timesArgIdentifier}); }`); + } + async __name__(varSpec: BuiltInVariable, programCtx: KipperProgramContext): Promise> { return [genTSVariable(varSpec, `"${programCtx.fileName}"`)]; } diff --git a/test/kipper-files/string-multiplication.kip b/test/kipper-files/string-multiplication.kip new file mode 100644 index 000000000..2fce051f2 --- /dev/null +++ b/test/kipper-files/string-multiplication.kip @@ -0,0 +1,3 @@ +var x: str = "hello"; +var y: str = x * 2; +print(f"Result: {y as str}"); diff --git a/test/module/core/errors/type-errors/arithmetic-operation.ts b/test/module/core/errors/type-errors/arithmetic-operation.ts index 26eb6e893..0a9deec38 100644 --- a/test/module/core/errors/type-errors/arithmetic-operation.ts +++ b/test/module/core/errors/type-errors/arithmetic-operation.ts @@ -28,18 +28,6 @@ describe("ArithmeticOperationTypeError", () => { assert.fail("Expected 'ArithmeticOperationTypeError'"); }); - it("str*num", async () => { - try { - await new KipperCompiler().compile('"3" * 4;', defaultConfig); - } catch (e) { - assert.equal((e).constructor.name, "ArithmeticOperationTypeError", "Expected different error"); - assert((e).name === "TypeError", "Expected different error"); - ensureTracebackDataExists(e); - return; - } - assert.fail("Expected 'ArithmeticOperationTypeError'"); - }); - it("str**num", async () => { try { await new KipperCompiler().compile('"3" ** 4;', defaultConfig); @@ -342,6 +330,23 @@ describe("ArithmeticOperationTypeError", () => { }); describe("NoError", () => { + describe("*", () => { + it("str*num", async () => { + let result: KipperCompileResult | undefined = undefined; + try { + result = await new KipperCompiler().compile('"3" * 3;', { + abortOnFirstError: true, + target: defaultTarget, + }); + } catch (e) { + assert.fail("Expected no 'ArithmeticOperationTypeError'"); + } + assert.isDefined(result, "Expected defined compilation result"); + assert.isDefined(result!!.programCtx, "Expected programCtx to be defined"); + assert.isFalse(result!!.programCtx!!.hasFailed, "Expected no errors"); + }); + }); + describe("+", () => { it("str", async () => { let result: KipperCompileResult | undefined = undefined; From eb94965e534d878bad42ffe29fa5dfa1a9dc2984 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:03:13 +0200 Subject: [PATCH 131/257] minor (#478): Added support for string multiplication --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3a13d97c..64b6f00c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ To use development versions of Kipper download the ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). - Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. ([#287](https://github.com/Kipper-Lang/Kipper/issues/287)). +- Support for string multiplication using the `*` operator. + ([#478](https://github.com/Kipper-Lang/Kipper/issues/478)). - New valid conversions: - `void` to `str`. - `null` to `str`. From ac387e171e765f7c23415a848579de7ba2e121da Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:20:27 +0200 Subject: [PATCH 132/257] other (#587): added an additional test case for num/num multiplication --- CHANGELOG.md | 2 +- kipper/target-js/src/code-generator.ts | 1 + .../errors/type-errors/arithmetic-operation.ts | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64b6f00c9..a9d95894a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,7 @@ To use development versions of Kipper download the - Support for complex string formatting (or also called templating) in the form of Python-like F-Strings. ([#287](https://github.com/Kipper-Lang/Kipper/issues/287)). - Support for string multiplication using the `*` operator. - ([#478](https://github.com/Kipper-Lang/Kipper/issues/478)). + ([#478](https://github.com/Kipper-Lang/Kipper/issues/478)). - New valid conversions: - `void` to `str`. - `null` to `str`. diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index b401450e9..58dcde7a8 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -600,6 +600,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { const exp1: TranslatedExpression = await semanticData.leftOp.translateCtxAndChildren(); const exp2: TranslatedExpression = await semanticData.rightOp.translateCtxAndChildren(); + // In this case it should be a string multiplication if (semanticData.leftOp.getTypeSemanticData().evaluatedType.getCompilableType() === "str") { return [stringRepeatFunction, "(", ...exp1, ", ", ...exp2, ")"]; } diff --git a/test/module/core/errors/type-errors/arithmetic-operation.ts b/test/module/core/errors/type-errors/arithmetic-operation.ts index 0a9deec38..61290a432 100644 --- a/test/module/core/errors/type-errors/arithmetic-operation.ts +++ b/test/module/core/errors/type-errors/arithmetic-operation.ts @@ -330,6 +330,20 @@ describe("ArithmeticOperationTypeError", () => { }); describe("NoError", () => { + describe("num*num", () => { + it("num*num", async () => { + let result: KipperCompileResult | undefined = undefined; + try { + result = await new KipperCompiler().compile("3 * 3;", defaultConfig); + } catch (e) { + assert.fail("Expected no 'ArithmeticOperationTypeError'"); + } + assert.isDefined(result, "Expected defined compilation result"); + assert.isDefined(result!!.programCtx, "Expected programCtx to be defined"); + assert.isFalse(result!!.programCtx!!.hasFailed, "Expected no errors"); + }); + }); + describe("*", () => { it("str*num", async () => { let result: KipperCompileResult | undefined = undefined; From ae5365950b46448cfba4ef0895efe6774260379e Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 26 Jun 2024 19:20:37 +0200 Subject: [PATCH 133/257] fix: Fixed invalid `prepack` script in the CLI --- kipper/cli/README.md | 25 +++++++++++++++---------- kipper/cli/package.json | 2 +- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 0351c2226..df784d8ef 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,28 +40,31 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.3 linux-x64 node-v18.18.2 +@kipper/cli/0.11.0-alpha.3 linux-x64 node-v20.10.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -207,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 23aa0384b..0244f9caa 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -77,7 +77,7 @@ }, "scripts": { "postpack": "rimraf oclif.manifest.json", - "prepack": "rimraf lib && tsc -b && oclif manifest && oclif readme", + "prepack": "rimraf lib && pnpm run build && oclif manifest && oclif readme", "version": "oclif readme && git add README.md && pnpm version", "lint": "pnpm run tslint && pnpm run prettier", "lint:fix": "pnpm run tslint:fix && pnpm run prettier", From c8385dedb589d8b706e3ac6eb7d131bcb038ae2c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 26 Jun 2024 19:25:51 +0200 Subject: [PATCH 134/257] release: Bumped Kipper project version to 0.11.0-alpha.4 --- CITATION.cff | 8 ++++---- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 2455b4cb9..23a8a2912 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,8 +13,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.3 - description: The GitHub release URL of tag 0.11.0-alpha.3 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.4 + description: The GitHub release URL of tag 0.11.0-alpha.4 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -31,6 +31,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/LICENSE' -version: 0.11.0-alpha.3 +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/LICENSE' +version: 0.11.0-alpha.4 date-released: '2023-08-15' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index fc87321f9..40da9ec64 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.3"; +export const version = "0.11.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 980ac0993..c97d68af2 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.3"; +export const version = "0.11.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 482fec6c4..5c0da1904 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.3"; +export const version = "0.11.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 424ff92f9..7a73d9dba 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.3"; +export const version = "0.11.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 47e48ee5b..c240f185e 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.3"; +export const version = "0.11.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 5120bffad..8af055e54 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.3"; +export const version = "0.11.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 723c622dada76155ef70b2640ac5bced46938b71 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 26 Jun 2024 19:27:20 +0200 Subject: [PATCH 135/257] Release 0.11.0-alpha.4 --- kipper/cli/README.md | 37 +++++++++++++++-------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 23 insertions(+), 28 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index df784d8ef..4cc15f778 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,31 +39,28 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.3 linux-x64 node-v20.10.0 +@kipper/cli/0.11.0-alpha.4 linux-x64 node-v20.10.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -86,7 +82,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -126,7 +122,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -143,7 +139,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -160,7 +156,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -199,7 +195,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -210,8 +206,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 0244f9caa..6f53b45e8 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.11.0-alpha.3", + "version": "0.11.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run" diff --git a/kipper/config/package.json b/kipper/config/package.json index 42e31509b..d12e57731 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.11.0-alpha.3", + "version": "0.11.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index d26b6d06b..c66ea7ede 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.11.0-alpha.3", + "version": "0.11.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 8731b5c76..040657ea4 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.3", + "version": "0.11.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 7a82bf468..bcbcb06fb 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.3", + "version": "0.11.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index 3cece100e..7cddf6aaf 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.11.0-alpha.3", + "version": "0.11.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index a426c587a..c77b5df71 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.11.0-alpha.3", + "version": "0.11.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From e2c2c94aaeaf883dd6d8c0f782d041bddb5680b2 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 27 Jun 2024 16:15:59 +0200 Subject: [PATCH 136/257] other: Updated antlr4 scripts in package.json --- kipper/core/package.json | 10 ++++++---- package.json | 3 +-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/kipper/core/package.json b/kipper/core/package.json index d26b6d06b..5136d8b2c 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -54,10 +54,12 @@ "prepack": "pnpm run build", "build": "tsc", "version": "pnpm version", - "antlr4ts": "antlr4ts -visitor -o ./src/compiler/parser/antlr ./KipperLexer.g4 ./KipperParser.g4", - "postantlr4ts": "run-script-os", - "postantlr4ts:linux:macos:default": "cp ./src/compiler/parser/antlr/*.interp ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./", - "postantlr4ts:windows": "copy .\\src\\compiler\\parser\\antlr\\*.interp .\\lib\\compiler\\parser\\antlr\\ /Y && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\lib\\compiler\\parser\\antlr\\ && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\", + "antlr4": "pnpm run antlr4-no-rebuild", + "antlr4-no-rebuild": "antlr4ts -visitor -o ./src/compiler/parser/antlr ./KipperLexer.g4 ./KipperParser.g4", + "postantlr4-no-rebuild": "run-script-os", + "postantlr4-no-rebuild:linux:macos:default": "cp ./src/compiler/parser/antlr/*.interp ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./lib/compiler/parser/antlr/ && cp ./src/compiler/parser/antlr/*.tokens ./", + "postantlr4-no-rebuild:windows": "copy .\\src\\compiler\\parser\\antlr\\*.interp .\\lib\\compiler\\parser\\antlr\\ /Y && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\lib\\compiler\\parser\\antlr\\ && copy .\\src\\compiler\\parser\\antlr\\*.tokens .\\", + "postantlr4": "pnpm run build", "lint": "pnpm run tslint", "lint:fix": "pnpm run tslint:fix", "tslint": "eslint ./src/ --ext .ts --config ./../../.eslintrc", diff --git a/package.json b/package.json index a426c587a..17f55e665 100644 --- a/package.json +++ b/package.json @@ -89,8 +89,7 @@ "pretest": "pnpm run build", "test": "pnpm run test-no-rebuild", "test-no-rebuild": "nyc mocha ./test/", - "antlr4ts": "pnpm --filter \"@kipper/core\" run antlr4ts", - "postantlr4ts": "pnpm run build", + "antlr4": "pnpm --filter \"@kipper/core\" run antlr4", "prettier": "prettier --write .", "lint": "pnpm run tslint", "lint:fix": "pnpm run tslint:fix", From e6dc6ae74f862d86620e4a3a3c7ab79d1ee2c7d5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 27 Jun 2024 16:31:04 +0200 Subject: [PATCH 137/257] major (#523): Implemented object literal syntax and basic AST node structure --- kipper/cli/README.md | 23 +- kipper/core/KipperParser.g4 | 28 +- kipper/core/src/compiler/ast/ast-generator.ts | 15 +- .../core/src/compiler/ast/common/ast-types.ts | 2 + .../compiler/ast/mapping/ast-node-mapper.ts | 7 +- .../constant/constant-expression.ts | 3 +- .../object-primary-expression-semantics.ts | 19 + ...bject-primary-expression-type-semantics.ts | 7 + .../object-primary-expression.ts | 112 + .../compiler/parser/antlr/KipperParser.interp | 5 +- .../src/compiler/parser/antlr/KipperParser.ts | 2105 +++++++++-------- .../parser/antlr/KipperParserListener.ts | 37 + .../parser/antlr/KipperParserVisitor.ts | 25 + .../parser/antlr/base/KipperParserBase.ts | 27 + .../parser/parse-rule-kind-mapping.ts | 77 +- 15 files changed, 1471 insertions(+), 1021 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression.ts create mode 100644 kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 0351c2226..99a33450d 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,17 +52,19 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -207,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.3/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 0fb272adf..7d0403a87 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -7,12 +7,14 @@ parser grammar KipperParser; options { tokenVocab=KipperLexer; contextSuperClass=KipperParserRuleContext; + superClass=KipperParserBase; } @parser::header { // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + import KipperParserBase from "./base/KipperParserBase"; } // Entry Point for an entire file @@ -84,20 +86,20 @@ initializer // -- Statements statement - : compoundStatement - | expressionStatement + : expressionStatement | selectionStatement | iterationStatement | jumpStatement | returnStatement + | compoundStatement ; compoundStatement - : '{' blockItemList? '}' + : {this.notInsideExpressionStatement()}? '{' blockItemList? '}' ; expressionStatement - : expression SemiColon + : {this.enterExpressionStatement()} expression SemiColon {this.exitExpressionStatement()} ; selectionStatement @@ -152,12 +154,13 @@ returnStatement primaryExpression // Primary expressions, which build up the rest of the more complex expressions : tangledPrimaryExpression + | arrayPrimaryExpression + | objectPrimaryExpression | boolPrimaryExpression | identifierPrimaryExpression | stringPrimaryExpression | fStringPrimaryExpression | numberPrimaryExpression - | arrayPrimaryExpression | voidOrNullOrUndefinedPrimaryExpression ; @@ -177,6 +180,11 @@ identifier : Identifier ; +identifierOrStringPrimaryExpression + : identifier + | stringPrimaryExpression + ; + stringPrimaryExpression : SingleQuoteStringLiteral | DoubleQuoteStringLiteral ; @@ -201,7 +209,15 @@ numberPrimaryExpression ; arrayPrimaryExpression - : '[' (expression (',' expression)*)? ']' + : '[' (expression (',' expression)*)? ','? ']' + ; + +objectPrimaryExpression + : '{' (objectProperty (',' objectProperty)*)? ','? '}' + ; + +objectProperty + : identifierOrStringPrimaryExpression ':' expression ; voidOrNullOrUndefinedPrimaryExpression diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 3cac438a3..5ad7dcc3f 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -9,7 +9,7 @@ import type { ParserStatementContext, } from "./common"; import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import type { +import { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, ActualCastOrConvertExpressionContext, @@ -50,6 +50,7 @@ import type { KipperParserRuleContext, LogicalAndExpressionContext, NumberPrimaryExpressionContext, + ObjectPrimaryExpressionContext, OperatorModifiedUnaryExpressionContext, ParameterDeclarationContext, ParameterListContext, @@ -364,6 +365,18 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ public exitArrayPrimaryExpression: (ctx: ArrayPrimaryExpressionContext) => void = this.handleExitingTreeNode; + /** + * Enter a parse tree produced by `KipperParser.objectPrimaryExpression`. + * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). + */ + public enterObjectPrimaryExpression: (ctx: ObjectPrimaryExpressionContext) => void = this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by `KipperParser.objectPrimaryExpression`. + * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). + */ + public exitObjectPrimaryExpression: (ctx: ObjectPrimaryExpressionContext) => void = this.handleExitingTreeNode; + /** * Enter a parse tree produced by `KipperParser.boolPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index 6042eb89e..642eb26d9 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -146,6 +146,7 @@ export type ASTStatementKind = export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_numberPrimaryExpression | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression + | typeof ParseRuleKindMapping.RULE_objectPrimaryExpression | typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression @@ -213,6 +214,7 @@ export type ASTStatementRuleName = export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_numberPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_objectPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_boolPrimaryExpression] diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 8aa123cba..911505250 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -5,6 +5,7 @@ * @since 0.11.0 */ import { + ParseRuleKindMapping, AdditiveExpressionContext, ArrayPrimaryExpressionContext, AssignmentExpressionContext, @@ -32,9 +33,9 @@ import { LogicalOrExpressionContext, MultiplicativeExpressionContext, NumberPrimaryExpressionContext, + ObjectPrimaryExpressionContext, OperatorModifiedUnaryExpressionContext, ParameterDeclarationContext, - ParseRuleKindMapping, RelationalExpressionContext, ReturnStatementContext, SliceNotationMemberAccessExpressionContext, @@ -96,6 +97,7 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; +import { ObjectPrimaryExpression } from "../nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -123,6 +125,7 @@ export class ASTNodeMapper { public static readonly expressionKindToClassMap = { [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpression, [ParseRuleKindMapping.RULE_arrayPrimaryExpression]: ArrayPrimaryExpression, + [ParseRuleKindMapping.RULE_objectPrimaryExpression]: ObjectPrimaryExpression, [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpression, [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpression, [ParseRuleKindMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpression, @@ -184,6 +187,7 @@ export class ASTNodeMapper { public static readonly expressionKindToRuleContextMap = { [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpressionContext, [ParseRuleKindMapping.RULE_arrayPrimaryExpression]: ArrayPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_objectPrimaryExpression]: ObjectPrimaryExpressionContext, [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpressionContext, [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpressionContext, [ParseRuleKindMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpressionContext, @@ -250,6 +254,7 @@ export class ASTNodeMapper { public static readonly expressionRuleNameToClassMap = { RULE_numberPrimaryExpression: NumberPrimaryExpression, RULE_arrayPrimaryExpression: ArrayPrimaryExpression, + RULE_objectPrimaryExpression: ObjectPrimaryExpression, RULE_identifierPrimaryExpression: IdentifierPrimaryExpression, RULE_voidOrNullOrUndefinedPrimaryExpression: VoidOrNullOrUndefinedPrimaryExpression, RULE_boolPrimaryExpression: BoolPrimaryExpression, diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts index 1dc101d15..807782df9 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts @@ -19,7 +19,8 @@ export type ASTConstantExpressionKind = | typeof ParseRuleKindMapping.RULE_stringPrimaryExpression | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression - | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression; + | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression + | typeof ParseRuleKindMapping.RULE_objectPrimaryExpression; /** * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts new file mode 100644 index 000000000..cab148731 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts @@ -0,0 +1,19 @@ +import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; +import type { Expression } from "../../../expression"; + +/** + * Semantics for AST Node {@link VariableDeclaration}. + * @since 0.3.0 + */ +export interface ObjectPrimaryExpressionSemantics extends ConstantExpressionSemantics { + value: Array<{ + /** + * The identifier of the field inside the object. + */ + identifier: string; + /** + * The value of the field inside the object. + */ + value: Expression; + }>; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts new file mode 100644 index 000000000..e19d205b9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts @@ -0,0 +1,7 @@ +import { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link ObjectPrimaryExpression}. + * @since 0.10.0 + */ +export interface ObjectPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression.ts new file mode 100644 index 000000000..19b0617f3 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression.ts @@ -0,0 +1,112 @@ +/** + * Object literal constant, which represents an object that was defined in the source code. + * @since 0.11.0 + */ +import type { ObjectPrimaryExpressionSemantics } from "./object-primary-expression-semantics"; +import type { ObjectPrimaryExpressionTypeSemantics } from "./object-primary-expression-type-semantics"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import { ConstantExpression } from "../constant-expression"; +import { ObjectPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; +import { KipperNotImplementedError } from "../../../../../../../errors"; + +/** + * Object literal constant, which represents an object that was defined in the source code. + * @since 0.11.0 + */ +export class ObjectPrimaryExpression extends ConstantExpression< + ObjectPrimaryExpressionSemantics, + ObjectPrimaryExpressionTypeSemantics +> { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ObjectPrimaryExpressionContext; + + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_objectPrimaryExpression; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get kind() { + return ObjectPrimaryExpression.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return ObjectPrimaryExpression.ruleName; + } + + constructor(antlrRuleCtx: ObjectPrimaryExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Object Literals have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.11.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Object Literals have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.11.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ObjectPrimaryExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.listPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.arrayLiteralExpression; +} diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.interp b/kipper/core/src/compiler/parser/antlr/KipperParser.interp index 4940e6f5a..799bc6ad9 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.interp @@ -190,12 +190,15 @@ tangledPrimaryExpression boolPrimaryExpression identifierPrimaryExpression identifier +identifierOrStringPrimaryExpression stringPrimaryExpression fStringPrimaryExpression fStringSingleQuoteAtom fStringDoubleQuoteAtom numberPrimaryExpression arrayPrimaryExpression +objectPrimaryExpression +objectProperty voidOrNullOrUndefinedPrimaryExpression computedPrimaryExpression argumentExpressionList @@ -228,4 +231,4 @@ typeSpecifierIdentifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 78, 597, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 3, 2, 5, 2, 140, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 145, 10, 3, 13, 3, 14, 3, 146, 3, 4, 3, 4, 3, 5, 6, 5, 152, 10, 5, 13, 5, 14, 5, 153, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 166, 10, 7, 5, 7, 168, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 174, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 180, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 196, 10, 13, 3, 14, 3, 14, 3, 14, 7, 14, 201, 10, 14, 12, 14, 14, 14, 204, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 218, 10, 17, 3, 18, 3, 18, 5, 18, 222, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 231, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 240, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 248, 10, 22, 12, 22, 14, 22, 251, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 263, 10, 23, 3, 24, 3, 24, 3, 24, 5, 24, 268, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 274, 10, 25, 3, 25, 3, 25, 5, 25, 278, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 284, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 290, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 314, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 326, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 7, 36, 342, 10, 36, 12, 36, 14, 36, 345, 11, 36, 3, 36, 3, 36, 3, 36, 7, 36, 350, 10, 36, 12, 36, 14, 36, 353, 11, 36, 3, 36, 5, 36, 356, 10, 36, 3, 37, 3, 37, 3, 37, 5, 37, 361, 10, 37, 3, 37, 5, 37, 364, 10, 37, 3, 38, 3, 38, 3, 38, 5, 38, 369, 10, 38, 3, 38, 5, 38, 372, 10, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 380, 10, 40, 12, 40, 14, 40, 383, 11, 40, 5, 40, 385, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 397, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 402, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 407, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 423, 10, 42, 12, 42, 14, 42, 426, 11, 42, 3, 43, 3, 43, 3, 43, 7, 43, 431, 10, 43, 12, 43, 14, 43, 434, 11, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 447, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 453, 10, 46, 3, 46, 3, 46, 3, 47, 3, 47, 5, 47, 459, 10, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 5, 49, 467, 10, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 484, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 492, 10, 55, 12, 55, 14, 55, 495, 11, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 7, 56, 503, 10, 56, 12, 56, 14, 56, 506, 11, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 514, 10, 57, 12, 57, 14, 57, 517, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 525, 10, 58, 12, 58, 14, 58, 528, 11, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 536, 10, 59, 12, 59, 14, 59, 539, 11, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 547, 10, 60, 12, 60, 14, 60, 550, 11, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 559, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 566, 10, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 7, 64, 573, 10, 64, 12, 64, 14, 64, 576, 11, 64, 3, 65, 3, 65, 3, 65, 5, 65, 581, 10, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 2, 2, 9, 82, 108, 110, 112, 114, 116, 118, 70, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 2, 16, 3, 2, 6, 7, 3, 2, 13, 14, 3, 2, 25, 26, 3, 2, 68, 69, 4, 2, 67, 67, 70, 70, 3, 2, 28, 30, 4, 2, 43, 43, 45, 45, 5, 2, 42, 42, 44, 44, 52, 52, 3, 2, 46, 49, 4, 2, 42, 42, 44, 44, 3, 2, 61, 64, 3, 2, 59, 60, 3, 2, 53, 58, 4, 2, 28, 30, 66, 66, 2, 597, 2, 139, 3, 2, 2, 2, 4, 144, 3, 2, 2, 2, 6, 148, 3, 2, 2, 2, 8, 151, 3, 2, 2, 2, 10, 158, 3, 2, 2, 2, 12, 167, 3, 2, 2, 2, 14, 169, 3, 2, 2, 2, 16, 181, 3, 2, 2, 2, 18, 184, 3, 2, 2, 2, 20, 186, 3, 2, 2, 2, 22, 188, 3, 2, 2, 2, 24, 190, 3, 2, 2, 2, 26, 197, 3, 2, 2, 2, 28, 205, 3, 2, 2, 2, 30, 209, 3, 2, 2, 2, 32, 217, 3, 2, 2, 2, 34, 219, 3, 2, 2, 2, 36, 225, 3, 2, 2, 2, 38, 230, 3, 2, 2, 2, 40, 232, 3, 2, 2, 2, 42, 241, 3, 2, 2, 2, 44, 262, 3, 2, 2, 2, 46, 267, 3, 2, 2, 2, 48, 269, 3, 2, 2, 2, 50, 294, 3, 2, 2, 2, 52, 300, 3, 2, 2, 2, 54, 308, 3, 2, 2, 2, 56, 311, 3, 2, 2, 2, 58, 325, 3, 2, 2, 2, 60, 327, 3, 2, 2, 2, 62, 331, 3, 2, 2, 2, 64, 333, 3, 2, 2, 2, 66, 335, 3, 2, 2, 2, 68, 337, 3, 2, 2, 2, 70, 355, 3, 2, 2, 2, 72, 363, 3, 2, 2, 2, 74, 371, 3, 2, 2, 2, 76, 373, 3, 2, 2, 2, 78, 375, 3, 2, 2, 2, 80, 388, 3, 2, 2, 2, 82, 401, 3, 2, 2, 2, 84, 427, 3, 2, 2, 2, 86, 435, 3, 2, 2, 2, 88, 438, 3, 2, 2, 2, 90, 442, 3, 2, 2, 2, 92, 458, 3, 2, 2, 2, 94, 460, 3, 2, 2, 2, 96, 466, 3, 2, 2, 2, 98, 468, 3, 2, 2, 2, 100, 471, 3, 2, 2, 2, 102, 474, 3, 2, 2, 2, 104, 476, 3, 2, 2, 2, 106, 483, 3, 2, 2, 2, 108, 485, 3, 2, 2, 2, 110, 496, 3, 2, 2, 2, 112, 507, 3, 2, 2, 2, 114, 518, 3, 2, 2, 2, 116, 529, 3, 2, 2, 2, 118, 540, 3, 2, 2, 2, 120, 558, 3, 2, 2, 2, 122, 565, 3, 2, 2, 2, 124, 567, 3, 2, 2, 2, 126, 569, 3, 2, 2, 2, 128, 580, 3, 2, 2, 2, 130, 582, 3, 2, 2, 2, 132, 584, 3, 2, 2, 2, 134, 589, 3, 2, 2, 2, 136, 594, 3, 2, 2, 2, 138, 140, 5, 4, 3, 2, 139, 138, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 141, 3, 2, 2, 2, 141, 142, 7, 2, 2, 3, 142, 3, 3, 2, 2, 2, 143, 145, 5, 6, 4, 2, 144, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 5, 3, 2, 2, 2, 148, 149, 5, 8, 5, 2, 149, 7, 3, 2, 2, 2, 150, 152, 5, 10, 6, 2, 151, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 151, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 9, 3, 2, 2, 2, 155, 159, 5, 32, 17, 2, 156, 159, 5, 12, 7, 2, 157, 159, 7, 32, 2, 2, 158, 155, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 157, 3, 2, 2, 2, 159, 11, 3, 2, 2, 2, 160, 161, 5, 16, 9, 2, 161, 162, 7, 32, 2, 2, 162, 168, 3, 2, 2, 2, 163, 165, 5, 14, 8, 2, 164, 166, 7, 32, 2, 2, 165, 164, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 168, 3, 2, 2, 2, 167, 160, 3, 2, 2, 2, 167, 163, 3, 2, 2, 2, 168, 13, 3, 2, 2, 2, 169, 170, 7, 21, 2, 2, 170, 171, 5, 20, 11, 2, 171, 173, 7, 35, 2, 2, 172, 174, 5, 26, 14, 2, 173, 172, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 176, 7, 36, 2, 2, 176, 177, 7, 24, 2, 2, 177, 179, 5, 128, 65, 2, 178, 180, 5, 34, 18, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 15, 3, 2, 2, 2, 181, 182, 5, 18, 10, 2, 182, 183, 5, 24, 13, 2, 183, 17, 3, 2, 2, 2, 184, 185, 9, 2, 2, 2, 185, 19, 3, 2, 2, 2, 186, 187, 5, 22, 12, 2, 187, 21, 3, 2, 2, 2, 188, 189, 7, 66, 2, 2, 189, 23, 3, 2, 2, 2, 190, 191, 5, 20, 11, 2, 191, 192, 7, 34, 2, 2, 192, 195, 5, 128, 65, 2, 193, 194, 7, 53, 2, 2, 194, 196, 5, 30, 16, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 25, 3, 2, 2, 2, 197, 202, 5, 28, 15, 2, 198, 199, 7, 31, 2, 2, 199, 201, 5, 28, 15, 2, 200, 198, 3, 2, 2, 2, 201, 204, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 27, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 205, 206, 5, 20, 11, 2, 206, 207, 7, 34, 2, 2, 207, 208, 5, 128, 65, 2, 208, 29, 3, 2, 2, 2, 209, 210, 5, 122, 62, 2, 210, 31, 3, 2, 2, 2, 211, 218, 5, 34, 18, 2, 212, 218, 5, 36, 19, 2, 213, 218, 5, 38, 20, 2, 214, 218, 5, 46, 24, 2, 215, 218, 5, 54, 28, 2, 216, 218, 5, 56, 29, 2, 217, 211, 3, 2, 2, 2, 217, 212, 3, 2, 2, 2, 217, 213, 3, 2, 2, 2, 217, 214, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 217, 216, 3, 2, 2, 2, 218, 33, 3, 2, 2, 2, 219, 221, 7, 40, 2, 2, 220, 222, 5, 8, 5, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 7, 41, 2, 2, 224, 35, 3, 2, 2, 2, 225, 226, 5, 126, 64, 2, 226, 227, 7, 32, 2, 2, 227, 37, 3, 2, 2, 2, 228, 231, 5, 40, 21, 2, 229, 231, 5, 42, 22, 2, 230, 228, 3, 2, 2, 2, 230, 229, 3, 2, 2, 2, 231, 39, 3, 2, 2, 2, 232, 233, 7, 17, 2, 2, 233, 234, 7, 35, 2, 2, 234, 235, 5, 126, 64, 2, 235, 236, 7, 36, 2, 2, 236, 239, 5, 32, 17, 2, 237, 238, 7, 18, 2, 2, 238, 240, 5, 32, 17, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 41, 3, 2, 2, 2, 241, 242, 7, 10, 2, 2, 242, 243, 7, 35, 2, 2, 243, 244, 5, 126, 64, 2, 244, 245, 7, 36, 2, 2, 245, 249, 7, 40, 2, 2, 246, 248, 5, 44, 23, 2, 247, 246, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 252, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 253, 7, 41, 2, 2, 253, 43, 3, 2, 2, 2, 254, 255, 7, 11, 2, 2, 255, 256, 5, 126, 64, 2, 256, 257, 7, 34, 2, 2, 257, 258, 5, 32, 17, 2, 258, 263, 3, 2, 2, 2, 259, 260, 7, 12, 2, 2, 260, 261, 7, 34, 2, 2, 261, 263, 5, 32, 17, 2, 262, 254, 3, 2, 2, 2, 262, 259, 3, 2, 2, 2, 263, 45, 3, 2, 2, 2, 264, 268, 5, 48, 25, 2, 265, 268, 5, 50, 26, 2, 266, 268, 5, 52, 27, 2, 267, 264, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 47, 3, 2, 2, 2, 269, 270, 7, 19, 2, 2, 270, 277, 7, 35, 2, 2, 271, 274, 5, 16, 9, 2, 272, 274, 5, 126, 64, 2, 273, 271, 3, 2, 2, 2, 273, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 8, 25, 1, 2, 276, 278, 3, 2, 2, 2, 277, 273, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 283, 7, 32, 2, 2, 280, 281, 5, 126, 64, 2, 281, 282, 8, 25, 1, 2, 282, 284, 3, 2, 2, 2, 283, 280, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 289, 7, 32, 2, 2, 286, 287, 5, 126, 64, 2, 287, 288, 8, 25, 1, 2, 288, 290, 3, 2, 2, 2, 289, 286, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 292, 7, 36, 2, 2, 292, 293, 5, 32, 17, 2, 293, 49, 3, 2, 2, 2, 294, 295, 7, 16, 2, 2, 295, 296, 7, 35, 2, 2, 296, 297, 5, 126, 64, 2, 297, 298, 7, 36, 2, 2, 298, 299, 5, 32, 17, 2, 299, 51, 3, 2, 2, 2, 300, 301, 7, 15, 2, 2, 301, 302, 5, 32, 17, 2, 302, 303, 7, 16, 2, 2, 303, 304, 7, 35, 2, 2, 304, 305, 5, 126, 64, 2, 305, 306, 7, 36, 2, 2, 306, 307, 7, 32, 2, 2, 307, 53, 3, 2, 2, 2, 308, 309, 9, 3, 2, 2, 309, 310, 7, 32, 2, 2, 310, 55, 3, 2, 2, 2, 311, 313, 7, 22, 2, 2, 312, 314, 5, 126, 64, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 7, 32, 2, 2, 316, 57, 3, 2, 2, 2, 317, 326, 5, 60, 31, 2, 318, 326, 5, 62, 32, 2, 319, 326, 5, 64, 33, 2, 320, 326, 5, 68, 35, 2, 321, 326, 5, 70, 36, 2, 322, 326, 5, 76, 39, 2, 323, 326, 5, 78, 40, 2, 324, 326, 5, 80, 41, 2, 325, 317, 3, 2, 2, 2, 325, 318, 3, 2, 2, 2, 325, 319, 3, 2, 2, 2, 325, 320, 3, 2, 2, 2, 325, 321, 3, 2, 2, 2, 325, 322, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 324, 3, 2, 2, 2, 326, 59, 3, 2, 2, 2, 327, 328, 7, 35, 2, 2, 328, 329, 5, 126, 64, 2, 329, 330, 7, 36, 2, 2, 330, 61, 3, 2, 2, 2, 331, 332, 9, 4, 2, 2, 332, 63, 3, 2, 2, 2, 333, 334, 5, 66, 34, 2, 334, 65, 3, 2, 2, 2, 335, 336, 7, 66, 2, 2, 336, 67, 3, 2, 2, 2, 337, 338, 9, 5, 2, 2, 338, 69, 3, 2, 2, 2, 339, 343, 7, 73, 2, 2, 340, 342, 5, 72, 37, 2, 341, 340, 3, 2, 2, 2, 342, 345, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 346, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 346, 356, 7, 75, 2, 2, 347, 351, 7, 74, 2, 2, 348, 350, 5, 74, 38, 2, 349, 348, 3, 2, 2, 2, 350, 353, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 354, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 354, 356, 7, 77, 2, 2, 355, 339, 3, 2, 2, 2, 355, 347, 3, 2, 2, 2, 356, 71, 3, 2, 2, 2, 357, 364, 7, 76, 2, 2, 358, 360, 7, 3, 2, 2, 359, 361, 5, 126, 64, 2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 7, 39, 2, 2, 363, 357, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 364, 73, 3, 2, 2, 2, 365, 372, 7, 78, 2, 2, 366, 368, 7, 3, 2, 2, 367, 369, 5, 126, 64, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 372, 7, 39, 2, 2, 371, 365, 3, 2, 2, 2, 371, 366, 3, 2, 2, 2, 372, 75, 3, 2, 2, 2, 373, 374, 9, 6, 2, 2, 374, 77, 3, 2, 2, 2, 375, 384, 7, 37, 2, 2, 376, 381, 5, 126, 64, 2, 377, 378, 7, 31, 2, 2, 378, 380, 5, 126, 64, 2, 379, 377, 3, 2, 2, 2, 380, 383, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 385, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 376, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 7, 38, 2, 2, 387, 79, 3, 2, 2, 2, 388, 389, 9, 7, 2, 2, 389, 81, 3, 2, 2, 2, 390, 391, 8, 42, 1, 2, 391, 402, 5, 58, 30, 2, 392, 393, 7, 23, 2, 2, 393, 394, 5, 82, 42, 2, 394, 396, 7, 35, 2, 2, 395, 397, 5, 84, 43, 2, 396, 395, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 7, 36, 2, 2, 399, 400, 8, 42, 1, 2, 400, 402, 3, 2, 2, 2, 401, 390, 3, 2, 2, 2, 401, 392, 3, 2, 2, 2, 402, 424, 3, 2, 2, 2, 403, 404, 12, 7, 2, 2, 404, 406, 7, 35, 2, 2, 405, 407, 5, 84, 43, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 36, 2, 2, 409, 423, 8, 42, 1, 2, 410, 411, 12, 5, 2, 2, 411, 412, 5, 86, 44, 2, 412, 413, 8, 42, 1, 2, 413, 423, 3, 2, 2, 2, 414, 415, 12, 4, 2, 2, 415, 416, 5, 88, 45, 2, 416, 417, 8, 42, 1, 2, 417, 423, 3, 2, 2, 2, 418, 419, 12, 3, 2, 2, 419, 420, 5, 90, 46, 2, 420, 421, 8, 42, 1, 2, 421, 423, 3, 2, 2, 2, 422, 403, 3, 2, 2, 2, 422, 410, 3, 2, 2, 2, 422, 414, 3, 2, 2, 2, 422, 418, 3, 2, 2, 2, 423, 426, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 83, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 427, 432, 5, 122, 62, 2, 428, 429, 7, 31, 2, 2, 429, 431, 5, 122, 62, 2, 430, 428, 3, 2, 2, 2, 431, 434, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 85, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 435, 436, 7, 65, 2, 2, 436, 437, 5, 66, 34, 2, 437, 87, 3, 2, 2, 2, 438, 439, 7, 37, 2, 2, 439, 440, 5, 126, 64, 2, 440, 441, 7, 38, 2, 2, 441, 89, 3, 2, 2, 2, 442, 446, 7, 37, 2, 2, 443, 444, 5, 126, 64, 2, 444, 445, 8, 46, 1, 2, 445, 447, 3, 2, 2, 2, 446, 443, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 452, 7, 34, 2, 2, 449, 450, 5, 126, 64, 2, 450, 451, 8, 46, 1, 2, 451, 453, 3, 2, 2, 2, 452, 449, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 455, 7, 38, 2, 2, 455, 91, 3, 2, 2, 2, 456, 459, 5, 82, 42, 2, 457, 459, 5, 94, 48, 2, 458, 456, 3, 2, 2, 2, 458, 457, 3, 2, 2, 2, 459, 93, 3, 2, 2, 2, 460, 461, 5, 82, 42, 2, 461, 462, 5, 102, 52, 2, 462, 95, 3, 2, 2, 2, 463, 467, 5, 92, 47, 2, 464, 467, 5, 98, 50, 2, 465, 467, 5, 100, 51, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 465, 3, 2, 2, 2, 467, 97, 3, 2, 2, 2, 468, 469, 5, 102, 52, 2, 469, 470, 5, 92, 47, 2, 470, 99, 3, 2, 2, 2, 471, 472, 5, 104, 53, 2, 472, 473, 5, 92, 47, 2, 473, 101, 3, 2, 2, 2, 474, 475, 9, 8, 2, 2, 475, 103, 3, 2, 2, 2, 476, 477, 9, 9, 2, 2, 477, 105, 3, 2, 2, 2, 478, 484, 5, 96, 49, 2, 479, 480, 5, 96, 49, 2, 480, 481, 7, 8, 2, 2, 481, 482, 5, 128, 65, 2, 482, 484, 3, 2, 2, 2, 483, 478, 3, 2, 2, 2, 483, 479, 3, 2, 2, 2, 484, 107, 3, 2, 2, 2, 485, 486, 8, 55, 1, 2, 486, 487, 5, 106, 54, 2, 487, 493, 3, 2, 2, 2, 488, 489, 12, 3, 2, 2, 489, 490, 9, 10, 2, 2, 490, 492, 5, 106, 54, 2, 491, 488, 3, 2, 2, 2, 492, 495, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 109, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 496, 497, 8, 56, 1, 2, 497, 498, 5, 108, 55, 2, 498, 504, 3, 2, 2, 2, 499, 500, 12, 3, 2, 2, 500, 501, 9, 11, 2, 2, 501, 503, 5, 108, 55, 2, 502, 499, 3, 2, 2, 2, 503, 506, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 111, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 507, 508, 8, 57, 1, 2, 508, 509, 5, 110, 56, 2, 509, 515, 3, 2, 2, 2, 510, 511, 12, 3, 2, 2, 511, 512, 9, 12, 2, 2, 512, 514, 5, 110, 56, 2, 513, 510, 3, 2, 2, 2, 514, 517, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 113, 3, 2, 2, 2, 517, 515, 3, 2, 2, 2, 518, 519, 8, 58, 1, 2, 519, 520, 5, 112, 57, 2, 520, 526, 3, 2, 2, 2, 521, 522, 12, 3, 2, 2, 522, 523, 9, 13, 2, 2, 523, 525, 5, 112, 57, 2, 524, 521, 3, 2, 2, 2, 525, 528, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 115, 3, 2, 2, 2, 528, 526, 3, 2, 2, 2, 529, 530, 8, 59, 1, 2, 530, 531, 5, 114, 58, 2, 531, 537, 3, 2, 2, 2, 532, 533, 12, 3, 2, 2, 533, 534, 7, 50, 2, 2, 534, 536, 5, 114, 58, 2, 535, 532, 3, 2, 2, 2, 536, 539, 3, 2, 2, 2, 537, 535, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 117, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 540, 541, 8, 60, 1, 2, 541, 542, 5, 116, 59, 2, 542, 548, 3, 2, 2, 2, 543, 544, 12, 3, 2, 2, 544, 545, 7, 51, 2, 2, 545, 547, 5, 116, 59, 2, 546, 543, 3, 2, 2, 2, 547, 550, 3, 2, 2, 2, 548, 546, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 119, 3, 2, 2, 2, 550, 548, 3, 2, 2, 2, 551, 559, 5, 118, 60, 2, 552, 553, 5, 118, 60, 2, 553, 554, 7, 33, 2, 2, 554, 555, 5, 120, 61, 2, 555, 556, 7, 34, 2, 2, 556, 557, 5, 120, 61, 2, 557, 559, 3, 2, 2, 2, 558, 551, 3, 2, 2, 2, 558, 552, 3, 2, 2, 2, 559, 121, 3, 2, 2, 2, 560, 566, 5, 120, 61, 2, 561, 562, 5, 82, 42, 2, 562, 563, 5, 124, 63, 2, 563, 564, 5, 122, 62, 2, 564, 566, 3, 2, 2, 2, 565, 560, 3, 2, 2, 2, 565, 561, 3, 2, 2, 2, 566, 123, 3, 2, 2, 2, 567, 568, 9, 14, 2, 2, 568, 125, 3, 2, 2, 2, 569, 574, 5, 122, 62, 2, 570, 571, 7, 31, 2, 2, 571, 573, 5, 122, 62, 2, 572, 570, 3, 2, 2, 2, 573, 576, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 127, 3, 2, 2, 2, 576, 574, 3, 2, 2, 2, 577, 581, 5, 130, 66, 2, 578, 581, 5, 132, 67, 2, 579, 581, 5, 134, 68, 2, 580, 577, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581, 129, 3, 2, 2, 2, 582, 583, 5, 136, 69, 2, 583, 131, 3, 2, 2, 2, 584, 585, 5, 136, 69, 2, 585, 586, 7, 61, 2, 2, 586, 587, 5, 136, 69, 2, 587, 588, 7, 63, 2, 2, 588, 133, 3, 2, 2, 2, 589, 590, 7, 27, 2, 2, 590, 591, 7, 35, 2, 2, 591, 592, 5, 136, 69, 2, 592, 593, 7, 36, 2, 2, 593, 135, 3, 2, 2, 2, 594, 595, 9, 15, 2, 2, 595, 137, 3, 2, 2, 2, 55, 139, 146, 153, 158, 165, 167, 173, 179, 195, 202, 217, 221, 230, 239, 249, 262, 267, 273, 277, 283, 289, 313, 325, 343, 351, 355, 360, 363, 368, 371, 381, 384, 396, 401, 406, 422, 424, 432, 446, 452, 458, 466, 483, 493, 504, 515, 526, 537, 548, 558, 565, 574, 580] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 78, 634, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 3, 2, 5, 2, 146, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 151, 10, 3, 13, 3, 14, 3, 152, 3, 4, 3, 4, 3, 5, 6, 5, 158, 10, 5, 13, 5, 14, 5, 159, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 172, 10, 7, 5, 7, 174, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 180, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 186, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 202, 10, 13, 3, 14, 3, 14, 3, 14, 7, 14, 207, 10, 14, 12, 14, 14, 14, 210, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 224, 10, 17, 3, 18, 3, 18, 3, 18, 5, 18, 229, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 240, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 249, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 257, 10, 22, 12, 22, 14, 22, 260, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 272, 10, 23, 3, 24, 3, 24, 3, 24, 5, 24, 277, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 283, 10, 25, 3, 25, 3, 25, 5, 25, 287, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 293, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 299, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 323, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 336, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 5, 35, 350, 10, 35, 3, 36, 3, 36, 3, 37, 3, 37, 7, 37, 356, 10, 37, 12, 37, 14, 37, 359, 11, 37, 3, 37, 3, 37, 3, 37, 7, 37, 364, 10, 37, 12, 37, 14, 37, 367, 11, 37, 3, 37, 5, 37, 370, 10, 37, 3, 38, 3, 38, 3, 38, 5, 38, 375, 10, 38, 3, 38, 5, 38, 378, 10, 38, 3, 39, 3, 39, 3, 39, 5, 39, 383, 10, 39, 3, 39, 5, 39, 386, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 394, 10, 41, 12, 41, 14, 41, 397, 11, 41, 5, 41, 399, 10, 41, 3, 41, 5, 41, 402, 10, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 410, 10, 42, 12, 42, 14, 42, 413, 11, 42, 5, 42, 415, 10, 42, 3, 42, 5, 42, 418, 10, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 434, 10, 45, 3, 45, 3, 45, 3, 45, 5, 45, 439, 10, 45, 3, 45, 3, 45, 3, 45, 5, 45, 444, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 460, 10, 45, 12, 45, 14, 45, 463, 11, 45, 3, 46, 3, 46, 3, 46, 7, 46, 468, 10, 46, 12, 46, 14, 46, 471, 11, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 484, 10, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 490, 10, 49, 3, 49, 3, 49, 3, 50, 3, 50, 5, 50, 496, 10, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 5, 52, 504, 10, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 521, 10, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 529, 10, 58, 12, 58, 14, 58, 532, 11, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 540, 10, 59, 12, 59, 14, 59, 543, 11, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 551, 10, 60, 12, 60, 14, 60, 554, 11, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 7, 61, 562, 10, 61, 12, 61, 14, 61, 565, 11, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 573, 10, 62, 12, 62, 14, 62, 576, 11, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 584, 10, 63, 12, 63, 14, 63, 587, 11, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 5, 64, 596, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 603, 10, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 7, 67, 610, 10, 67, 12, 67, 14, 67, 613, 11, 67, 3, 68, 3, 68, 3, 68, 5, 68, 618, 10, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 2, 2, 9, 88, 114, 116, 118, 120, 122, 124, 73, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 2, 16, 3, 2, 6, 7, 3, 2, 13, 14, 3, 2, 25, 26, 3, 2, 68, 69, 4, 2, 67, 67, 70, 70, 3, 2, 28, 30, 4, 2, 43, 43, 45, 45, 5, 2, 42, 42, 44, 44, 52, 52, 3, 2, 46, 49, 4, 2, 42, 42, 44, 44, 3, 2, 61, 64, 3, 2, 59, 60, 3, 2, 53, 58, 4, 2, 28, 30, 66, 66, 2, 637, 2, 145, 3, 2, 2, 2, 4, 150, 3, 2, 2, 2, 6, 154, 3, 2, 2, 2, 8, 157, 3, 2, 2, 2, 10, 164, 3, 2, 2, 2, 12, 173, 3, 2, 2, 2, 14, 175, 3, 2, 2, 2, 16, 187, 3, 2, 2, 2, 18, 190, 3, 2, 2, 2, 20, 192, 3, 2, 2, 2, 22, 194, 3, 2, 2, 2, 24, 196, 3, 2, 2, 2, 26, 203, 3, 2, 2, 2, 28, 211, 3, 2, 2, 2, 30, 215, 3, 2, 2, 2, 32, 223, 3, 2, 2, 2, 34, 225, 3, 2, 2, 2, 36, 232, 3, 2, 2, 2, 38, 239, 3, 2, 2, 2, 40, 241, 3, 2, 2, 2, 42, 250, 3, 2, 2, 2, 44, 271, 3, 2, 2, 2, 46, 276, 3, 2, 2, 2, 48, 278, 3, 2, 2, 2, 50, 303, 3, 2, 2, 2, 52, 309, 3, 2, 2, 2, 54, 317, 3, 2, 2, 2, 56, 320, 3, 2, 2, 2, 58, 335, 3, 2, 2, 2, 60, 337, 3, 2, 2, 2, 62, 341, 3, 2, 2, 2, 64, 343, 3, 2, 2, 2, 66, 345, 3, 2, 2, 2, 68, 349, 3, 2, 2, 2, 70, 351, 3, 2, 2, 2, 72, 369, 3, 2, 2, 2, 74, 377, 3, 2, 2, 2, 76, 385, 3, 2, 2, 2, 78, 387, 3, 2, 2, 2, 80, 389, 3, 2, 2, 2, 82, 405, 3, 2, 2, 2, 84, 421, 3, 2, 2, 2, 86, 425, 3, 2, 2, 2, 88, 438, 3, 2, 2, 2, 90, 464, 3, 2, 2, 2, 92, 472, 3, 2, 2, 2, 94, 475, 3, 2, 2, 2, 96, 479, 3, 2, 2, 2, 98, 495, 3, 2, 2, 2, 100, 497, 3, 2, 2, 2, 102, 503, 3, 2, 2, 2, 104, 505, 3, 2, 2, 2, 106, 508, 3, 2, 2, 2, 108, 511, 3, 2, 2, 2, 110, 513, 3, 2, 2, 2, 112, 520, 3, 2, 2, 2, 114, 522, 3, 2, 2, 2, 116, 533, 3, 2, 2, 2, 118, 544, 3, 2, 2, 2, 120, 555, 3, 2, 2, 2, 122, 566, 3, 2, 2, 2, 124, 577, 3, 2, 2, 2, 126, 595, 3, 2, 2, 2, 128, 602, 3, 2, 2, 2, 130, 604, 3, 2, 2, 2, 132, 606, 3, 2, 2, 2, 134, 617, 3, 2, 2, 2, 136, 619, 3, 2, 2, 2, 138, 621, 3, 2, 2, 2, 140, 626, 3, 2, 2, 2, 142, 631, 3, 2, 2, 2, 144, 146, 5, 4, 3, 2, 145, 144, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 7, 2, 2, 3, 148, 3, 3, 2, 2, 2, 149, 151, 5, 6, 4, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 5, 3, 2, 2, 2, 154, 155, 5, 8, 5, 2, 155, 7, 3, 2, 2, 2, 156, 158, 5, 10, 6, 2, 157, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 9, 3, 2, 2, 2, 161, 165, 5, 32, 17, 2, 162, 165, 5, 12, 7, 2, 163, 165, 7, 32, 2, 2, 164, 161, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 163, 3, 2, 2, 2, 165, 11, 3, 2, 2, 2, 166, 167, 5, 16, 9, 2, 167, 168, 7, 32, 2, 2, 168, 174, 3, 2, 2, 2, 169, 171, 5, 14, 8, 2, 170, 172, 7, 32, 2, 2, 171, 170, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 174, 3, 2, 2, 2, 173, 166, 3, 2, 2, 2, 173, 169, 3, 2, 2, 2, 174, 13, 3, 2, 2, 2, 175, 176, 7, 21, 2, 2, 176, 177, 5, 20, 11, 2, 177, 179, 7, 35, 2, 2, 178, 180, 5, 26, 14, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 3, 2, 2, 2, 181, 182, 7, 36, 2, 2, 182, 183, 7, 24, 2, 2, 183, 185, 5, 134, 68, 2, 184, 186, 5, 34, 18, 2, 185, 184, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 15, 3, 2, 2, 2, 187, 188, 5, 18, 10, 2, 188, 189, 5, 24, 13, 2, 189, 17, 3, 2, 2, 2, 190, 191, 9, 2, 2, 2, 191, 19, 3, 2, 2, 2, 192, 193, 5, 22, 12, 2, 193, 21, 3, 2, 2, 2, 194, 195, 7, 66, 2, 2, 195, 23, 3, 2, 2, 2, 196, 197, 5, 20, 11, 2, 197, 198, 7, 34, 2, 2, 198, 201, 5, 134, 68, 2, 199, 200, 7, 53, 2, 2, 200, 202, 5, 30, 16, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 25, 3, 2, 2, 2, 203, 208, 5, 28, 15, 2, 204, 205, 7, 31, 2, 2, 205, 207, 5, 28, 15, 2, 206, 204, 3, 2, 2, 2, 207, 210, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 27, 3, 2, 2, 2, 210, 208, 3, 2, 2, 2, 211, 212, 5, 20, 11, 2, 212, 213, 7, 34, 2, 2, 213, 214, 5, 134, 68, 2, 214, 29, 3, 2, 2, 2, 215, 216, 5, 128, 65, 2, 216, 31, 3, 2, 2, 2, 217, 224, 5, 36, 19, 2, 218, 224, 5, 38, 20, 2, 219, 224, 5, 46, 24, 2, 220, 224, 5, 54, 28, 2, 221, 224, 5, 56, 29, 2, 222, 224, 5, 34, 18, 2, 223, 217, 3, 2, 2, 2, 223, 218, 3, 2, 2, 2, 223, 219, 3, 2, 2, 2, 223, 220, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 223, 222, 3, 2, 2, 2, 224, 33, 3, 2, 2, 2, 225, 226, 6, 18, 2, 2, 226, 228, 7, 40, 2, 2, 227, 229, 5, 8, 5, 2, 228, 227, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 7, 41, 2, 2, 231, 35, 3, 2, 2, 2, 232, 233, 8, 19, 1, 2, 233, 234, 5, 132, 67, 2, 234, 235, 7, 32, 2, 2, 235, 236, 8, 19, 1, 2, 236, 37, 3, 2, 2, 2, 237, 240, 5, 40, 21, 2, 238, 240, 5, 42, 22, 2, 239, 237, 3, 2, 2, 2, 239, 238, 3, 2, 2, 2, 240, 39, 3, 2, 2, 2, 241, 242, 7, 17, 2, 2, 242, 243, 7, 35, 2, 2, 243, 244, 5, 132, 67, 2, 244, 245, 7, 36, 2, 2, 245, 248, 5, 32, 17, 2, 246, 247, 7, 18, 2, 2, 247, 249, 5, 32, 17, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 41, 3, 2, 2, 2, 250, 251, 7, 10, 2, 2, 251, 252, 7, 35, 2, 2, 252, 253, 5, 132, 67, 2, 253, 254, 7, 36, 2, 2, 254, 258, 7, 40, 2, 2, 255, 257, 5, 44, 23, 2, 256, 255, 3, 2, 2, 2, 257, 260, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 261, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 262, 7, 41, 2, 2, 262, 43, 3, 2, 2, 2, 263, 264, 7, 11, 2, 2, 264, 265, 5, 132, 67, 2, 265, 266, 7, 34, 2, 2, 266, 267, 5, 32, 17, 2, 267, 272, 3, 2, 2, 2, 268, 269, 7, 12, 2, 2, 269, 270, 7, 34, 2, 2, 270, 272, 5, 32, 17, 2, 271, 263, 3, 2, 2, 2, 271, 268, 3, 2, 2, 2, 272, 45, 3, 2, 2, 2, 273, 277, 5, 48, 25, 2, 274, 277, 5, 50, 26, 2, 275, 277, 5, 52, 27, 2, 276, 273, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 276, 275, 3, 2, 2, 2, 277, 47, 3, 2, 2, 2, 278, 279, 7, 19, 2, 2, 279, 286, 7, 35, 2, 2, 280, 283, 5, 16, 9, 2, 281, 283, 5, 132, 67, 2, 282, 280, 3, 2, 2, 2, 282, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 8, 25, 1, 2, 285, 287, 3, 2, 2, 2, 286, 282, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 292, 7, 32, 2, 2, 289, 290, 5, 132, 67, 2, 290, 291, 8, 25, 1, 2, 291, 293, 3, 2, 2, 2, 292, 289, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 298, 7, 32, 2, 2, 295, 296, 5, 132, 67, 2, 296, 297, 8, 25, 1, 2, 297, 299, 3, 2, 2, 2, 298, 295, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 301, 7, 36, 2, 2, 301, 302, 5, 32, 17, 2, 302, 49, 3, 2, 2, 2, 303, 304, 7, 16, 2, 2, 304, 305, 7, 35, 2, 2, 305, 306, 5, 132, 67, 2, 306, 307, 7, 36, 2, 2, 307, 308, 5, 32, 17, 2, 308, 51, 3, 2, 2, 2, 309, 310, 7, 15, 2, 2, 310, 311, 5, 32, 17, 2, 311, 312, 7, 16, 2, 2, 312, 313, 7, 35, 2, 2, 313, 314, 5, 132, 67, 2, 314, 315, 7, 36, 2, 2, 315, 316, 7, 32, 2, 2, 316, 53, 3, 2, 2, 2, 317, 318, 9, 3, 2, 2, 318, 319, 7, 32, 2, 2, 319, 55, 3, 2, 2, 2, 320, 322, 7, 22, 2, 2, 321, 323, 5, 132, 67, 2, 322, 321, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 325, 7, 32, 2, 2, 325, 57, 3, 2, 2, 2, 326, 336, 5, 60, 31, 2, 327, 336, 5, 80, 41, 2, 328, 336, 5, 82, 42, 2, 329, 336, 5, 62, 32, 2, 330, 336, 5, 64, 33, 2, 331, 336, 5, 70, 36, 2, 332, 336, 5, 72, 37, 2, 333, 336, 5, 78, 40, 2, 334, 336, 5, 86, 44, 2, 335, 326, 3, 2, 2, 2, 335, 327, 3, 2, 2, 2, 335, 328, 3, 2, 2, 2, 335, 329, 3, 2, 2, 2, 335, 330, 3, 2, 2, 2, 335, 331, 3, 2, 2, 2, 335, 332, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 335, 334, 3, 2, 2, 2, 336, 59, 3, 2, 2, 2, 337, 338, 7, 35, 2, 2, 338, 339, 5, 132, 67, 2, 339, 340, 7, 36, 2, 2, 340, 61, 3, 2, 2, 2, 341, 342, 9, 4, 2, 2, 342, 63, 3, 2, 2, 2, 343, 344, 5, 66, 34, 2, 344, 65, 3, 2, 2, 2, 345, 346, 7, 66, 2, 2, 346, 67, 3, 2, 2, 2, 347, 350, 5, 66, 34, 2, 348, 350, 5, 70, 36, 2, 349, 347, 3, 2, 2, 2, 349, 348, 3, 2, 2, 2, 350, 69, 3, 2, 2, 2, 351, 352, 9, 5, 2, 2, 352, 71, 3, 2, 2, 2, 353, 357, 7, 73, 2, 2, 354, 356, 5, 74, 38, 2, 355, 354, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 360, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 360, 370, 7, 75, 2, 2, 361, 365, 7, 74, 2, 2, 362, 364, 5, 76, 39, 2, 363, 362, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 370, 7, 77, 2, 2, 369, 353, 3, 2, 2, 2, 369, 361, 3, 2, 2, 2, 370, 73, 3, 2, 2, 2, 371, 378, 7, 76, 2, 2, 372, 374, 7, 3, 2, 2, 373, 375, 5, 132, 67, 2, 374, 373, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 378, 7, 39, 2, 2, 377, 371, 3, 2, 2, 2, 377, 372, 3, 2, 2, 2, 378, 75, 3, 2, 2, 2, 379, 386, 7, 78, 2, 2, 380, 382, 7, 3, 2, 2, 381, 383, 5, 132, 67, 2, 382, 381, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 3, 2, 2, 2, 384, 386, 7, 39, 2, 2, 385, 379, 3, 2, 2, 2, 385, 380, 3, 2, 2, 2, 386, 77, 3, 2, 2, 2, 387, 388, 9, 6, 2, 2, 388, 79, 3, 2, 2, 2, 389, 398, 7, 37, 2, 2, 390, 395, 5, 132, 67, 2, 391, 392, 7, 31, 2, 2, 392, 394, 5, 132, 67, 2, 393, 391, 3, 2, 2, 2, 394, 397, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 399, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 390, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 401, 3, 2, 2, 2, 400, 402, 7, 31, 2, 2, 401, 400, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 7, 38, 2, 2, 404, 81, 3, 2, 2, 2, 405, 414, 7, 40, 2, 2, 406, 411, 5, 84, 43, 2, 407, 408, 7, 31, 2, 2, 408, 410, 5, 84, 43, 2, 409, 407, 3, 2, 2, 2, 410, 413, 3, 2, 2, 2, 411, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 415, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 414, 406, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 417, 3, 2, 2, 2, 416, 418, 7, 31, 2, 2, 417, 416, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 420, 7, 41, 2, 2, 420, 83, 3, 2, 2, 2, 421, 422, 5, 68, 35, 2, 422, 423, 7, 34, 2, 2, 423, 424, 5, 132, 67, 2, 424, 85, 3, 2, 2, 2, 425, 426, 9, 7, 2, 2, 426, 87, 3, 2, 2, 2, 427, 428, 8, 45, 1, 2, 428, 439, 5, 58, 30, 2, 429, 430, 7, 23, 2, 2, 430, 431, 5, 88, 45, 2, 431, 433, 7, 35, 2, 2, 432, 434, 5, 90, 46, 2, 433, 432, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 7, 36, 2, 2, 436, 437, 8, 45, 1, 2, 437, 439, 3, 2, 2, 2, 438, 427, 3, 2, 2, 2, 438, 429, 3, 2, 2, 2, 439, 461, 3, 2, 2, 2, 440, 441, 12, 7, 2, 2, 441, 443, 7, 35, 2, 2, 442, 444, 5, 90, 46, 2, 443, 442, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 7, 36, 2, 2, 446, 460, 8, 45, 1, 2, 447, 448, 12, 5, 2, 2, 448, 449, 5, 92, 47, 2, 449, 450, 8, 45, 1, 2, 450, 460, 3, 2, 2, 2, 451, 452, 12, 4, 2, 2, 452, 453, 5, 94, 48, 2, 453, 454, 8, 45, 1, 2, 454, 460, 3, 2, 2, 2, 455, 456, 12, 3, 2, 2, 456, 457, 5, 96, 49, 2, 457, 458, 8, 45, 1, 2, 458, 460, 3, 2, 2, 2, 459, 440, 3, 2, 2, 2, 459, 447, 3, 2, 2, 2, 459, 451, 3, 2, 2, 2, 459, 455, 3, 2, 2, 2, 460, 463, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 89, 3, 2, 2, 2, 463, 461, 3, 2, 2, 2, 464, 469, 5, 128, 65, 2, 465, 466, 7, 31, 2, 2, 466, 468, 5, 128, 65, 2, 467, 465, 3, 2, 2, 2, 468, 471, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 91, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 473, 7, 65, 2, 2, 473, 474, 5, 66, 34, 2, 474, 93, 3, 2, 2, 2, 475, 476, 7, 37, 2, 2, 476, 477, 5, 132, 67, 2, 477, 478, 7, 38, 2, 2, 478, 95, 3, 2, 2, 2, 479, 483, 7, 37, 2, 2, 480, 481, 5, 132, 67, 2, 481, 482, 8, 49, 1, 2, 482, 484, 3, 2, 2, 2, 483, 480, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 489, 7, 34, 2, 2, 486, 487, 5, 132, 67, 2, 487, 488, 8, 49, 1, 2, 488, 490, 3, 2, 2, 2, 489, 486, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 7, 38, 2, 2, 492, 97, 3, 2, 2, 2, 493, 496, 5, 88, 45, 2, 494, 496, 5, 100, 51, 2, 495, 493, 3, 2, 2, 2, 495, 494, 3, 2, 2, 2, 496, 99, 3, 2, 2, 2, 497, 498, 5, 88, 45, 2, 498, 499, 5, 108, 55, 2, 499, 101, 3, 2, 2, 2, 500, 504, 5, 98, 50, 2, 501, 504, 5, 104, 53, 2, 502, 504, 5, 106, 54, 2, 503, 500, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 503, 502, 3, 2, 2, 2, 504, 103, 3, 2, 2, 2, 505, 506, 5, 108, 55, 2, 506, 507, 5, 98, 50, 2, 507, 105, 3, 2, 2, 2, 508, 509, 5, 110, 56, 2, 509, 510, 5, 98, 50, 2, 510, 107, 3, 2, 2, 2, 511, 512, 9, 8, 2, 2, 512, 109, 3, 2, 2, 2, 513, 514, 9, 9, 2, 2, 514, 111, 3, 2, 2, 2, 515, 521, 5, 102, 52, 2, 516, 517, 5, 102, 52, 2, 517, 518, 7, 8, 2, 2, 518, 519, 5, 134, 68, 2, 519, 521, 3, 2, 2, 2, 520, 515, 3, 2, 2, 2, 520, 516, 3, 2, 2, 2, 521, 113, 3, 2, 2, 2, 522, 523, 8, 58, 1, 2, 523, 524, 5, 112, 57, 2, 524, 530, 3, 2, 2, 2, 525, 526, 12, 3, 2, 2, 526, 527, 9, 10, 2, 2, 527, 529, 5, 112, 57, 2, 528, 525, 3, 2, 2, 2, 529, 532, 3, 2, 2, 2, 530, 528, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 115, 3, 2, 2, 2, 532, 530, 3, 2, 2, 2, 533, 534, 8, 59, 1, 2, 534, 535, 5, 114, 58, 2, 535, 541, 3, 2, 2, 2, 536, 537, 12, 3, 2, 2, 537, 538, 9, 11, 2, 2, 538, 540, 5, 114, 58, 2, 539, 536, 3, 2, 2, 2, 540, 543, 3, 2, 2, 2, 541, 539, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 117, 3, 2, 2, 2, 543, 541, 3, 2, 2, 2, 544, 545, 8, 60, 1, 2, 545, 546, 5, 116, 59, 2, 546, 552, 3, 2, 2, 2, 547, 548, 12, 3, 2, 2, 548, 549, 9, 12, 2, 2, 549, 551, 5, 116, 59, 2, 550, 547, 3, 2, 2, 2, 551, 554, 3, 2, 2, 2, 552, 550, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 119, 3, 2, 2, 2, 554, 552, 3, 2, 2, 2, 555, 556, 8, 61, 1, 2, 556, 557, 5, 118, 60, 2, 557, 563, 3, 2, 2, 2, 558, 559, 12, 3, 2, 2, 559, 560, 9, 13, 2, 2, 560, 562, 5, 118, 60, 2, 561, 558, 3, 2, 2, 2, 562, 565, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 121, 3, 2, 2, 2, 565, 563, 3, 2, 2, 2, 566, 567, 8, 62, 1, 2, 567, 568, 5, 120, 61, 2, 568, 574, 3, 2, 2, 2, 569, 570, 12, 3, 2, 2, 570, 571, 7, 50, 2, 2, 571, 573, 5, 120, 61, 2, 572, 569, 3, 2, 2, 2, 573, 576, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 123, 3, 2, 2, 2, 576, 574, 3, 2, 2, 2, 577, 578, 8, 63, 1, 2, 578, 579, 5, 122, 62, 2, 579, 585, 3, 2, 2, 2, 580, 581, 12, 3, 2, 2, 581, 582, 7, 51, 2, 2, 582, 584, 5, 122, 62, 2, 583, 580, 3, 2, 2, 2, 584, 587, 3, 2, 2, 2, 585, 583, 3, 2, 2, 2, 585, 586, 3, 2, 2, 2, 586, 125, 3, 2, 2, 2, 587, 585, 3, 2, 2, 2, 588, 596, 5, 124, 63, 2, 589, 590, 5, 124, 63, 2, 590, 591, 7, 33, 2, 2, 591, 592, 5, 126, 64, 2, 592, 593, 7, 34, 2, 2, 593, 594, 5, 126, 64, 2, 594, 596, 3, 2, 2, 2, 595, 588, 3, 2, 2, 2, 595, 589, 3, 2, 2, 2, 596, 127, 3, 2, 2, 2, 597, 603, 5, 126, 64, 2, 598, 599, 5, 88, 45, 2, 599, 600, 5, 130, 66, 2, 600, 601, 5, 128, 65, 2, 601, 603, 3, 2, 2, 2, 602, 597, 3, 2, 2, 2, 602, 598, 3, 2, 2, 2, 603, 129, 3, 2, 2, 2, 604, 605, 9, 14, 2, 2, 605, 131, 3, 2, 2, 2, 606, 611, 5, 128, 65, 2, 607, 608, 7, 31, 2, 2, 608, 610, 5, 128, 65, 2, 609, 607, 3, 2, 2, 2, 610, 613, 3, 2, 2, 2, 611, 609, 3, 2, 2, 2, 611, 612, 3, 2, 2, 2, 612, 133, 3, 2, 2, 2, 613, 611, 3, 2, 2, 2, 614, 618, 5, 136, 69, 2, 615, 618, 5, 138, 70, 2, 616, 618, 5, 140, 71, 2, 617, 614, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2, 617, 616, 3, 2, 2, 2, 618, 135, 3, 2, 2, 2, 619, 620, 5, 142, 72, 2, 620, 137, 3, 2, 2, 2, 621, 622, 5, 142, 72, 2, 622, 623, 7, 61, 2, 2, 623, 624, 5, 142, 72, 2, 624, 625, 7, 63, 2, 2, 625, 139, 3, 2, 2, 2, 626, 627, 7, 27, 2, 2, 627, 628, 7, 35, 2, 2, 628, 629, 5, 142, 72, 2, 629, 630, 7, 36, 2, 2, 630, 141, 3, 2, 2, 2, 631, 632, 9, 15, 2, 2, 632, 143, 3, 2, 2, 2, 60, 145, 152, 159, 164, 171, 173, 179, 185, 201, 208, 223, 228, 239, 248, 258, 271, 276, 282, 286, 292, 298, 322, 335, 349, 357, 365, 369, 374, 377, 382, 385, 395, 398, 401, 411, 414, 417, 433, 438, 443, 459, 461, 469, 483, 489, 495, 503, 520, 530, 541, 552, 563, 574, 585, 595, 602, 611, 617] \ No newline at end of file diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.ts b/kipper/core/src/compiler/parser/antlr/KipperParser.ts index c09d9ebde..050b76865 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.ts @@ -3,6 +3,7 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; @@ -29,7 +30,7 @@ import * as Utils from "antlr4ts/misc/Utils"; import { KipperParserListener } from "./KipperParserListener"; import { KipperParserVisitor } from "./KipperParserVisitor"; -export class KipperParser extends Parser { +export class KipperParser extends KipperParserBase { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; public static readonly LineComment = 3; @@ -139,41 +140,44 @@ export class KipperParser extends Parser { public static readonly RULE_boolPrimaryExpression = 30; public static readonly RULE_identifierPrimaryExpression = 31; public static readonly RULE_identifier = 32; - public static readonly RULE_stringPrimaryExpression = 33; - public static readonly RULE_fStringPrimaryExpression = 34; - public static readonly RULE_fStringSingleQuoteAtom = 35; - public static readonly RULE_fStringDoubleQuoteAtom = 36; - public static readonly RULE_numberPrimaryExpression = 37; - public static readonly RULE_arrayPrimaryExpression = 38; - public static readonly RULE_voidOrNullOrUndefinedPrimaryExpression = 39; - public static readonly RULE_computedPrimaryExpression = 40; - public static readonly RULE_argumentExpressionList = 41; - public static readonly RULE_dotNotation = 42; - public static readonly RULE_bracketNotation = 43; - public static readonly RULE_sliceNotation = 44; - public static readonly RULE_postfixExpression = 45; - public static readonly RULE_incrementOrDecrementPostfixExpression = 46; - public static readonly RULE_unaryExpression = 47; - public static readonly RULE_incrementOrDecrementUnaryExpression = 48; - public static readonly RULE_operatorModifiedUnaryExpression = 49; - public static readonly RULE_incrementOrDecrementOperator = 50; - public static readonly RULE_unaryOperator = 51; - public static readonly RULE_castOrConvertExpression = 52; - public static readonly RULE_multiplicativeExpression = 53; - public static readonly RULE_additiveExpression = 54; - public static readonly RULE_relationalExpression = 55; - public static readonly RULE_equalityExpression = 56; - public static readonly RULE_logicalAndExpression = 57; - public static readonly RULE_logicalOrExpression = 58; - public static readonly RULE_conditionalExpression = 59; - public static readonly RULE_assignmentExpression = 60; - public static readonly RULE_assignmentOperator = 61; - public static readonly RULE_expression = 62; - public static readonly RULE_typeSpecifierExpression = 63; - public static readonly RULE_identifierTypeSpecifierExpression = 64; - public static readonly RULE_genericTypeSpecifierExpression = 65; - public static readonly RULE_typeofTypeSpecifierExpression = 66; - public static readonly RULE_typeSpecifierIdentifier = 67; + public static readonly RULE_identifierOrStringPrimaryExpression = 33; + public static readonly RULE_stringPrimaryExpression = 34; + public static readonly RULE_fStringPrimaryExpression = 35; + public static readonly RULE_fStringSingleQuoteAtom = 36; + public static readonly RULE_fStringDoubleQuoteAtom = 37; + public static readonly RULE_numberPrimaryExpression = 38; + public static readonly RULE_arrayPrimaryExpression = 39; + public static readonly RULE_objectPrimaryExpression = 40; + public static readonly RULE_objectProperty = 41; + public static readonly RULE_voidOrNullOrUndefinedPrimaryExpression = 42; + public static readonly RULE_computedPrimaryExpression = 43; + public static readonly RULE_argumentExpressionList = 44; + public static readonly RULE_dotNotation = 45; + public static readonly RULE_bracketNotation = 46; + public static readonly RULE_sliceNotation = 47; + public static readonly RULE_postfixExpression = 48; + public static readonly RULE_incrementOrDecrementPostfixExpression = 49; + public static readonly RULE_unaryExpression = 50; + public static readonly RULE_incrementOrDecrementUnaryExpression = 51; + public static readonly RULE_operatorModifiedUnaryExpression = 52; + public static readonly RULE_incrementOrDecrementOperator = 53; + public static readonly RULE_unaryOperator = 54; + public static readonly RULE_castOrConvertExpression = 55; + public static readonly RULE_multiplicativeExpression = 56; + public static readonly RULE_additiveExpression = 57; + public static readonly RULE_relationalExpression = 58; + public static readonly RULE_equalityExpression = 59; + public static readonly RULE_logicalAndExpression = 60; + public static readonly RULE_logicalOrExpression = 61; + public static readonly RULE_conditionalExpression = 62; + public static readonly RULE_assignmentExpression = 63; + public static readonly RULE_assignmentOperator = 64; + public static readonly RULE_expression = 65; + public static readonly RULE_typeSpecifierExpression = 66; + public static readonly RULE_identifierTypeSpecifierExpression = 67; + public static readonly RULE_genericTypeSpecifierExpression = 68; + public static readonly RULE_typeofTypeSpecifierExpression = 69; + public static readonly RULE_typeSpecifierIdentifier = 70; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "compilationUnit", @@ -209,12 +213,15 @@ export class KipperParser extends Parser { "boolPrimaryExpression", "identifierPrimaryExpression", "identifier", + "identifierOrStringPrimaryExpression", "stringPrimaryExpression", "fStringPrimaryExpression", "fStringSingleQuoteAtom", "fStringDoubleQuoteAtom", "numberPrimaryExpression", "arrayPrimaryExpression", + "objectPrimaryExpression", + "objectProperty", "voidOrNullOrUndefinedPrimaryExpression", "computedPrimaryExpression", "argumentExpressionList", @@ -431,64 +438,20 @@ export class KipperParser extends Parser { public compilationUnit(): CompilationUnitContext { let _localctx: CompilationUnitContext = new CompilationUnitContext(this._ctx, this.state); this.enterRule(_localctx, 0, KipperParser.RULE_compilationUnit); - let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 137; + this.state = 143; this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.Switch) | - (1 << KipperParser.Break) | - (1 << KipperParser.Continue) | - (1 << KipperParser.Do) | - (1 << KipperParser.While) | - (1 << KipperParser.If) | - (1 << KipperParser.For) | - (1 << KipperParser.DefFunc) | - (1 << KipperParser.Return) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null) | - (1 << KipperParser.Undefined) | - (1 << KipperParser.SemiColon))) !== - 0) || - (((_la - 33) & ~0x1f) === 0 && - ((1 << (_la - 33)) & - ((1 << (KipperParser.LeftParen - 33)) | - (1 << (KipperParser.LeftBracket - 33)) | - (1 << (KipperParser.LeftBrace - 33)) | - (1 << (KipperParser.Plus - 33)) | - (1 << (KipperParser.PlusPlus - 33)) | - (1 << (KipperParser.Minus - 33)) | - (1 << (KipperParser.MinusMinus - 33)) | - (1 << (KipperParser.Not - 33)) | - (1 << (KipperParser.Identifier - 33)))) !== - 0) || - (((_la - 65) & ~0x1f) === 0 && - ((1 << (_la - 65)) & - ((1 << (KipperParser.IntegerConstant - 65)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | - (1 << (KipperParser.FloatingConstant - 65)) | - (1 << (KipperParser.FStringSingleQuoteStart - 65)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== - 0) - ) { - { - this.state = 136; - this.translationUnit(); - } + switch (this.interpreter.adaptivePredict(this._input, 0, this._ctx)) { + case 1: + { + this.state = 142; + this.translationUnit(); + } + break; } - - this.state = 139; + this.state = 145; this.match(KipperParser.EOF); } } catch (re) { @@ -508,67 +471,30 @@ export class KipperParser extends Parser { public translationUnit(): TranslationUnitContext { let _localctx: TranslationUnitContext = new TranslationUnitContext(this._ctx, this.state); this.enterRule(_localctx, 2, KipperParser.RULE_translationUnit); - let _la: number; try { + let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 142; + this.state = 148; this._errHandler.sync(this); - _la = this._input.LA(1); + _alt = 1; do { - { - { - this.state = 141; - this.externalItem(); - } + switch (_alt) { + case 1: + { + { + this.state = 147; + this.externalItem(); + } + } + break; + default: + throw new NoViableAltException(this); } - this.state = 144; + this.state = 150; this._errHandler.sync(this); - _la = this._input.LA(1); - } while ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.Switch) | - (1 << KipperParser.Break) | - (1 << KipperParser.Continue) | - (1 << KipperParser.Do) | - (1 << KipperParser.While) | - (1 << KipperParser.If) | - (1 << KipperParser.For) | - (1 << KipperParser.DefFunc) | - (1 << KipperParser.Return) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null) | - (1 << KipperParser.Undefined) | - (1 << KipperParser.SemiColon))) !== - 0) || - (((_la - 33) & ~0x1f) === 0 && - ((1 << (_la - 33)) & - ((1 << (KipperParser.LeftParen - 33)) | - (1 << (KipperParser.LeftBracket - 33)) | - (1 << (KipperParser.LeftBrace - 33)) | - (1 << (KipperParser.Plus - 33)) | - (1 << (KipperParser.PlusPlus - 33)) | - (1 << (KipperParser.Minus - 33)) | - (1 << (KipperParser.MinusMinus - 33)) | - (1 << (KipperParser.Not - 33)) | - (1 << (KipperParser.Identifier - 33)))) !== - 0) || - (((_la - 65) & ~0x1f) === 0 && - ((1 << (_la - 65)) & - ((1 << (KipperParser.IntegerConstant - 65)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | - (1 << (KipperParser.FloatingConstant - 65)) | - (1 << (KipperParser.FStringSingleQuoteStart - 65)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== - 0) - ); + _alt = this.interpreter.adaptivePredict(this._input, 1, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } } catch (re) { if (re instanceof RecognitionException) { @@ -591,7 +517,7 @@ export class KipperParser extends Parser { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 146; + this.state = 152; this.blockItemList(); } } catch (re) { @@ -615,7 +541,7 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 149; + this.state = 155; this._errHandler.sync(this); _alt = 1; do { @@ -623,7 +549,7 @@ export class KipperParser extends Parser { case 1: { { - this.state = 148; + this.state = 154; this.blockItem(); } } @@ -631,7 +557,7 @@ export class KipperParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 151; + this.state = 157; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -656,59 +582,29 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 156; + this.state = 162; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Switch: - case KipperParser.Break: - case KipperParser.Continue: - case KipperParser.Do: - case KipperParser.While: - case KipperParser.If: - case KipperParser.For: - case KipperParser.Return: - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: + switch (this.interpreter.adaptivePredict(this._input, 3, this._ctx)) { + case 1: { - this.state = 153; + this.state = 159; this.statement(); } break; - case KipperParser.Const: - case KipperParser.Var: - case KipperParser.DefFunc: + + case 2: { - this.state = 154; + this.state = 160; this.declaration(); } break; - case KipperParser.SemiColon: + + case 3: { - this.state = 155; + this.state = 161; this.match(KipperParser.SemiColon); } break; - default: - throw new NoViableAltException(this); } } } catch (re) { @@ -729,30 +625,30 @@ export class KipperParser extends Parser { let _localctx: DeclarationContext = new DeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 10, KipperParser.RULE_declaration); try { - this.state = 165; + this.state = 171; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: this.enterOuterAlt(_localctx, 1); { - this.state = 158; + this.state = 164; this.variableDeclaration(); - this.state = 159; + this.state = 165; this.match(KipperParser.SemiColon); } break; case KipperParser.DefFunc: this.enterOuterAlt(_localctx, 2); { - this.state = 161; + this.state = 167; this.functionDeclaration(); - this.state = 163; + this.state = 169; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 4, this._ctx)) { case 1: { - this.state = 162; + this.state = 168; this.match(KipperParser.SemiColon); } break; @@ -783,34 +679,34 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 167; + this.state = 173; this.match(KipperParser.DefFunc); - this.state = 168; + this.state = 174; this.declarator(); - this.state = 169; + this.state = 175; this.match(KipperParser.LeftParen); - this.state = 171; + this.state = 177; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 170; + this.state = 176; this.parameterList(); } } - this.state = 173; + this.state = 179; this.match(KipperParser.RightParen); - this.state = 174; + this.state = 180; this.match(KipperParser.RetIndicator); - this.state = 175; + this.state = 181; this.typeSpecifierExpression(); - this.state = 177; + this.state = 183; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { case 1: { - this.state = 176; + this.state = 182; this.compoundStatement(); } break; @@ -836,9 +732,9 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 179; + this.state = 185; this.storageTypeSpecifier(); - this.state = 180; + this.state = 186; this.initDeclarator(); } } catch (re) { @@ -862,7 +758,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 182; + this.state = 188; _la = this._input.LA(1); if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { this._errHandler.recoverInline(this); @@ -895,7 +791,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 184; + this.state = 190; this.directDeclarator(); } } catch (re) { @@ -918,7 +814,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 186; + this.state = 192; this.match(KipperParser.Identifier); } } catch (re) { @@ -942,20 +838,20 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 188; + this.state = 194; this.declarator(); - this.state = 189; + this.state = 195; this.match(KipperParser.Colon); - this.state = 190; + this.state = 196; this.typeSpecifierExpression(); - this.state = 193; + this.state = 199; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Assign) { { - this.state = 191; + this.state = 197; this.match(KipperParser.Assign); - this.state = 192; + this.state = 198; this.initializer(); } } @@ -981,21 +877,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 195; + this.state = 201; this.parameterDeclaration(); - this.state = 200; + this.state = 206; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 196; + this.state = 202; this.match(KipperParser.Comma); - this.state = 197; + this.state = 203; this.parameterDeclaration(); } } - this.state = 202; + this.state = 208; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1020,11 +916,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 203; + this.state = 209; this.declarator(); - this.state = 204; + this.state = 210; this.match(KipperParser.Colon); - this.state = 205; + this.state = 211; this.typeSpecifierExpression(); } } catch (re) { @@ -1047,7 +943,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 207; + this.state = 213; this.assignmentExpression(); } } catch (re) { @@ -1068,76 +964,56 @@ export class KipperParser extends Parser { let _localctx: StatementContext = new StatementContext(this._ctx, this.state); this.enterRule(_localctx, 30, KipperParser.RULE_statement); try { - this.state = 215; + this.state = 221; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.LeftBrace: + switch (this.interpreter.adaptivePredict(this._input, 10, this._ctx)) { + case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 209; - this.compoundStatement(); + this.state = 215; + this.expressionStatement(); } break; - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: + + case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 210; - this.expressionStatement(); + this.state = 216; + this.selectionStatement(); } break; - case KipperParser.Switch: - case KipperParser.If: + + case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 211; - this.selectionStatement(); + this.state = 217; + this.iterationStatement(); } break; - case KipperParser.Do: - case KipperParser.While: - case KipperParser.For: + + case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 212; - this.iterationStatement(); + this.state = 218; + this.jumpStatement(); } break; - case KipperParser.Break: - case KipperParser.Continue: + + case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 213; - this.jumpStatement(); + this.state = 219; + this.returnStatement(); } break; - case KipperParser.Return: + + case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 214; - this.returnStatement(); + this.state = 220; + this.compoundStatement(); } break; - default: - throw new NoViableAltException(this); } } catch (re) { if (re instanceof RecognitionException) { @@ -1156,66 +1032,26 @@ export class KipperParser extends Parser { public compoundStatement(): CompoundStatementContext { let _localctx: CompoundStatementContext = new CompoundStatementContext(this._ctx, this.state); this.enterRule(_localctx, 32, KipperParser.RULE_compoundStatement); - let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 217; + this.state = 223; + if (!this.notInsideExpressionStatement()) { + throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); + } + this.state = 224; this.match(KipperParser.LeftBrace); - this.state = 219; + this.state = 226; this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.Switch) | - (1 << KipperParser.Break) | - (1 << KipperParser.Continue) | - (1 << KipperParser.Do) | - (1 << KipperParser.While) | - (1 << KipperParser.If) | - (1 << KipperParser.For) | - (1 << KipperParser.DefFunc) | - (1 << KipperParser.Return) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null) | - (1 << KipperParser.Undefined) | - (1 << KipperParser.SemiColon))) !== - 0) || - (((_la - 33) & ~0x1f) === 0 && - ((1 << (_la - 33)) & - ((1 << (KipperParser.LeftParen - 33)) | - (1 << (KipperParser.LeftBracket - 33)) | - (1 << (KipperParser.LeftBrace - 33)) | - (1 << (KipperParser.Plus - 33)) | - (1 << (KipperParser.PlusPlus - 33)) | - (1 << (KipperParser.Minus - 33)) | - (1 << (KipperParser.MinusMinus - 33)) | - (1 << (KipperParser.Not - 33)) | - (1 << (KipperParser.Identifier - 33)))) !== - 0) || - (((_la - 65) & ~0x1f) === 0 && - ((1 << (_la - 65)) & - ((1 << (KipperParser.IntegerConstant - 65)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | - (1 << (KipperParser.FloatingConstant - 65)) | - (1 << (KipperParser.FStringSingleQuoteStart - 65)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== - 0) - ) { - { - this.state = 218; - this.blockItemList(); - } + switch (this.interpreter.adaptivePredict(this._input, 11, this._ctx)) { + case 1: + { + this.state = 225; + this.blockItemList(); + } + break; } - - this.state = 221; + this.state = 228; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1238,10 +1074,12 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 223; + this.enterExpressionStatement(); + this.state = 231; this.expression(); - this.state = 224; + this.state = 232; this.match(KipperParser.SemiColon); + this.exitExpressionStatement(); } } catch (re) { if (re instanceof RecognitionException) { @@ -1261,20 +1099,20 @@ export class KipperParser extends Parser { let _localctx: SelectionStatementContext = new SelectionStatementContext(this._ctx, this.state); this.enterRule(_localctx, 36, KipperParser.RULE_selectionStatement); try { - this.state = 228; + this.state = 237; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.If: this.enterOuterAlt(_localctx, 1); { - this.state = 226; + this.state = 235; this.ifStatement(); } break; case KipperParser.Switch: this.enterOuterAlt(_localctx, 2); { - this.state = 227; + this.state = 236; this.switchStatement(); } break; @@ -1301,24 +1139,24 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 230; + this.state = 239; this.match(KipperParser.If); - this.state = 231; + this.state = 240; this.match(KipperParser.LeftParen); - this.state = 232; + this.state = 241; this.expression(); - this.state = 233; + this.state = 242; this.match(KipperParser.RightParen); - this.state = 234; + this.state = 243; this.statement(); - this.state = 237; + this.state = 246; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 13, this._ctx)) { case 1: { - this.state = 235; + this.state = 244; this.match(KipperParser.Else); - this.state = 236; + this.state = 245; this.statement(); } break; @@ -1345,31 +1183,31 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 239; + this.state = 248; this.match(KipperParser.Switch); - this.state = 240; + this.state = 249; this.match(KipperParser.LeftParen); - this.state = 241; + this.state = 250; this.expression(); - this.state = 242; + this.state = 251; this.match(KipperParser.RightParen); - this.state = 243; + this.state = 252; this.match(KipperParser.LeftBrace); - this.state = 247; + this.state = 256; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Case || _la === KipperParser.Default) { { { - this.state = 244; + this.state = 253; this.switchLabeledStatement(); } } - this.state = 249; + this.state = 258; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 250; + this.state = 259; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1390,30 +1228,30 @@ export class KipperParser extends Parser { let _localctx: SwitchLabeledStatementContext = new SwitchLabeledStatementContext(this._ctx, this.state); this.enterRule(_localctx, 42, KipperParser.RULE_switchLabeledStatement); try { - this.state = 260; + this.state = 269; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Case: this.enterOuterAlt(_localctx, 1); { - this.state = 252; + this.state = 261; this.match(KipperParser.Case); - this.state = 253; + this.state = 262; this.expression(); - this.state = 254; + this.state = 263; this.match(KipperParser.Colon); - this.state = 255; + this.state = 264; this.statement(); } break; case KipperParser.Default: this.enterOuterAlt(_localctx, 2); { - this.state = 257; + this.state = 266; this.match(KipperParser.Default); - this.state = 258; + this.state = 267; this.match(KipperParser.Colon); - this.state = 259; + this.state = 268; this.statement(); } break; @@ -1438,27 +1276,27 @@ export class KipperParser extends Parser { let _localctx: IterationStatementContext = new IterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 44, KipperParser.RULE_iterationStatement); try { - this.state = 265; + this.state = 274; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.For: this.enterOuterAlt(_localctx, 1); { - this.state = 262; + this.state = 271; this.forLoopIterationStatement(); } break; case KipperParser.While: this.enterOuterAlt(_localctx, 2); { - this.state = 263; + this.state = 272; this.whileLoopIterationStatement(); } break; case KipperParser.Do: this.enterOuterAlt(_localctx, 3); { - this.state = 264; + this.state = 273; this.doWhileLoopIterationStatement(); } break; @@ -1486,11 +1324,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 267; + this.state = 276; this.match(KipperParser.For); - this.state = 268; + this.state = 277; this.match(KipperParser.LeftParen); - this.state = 275; + this.state = 284; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1509,6 +1347,7 @@ export class KipperParser extends Parser { ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.LeftBrace - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | @@ -1527,13 +1366,13 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 271; + this.state = 280; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: { - this.state = 269; + this.state = 278; this.variableDeclaration(); } break; @@ -1545,6 +1384,7 @@ export class KipperParser extends Parser { case KipperParser.Undefined: case KipperParser.LeftParen: case KipperParser.LeftBracket: + case KipperParser.LeftBrace: case KipperParser.Plus: case KipperParser.PlusPlus: case KipperParser.Minus: @@ -1558,7 +1398,7 @@ export class KipperParser extends Parser { case KipperParser.FStringSingleQuoteStart: case KipperParser.FStringDoubleQuoteStart: { - this.state = 270; + this.state = 279; this.expression(); } break; @@ -1569,9 +1409,9 @@ export class KipperParser extends Parser { } } - this.state = 277; + this.state = 286; this.match(KipperParser.SemiColon); - this.state = 281; + this.state = 290; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1585,6 +1425,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -1603,15 +1444,15 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 278; + this.state = 287; this.expression(); _localctx._forCondition = true; } } - this.state = 283; + this.state = 292; this.match(KipperParser.SemiColon); - this.state = 287; + this.state = 296; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1625,6 +1466,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -1643,15 +1485,15 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 284; + this.state = 293; this.expression(); _localctx._forIterationExp = true; } } - this.state = 289; + this.state = 298; this.match(KipperParser.RightParen); - this.state = 290; + this.state = 299; this.statement(); } } catch (re) { @@ -1674,15 +1516,15 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 292; + this.state = 301; this.match(KipperParser.While); - this.state = 293; + this.state = 302; this.match(KipperParser.LeftParen); - this.state = 294; + this.state = 303; this.expression(); - this.state = 295; + this.state = 304; this.match(KipperParser.RightParen); - this.state = 296; + this.state = 305; this.statement(); } } catch (re) { @@ -1708,19 +1550,19 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 298; + this.state = 307; this.match(KipperParser.Do); - this.state = 299; + this.state = 308; this.statement(); - this.state = 300; + this.state = 309; this.match(KipperParser.While); - this.state = 301; + this.state = 310; this.match(KipperParser.LeftParen); - this.state = 302; + this.state = 311; this.expression(); - this.state = 303; + this.state = 312; this.match(KipperParser.RightParen); - this.state = 304; + this.state = 313; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1744,7 +1586,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 306; + this.state = 315; _la = this._input.LA(1); if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { this._errHandler.recoverInline(this); @@ -1756,7 +1598,7 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 307; + this.state = 316; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1780,9 +1622,9 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 309; + this.state = 318; this.match(KipperParser.Return); - this.state = 311; + this.state = 320; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1796,6 +1638,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -1814,12 +1657,12 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 310; + this.state = 319; this.expression(); } } - this.state = 313; + this.state = 322; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1840,68 +1683,75 @@ export class KipperParser extends Parser { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 56, KipperParser.RULE_primaryExpression); try { - this.state = 323; + this.state = 333; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.LeftParen: this.enterOuterAlt(_localctx, 1); { - this.state = 315; + this.state = 324; this.tangledPrimaryExpression(); } break; + case KipperParser.LeftBracket: + this.enterOuterAlt(_localctx, 2); + { + this.state = 325; + this.arrayPrimaryExpression(); + } + break; + case KipperParser.LeftBrace: + this.enterOuterAlt(_localctx, 3); + { + this.state = 326; + this.objectPrimaryExpression(); + } + break; case KipperParser.True: case KipperParser.False: - this.enterOuterAlt(_localctx, 2); + this.enterOuterAlt(_localctx, 4); { - this.state = 316; + this.state = 327; this.boolPrimaryExpression(); } break; case KipperParser.Identifier: - this.enterOuterAlt(_localctx, 3); + this.enterOuterAlt(_localctx, 5); { - this.state = 317; + this.state = 328; this.identifierPrimaryExpression(); } break; case KipperParser.SingleQuoteStringLiteral: case KipperParser.DoubleQuoteStringLiteral: - this.enterOuterAlt(_localctx, 4); + this.enterOuterAlt(_localctx, 6); { - this.state = 318; + this.state = 329; this.stringPrimaryExpression(); } break; case KipperParser.FStringSingleQuoteStart: case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 5); + this.enterOuterAlt(_localctx, 7); { - this.state = 319; + this.state = 330; this.fStringPrimaryExpression(); } break; case KipperParser.IntegerConstant: case KipperParser.FloatingConstant: - this.enterOuterAlt(_localctx, 6); + this.enterOuterAlt(_localctx, 8); { - this.state = 320; + this.state = 331; this.numberPrimaryExpression(); } break; - case KipperParser.LeftBracket: - this.enterOuterAlt(_localctx, 7); - { - this.state = 321; - this.arrayPrimaryExpression(); - } - break; case KipperParser.Void: case KipperParser.Null: case KipperParser.Undefined: - this.enterOuterAlt(_localctx, 8); + this.enterOuterAlt(_localctx, 9); { - this.state = 322; + this.state = 332; this.voidOrNullOrUndefinedPrimaryExpression(); } break; @@ -1928,11 +1778,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 325; + this.state = 335; this.match(KipperParser.LeftParen); - this.state = 326; + this.state = 336; this.expression(); - this.state = 327; + this.state = 337; this.match(KipperParser.RightParen); } } catch (re) { @@ -1956,7 +1806,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 329; + this.state = 339; _la = this._input.LA(1); if (!(_la === KipperParser.True || _la === KipperParser.False)) { this._errHandler.recoverInline(this); @@ -1989,7 +1839,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 331; + this.state = 341; this.identifier(); } } catch (re) { @@ -2012,7 +1862,7 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 333; + this.state = 343; this.match(KipperParser.Identifier); } } catch (re) { @@ -2029,14 +1879,56 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) + public identifierOrStringPrimaryExpression(): IdentifierOrStringPrimaryExpressionContext { + let _localctx: IdentifierOrStringPrimaryExpressionContext = new IdentifierOrStringPrimaryExpressionContext( + this._ctx, + this.state, + ); + this.enterRule(_localctx, 66, KipperParser.RULE_identifierOrStringPrimaryExpression); + try { + this.state = 347; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.Identifier: + this.enterOuterAlt(_localctx, 1); + { + this.state = 345; + this.identifier(); + } + break; + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + this.enterOuterAlt(_localctx, 2); + { + this.state = 346; + this.stringPrimaryExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) public stringPrimaryExpression(): StringPrimaryExpressionContext { let _localctx: StringPrimaryExpressionContext = new StringPrimaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 66, KipperParser.RULE_stringPrimaryExpression); + this.enterRule(_localctx, 68, KipperParser.RULE_stringPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 335; + this.state = 349; _la = this._input.LA(1); if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { this._errHandler.recoverInline(this); @@ -2065,55 +1957,55 @@ export class KipperParser extends Parser { // @RuleVersion(0) public fStringPrimaryExpression(): FStringPrimaryExpressionContext { let _localctx: FStringPrimaryExpressionContext = new FStringPrimaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 68, KipperParser.RULE_fStringPrimaryExpression); + this.enterRule(_localctx, 70, KipperParser.RULE_fStringPrimaryExpression); let _la: number; try { - this.state = 353; + this.state = 367; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 337; + this.state = 351; this.match(KipperParser.FStringSingleQuoteStart); - this.state = 341; + this.state = 355; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { { { - this.state = 338; + this.state = 352; this.fStringSingleQuoteAtom(); } } - this.state = 343; + this.state = 357; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 344; + this.state = 358; this.match(KipperParser.FStringSingleQuoteEnd); } break; case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 2); { - this.state = 345; + this.state = 359; this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 349; + this.state = 363; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { { { - this.state = 346; + this.state = 360; this.fStringDoubleQuoteAtom(); } } - this.state = 351; + this.state = 365; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 352; + this.state = 366; this.match(KipperParser.FStringDoubleQuoteEnd); } break; @@ -2136,25 +2028,25 @@ export class KipperParser extends Parser { // @RuleVersion(0) public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext { let _localctx: FStringSingleQuoteAtomContext = new FStringSingleQuoteAtomContext(this._ctx, this.state); - this.enterRule(_localctx, 70, KipperParser.RULE_fStringSingleQuoteAtom); + this.enterRule(_localctx, 72, KipperParser.RULE_fStringSingleQuoteAtom); let _la: number; try { - this.state = 361; + this.state = 375; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 355; + this.state = 369; this.match(KipperParser.FStringSingleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 356; + this.state = 370; this.match(KipperParser.FStringExpStart); - this.state = 358; + this.state = 372; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2168,6 +2060,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -2186,12 +2079,12 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 357; + this.state = 371; this.expression(); } } - this.state = 360; + this.state = 374; this.match(KipperParser.FStringExpEnd); } break; @@ -2214,25 +2107,25 @@ export class KipperParser extends Parser { // @RuleVersion(0) public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext { let _localctx: FStringDoubleQuoteAtomContext = new FStringDoubleQuoteAtomContext(this._ctx, this.state); - this.enterRule(_localctx, 72, KipperParser.RULE_fStringDoubleQuoteAtom); + this.enterRule(_localctx, 74, KipperParser.RULE_fStringDoubleQuoteAtom); let _la: number; try { - this.state = 369; + this.state = 383; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringDoubleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 363; + this.state = 377; this.match(KipperParser.FStringDoubleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 364; + this.state = 378; this.match(KipperParser.FStringExpStart); - this.state = 366; + this.state = 380; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2246,6 +2139,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -2264,12 +2158,12 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 365; + this.state = 379; this.expression(); } } - this.state = 368; + this.state = 382; this.match(KipperParser.FStringExpEnd); } break; @@ -2292,12 +2186,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public numberPrimaryExpression(): NumberPrimaryExpressionContext { let _localctx: NumberPrimaryExpressionContext = new NumberPrimaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 74, KipperParser.RULE_numberPrimaryExpression); + this.enterRule(_localctx, 76, KipperParser.RULE_numberPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 371; + this.state = 385; _la = this._input.LA(1); if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { this._errHandler.recoverInline(this); @@ -2324,70 +2218,183 @@ export class KipperParser extends Parser { return _localctx; } // @RuleVersion(0) - public arrayPrimaryExpression(): ArrayPrimaryExpressionContext { - let _localctx: ArrayPrimaryExpressionContext = new ArrayPrimaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 76, KipperParser.RULE_arrayPrimaryExpression); + public arrayPrimaryExpression(): ArrayPrimaryExpressionContext { + let _localctx: ArrayPrimaryExpressionContext = new ArrayPrimaryExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 78, KipperParser.RULE_arrayPrimaryExpression); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 387; + this.match(KipperParser.LeftBracket); + this.state = 396; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.IntegerConstant - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | + (1 << (KipperParser.FloatingConstant - 64)) | + (1 << (KipperParser.FStringSingleQuoteStart - 64)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== + 0) + ) { + { + this.state = 388; + this.expression(); + this.state = 393; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 31, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 389; + this.match(KipperParser.Comma); + this.state = 390; + this.expression(); + } + } + } + this.state = 395; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 31, this._ctx); + } + } + } + + this.state = 399; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Comma) { + { + this.state = 398; + this.match(KipperParser.Comma); + } + } + + this.state = 401; + this.match(KipperParser.RightBracket); + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public objectPrimaryExpression(): ObjectPrimaryExpressionContext { + let _localctx: ObjectPrimaryExpressionContext = new ObjectPrimaryExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 80, KipperParser.RULE_objectPrimaryExpression); let _la: number; try { + let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 373; - this.match(KipperParser.LeftBracket); - this.state = 382; + this.state = 403; + this.match(KipperParser.LeftBrace); + this.state = 412; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) + ((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Identifier - 64)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 64)))) !== + 0 ) { { - this.state = 374; - this.expression(); - this.state = 379; + this.state = 404; + this.objectProperty(); + this.state = 409; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { + _alt = this.interpreter.adaptivePredict(this._input, 34, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { { - this.state = 375; - this.match(KipperParser.Comma); - this.state = 376; - this.expression(); + { + this.state = 405; + this.match(KipperParser.Comma); + this.state = 406; + this.objectProperty(); + } } } - this.state = 381; + this.state = 411; this._errHandler.sync(this); - _la = this._input.LA(1); + _alt = this.interpreter.adaptivePredict(this._input, 34, this._ctx); } } } - this.state = 384; - this.match(KipperParser.RightBracket); + this.state = 415; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Comma) { + { + this.state = 414; + this.match(KipperParser.Comma); + } + } + + this.state = 417; + this.match(KipperParser.RightBrace); + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public objectProperty(): ObjectPropertyContext { + let _localctx: ObjectPropertyContext = new ObjectPropertyContext(this._ctx, this.state); + this.enterRule(_localctx, 82, KipperParser.RULE_objectProperty); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 419; + this.identifierOrStringPrimaryExpression(); + this.state = 420; + this.match(KipperParser.Colon); + this.state = 421; + this.expression(); } } catch (re) { if (re instanceof RecognitionException) { @@ -2408,12 +2415,12 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 78, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); + this.enterRule(_localctx, 84, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 386; + this.state = 423; _la = this._input.LA(1); if ( !( @@ -2457,14 +2464,14 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: ComputedPrimaryExpressionContext = new ComputedPrimaryExpressionContext(this._ctx, _parentState); let _prevctx: ComputedPrimaryExpressionContext = _localctx; - let _startState: number = 80; - this.enterRecursionRule(_localctx, 80, KipperParser.RULE_computedPrimaryExpression, _p); + let _startState: number = 86; + this.enterRecursionRule(_localctx, 86, KipperParser.RULE_computedPrimaryExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 399; + this.state = 436; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.True: @@ -2474,6 +2481,7 @@ export class KipperParser extends Parser { case KipperParser.Undefined: case KipperParser.LeftParen: case KipperParser.LeftBracket: + case KipperParser.LeftBrace: case KipperParser.Identifier: case KipperParser.IntegerConstant: case KipperParser.SingleQuoteStringLiteral: @@ -2486,7 +2494,7 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 389; + this.state = 426; this.primaryExpression(); } break; @@ -2495,13 +2503,13 @@ export class KipperParser extends Parser { _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 390; + this.state = 427; this.match(KipperParser.CallFunc); - this.state = 391; + this.state = 428; this.computedPrimaryExpression(0); - this.state = 392; + this.state = 429; this.match(KipperParser.LeftParen); - this.state = 394; + this.state = 431; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2515,6 +2523,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -2533,12 +2542,12 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 393; + this.state = 430; this.argumentExpressionList(); } } - this.state = 396; + this.state = 433; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -2547,9 +2556,9 @@ export class KipperParser extends Parser { throw new NoViableAltException(this); } this._ctx._stop = this._input.tryLT(-1); - this.state = 422; + this.state = 459; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -2557,22 +2566,22 @@ export class KipperParser extends Parser { } _prevctx = _localctx; { - this.state = 420; + this.state = 457; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 35, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 40, this._ctx)) { case 1: { _localctx = new FunctionCallExpressionContext( new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 401; + this.state = 438; if (!this.precpred(this._ctx, 5)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 402; + this.state = 439; this.match(KipperParser.LeftParen); - this.state = 404; + this.state = 441; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2586,6 +2595,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -2604,12 +2614,12 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 403; + this.state = 440; this.argumentExpressionList(); } } - this.state = 406; + this.state = 443; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -2621,11 +2631,11 @@ export class KipperParser extends Parser { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 408; + this.state = 445; if (!this.precpred(this._ctx, 3)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 409; + this.state = 446; this.dotNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -2637,11 +2647,11 @@ export class KipperParser extends Parser { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 412; + this.state = 449; if (!this.precpred(this._ctx, 2)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 413; + this.state = 450; this.bracketNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -2653,11 +2663,11 @@ export class KipperParser extends Parser { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 416; + this.state = 453; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 417; + this.state = 454; this.sliceNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -2665,9 +2675,9 @@ export class KipperParser extends Parser { } } } - this.state = 424; + this.state = 461; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } } } catch (re) { @@ -2686,26 +2696,26 @@ export class KipperParser extends Parser { // @RuleVersion(0) public argumentExpressionList(): ArgumentExpressionListContext { let _localctx: ArgumentExpressionListContext = new ArgumentExpressionListContext(this._ctx, this.state); - this.enterRule(_localctx, 82, KipperParser.RULE_argumentExpressionList); + this.enterRule(_localctx, 88, KipperParser.RULE_argumentExpressionList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 425; + this.state = 462; this.assignmentExpression(); - this.state = 430; + this.state = 467; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 426; + this.state = 463; this.match(KipperParser.Comma); - this.state = 427; + this.state = 464; this.assignmentExpression(); } } - this.state = 432; + this.state = 469; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -2726,13 +2736,13 @@ export class KipperParser extends Parser { // @RuleVersion(0) public dotNotation(): DotNotationContext { let _localctx: DotNotationContext = new DotNotationContext(this._ctx, this.state); - this.enterRule(_localctx, 84, KipperParser.RULE_dotNotation); + this.enterRule(_localctx, 90, KipperParser.RULE_dotNotation); try { this.enterOuterAlt(_localctx, 1); { - this.state = 433; + this.state = 470; this.match(KipperParser.Dot); - this.state = 434; + this.state = 471; this.identifier(); } } catch (re) { @@ -2751,15 +2761,15 @@ export class KipperParser extends Parser { // @RuleVersion(0) public bracketNotation(): BracketNotationContext { let _localctx: BracketNotationContext = new BracketNotationContext(this._ctx, this.state); - this.enterRule(_localctx, 86, KipperParser.RULE_bracketNotation); + this.enterRule(_localctx, 92, KipperParser.RULE_bracketNotation); try { this.enterOuterAlt(_localctx, 1); { - this.state = 436; + this.state = 473; this.match(KipperParser.LeftBracket); - this.state = 437; + this.state = 474; this.expression(); - this.state = 438; + this.state = 475; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2778,14 +2788,14 @@ export class KipperParser extends Parser { // @RuleVersion(0) public sliceNotation(): SliceNotationContext { let _localctx: SliceNotationContext = new SliceNotationContext(this._ctx, this.state); - this.enterRule(_localctx, 88, KipperParser.RULE_sliceNotation); + this.enterRule(_localctx, 94, KipperParser.RULE_sliceNotation); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 440; + this.state = 477; this.match(KipperParser.LeftBracket); - this.state = 444; + this.state = 481; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2799,6 +2809,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -2817,15 +2828,15 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 441; + this.state = 478; this.expression(); _localctx.sliceStart = true; } } - this.state = 446; + this.state = 483; this.match(KipperParser.Colon); - this.state = 450; + this.state = 487; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2839,6 +2850,7 @@ export class KipperParser extends Parser { (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.LeftBrace - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | @@ -2857,13 +2869,13 @@ export class KipperParser extends Parser { 0) ) { { - this.state = 447; + this.state = 484; this.expression(); _localctx.sliceEnd = true; } } - this.state = 452; + this.state = 489; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2882,15 +2894,15 @@ export class KipperParser extends Parser { // @RuleVersion(0) public postfixExpression(): PostfixExpressionContext { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 90, KipperParser.RULE_postfixExpression); + this.enterRule(_localctx, 96, KipperParser.RULE_postfixExpression); try { - this.state = 456; + this.state = 493; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 40, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 45, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 454; + this.state = 491; this.computedPrimaryExpression(0); } break; @@ -2898,7 +2910,7 @@ export class KipperParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 455; + this.state = 492; this.incrementOrDecrementPostfixExpression(); } break; @@ -2922,13 +2934,13 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 92, KipperParser.RULE_incrementOrDecrementPostfixExpression); + this.enterRule(_localctx, 98, KipperParser.RULE_incrementOrDecrementPostfixExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 458; + this.state = 495; this.computedPrimaryExpression(0); - this.state = 459; + this.state = 496; this.incrementOrDecrementOperator(); } } catch (re) { @@ -2947,9 +2959,9 @@ export class KipperParser extends Parser { // @RuleVersion(0) public unaryExpression(): UnaryExpressionContext { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 94, KipperParser.RULE_unaryExpression); + this.enterRule(_localctx, 100, KipperParser.RULE_unaryExpression); try { - this.state = 464; + this.state = 501; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.CallFunc: @@ -2960,6 +2972,7 @@ export class KipperParser extends Parser { case KipperParser.Undefined: case KipperParser.LeftParen: case KipperParser.LeftBracket: + case KipperParser.LeftBrace: case KipperParser.Identifier: case KipperParser.IntegerConstant: case KipperParser.SingleQuoteStringLiteral: @@ -2969,7 +2982,7 @@ export class KipperParser extends Parser { case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 461; + this.state = 498; this.postfixExpression(); } break; @@ -2977,7 +2990,7 @@ export class KipperParser extends Parser { case KipperParser.MinusMinus: this.enterOuterAlt(_localctx, 2); { - this.state = 462; + this.state = 499; this.incrementOrDecrementUnaryExpression(); } break; @@ -2986,7 +2999,7 @@ export class KipperParser extends Parser { case KipperParser.Not: this.enterOuterAlt(_localctx, 3); { - this.state = 463; + this.state = 500; this.operatorModifiedUnaryExpression(); } break; @@ -3012,13 +3025,13 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 96, KipperParser.RULE_incrementOrDecrementUnaryExpression); + this.enterRule(_localctx, 102, KipperParser.RULE_incrementOrDecrementUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 466; + this.state = 503; this.incrementOrDecrementOperator(); - this.state = 467; + this.state = 504; this.postfixExpression(); } } catch (re) { @@ -3040,13 +3053,13 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 98, KipperParser.RULE_operatorModifiedUnaryExpression); + this.enterRule(_localctx, 104, KipperParser.RULE_operatorModifiedUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 469; + this.state = 506; this.unaryOperator(); - this.state = 470; + this.state = 507; this.postfixExpression(); } } catch (re) { @@ -3065,12 +3078,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { let _localctx: IncrementOrDecrementOperatorContext = new IncrementOrDecrementOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 100, KipperParser.RULE_incrementOrDecrementOperator); + this.enterRule(_localctx, 106, KipperParser.RULE_incrementOrDecrementOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 472; + this.state = 509; _la = this._input.LA(1); if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { this._errHandler.recoverInline(this); @@ -3099,12 +3112,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public unaryOperator(): UnaryOperatorContext { let _localctx: UnaryOperatorContext = new UnaryOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 102, KipperParser.RULE_unaryOperator); + this.enterRule(_localctx, 108, KipperParser.RULE_unaryOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 474; + this.state = 511; _la = this._input.LA(1); if ( !( @@ -3140,16 +3153,16 @@ export class KipperParser extends Parser { // @RuleVersion(0) public castOrConvertExpression(): CastOrConvertExpressionContext { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 104, KipperParser.RULE_castOrConvertExpression); + this.enterRule(_localctx, 110, KipperParser.RULE_castOrConvertExpression); try { - this.state = 481; + this.state = 518; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 42, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 47, this._ctx)) { case 1: _localctx = new PassOnCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 476; + this.state = 513; this.unaryExpression(); } break; @@ -3158,11 +3171,11 @@ export class KipperParser extends Parser { _localctx = new ActualCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 477; + this.state = 514; this.unaryExpression(); - this.state = 478; + this.state = 515; this.match(KipperParser.As); - this.state = 479; + this.state = 516; this.typeSpecifierExpression(); } break; @@ -3193,8 +3206,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: MultiplicativeExpressionContext = new MultiplicativeExpressionContext(this._ctx, _parentState); let _prevctx: MultiplicativeExpressionContext = _localctx; - let _startState: number = 106; - this.enterRecursionRule(_localctx, 106, KipperParser.RULE_multiplicativeExpression, _p); + let _startState: number = 112; + this.enterRecursionRule(_localctx, 112, KipperParser.RULE_multiplicativeExpression, _p); let _la: number; try { let _alt: number; @@ -3205,13 +3218,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 484; + this.state = 521; this.castOrConvertExpression(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 491; + this.state = 528; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3224,11 +3237,11 @@ export class KipperParser extends Parser { new MultiplicativeExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 486; + this.state = 523; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 487; + this.state = 524; _la = this._input.LA(1); if ( !( @@ -3250,14 +3263,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 488; + this.state = 525; this.castOrConvertExpression(); } } } - this.state = 493; + this.state = 530; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); } } } catch (re) { @@ -3286,8 +3299,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: AdditiveExpressionContext = new AdditiveExpressionContext(this._ctx, _parentState); let _prevctx: AdditiveExpressionContext = _localctx; - let _startState: number = 108; - this.enterRecursionRule(_localctx, 108, KipperParser.RULE_additiveExpression, _p); + let _startState: number = 114; + this.enterRecursionRule(_localctx, 114, KipperParser.RULE_additiveExpression, _p); let _la: number; try { let _alt: number; @@ -3298,13 +3311,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 495; + this.state = 532; this.multiplicativeExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 502; + this.state = 539; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3317,11 +3330,11 @@ export class KipperParser extends Parser { new AdditiveExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 497; + this.state = 534; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 498; + this.state = 535; _la = this._input.LA(1); if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { this._errHandler.recoverInline(this); @@ -3333,14 +3346,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 499; + this.state = 536; this.multiplicativeExpression(0); } } } - this.state = 504; + this.state = 541; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); } } } catch (re) { @@ -3369,8 +3382,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: RelationalExpressionContext = new RelationalExpressionContext(this._ctx, _parentState); let _prevctx: RelationalExpressionContext = _localctx; - let _startState: number = 110; - this.enterRecursionRule(_localctx, 110, KipperParser.RULE_relationalExpression, _p); + let _startState: number = 116; + this.enterRecursionRule(_localctx, 116, KipperParser.RULE_relationalExpression, _p); let _la: number; try { let _alt: number; @@ -3381,13 +3394,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 506; + this.state = 543; this.additiveExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 513; + this.state = 550; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3400,11 +3413,11 @@ export class KipperParser extends Parser { new RelationalExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 508; + this.state = 545; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 509; + this.state = 546; _la = this._input.LA(1); if ( !( @@ -3426,14 +3439,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 510; + this.state = 547; this.additiveExpression(0); } } } - this.state = 515; + this.state = 552; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); } } } catch (re) { @@ -3462,8 +3475,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: EqualityExpressionContext = new EqualityExpressionContext(this._ctx, _parentState); let _prevctx: EqualityExpressionContext = _localctx; - let _startState: number = 112; - this.enterRecursionRule(_localctx, 112, KipperParser.RULE_equalityExpression, _p); + let _startState: number = 118; + this.enterRecursionRule(_localctx, 118, KipperParser.RULE_equalityExpression, _p); let _la: number; try { let _alt: number; @@ -3474,13 +3487,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 517; + this.state = 554; this.relationalExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 524; + this.state = 561; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3493,11 +3506,11 @@ export class KipperParser extends Parser { new EqualityExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 519; + this.state = 556; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 520; + this.state = 557; _la = this._input.LA(1); if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { this._errHandler.recoverInline(this); @@ -3509,14 +3522,14 @@ export class KipperParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 521; + this.state = 558; this.relationalExpression(0); } } } - this.state = 526; + this.state = 563; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); } } } catch (re) { @@ -3545,8 +3558,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: LogicalAndExpressionContext = new LogicalAndExpressionContext(this._ctx, _parentState); let _prevctx: LogicalAndExpressionContext = _localctx; - let _startState: number = 114; - this.enterRecursionRule(_localctx, 114, KipperParser.RULE_logicalAndExpression, _p); + let _startState: number = 120; + this.enterRecursionRule(_localctx, 120, KipperParser.RULE_logicalAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -3556,13 +3569,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 528; + this.state = 565; this.equalityExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 535; + this.state = 572; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3575,20 +3588,20 @@ export class KipperParser extends Parser { new LogicalAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 530; + this.state = 567; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 531; + this.state = 568; this.match(KipperParser.AndAnd); - this.state = 532; + this.state = 569; this.equalityExpression(0); } } } - this.state = 537; + this.state = 574; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); } } } catch (re) { @@ -3617,8 +3630,8 @@ export class KipperParser extends Parser { let _parentState: number = this.state; let _localctx: LogicalOrExpressionContext = new LogicalOrExpressionContext(this._ctx, _parentState); let _prevctx: LogicalOrExpressionContext = _localctx; - let _startState: number = 116; - this.enterRecursionRule(_localctx, 116, KipperParser.RULE_logicalOrExpression, _p); + let _startState: number = 122; + this.enterRecursionRule(_localctx, 122, KipperParser.RULE_logicalOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -3628,13 +3641,13 @@ export class KipperParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 539; + this.state = 576; this.logicalAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 546; + this.state = 583; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 53, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3647,20 +3660,20 @@ export class KipperParser extends Parser { new LogicalOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 541; + this.state = 578; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 542; + this.state = 579; this.match(KipperParser.OrOr); - this.state = 543; + this.state = 580; this.logicalAndExpression(0); } } } - this.state = 548; + this.state = 585; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 53, this._ctx); } } } catch (re) { @@ -3679,16 +3692,16 @@ export class KipperParser extends Parser { // @RuleVersion(0) public conditionalExpression(): ConditionalExpressionContext { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 118, KipperParser.RULE_conditionalExpression); + this.enterRule(_localctx, 124, KipperParser.RULE_conditionalExpression); try { - this.state = 556; + this.state = 593; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 49, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 54, this._ctx)) { case 1: _localctx = new PassOnConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 549; + this.state = 586; this.logicalOrExpression(0); } break; @@ -3697,15 +3710,15 @@ export class KipperParser extends Parser { _localctx = new ActualConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 550; + this.state = 587; this.logicalOrExpression(0); - this.state = 551; + this.state = 588; this.match(KipperParser.QuestionMark); - this.state = 552; + this.state = 589; this.conditionalExpression(); - this.state = 553; + this.state = 590; this.match(KipperParser.Colon); - this.state = 554; + this.state = 591; this.conditionalExpression(); } break; @@ -3726,16 +3739,16 @@ export class KipperParser extends Parser { // @RuleVersion(0) public assignmentExpression(): AssignmentExpressionContext { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 120, KipperParser.RULE_assignmentExpression); + this.enterRule(_localctx, 126, KipperParser.RULE_assignmentExpression); try { - this.state = 563; + this.state = 600; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 50, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 55, this._ctx)) { case 1: _localctx = new PassOnAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 558; + this.state = 595; this.conditionalExpression(); } break; @@ -3744,11 +3757,11 @@ export class KipperParser extends Parser { _localctx = new ActualAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 559; + this.state = 596; this.computedPrimaryExpression(0); - this.state = 560; + this.state = 597; this.assignmentOperator(); - this.state = 561; + this.state = 598; this.assignmentExpression(); } break; @@ -3769,12 +3782,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public assignmentOperator(): AssignmentOperatorContext { let _localctx: AssignmentOperatorContext = new AssignmentOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 122, KipperParser.RULE_assignmentOperator); + this.enterRule(_localctx, 128, KipperParser.RULE_assignmentOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 565; + this.state = 602; _la = this._input.LA(1); if ( !( @@ -3815,30 +3828,30 @@ export class KipperParser extends Parser { // @RuleVersion(0) public expression(): ExpressionContext { let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 124, KipperParser.RULE_expression); + this.enterRule(_localctx, 130, KipperParser.RULE_expression); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 567; + this.state = 604; this.assignmentExpression(); - this.state = 572; + this.state = 609; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 56, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 568; + this.state = 605; this.match(KipperParser.Comma); - this.state = 569; + this.state = 606; this.assignmentExpression(); } } } - this.state = 574; + this.state = 611; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 56, this._ctx); } } } catch (re) { @@ -3857,15 +3870,15 @@ export class KipperParser extends Parser { // @RuleVersion(0) public typeSpecifierExpression(): TypeSpecifierExpressionContext { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 126, KipperParser.RULE_typeSpecifierExpression); + this.enterRule(_localctx, 132, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 578; + this.state = 615; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 52, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 57, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 575; + this.state = 612; this.identifierTypeSpecifierExpression(); } break; @@ -3873,7 +3886,7 @@ export class KipperParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 576; + this.state = 613; this.genericTypeSpecifierExpression(); } break; @@ -3881,7 +3894,7 @@ export class KipperParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 577; + this.state = 614; this.typeofTypeSpecifierExpression(); } break; @@ -3905,11 +3918,11 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 128, KipperParser.RULE_identifierTypeSpecifierExpression); + this.enterRule(_localctx, 134, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 580; + this.state = 617; this.typeSpecifierIdentifier(); } } catch (re) { @@ -3931,17 +3944,17 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 130, KipperParser.RULE_genericTypeSpecifierExpression); + this.enterRule(_localctx, 136, KipperParser.RULE_genericTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 582; + this.state = 619; this.typeSpecifierIdentifier(); - this.state = 583; + this.state = 620; this.match(KipperParser.Less); - this.state = 584; + this.state = 621; this.typeSpecifierIdentifier(); - this.state = 585; + this.state = 622; this.match(KipperParser.Greater); } } catch (re) { @@ -3963,17 +3976,17 @@ export class KipperParser extends Parser { this._ctx, this.state, ); - this.enterRule(_localctx, 132, KipperParser.RULE_typeofTypeSpecifierExpression); + this.enterRule(_localctx, 138, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 587; + this.state = 624; this.match(KipperParser.Typeof); - this.state = 588; + this.state = 625; this.match(KipperParser.LeftParen); - this.state = 589; + this.state = 626; this.typeSpecifierIdentifier(); - this.state = 590; + this.state = 627; this.match(KipperParser.RightParen); } } catch (re) { @@ -3992,12 +4005,12 @@ export class KipperParser extends Parser { // @RuleVersion(0) public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { let _localctx: TypeSpecifierIdentifierContext = new TypeSpecifierIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 134, KipperParser.RULE_typeSpecifierIdentifier); + this.enterRule(_localctx, 140, KipperParser.RULE_typeSpecifierIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 592; + this.state = 629; _la = this._input.LA(1); if ( !( @@ -4033,83 +4046,93 @@ export class KipperParser extends Parser { public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 40: + case 16: + return this.compoundStatement_sempred(_localctx as CompoundStatementContext, predIndex); + + case 43: return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); - case 53: + case 56: return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); - case 54: + case 57: return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); - case 55: + case 58: return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); - case 56: + case 59: return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); - case 57: + case 60: return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); - case 58: + case 61: return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; } - private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { + private compoundStatement_sempred(_localctx: CompoundStatementContext, predIndex: number): boolean { switch (predIndex) { case 0: + return this.notInsideExpressionStatement(); + } + return true; + } + private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 1: return this.precpred(this._ctx, 5); - case 1: + case 2: return this.precpred(this._ctx, 3); - case 2: + case 3: return this.precpred(this._ctx, 2); - case 3: + case 4: return this.precpred(this._ctx, 1); } return true; } private multiplicativeExpression_sempred(_localctx: MultiplicativeExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 4: + case 5: return this.precpred(this._ctx, 1); } return true; } private additiveExpression_sempred(_localctx: AdditiveExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 5: + case 6: return this.precpred(this._ctx, 1); } return true; } private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 6: + case 7: return this.precpred(this._ctx, 1); } return true; } private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 7: + case 8: return this.precpred(this._ctx, 1); } return true; } private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 8: + case 9: return this.precpred(this._ctx, 1); } return true; } private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 9: + case 10: return this.precpred(this._ctx, 1); } return true; @@ -4117,7 +4140,7 @@ export class KipperParser extends Parser { private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03N\u0255\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03N\u027A\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -4127,271 +4150,291 @@ export class KipperParser extends Parser { "\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + "\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x044" + "\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + - "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x03" + - "\x02\x05\x02\x8C\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\x91\n\x03\r\x03" + - "\x0E\x03\x92\x03\x04\x03\x04\x03\x05\x06\x05\x98\n\x05\r\x05\x0E\x05\x99" + - "\x03\x06\x03\x06\x03\x06\x05\x06\x9F\n\x06\x03\x07\x03\x07\x03\x07\x03" + - "\x07\x03\x07\x05\x07\xA6\n\x07\x05\x07\xA8\n\x07\x03\b\x03\b\x03\b\x03" + - "\b\x05\b\xAE\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\xB4\n\b\x03\t\x03\t\x03" + - "\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05" + - "\r\xC4\n\r\x03\x0E\x03\x0E\x03\x0E\x07\x0E\xC9\n\x0E\f\x0E\x0E\x0E\xCC" + - "\v\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11" + - "\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\xDA\n\x11\x03\x12\x03\x12\x05" + - "\x12\xDE\n\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14" + - "\x05\x14\xE7\n\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x05\x15\xF0\n\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + - "\x07\x16\xF8\n\x16\f\x16\x0E\x16\xFB\v\x16\x03\x16\x03\x16\x03\x17\x03" + - "\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x05\x17\u0107\n\x17" + - "\x03\x18\x03\x18\x03\x18\x05\x18\u010C\n\x18\x03\x19\x03\x19\x03\x19\x03" + - "\x19\x05\x19\u0112\n\x19\x03\x19\x03\x19\x05\x19\u0116\n\x19\x03\x19\x03" + - "\x19\x03\x19\x03\x19\x05\x19\u011C\n\x19\x03\x19\x03\x19\x03\x19\x03\x19" + - "\x05\x19\u0122\n\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03" + - "\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03" + - "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D\u013A\n\x1D" + - "\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + - "\x03\x1E\x05\x1E\u0146\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03" + - ' \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x07$\u0156\n$\f$\x0E$\u0159' + - "\v$\x03$\x03$\x03$\x07$\u015E\n$\f$\x0E$\u0161\v$\x03$\x05$\u0164\n$\x03" + - "%\x03%\x03%\x05%\u0169\n%\x03%\x05%\u016C\n%\x03&\x03&\x03&\x05&\u0171" + - "\n&\x03&\x05&\u0174\n&\x03'\x03'\x03(\x03(\x03(\x03(\x07(\u017C\n(\f" + - "(\x0E(\u017F\v(\x05(\u0181\n(\x03(\x03(\x03)\x03)\x03*\x03*\x03*\x03*" + - "\x03*\x03*\x05*\u018D\n*\x03*\x03*\x03*\x05*\u0192\n*\x03*\x03*\x03*\x05" + - "*\u0197\n*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + - "*\x03*\x03*\x07*\u01A7\n*\f*\x0E*\u01AA\v*\x03+\x03+\x03+\x07+\u01AF\n" + - "+\f+\x0E+\u01B2\v+\x03,\x03,\x03,\x03-\x03-\x03-\x03-\x03.\x03.\x03.\x03" + - ".\x05.\u01BF\n.\x03.\x03.\x03.\x03.\x05.\u01C5\n.\x03.\x03.\x03/\x03/" + - "\x05/\u01CB\n/\x030\x030\x030\x031\x031\x031\x051\u01D3\n1\x032\x032\x03" + - "2\x033\x033\x033\x034\x034\x035\x035\x036\x036\x036\x036\x036\x056\u01E4" + - "\n6\x037\x037\x037\x037\x037\x037\x077\u01EC\n7\f7\x0E7\u01EF\v7\x038" + - "\x038\x038\x038\x038\x038\x078\u01F7\n8\f8\x0E8\u01FA\v8\x039\x039\x03" + - "9\x039\x039\x039\x079\u0202\n9\f9\x0E9\u0205\v9\x03:\x03:\x03:\x03:\x03" + - ":\x03:\x07:\u020D\n:\f:\x0E:\u0210\v:\x03;\x03;\x03;\x03;\x03;\x03;\x07" + - ";\u0218\n;\f;\x0E;\u021B\v;\x03<\x03<\x03<\x03<\x03<\x03<\x07<\u0223\n" + - "<\f<\x0E<\u0226\v<\x03=\x03=\x03=\x03=\x03=\x03=\x03=\x05=\u022F\n=\x03" + - ">\x03>\x03>\x03>\x03>\x05>\u0236\n>\x03?\x03?\x03@\x03@\x03@\x07@\u023D" + - "\n@\f@\x0E@\u0240\v@\x03A\x03A\x03A\x05A\u0245\nA\x03B\x03B\x03C\x03C" + - "\x03C\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x03E\x03E\x03E\x02\x02\tRlnp" + - "rtvF\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + - '\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02' + - "(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02" + - "D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02" + - "`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02z\x02" + - "|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x02\x10\x03\x02\x06" + - "\x07\x03\x02\r\x0E\x03\x02\x19\x1A\x03\x02DE\x04\x02CCFF\x03\x02\x1C\x1E" + - "\x04\x02++--\x05\x02**,,44\x03\x02.1\x04\x02**,,\x03\x02=@\x03\x02;<\x03" + - "\x025:\x04\x02\x1C\x1EBB\x02\u0255\x02\x8B\x03\x02\x02\x02\x04\x90\x03" + - "\x02\x02\x02\x06\x94\x03\x02\x02\x02\b\x97\x03\x02\x02\x02\n\x9E\x03\x02" + - "\x02\x02\f\xA7\x03\x02\x02\x02\x0E\xA9\x03\x02\x02\x02\x10\xB5\x03\x02" + - "\x02\x02\x12\xB8\x03\x02\x02\x02\x14\xBA\x03\x02\x02\x02\x16\xBC\x03\x02" + - "\x02\x02\x18\xBE\x03\x02\x02\x02\x1A\xC5\x03\x02\x02\x02\x1C\xCD\x03\x02" + - '\x02\x02\x1E\xD1\x03\x02\x02\x02 \xD9\x03\x02\x02\x02"\xDB\x03\x02\x02' + - "\x02$\xE1\x03\x02\x02\x02&\xE6\x03\x02\x02\x02(\xE8\x03\x02\x02\x02*\xF1" + - "\x03\x02\x02\x02,\u0106\x03\x02\x02\x02.\u010B\x03\x02\x02\x020\u010D" + - "\x03\x02\x02\x022\u0126\x03\x02\x02\x024\u012C\x03\x02\x02\x026\u0134" + - "\x03\x02\x02\x028\u0137\x03\x02\x02\x02:\u0145\x03\x02\x02\x02<\u0147" + - "\x03\x02\x02\x02>\u014B\x03\x02\x02\x02@\u014D\x03\x02\x02\x02B\u014F" + - "\x03\x02\x02\x02D\u0151\x03\x02\x02\x02F\u0163\x03\x02\x02\x02H\u016B" + - "\x03\x02\x02\x02J\u0173\x03\x02\x02\x02L\u0175\x03\x02\x02\x02N\u0177" + - "\x03\x02\x02\x02P\u0184\x03\x02\x02\x02R\u0191\x03\x02\x02\x02T\u01AB" + - "\x03\x02\x02\x02V\u01B3\x03\x02\x02\x02X\u01B6\x03\x02\x02\x02Z\u01BA" + - "\x03\x02\x02\x02\\\u01CA\x03\x02\x02\x02^\u01CC\x03\x02\x02\x02`\u01D2" + - "\x03\x02\x02\x02b\u01D4\x03\x02\x02\x02d\u01D7\x03\x02\x02\x02f\u01DA" + - "\x03\x02\x02\x02h\u01DC\x03\x02\x02\x02j\u01E3\x03\x02\x02\x02l\u01E5" + - "\x03\x02\x02\x02n\u01F0\x03\x02\x02\x02p\u01FB\x03\x02\x02\x02r\u0206" + - "\x03\x02\x02\x02t\u0211\x03\x02\x02\x02v\u021C\x03\x02\x02\x02x\u022E" + - "\x03\x02\x02\x02z\u0235\x03\x02\x02\x02|\u0237\x03\x02\x02\x02~\u0239" + - "\x03\x02\x02\x02\x80\u0244\x03\x02\x02\x02\x82\u0246\x03\x02\x02\x02\x84" + - "\u0248\x03\x02\x02\x02\x86\u024D\x03\x02\x02\x02\x88\u0252\x03\x02\x02" + - "\x02\x8A\x8C\x05\x04\x03\x02\x8B\x8A\x03\x02\x02\x02\x8B\x8C\x03\x02\x02" + - "\x02\x8C\x8D\x03\x02\x02\x02\x8D\x8E\x07\x02\x02\x03\x8E\x03\x03\x02\x02" + - "\x02\x8F\x91\x05\x06\x04\x02\x90\x8F\x03\x02\x02\x02\x91\x92\x03\x02\x02" + - "\x02\x92\x90\x03\x02\x02\x02\x92\x93\x03\x02\x02\x02\x93\x05\x03\x02\x02" + - "\x02\x94\x95\x05\b\x05\x02\x95\x07\x03\x02\x02\x02\x96\x98\x05\n\x06\x02" + - "\x97\x96\x03\x02\x02\x02\x98\x99\x03\x02\x02\x02\x99\x97\x03\x02\x02\x02" + - "\x99\x9A\x03\x02\x02\x02\x9A\t\x03\x02\x02\x02\x9B\x9F\x05 \x11\x02\x9C" + - "\x9F\x05\f\x07\x02\x9D\x9F\x07 \x02\x02\x9E\x9B\x03\x02\x02\x02\x9E\x9C" + - "\x03\x02\x02\x02\x9E\x9D\x03\x02\x02\x02\x9F\v\x03\x02\x02\x02\xA0\xA1" + - "\x05\x10\t\x02\xA1\xA2\x07 \x02\x02\xA2\xA8\x03\x02\x02\x02\xA3\xA5\x05" + - "\x0E\b\x02\xA4\xA6\x07 \x02\x02\xA5\xA4\x03\x02\x02\x02\xA5\xA6\x03\x02" + - "\x02\x02\xA6\xA8\x03\x02\x02\x02\xA7\xA0\x03\x02\x02\x02\xA7\xA3\x03\x02" + - "\x02\x02\xA8\r\x03\x02\x02\x02\xA9\xAA\x07\x15\x02\x02\xAA\xAB\x05\x14" + - "\v\x02\xAB\xAD\x07#\x02\x02\xAC\xAE\x05\x1A\x0E\x02\xAD\xAC\x03\x02\x02" + - "\x02\xAD\xAE\x03\x02\x02\x02\xAE\xAF\x03\x02\x02\x02\xAF\xB0\x07$\x02" + - '\x02\xB0\xB1\x07\x18\x02\x02\xB1\xB3\x05\x80A\x02\xB2\xB4\x05"\x12\x02' + - "\xB3\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4\x0F\x03\x02\x02\x02" + - "\xB5\xB6\x05\x12\n\x02\xB6\xB7\x05\x18\r\x02\xB7\x11\x03\x02\x02\x02\xB8" + - "\xB9\t\x02\x02\x02\xB9\x13\x03\x02\x02\x02\xBA\xBB\x05\x16\f\x02\xBB\x15" + - "\x03\x02\x02\x02\xBC\xBD\x07B\x02\x02\xBD\x17\x03\x02\x02\x02\xBE\xBF" + - '\x05\x14\v\x02\xBF\xC0\x07"\x02\x02\xC0\xC3\x05\x80A\x02\xC1\xC2\x07' + - "5\x02\x02\xC2\xC4\x05\x1E\x10\x02\xC3\xC1\x03\x02\x02\x02\xC3\xC4\x03" + - "\x02\x02\x02\xC4\x19\x03\x02\x02\x02\xC5\xCA\x05\x1C\x0F\x02\xC6\xC7\x07" + - "\x1F\x02\x02\xC7\xC9\x05\x1C\x0F\x02\xC8\xC6\x03\x02\x02\x02\xC9\xCC\x03" + - "\x02\x02\x02\xCA\xC8\x03\x02\x02\x02\xCA\xCB\x03\x02\x02\x02\xCB\x1B\x03" + - "\x02\x02\x02\xCC\xCA\x03\x02\x02\x02\xCD\xCE\x05\x14\v\x02\xCE\xCF\x07" + - '"\x02\x02\xCF\xD0\x05\x80A\x02\xD0\x1D\x03\x02\x02\x02\xD1\xD2\x05z>' + - '\x02\xD2\x1F\x03\x02\x02\x02\xD3\xDA\x05"\x12\x02\xD4\xDA\x05$\x13\x02' + - "\xD5\xDA\x05&\x14\x02\xD6\xDA\x05.\x18\x02\xD7\xDA\x056\x1C\x02\xD8\xDA" + - "\x058\x1D\x02\xD9\xD3\x03\x02\x02\x02\xD9\xD4\x03\x02\x02\x02\xD9\xD5" + - "\x03\x02\x02\x02\xD9\xD6\x03\x02\x02\x02\xD9\xD7\x03\x02\x02\x02\xD9\xD8" + - "\x03\x02\x02\x02\xDA!\x03\x02\x02\x02\xDB\xDD\x07(\x02\x02\xDC\xDE\x05" + - "\b\x05\x02\xDD\xDC\x03\x02\x02\x02\xDD\xDE\x03\x02\x02\x02\xDE\xDF\x03" + - "\x02\x02\x02\xDF\xE0\x07)\x02\x02\xE0#\x03\x02\x02\x02\xE1\xE2\x05~@\x02" + - "\xE2\xE3\x07 \x02\x02\xE3%\x03\x02\x02\x02\xE4\xE7\x05(\x15\x02\xE5\xE7" + - "\x05*\x16\x02\xE6\xE4\x03\x02\x02\x02\xE6\xE5\x03\x02\x02\x02\xE7'\x03" + - "\x02\x02\x02\xE8\xE9\x07\x11\x02\x02\xE9\xEA\x07#\x02\x02\xEA\xEB\x05" + - "~@\x02\xEB\xEC\x07$\x02\x02\xEC\xEF\x05 \x11\x02\xED\xEE\x07\x12\x02\x02" + - "\xEE\xF0\x05 \x11\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02" + - "\xF0)\x03\x02\x02\x02\xF1\xF2\x07\n\x02\x02\xF2\xF3\x07#\x02\x02\xF3\xF4" + - "\x05~@\x02\xF4\xF5\x07$\x02\x02\xF5\xF9\x07(\x02\x02\xF6\xF8\x05,\x17" + - "\x02\xF7\xF6\x03\x02\x02\x02\xF8\xFB\x03\x02\x02\x02\xF9\xF7\x03\x02\x02" + - "\x02\xF9\xFA\x03\x02\x02\x02\xFA\xFC\x03\x02\x02\x02\xFB\xF9\x03\x02\x02" + - "\x02\xFC\xFD\x07)\x02\x02\xFD+\x03\x02\x02\x02\xFE\xFF\x07\v\x02\x02\xFF" + - '\u0100\x05~@\x02\u0100\u0101\x07"\x02\x02\u0101\u0102\x05 \x11\x02\u0102' + - '\u0107\x03\x02\x02\x02\u0103\u0104\x07\f\x02\x02\u0104\u0105\x07"\x02' + - "\x02\u0105\u0107\x05 \x11\x02\u0106\xFE\x03\x02\x02\x02\u0106\u0103\x03" + - "\x02\x02\x02\u0107-\x03\x02\x02\x02\u0108\u010C\x050\x19\x02\u0109\u010C" + - "\x052\x1A\x02\u010A\u010C\x054\x1B\x02\u010B\u0108\x03\x02\x02\x02\u010B" + - "\u0109\x03\x02\x02\x02\u010B\u010A\x03\x02\x02\x02\u010C/\x03\x02\x02" + - "\x02\u010D\u010E\x07\x13\x02\x02\u010E\u0115\x07#\x02\x02\u010F\u0112" + - "\x05\x10\t\x02\u0110\u0112\x05~@\x02\u0111\u010F\x03\x02\x02\x02\u0111" + - "\u0110\x03\x02\x02\x02\u0112\u0113\x03\x02\x02\x02\u0113\u0114\b\x19\x01" + - "\x02\u0114\u0116\x03\x02\x02\x02\u0115\u0111\x03\x02\x02\x02\u0115\u0116" + - "\x03\x02\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117\u011B\x07 \x02\x02" + - "\u0118\u0119\x05~@\x02\u0119\u011A\b\x19\x01\x02\u011A\u011C\x03\x02\x02" + - "\x02\u011B\u0118\x03\x02\x02\x02\u011B\u011C\x03\x02\x02\x02\u011C\u011D" + - "\x03\x02\x02\x02\u011D\u0121\x07 \x02\x02\u011E\u011F\x05~@\x02\u011F" + - "\u0120\b\x19\x01\x02\u0120\u0122\x03\x02\x02\x02\u0121\u011E\x03\x02\x02" + - "\x02\u0121\u0122\x03\x02\x02\x02\u0122\u0123\x03\x02\x02\x02\u0123\u0124" + - "\x07$\x02\x02\u0124\u0125\x05 \x11\x02\u01251\x03\x02\x02\x02\u0126\u0127" + - "\x07\x10\x02\x02\u0127\u0128\x07#\x02\x02\u0128\u0129\x05~@\x02\u0129" + - "\u012A\x07$\x02\x02\u012A\u012B\x05 \x11\x02\u012B3\x03\x02\x02\x02\u012C" + - "\u012D\x07\x0F\x02\x02\u012D\u012E\x05 \x11\x02\u012E\u012F\x07\x10\x02" + - "\x02\u012F\u0130\x07#\x02\x02\u0130\u0131\x05~@\x02\u0131\u0132\x07$\x02" + - "\x02\u0132\u0133\x07 \x02\x02\u01335\x03\x02\x02\x02\u0134\u0135\t\x03" + - "\x02\x02\u0135\u0136\x07 \x02\x02\u01367\x03\x02\x02\x02\u0137\u0139\x07" + - "\x16\x02\x02\u0138\u013A\x05~@\x02\u0139\u0138\x03\x02\x02\x02\u0139\u013A" + - "\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02\u013B\u013C\x07 \x02\x02" + - "\u013C9\x03\x02\x02\x02\u013D\u0146\x05<\x1F\x02\u013E\u0146\x05> \x02" + - "\u013F\u0146\x05@!\x02\u0140\u0146\x05D#\x02\u0141\u0146\x05F$\x02\u0142" + - "\u0146\x05L'\x02\u0143\u0146\x05N(\x02\u0144\u0146\x05P)\x02\u0145\u013D" + - "\x03\x02\x02\x02\u0145\u013E\x03\x02\x02\x02\u0145\u013F\x03\x02\x02\x02" + - "\u0145\u0140\x03\x02\x02\x02\u0145\u0141\x03\x02\x02\x02\u0145\u0142\x03" + - "\x02\x02\x02\u0145\u0143\x03\x02\x02\x02\u0145\u0144\x03\x02\x02\x02\u0146" + - ";\x03\x02\x02\x02\u0147\u0148\x07#\x02\x02\u0148\u0149\x05~@\x02\u0149" + - "\u014A\x07$\x02\x02\u014A=\x03\x02\x02\x02\u014B\u014C\t\x04\x02\x02\u014C" + - '?\x03\x02\x02\x02\u014D\u014E\x05B"\x02\u014EA\x03\x02\x02\x02\u014F' + - "\u0150\x07B\x02\x02\u0150C\x03\x02\x02\x02\u0151\u0152\t\x05\x02\x02\u0152" + - "E\x03\x02\x02\x02\u0153\u0157\x07I\x02\x02\u0154\u0156\x05H%\x02\u0155" + - "\u0154\x03\x02\x02\x02\u0156\u0159\x03\x02\x02\x02\u0157\u0155\x03\x02" + - "\x02\x02\u0157\u0158\x03\x02\x02\x02\u0158\u015A\x03\x02\x02\x02\u0159" + - "\u0157\x03\x02\x02\x02\u015A\u0164\x07K\x02\x02\u015B\u015F\x07J\x02\x02" + - "\u015C\u015E\x05J&\x02\u015D\u015C\x03\x02\x02\x02\u015E\u0161\x03\x02" + - "\x02\x02\u015F\u015D\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02\u0160" + - "\u0162\x03\x02\x02\x02\u0161\u015F\x03\x02\x02\x02\u0162\u0164\x07M\x02" + - "\x02\u0163\u0153\x03\x02\x02\x02\u0163\u015B\x03\x02\x02\x02\u0164G\x03" + - "\x02\x02\x02\u0165\u016C\x07L\x02\x02\u0166\u0168\x07\x03\x02\x02\u0167" + - "\u0169\x05~@\x02\u0168\u0167\x03\x02\x02\x02\u0168\u0169\x03\x02\x02\x02" + - "\u0169\u016A\x03\x02\x02\x02\u016A\u016C\x07'\x02\x02\u016B\u0165\x03" + - "\x02\x02\x02\u016B\u0166\x03\x02\x02\x02\u016CI\x03\x02\x02\x02\u016D" + - "\u0174\x07N\x02\x02\u016E\u0170\x07\x03\x02\x02\u016F\u0171\x05~@\x02" + - "\u0170\u016F\x03\x02\x02\x02\u0170\u0171\x03\x02\x02\x02\u0171\u0172\x03" + - "\x02\x02\x02\u0172\u0174\x07'\x02\x02\u0173\u016D\x03\x02\x02\x02\u0173" + - "\u016E\x03\x02\x02\x02\u0174K\x03\x02\x02\x02\u0175\u0176\t\x06\x02\x02" + - "\u0176M\x03\x02\x02\x02\u0177\u0180\x07%\x02\x02\u0178\u017D\x05~@\x02" + - "\u0179\u017A\x07\x1F\x02\x02\u017A\u017C\x05~@\x02\u017B\u0179\x03\x02" + - "\x02\x02\u017C\u017F\x03\x02\x02\x02\u017D\u017B\x03\x02\x02\x02\u017D" + - "\u017E\x03\x02\x02\x02\u017E\u0181\x03\x02\x02\x02\u017F\u017D\x03\x02" + - "\x02\x02\u0180\u0178\x03\x02\x02\x02\u0180\u0181\x03\x02\x02\x02\u0181" + - "\u0182\x03\x02\x02\x02\u0182\u0183\x07&\x02\x02\u0183O\x03\x02\x02\x02" + - "\u0184\u0185\t\x07\x02\x02\u0185Q\x03\x02\x02\x02\u0186\u0187\b*\x01\x02" + - "\u0187\u0192\x05:\x1E\x02\u0188\u0189\x07\x17\x02\x02\u0189\u018A\x05" + - "R*\x02\u018A\u018C\x07#\x02\x02\u018B\u018D\x05T+\x02\u018C\u018B\x03" + - "\x02\x02\x02\u018C\u018D\x03\x02\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E" + - "\u018F\x07$\x02\x02\u018F\u0190\b*\x01\x02\u0190\u0192\x03\x02\x02\x02" + - "\u0191\u0186\x03\x02\x02\x02\u0191\u0188\x03\x02\x02\x02\u0192\u01A8\x03" + - "\x02\x02\x02\u0193\u0194\f\x07\x02\x02\u0194\u0196\x07#\x02\x02\u0195" + - "\u0197\x05T+\x02\u0196\u0195\x03\x02\x02\x02\u0196\u0197\x03\x02\x02\x02" + - "\u0197\u0198\x03\x02\x02\x02\u0198\u0199\x07$\x02\x02\u0199\u01A7\b*\x01" + - "\x02\u019A\u019B\f\x05\x02\x02\u019B\u019C\x05V,\x02\u019C\u019D\b*\x01" + - "\x02\u019D\u01A7\x03\x02\x02\x02\u019E\u019F\f\x04\x02\x02\u019F\u01A0" + - "\x05X-\x02\u01A0\u01A1\b*\x01\x02\u01A1\u01A7\x03\x02\x02\x02\u01A2\u01A3" + - "\f\x03\x02\x02\u01A3\u01A4\x05Z.\x02\u01A4\u01A5\b*\x01\x02\u01A5\u01A7" + - "\x03\x02\x02\x02\u01A6\u0193\x03\x02\x02\x02\u01A6\u019A\x03\x02\x02\x02" + - "\u01A6\u019E\x03\x02\x02\x02\u01A6\u01A2\x03\x02\x02\x02\u01A7\u01AA\x03" + - "\x02\x02\x02\u01A8\u01A6\x03\x02\x02\x02\u01A8\u01A9\x03\x02\x02\x02\u01A9" + - "S\x03\x02\x02\x02\u01AA\u01A8\x03\x02\x02\x02\u01AB\u01B0\x05z>\x02\u01AC" + - "\u01AD\x07\x1F\x02\x02\u01AD\u01AF\x05z>\x02\u01AE\u01AC\x03\x02\x02\x02" + - "\u01AF\u01B2\x03\x02\x02\x02\u01B0\u01AE\x03\x02\x02\x02\u01B0\u01B1\x03" + - "\x02\x02\x02\u01B1U\x03\x02\x02\x02\u01B2\u01B0\x03\x02\x02\x02\u01B3" + - '\u01B4\x07A\x02\x02\u01B4\u01B5\x05B"\x02\u01B5W\x03\x02\x02\x02\u01B6' + - "\u01B7\x07%\x02\x02\u01B7\u01B8\x05~@\x02\u01B8\u01B9\x07&\x02\x02\u01B9" + - "Y\x03\x02\x02\x02\u01BA\u01BE\x07%\x02\x02\u01BB\u01BC\x05~@\x02\u01BC" + - "\u01BD\b.\x01\x02\u01BD\u01BF\x03\x02\x02\x02\u01BE\u01BB\x03\x02\x02" + - "\x02\u01BE\u01BF\x03\x02\x02\x02\u01BF\u01C0\x03\x02\x02\x02\u01C0\u01C4" + - '\x07"\x02\x02\u01C1\u01C2\x05~@\x02\u01C2\u01C3\b.\x01\x02\u01C3\u01C5' + - "\x03\x02\x02\x02\u01C4\u01C1\x03\x02\x02\x02\u01C4\u01C5\x03\x02\x02\x02" + - "\u01C5\u01C6\x03\x02\x02\x02\u01C6\u01C7\x07&\x02\x02\u01C7[\x03\x02\x02" + - "\x02\u01C8\u01CB\x05R*\x02\u01C9\u01CB\x05^0\x02\u01CA\u01C8\x03\x02\x02" + - "\x02\u01CA\u01C9\x03\x02\x02\x02\u01CB]\x03\x02\x02\x02\u01CC\u01CD\x05" + - "R*\x02\u01CD\u01CE\x05f4\x02\u01CE_\x03\x02\x02\x02\u01CF\u01D3\x05\\" + - "/\x02\u01D0\u01D3\x05b2\x02\u01D1\u01D3\x05d3\x02\u01D2\u01CF\x03\x02" + - "\x02\x02\u01D2\u01D0\x03\x02\x02\x02\u01D2\u01D1\x03\x02\x02\x02\u01D3" + - "a\x03\x02\x02\x02\u01D4\u01D5\x05f4\x02\u01D5\u01D6\x05\\/\x02\u01D6c" + - "\x03\x02\x02\x02\u01D7\u01D8\x05h5\x02\u01D8\u01D9\x05\\/\x02\u01D9e\x03" + - "\x02\x02\x02\u01DA\u01DB\t\b\x02\x02\u01DBg\x03\x02\x02\x02\u01DC\u01DD" + - "\t\t\x02\x02\u01DDi\x03\x02\x02\x02\u01DE\u01E4\x05`1\x02\u01DF\u01E0" + - "\x05`1\x02\u01E0\u01E1\x07\b\x02\x02\u01E1\u01E2\x05\x80A\x02\u01E2\u01E4" + - "\x03\x02\x02\x02\u01E3\u01DE\x03\x02\x02\x02\u01E3\u01DF\x03\x02\x02\x02" + - "\u01E4k\x03\x02\x02\x02\u01E5\u01E6\b7\x01\x02\u01E6\u01E7\x05j6\x02\u01E7" + - "\u01ED\x03\x02\x02\x02\u01E8\u01E9\f\x03\x02\x02\u01E9\u01EA\t\n\x02\x02" + - "\u01EA\u01EC\x05j6\x02\u01EB\u01E8\x03\x02\x02\x02\u01EC\u01EF\x03\x02" + - "\x02\x02\u01ED\u01EB\x03\x02\x02\x02\u01ED\u01EE\x03\x02\x02\x02\u01EE" + - "m\x03\x02\x02\x02\u01EF\u01ED\x03\x02\x02\x02\u01F0\u01F1\b8\x01\x02\u01F1" + - "\u01F2\x05l7\x02\u01F2\u01F8\x03\x02\x02\x02\u01F3\u01F4\f\x03\x02\x02" + - "\u01F4\u01F5\t\v\x02\x02\u01F5\u01F7\x05l7\x02\u01F6\u01F3\x03\x02\x02" + - "\x02\u01F7\u01FA\x03\x02\x02\x02\u01F8\u01F6\x03\x02\x02\x02\u01F8\u01F9" + - "\x03\x02\x02\x02\u01F9o\x03\x02\x02\x02\u01FA\u01F8\x03\x02\x02\x02\u01FB" + - "\u01FC\b9\x01\x02\u01FC\u01FD\x05n8\x02\u01FD\u0203\x03\x02\x02\x02\u01FE" + - "\u01FF\f\x03\x02\x02\u01FF\u0200\t\f\x02\x02\u0200\u0202\x05n8\x02\u0201" + - "\u01FE\x03\x02\x02\x02\u0202\u0205\x03\x02\x02\x02\u0203\u0201\x03\x02" + - "\x02\x02\u0203\u0204\x03\x02\x02\x02\u0204q\x03\x02\x02\x02\u0205\u0203" + - "\x03\x02\x02\x02\u0206\u0207\b:\x01\x02\u0207\u0208\x05p9\x02\u0208\u020E" + - "\x03\x02\x02\x02\u0209\u020A\f\x03\x02\x02\u020A\u020B\t\r\x02\x02\u020B" + - "\u020D\x05p9\x02\u020C\u0209\x03\x02\x02\x02\u020D\u0210\x03\x02\x02\x02" + - "\u020E\u020C\x03\x02\x02\x02\u020E\u020F\x03\x02\x02\x02\u020Fs\x03\x02" + - "\x02\x02\u0210\u020E\x03\x02\x02\x02\u0211\u0212\b;\x01\x02\u0212\u0213" + - "\x05r:\x02\u0213\u0219\x03\x02\x02\x02\u0214\u0215\f\x03\x02\x02\u0215" + - "\u0216\x072\x02\x02\u0216\u0218\x05r:\x02\u0217\u0214\x03\x02\x02\x02" + - "\u0218\u021B\x03\x02\x02\x02\u0219\u0217\x03\x02\x02\x02\u0219\u021A\x03" + - "\x02\x02\x02\u021Au\x03\x02\x02\x02\u021B\u0219\x03\x02\x02\x02\u021C" + - "\u021D\b<\x01\x02\u021D\u021E\x05t;\x02\u021E\u0224\x03\x02\x02\x02\u021F" + - "\u0220\f\x03\x02\x02\u0220\u0221\x073\x02\x02\u0221\u0223\x05t;\x02\u0222" + - "\u021F\x03\x02\x02\x02\u0223\u0226\x03\x02\x02\x02\u0224\u0222\x03\x02" + - "\x02\x02\u0224\u0225\x03\x02\x02\x02\u0225w\x03\x02\x02\x02\u0226\u0224" + - "\x03\x02\x02\x02\u0227\u022F\x05v<\x02\u0228\u0229\x05v<\x02\u0229\u022A" + - '\x07!\x02\x02\u022A\u022B\x05x=\x02\u022B\u022C\x07"\x02\x02\u022C\u022D' + - "\x05x=\x02\u022D\u022F\x03\x02\x02\x02\u022E\u0227\x03\x02\x02\x02\u022E" + - "\u0228\x03\x02\x02\x02\u022Fy\x03\x02\x02\x02\u0230\u0236\x05x=\x02\u0231" + - "\u0232\x05R*\x02\u0232\u0233\x05|?\x02\u0233\u0234\x05z>\x02\u0234\u0236" + - "\x03\x02\x02\x02\u0235\u0230\x03\x02\x02\x02\u0235\u0231\x03\x02\x02\x02" + - "\u0236{\x03\x02\x02\x02\u0237\u0238\t\x0E\x02\x02\u0238}\x03\x02\x02\x02" + - "\u0239\u023E\x05z>\x02\u023A\u023B\x07\x1F\x02\x02\u023B\u023D\x05z>\x02" + - "\u023C\u023A\x03\x02\x02\x02\u023D\u0240\x03\x02\x02\x02\u023E\u023C\x03" + - "\x02\x02\x02\u023E\u023F\x03\x02\x02\x02\u023F\x7F\x03\x02\x02\x02\u0240" + - "\u023E\x03\x02\x02\x02\u0241\u0245\x05\x82B\x02\u0242\u0245\x05\x84C\x02" + - "\u0243\u0245\x05\x86D\x02\u0244\u0241\x03\x02\x02\x02\u0244\u0242\x03" + - "\x02\x02\x02\u0244\u0243\x03\x02\x02\x02\u0245\x81\x03\x02\x02\x02\u0246" + - "\u0247\x05\x88E\x02\u0247\x83\x03\x02\x02\x02\u0248\u0249\x05\x88E\x02" + - "\u0249\u024A\x07=\x02\x02\u024A"; + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + + "F\tF\x04G\tG\x04H\tH\x03\x02\x05\x02\x92\n\x02\x03\x02\x03\x02\x03\x03" + + "\x06\x03\x97\n\x03\r\x03\x0E\x03\x98\x03\x04\x03\x04\x03\x05\x06\x05\x9E" + + "\n\x05\r\x05\x0E\x05\x9F\x03\x06\x03\x06\x03\x06\x05\x06\xA5\n\x06\x03" + + "\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\xAC\n\x07\x05\x07\xAE\n\x07" + + "\x03\b\x03\b\x03\b\x03\b\x05\b\xB4\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\xBA" + + "\n\b\x03\t\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\r\x03\r" + + "\x03\r\x03\r\x03\r\x05\r\xCA\n\r\x03\x0E\x03\x0E\x03\x0E\x07\x0E\xCF\n" + + "\x0E\f\x0E\x0E\x0E\xD2\v\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03" + + "\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\xE0\n\x11" + + "\x03\x12\x03\x12\x03\x12\x05\x12\xE5\n\x12\x03\x12\x03\x12\x03\x13\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x05\x14\xF0\n\x14\x03\x15" + + "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15\xF9\n\x15\x03" + + "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u0101\n\x16\f\x16" + + "\x0E\x16\u0104\v\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03" + + "\x17\x03\x17\x03\x17\x03\x17\x05\x17\u0110\n\x17\x03\x18\x03\x18\x03\x18" + + "\x05\x18\u0115\n\x18\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u011B\n\x19" + + "\x03\x19\x03\x19\x05\x19\u011F\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05" + + "\x19\u0125\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u012B\n\x19\x03" + + "\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03" + + "\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03" + + "\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D\u0143\n\x1D\x03\x1D\x03\x1D\x03\x1E" + + "\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05\x1E" + + '\u0150\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03"' + + '\x03"\x03#\x03#\x05#\u015E\n#\x03$\x03$\x03%\x03%\x07%\u0164\n%\f%\x0E' + + "%\u0167\v%\x03%\x03%\x03%\x07%\u016C\n%\f%\x0E%\u016F\v%\x03%\x05%\u0172" + + "\n%\x03&\x03&\x03&\x05&\u0177\n&\x03&\x05&\u017A\n&\x03'\x03'\x03'" + + "\x05'\u017F\n'\x03'\x05'\u0182\n'\x03(\x03(\x03)\x03)\x03)\x03)\x07" + + ")\u018A\n)\f)\x0E)\u018D\v)\x05)\u018F\n)\x03)\x05)\u0192\n)\x03)\x03" + + ")\x03*\x03*\x03*\x03*\x07*\u019A\n*\f*\x0E*\u019D\v*\x05*\u019F\n*\x03" + + "*\x05*\u01A2\n*\x03*\x03*\x03+\x03+\x03+\x03+\x03,\x03,\x03-\x03-\x03" + + "-\x03-\x03-\x03-\x05-\u01B2\n-\x03-\x03-\x03-\x05-\u01B7\n-\x03-\x03-" + + "\x03-\x05-\u01BC\n-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-" + + "\x03-\x03-\x03-\x03-\x07-\u01CC\n-\f-\x0E-\u01CF\v-\x03.\x03.\x03.\x07" + + ".\u01D4\n.\f.\x0E.\u01D7\v.\x03/\x03/\x03/\x030\x030\x030\x030\x031\x03" + + "1\x031\x031\x051\u01E4\n1\x031\x031\x031\x031\x051\u01EA\n1\x031\x031" + + "\x032\x032\x052\u01F0\n2\x033\x033\x033\x034\x034\x034\x054\u01F8\n4\x03" + + "5\x035\x035\x036\x036\x036\x037\x037\x038\x038\x039\x039\x039\x039\x03" + + "9\x059\u0209\n9\x03:\x03:\x03:\x03:\x03:\x03:\x07:\u0211\n:\f:\x0E:\u0214" + + "\v:\x03;\x03;\x03;\x03;\x03;\x03;\x07;\u021C\n;\f;\x0E;\u021F\v;\x03<" + + "\x03<\x03<\x03<\x03<\x03<\x07<\u0227\n<\f<\x0E<\u022A\v<\x03=\x03=\x03" + + "=\x03=\x03=\x03=\x07=\u0232\n=\f=\x0E=\u0235\v=\x03>\x03>\x03>\x03>\x03" + + ">\x03>\x07>\u023D\n>\f>\x0E>\u0240\v>\x03?\x03?\x03?\x03?\x03?\x03?\x07" + + "?\u0248\n?\f?\x0E?\u024B\v?\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x05@\u0254" + + "\n@\x03A\x03A\x03A\x03A\x03A\x05A\u025B\nA\x03B\x03B\x03C\x03C\x03C\x07" + + "C\u0262\nC\fC\x0EC\u0265\vC\x03D\x03D\x03D\x05D\u026A\nD\x03E\x03E\x03" + + "F\x03F\x03F\x03F\x03F\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x02\x02" + + "\tXrtvxz|I\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12" + + '\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02$\x02&' + + "\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02" + + "B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02" + + "^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02" + + "z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C\x02" + + "\x8E\x02\x02\x10\x03\x02\x06\x07\x03\x02\r\x0E\x03\x02\x19\x1A\x03\x02" + + "DE\x04\x02CCFF\x03\x02\x1C\x1E\x04\x02++--\x05\x02**,,44\x03\x02.1\x04" + + "\x02**,,\x03\x02=@\x03\x02;<\x03\x025:\x04\x02\x1C\x1EBB\x02\u027D\x02" + + "\x91\x03\x02\x02\x02\x04\x96\x03\x02\x02\x02\x06\x9A\x03\x02\x02\x02\b" + + "\x9D\x03\x02\x02\x02\n\xA4\x03\x02\x02\x02\f\xAD\x03\x02\x02\x02\x0E\xAF" + + "\x03\x02\x02\x02\x10\xBB\x03\x02\x02\x02\x12\xBE\x03\x02\x02\x02\x14\xC0" + + "\x03\x02\x02\x02\x16\xC2\x03\x02\x02\x02\x18\xC4\x03\x02\x02\x02\x1A\xCB" + + "\x03\x02\x02\x02\x1C\xD3\x03\x02\x02\x02\x1E\xD7\x03\x02\x02\x02 \xDF" + + '\x03\x02\x02\x02"\xE1\x03\x02\x02\x02$\xE8\x03\x02\x02\x02&\xEF\x03\x02' + + "\x02\x02(\xF1\x03\x02\x02\x02*\xFA\x03\x02\x02\x02,\u010F\x03\x02\x02" + + "\x02.\u0114\x03\x02\x02\x020\u0116\x03\x02\x02\x022\u012F\x03\x02\x02" + + "\x024\u0135\x03\x02\x02\x026\u013D\x03\x02\x02\x028\u0140\x03\x02\x02" + + "\x02:\u014F\x03\x02\x02\x02<\u0151\x03\x02\x02\x02>\u0155\x03\x02\x02" + + "\x02@\u0157\x03\x02\x02\x02B\u0159\x03\x02\x02\x02D\u015D\x03\x02\x02" + + "\x02F\u015F\x03\x02\x02\x02H\u0171\x03\x02\x02\x02J\u0179\x03\x02\x02" + + "\x02L\u0181\x03\x02\x02\x02N\u0183\x03\x02\x02\x02P\u0185\x03\x02\x02" + + "\x02R\u0195\x03\x02\x02\x02T\u01A5\x03\x02\x02\x02V\u01A9\x03\x02\x02" + + "\x02X\u01B6\x03\x02\x02\x02Z\u01D0\x03\x02\x02\x02\\\u01D8\x03\x02\x02" + + "\x02^\u01DB\x03\x02\x02\x02`\u01DF\x03\x02\x02\x02b\u01EF\x03\x02\x02" + + "\x02d\u01F1\x03\x02\x02\x02f\u01F7\x03\x02\x02\x02h\u01F9\x03\x02\x02" + + "\x02j\u01FC\x03\x02\x02\x02l\u01FF\x03\x02\x02\x02n\u0201\x03\x02\x02" + + "\x02p\u0208\x03\x02\x02\x02r\u020A\x03\x02\x02\x02t\u0215\x03\x02\x02" + + "\x02v\u0220\x03\x02\x02\x02x\u022B\x03\x02\x02\x02z\u0236\x03\x02\x02" + + "\x02|\u0241\x03\x02\x02\x02~\u0253\x03\x02\x02\x02\x80\u025A\x03\x02\x02" + + "\x02\x82\u025C\x03\x02\x02\x02\x84\u025E\x03\x02\x02\x02\x86\u0269\x03" + + "\x02\x02\x02\x88\u026B\x03\x02\x02\x02\x8A\u026D\x03\x02\x02\x02\x8C\u0272" + + "\x03\x02\x02\x02\x8E\u0277\x03\x02\x02\x02\x90\x92\x05\x04\x03\x02\x91" + + "\x90\x03\x02\x02\x02\x91\x92\x03\x02\x02\x02\x92\x93\x03\x02\x02\x02\x93" + + "\x94\x07\x02\x02\x03\x94\x03\x03\x02\x02\x02\x95\x97\x05\x06\x04\x02\x96" + + "\x95\x03\x02\x02\x02\x97\x98\x03\x02\x02\x02\x98\x96\x03\x02\x02\x02\x98" + + "\x99\x03\x02\x02\x02\x99\x05\x03\x02\x02\x02\x9A\x9B\x05\b\x05\x02\x9B" + + "\x07\x03\x02\x02\x02\x9C\x9E\x05\n\x06\x02\x9D\x9C\x03\x02\x02\x02\x9E" + + "\x9F\x03\x02\x02\x02\x9F\x9D\x03\x02\x02\x02\x9F\xA0\x03\x02\x02\x02\xA0" + + "\t\x03\x02\x02\x02\xA1\xA5\x05 \x11\x02\xA2\xA5\x05\f\x07\x02\xA3\xA5" + + "\x07 \x02\x02\xA4\xA1\x03\x02\x02\x02\xA4\xA2\x03\x02\x02\x02\xA4\xA3" + + "\x03\x02\x02\x02\xA5\v\x03\x02\x02\x02\xA6\xA7\x05\x10\t\x02\xA7\xA8\x07" + + " \x02\x02\xA8\xAE\x03\x02\x02\x02\xA9\xAB\x05\x0E\b\x02\xAA\xAC\x07 \x02" + + "\x02\xAB\xAA\x03\x02\x02\x02\xAB\xAC\x03\x02\x02\x02\xAC\xAE\x03\x02\x02" + + "\x02\xAD\xA6\x03\x02\x02\x02\xAD\xA9\x03\x02\x02\x02\xAE\r\x03\x02\x02" + + "\x02\xAF\xB0\x07\x15\x02\x02\xB0\xB1\x05\x14\v\x02\xB1\xB3\x07#\x02\x02" + + "\xB2\xB4\x05\x1A\x0E\x02\xB3\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02" + + "\xB4\xB5\x03\x02\x02\x02\xB5\xB6\x07$\x02\x02\xB6\xB7\x07\x18\x02\x02" + + '\xB7\xB9\x05\x86D\x02\xB8\xBA\x05"\x12\x02\xB9\xB8\x03\x02\x02\x02\xB9' + + "\xBA\x03\x02\x02\x02\xBA\x0F\x03\x02\x02\x02\xBB\xBC\x05\x12\n\x02\xBC" + + "\xBD\x05\x18\r\x02\xBD\x11\x03\x02\x02\x02\xBE\xBF\t\x02\x02\x02\xBF\x13" + + "\x03\x02\x02\x02\xC0\xC1\x05\x16\f\x02\xC1\x15\x03\x02\x02\x02\xC2\xC3" + + "\x07B\x02\x02\xC3\x17\x03\x02\x02\x02\xC4\xC5\x05\x14\v\x02\xC5\xC6\x07" + + '"\x02\x02\xC6\xC9\x05\x86D\x02\xC7\xC8\x075\x02\x02\xC8\xCA\x05\x1E\x10' + + "\x02\xC9\xC7\x03\x02\x02\x02\xC9\xCA\x03\x02\x02\x02\xCA\x19\x03\x02\x02" + + "\x02\xCB\xD0\x05\x1C\x0F\x02\xCC\xCD\x07\x1F\x02\x02\xCD\xCF\x05\x1C\x0F" + + "\x02\xCE\xCC\x03\x02\x02\x02\xCF\xD2\x03\x02\x02\x02\xD0\xCE\x03\x02\x02" + + "\x02\xD0\xD1\x03\x02\x02\x02\xD1\x1B\x03\x02\x02\x02\xD2\xD0\x03\x02\x02" + + '\x02\xD3\xD4\x05\x14\v\x02\xD4\xD5\x07"\x02\x02\xD5\xD6\x05\x86D\x02' + + "\xD6\x1D\x03\x02\x02\x02\xD7\xD8\x05\x80A\x02\xD8\x1F\x03\x02\x02\x02" + + "\xD9\xE0\x05$\x13\x02\xDA\xE0\x05&\x14\x02\xDB\xE0\x05.\x18\x02\xDC\xE0" + + '\x056\x1C\x02\xDD\xE0\x058\x1D\x02\xDE\xE0\x05"\x12\x02\xDF\xD9\x03\x02' + + "\x02\x02\xDF\xDA\x03\x02\x02\x02\xDF\xDB\x03\x02\x02\x02\xDF\xDC\x03\x02" + + "\x02\x02\xDF\xDD\x03\x02\x02\x02\xDF\xDE\x03\x02\x02\x02\xE0!\x03\x02" + + "\x02\x02\xE1\xE2\x06\x12\x02\x02\xE2\xE4\x07(\x02\x02\xE3\xE5\x05\b\x05" + + "\x02\xE4\xE3\x03\x02\x02\x02\xE4\xE5\x03\x02\x02\x02\xE5\xE6\x03\x02\x02" + + "\x02\xE6\xE7\x07)\x02\x02\xE7#\x03\x02\x02\x02\xE8\xE9\b\x13\x01\x02\xE9" + + "\xEA\x05\x84C\x02\xEA\xEB\x07 \x02\x02\xEB\xEC\b\x13\x01\x02\xEC%\x03" + + "\x02\x02\x02\xED\xF0\x05(\x15\x02\xEE\xF0\x05*\x16\x02\xEF\xED\x03\x02" + + "\x02\x02\xEF\xEE\x03\x02\x02\x02\xF0'\x03\x02\x02\x02\xF1\xF2\x07\x11" + + "\x02\x02\xF2\xF3\x07#\x02\x02\xF3\xF4\x05\x84C\x02\xF4\xF5\x07$\x02\x02" + + "\xF5\xF8\x05 \x11\x02\xF6\xF7\x07\x12\x02\x02\xF7\xF9\x05 \x11\x02\xF8" + + "\xF6\x03\x02\x02\x02\xF8\xF9\x03\x02\x02\x02\xF9)\x03\x02\x02\x02\xFA" + + "\xFB\x07\n\x02\x02\xFB\xFC\x07#\x02\x02\xFC\xFD\x05\x84C\x02\xFD\xFE\x07" + + "$\x02\x02\xFE\u0102\x07(\x02\x02\xFF\u0101\x05,\x17\x02\u0100\xFF\x03" + + "\x02\x02\x02\u0101\u0104\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0102" + + "\u0103\x03\x02\x02\x02\u0103\u0105\x03\x02\x02\x02\u0104\u0102\x03\x02" + + "\x02\x02\u0105\u0106\x07)\x02\x02\u0106+\x03\x02\x02\x02\u0107\u0108\x07" + + '\v\x02\x02\u0108\u0109\x05\x84C\x02\u0109\u010A\x07"\x02\x02\u010A\u010B' + + "\x05 \x11\x02\u010B\u0110\x03\x02\x02\x02\u010C\u010D\x07\f\x02\x02\u010D" + + '\u010E\x07"\x02\x02\u010E\u0110\x05 \x11\x02\u010F\u0107\x03\x02\x02' + + "\x02\u010F\u010C\x03\x02\x02\x02\u0110-\x03\x02\x02\x02\u0111\u0115\x05" + + "0\x19\x02\u0112\u0115\x052\x1A\x02\u0113\u0115\x054\x1B\x02\u0114\u0111" + + "\x03\x02\x02\x02\u0114\u0112\x03\x02\x02\x02\u0114\u0113\x03\x02\x02\x02" + + "\u0115/\x03\x02\x02\x02\u0116\u0117\x07\x13\x02\x02\u0117\u011E\x07#\x02" + + "\x02\u0118\u011B\x05\x10\t\x02\u0119\u011B\x05\x84C\x02\u011A\u0118\x03" + + "\x02\x02\x02\u011A\u0119\x03\x02\x02\x02\u011B\u011C\x03\x02\x02\x02\u011C" + + "\u011D\b\x19\x01\x02\u011D\u011F\x03\x02\x02\x02\u011E\u011A\x03\x02\x02" + + "\x02\u011E\u011F\x03\x02\x02\x02\u011F\u0120\x03\x02\x02\x02\u0120\u0124" + + "\x07 \x02\x02\u0121\u0122\x05\x84C\x02\u0122\u0123\b\x19\x01\x02\u0123" + + "\u0125\x03\x02\x02\x02\u0124\u0121\x03\x02\x02\x02\u0124\u0125\x03\x02" + + "\x02\x02\u0125\u0126\x03\x02\x02\x02\u0126\u012A\x07 \x02\x02\u0127\u0128" + + "\x05\x84C\x02\u0128\u0129\b\x19\x01\x02\u0129\u012B\x03\x02\x02\x02\u012A" + + "\u0127\x03\x02\x02\x02\u012A\u012B\x03\x02\x02\x02\u012B\u012C\x03\x02" + + "\x02\x02\u012C\u012D\x07$\x02\x02\u012D\u012E\x05 \x11\x02\u012E1\x03" + + "\x02\x02\x02\u012F\u0130\x07\x10\x02\x02\u0130\u0131\x07#\x02\x02\u0131" + + "\u0132\x05\x84C\x02\u0132\u0133\x07$\x02\x02\u0133\u0134\x05 \x11\x02" + + "\u01343\x03\x02\x02\x02\u0135\u0136\x07\x0F\x02\x02\u0136\u0137\x05 \x11" + + "\x02\u0137\u0138\x07\x10\x02\x02\u0138\u0139\x07#\x02\x02\u0139\u013A" + + "\x05\x84C\x02\u013A\u013B\x07$\x02\x02\u013B\u013C\x07 \x02\x02\u013C" + + "5\x03\x02\x02\x02\u013D\u013E\t\x03\x02\x02\u013E\u013F\x07 \x02\x02\u013F" + + "7\x03\x02\x02\x02\u0140\u0142\x07\x16\x02\x02\u0141\u0143\x05\x84C\x02" + + "\u0142\u0141\x03\x02\x02\x02\u0142\u0143\x03\x02\x02\x02\u0143\u0144\x03" + + "\x02\x02\x02\u0144\u0145\x07 \x02\x02\u01459\x03\x02\x02\x02\u0146\u0150" + + "\x05<\x1F\x02\u0147\u0150\x05P)\x02\u0148\u0150\x05R*\x02\u0149\u0150" + + "\x05> \x02\u014A\u0150\x05@!\x02\u014B\u0150\x05F$\x02\u014C\u0150\x05" + + "H%\x02\u014D\u0150\x05N(\x02\u014E\u0150\x05V,\x02\u014F\u0146\x03\x02" + + "\x02\x02\u014F\u0147\x03\x02\x02\x02\u014F\u0148\x03\x02\x02\x02\u014F" + + "\u0149\x03\x02\x02\x02\u014F\u014A\x03\x02\x02\x02\u014F\u014B\x03\x02" + + "\x02\x02\u014F\u014C\x03\x02\x02\x02\u014F\u014D\x03\x02\x02\x02\u014F" + + "\u014E\x03\x02\x02\x02\u0150;\x03\x02\x02\x02\u0151\u0152\x07#\x02\x02" + + "\u0152\u0153\x05\x84C\x02\u0153\u0154\x07$\x02\x02\u0154=\x03\x02\x02" + + "\x02\u0155\u0156\t\x04\x02\x02\u0156?\x03\x02\x02\x02\u0157\u0158\x05" + + 'B"\x02\u0158A\x03\x02\x02\x02\u0159\u015A\x07B\x02\x02\u015AC\x03\x02' + + '\x02\x02\u015B\u015E\x05B"\x02\u015C\u015E\x05F$\x02\u015D\u015B\x03' + + "\x02\x02\x02\u015D\u015C\x03\x02\x02\x02\u015EE\x03\x02\x02\x02\u015F" + + "\u0160\t\x05\x02\x02\u0160G\x03\x02\x02\x02\u0161\u0165\x07I\x02\x02\u0162" + + "\u0164\x05J&\x02\u0163\u0162\x03\x02\x02\x02\u0164\u0167\x03\x02\x02\x02" + + "\u0165\u0163\x03\x02\x02\x02\u0165\u0166\x03\x02\x02\x02\u0166\u0168\x03" + + "\x02\x02\x02\u0167\u0165\x03\x02\x02\x02\u0168\u0172\x07K\x02\x02\u0169" + + "\u016D\x07J\x02\x02\u016A\u016C\x05L'\x02\u016B\u016A\x03\x02\x02\x02" + + "\u016C\u016F\x03\x02\x02\x02\u016D\u016B\x03\x02\x02\x02\u016D\u016E\x03" + + "\x02\x02\x02\u016E\u0170\x03\x02\x02\x02\u016F\u016D\x03\x02\x02\x02\u0170" + + "\u0172\x07M\x02\x02\u0171\u0161\x03\x02\x02\x02\u0171\u0169\x03\x02\x02" + + "\x02\u0172I\x03\x02\x02\x02\u0173\u017A\x07L\x02\x02\u0174\u0176\x07\x03" + + "\x02\x02\u0175\u0177\x05\x84C\x02\u0176\u0175\x03\x02\x02\x02\u0176\u0177" + + "\x03\x02\x02\x02\u0177\u0178\x03\x02\x02\x02\u0178\u017A\x07'\x02\x02" + + "\u0179\u0173\x03\x02\x02\x02\u0179\u0174\x03\x02\x02\x02\u017AK\x03\x02" + + "\x02\x02\u017B\u0182\x07N\x02\x02\u017C\u017E\x07\x03\x02\x02\u017D\u017F" + + "\x05\x84C\x02\u017E\u017D\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02" + + "\u017F\u0180\x03\x02\x02\x02\u0180\u0182\x07'\x02\x02\u0181\u017B\x03" + + "\x02\x02\x02\u0181\u017C\x03\x02\x02\x02\u0182M\x03\x02\x02\x02\u0183" + + "\u0184\t\x06\x02\x02\u0184O\x03\x02\x02\x02\u0185\u018E\x07%\x02\x02\u0186" + + "\u018B\x05\x84C\x02\u0187\u0188\x07\x1F\x02\x02\u0188\u018A\x05\x84C\x02" + + "\u0189\u0187\x03\x02\x02\x02\u018A\u018D\x03\x02\x02\x02\u018B\u0189\x03" + + "\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C\u018F\x03\x02\x02\x02\u018D" + + "\u018B\x03\x02\x02\x02\u018E\u0186\x03\x02\x02\x02\u018E\u018F\x03\x02" + + "\x02\x02\u018F\u0191\x03\x02\x02\x02\u0190\u0192\x07\x1F\x02\x02\u0191" + + "\u0190\x03\x02\x02\x02\u0191\u0192\x03\x02\x02\x02\u0192\u0193\x03\x02" + + "\x02\x02\u0193\u0194\x07&\x02\x02\u0194Q\x03\x02\x02\x02\u0195\u019E\x07" + + "(\x02\x02\u0196\u019B\x05T+\x02\u0197\u0198\x07\x1F\x02\x02\u0198\u019A" + + "\x05T+\x02\u0199\u0197\x03\x02\x02\x02\u019A\u019D\x03\x02\x02\x02\u019B" + + "\u0199\x03\x02\x02\x02\u019B\u019C\x03\x02\x02\x02\u019C\u019F\x03\x02" + + "\x02\x02\u019D\u019B\x03\x02\x02\x02\u019E\u0196\x03\x02\x02\x02\u019E" + + "\u019F\x03\x02\x02\x02\u019F\u01A1\x03\x02\x02\x02\u01A0\u01A2\x07\x1F" + + "\x02\x02\u01A1\u01A0\x03\x02\x02\x02\u01A1\u01A2\x03\x02\x02\x02\u01A2" + + "\u01A3\x03\x02\x02\x02\u01A3\u01A4\x07)\x02\x02\u01A4S\x03\x02\x02\x02" + + '\u01A5\u01A6\x05D#\x02\u01A6\u01A7\x07"\x02\x02\u01A7\u01A8\x05\x84C' + + "\x02\u01A8U\x03\x02\x02\x02\u01A9\u01AA\t\x07\x02\x02\u01AAW\x03\x02\x02" + + "\x02\u01AB\u01AC\b-\x01\x02\u01AC\u01B7\x05:\x1E\x02\u01AD\u01AE\x07\x17" + + "\x02\x02\u01AE\u01AF\x05X-\x02\u01AF\u01B1\x07#\x02\x02\u01B0\u01B2\x05" + + "Z.\x02\u01B1\u01B0\x03\x02\x02\x02\u01B1\u01B2\x03\x02\x02\x02\u01B2\u01B3" + + "\x03\x02\x02\x02\u01B3\u01B4\x07$\x02\x02\u01B4\u01B5\b-\x01\x02\u01B5" + + "\u01B7\x03\x02\x02\x02\u01B6\u01AB\x03\x02\x02\x02\u01B6\u01AD\x03\x02" + + "\x02\x02\u01B7\u01CD\x03\x02\x02\x02\u01B8\u01B9\f\x07\x02\x02\u01B9\u01BB" + + "\x07#\x02\x02\u01BA\u01BC\x05Z.\x02\u01BB\u01BA\x03\x02\x02\x02\u01BB" + + "\u01BC\x03\x02\x02\x02\u01BC\u01BD\x03\x02\x02\x02\u01BD\u01BE\x07$\x02" + + "\x02\u01BE\u01CC\b-\x01\x02\u01BF\u01C0\f\x05\x02\x02\u01C0\u01C1\x05" + + "\\/\x02\u01C1\u01C2\b-\x01\x02\u01C2\u01CC\x03\x02\x02\x02\u01C3\u01C4" + + "\f\x04\x02\x02\u01C4\u01C5\x05^0\x02\u01C5\u01C6\b-\x01\x02\u01C6\u01CC" + + "\x03\x02\x02\x02\u01C7\u01C8\f\x03\x02\x02\u01C8\u01C9\x05`1\x02\u01C9" + + "\u01CA\b-\x01\x02\u01CA\u01CC\x03\x02\x02\x02\u01CB\u01B8\x03\x02\x02" + + "\x02\u01CB\u01BF\x03\x02\x02\x02\u01CB\u01C3\x03\x02\x02\x02\u01CB\u01C7" + + "\x03\x02\x02\x02\u01CC\u01CF\x03\x02\x02\x02\u01CD\u01CB\x03\x02\x02\x02" + + "\u01CD\u01CE\x03\x02\x02\x02\u01CEY\x03\x02\x02\x02\u01CF\u01CD\x03\x02" + + "\x02\x02\u01D0\u01D5\x05\x80A\x02\u01D1\u01D2\x07\x1F\x02\x02\u01D2\u01D4" + + "\x05\x80A\x02\u01D3\u01D1\x03\x02\x02\x02\u01D4\u01D7\x03\x02\x02\x02" + + "\u01D5\u01D3\x03\x02\x02\x02\u01D5\u01D6\x03\x02\x02\x02\u01D6[\x03\x02" + + "\x02\x02\u01D7\u01D5\x03\x02\x02\x02\u01D8\u01D9\x07A\x02\x02\u01D9\u01DA" + + '\x05B"\x02\u01DA]\x03\x02\x02\x02\u01DB\u01DC\x07%\x02\x02\u01DC\u01DD' + + "\x05\x84C\x02\u01DD\u01DE\x07&\x02\x02\u01DE_\x03\x02\x02\x02\u01DF\u01E3" + + "\x07%\x02\x02\u01E0\u01E1\x05\x84C\x02\u01E1\u01E2\b1\x01\x02\u01E2\u01E4" + + "\x03\x02\x02\x02\u01E3\u01E0\x03\x02\x02\x02\u01E3\u01E4\x03\x02\x02\x02" + + '\u01E4\u01E5\x03\x02\x02\x02\u01E5\u01E9\x07"\x02\x02\u01E6\u01E7\x05' + + "\x84C\x02\u01E7\u01E8\b1\x01\x02\u01E8\u01EA\x03\x02\x02\x02\u01E9\u01E6" + + "\x03\x02\x02\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EB\x03\x02\x02\x02" + + "\u01EB\u01EC\x07&\x02\x02\u01ECa\x03\x02\x02\x02\u01ED\u01F0\x05X-\x02" + + "\u01EE\u01F0\x05d3\x02\u01EF\u01ED\x03\x02\x02\x02\u01EF\u01EE\x03\x02" + + "\x02\x02\u01F0c\x03\x02\x02\x02\u01F1\u01F2\x05X-\x02\u01F2\u01F3\x05" + + "l7\x02\u01F3e\x03\x02\x02\x02\u01F4\u01F8\x05b2\x02\u01F5\u01F8\x05h5" + + "\x02\u01F6\u01F8\x05j6\x02\u01F7\u01F4\x03\x02\x02\x02\u01F7\u01F5\x03" + + "\x02\x02\x02\u01F7\u01F6\x03\x02\x02\x02\u01F8g\x03\x02\x02\x02\u01F9" + + "\u01FA\x05l7\x02\u01FA\u01FB\x05b2\x02\u01FBi\x03\x02\x02\x02\u01FC\u01FD" + + "\x05n8\x02\u01FD\u01FE\x05b2\x02\u01FEk\x03\x02\x02\x02\u01FF\u0200\t" + + "\b\x02\x02\u0200m\x03\x02\x02\x02\u0201\u0202\t\t\x02\x02\u0202o\x03\x02" + + "\x02\x02\u0203\u0209\x05f4\x02\u0204\u0205\x05f4\x02\u0205\u0206\x07\b" + + "\x02\x02\u0206\u0207\x05\x86D\x02\u0207\u0209\x03\x02\x02\x02\u0208\u0203" + + "\x03\x02\x02\x02\u0208\u0204\x03\x02\x02\x02\u0209q\x03\x02\x02\x02\u020A" + + "\u020B\b:\x01\x02\u020B\u020C\x05p9\x02\u020C\u0212\x03\x02\x02\x02\u020D" + + "\u020E\f\x03\x02\x02\u020E\u020F\t\n\x02\x02\u020F\u0211\x05p9\x02\u0210" + + "\u020D\x03\x02\x02\x02\u0211\u0214\x03\x02\x02\x02\u0212\u0210\x03\x02" + + "\x02\x02\u0212\u0213\x03\x02\x02\x02\u0213s\x03\x02\x02\x02\u0214\u0212" + + "\x03\x02\x02\x02\u0215\u0216\b;\x01\x02\u0216\u0217\x05r:\x02\u0217\u021D" + + "\x03\x02\x02\x02\u0218\u0219\f\x03\x02\x02\u0219\u021A\t\v\x02\x02\u021A" + + "\u021C\x05r:\x02\u021B\u0218\x03\x02\x02\x02\u021C\u021F\x03\x02\x02\x02" + + "\u021D\u021B\x03\x02\x02\x02\u021D\u021E\x03\x02\x02\x02\u021Eu\x03\x02" + + "\x02\x02\u021F\u021D\x03\x02\x02\x02\u0220\u0221\b<\x01\x02\u0221\u0222" + + "\x05t;\x02\u0222\u0228\x03\x02\x02\x02\u0223\u0224\f\x03\x02\x02\u0224" + + "\u0225\t\f\x02\x02\u0225\u0227\x05t;\x02\u0226\u0223\x03\x02\x02\x02\u0227" + + "\u022A\x03\x02\x02\x02\u0228\u0226\x03\x02\x02\x02\u0228\u0229\x03\x02" + + "\x02\x02\u0229w\x03\x02\x02\x02\u022A\u0228\x03\x02\x02\x02\u022B\u022C" + + "\b=\x01\x02\u022C\u022D\x05v<\x02\u022D\u0233\x03\x02\x02\x02\u022E\u022F" + + "\f\x03\x02\x02\u022F\u0230\t\r\x02\x02\u0230\u0232\x05v<\x02\u0231\u022E" + + "\x03\x02\x02\x02\u0232\u0235\x03\x02\x02\x02\u0233\u0231\x03\x02\x02\x02" + + "\u0233\u0234\x03\x02\x02\x02\u0234y\x03\x02\x02\x02\u0235\u0233\x03\x02" + + "\x02\x02\u0236\u0237\b>\x01\x02\u0237\u0238\x05x=\x02\u0238\u023E\x03" + + "\x02\x02\x02\u0239\u023A\f\x03\x02\x02\u023A\u023B\x072\x02\x02\u023B" + + "\u023D\x05x=\x02\u023C\u0239\x03\x02\x02\x02\u023D\u0240\x03\x02\x02\x02" + + "\u023E\u023C\x03\x02\x02\x02\u023E\u023F\x03\x02\x02"; private static readonly _serializedATNSegment1: string = - "\u024B\x05\x88E\x02\u024B\u024C\x07?\x02\x02\u024C\x85\x03\x02\x02\x02" + - "\u024D\u024E\x07\x1B\x02\x02\u024E\u024F\x07#\x02\x02\u024F\u0250\x05" + - "\x88E\x02\u0250\u0251\x07$\x02\x02\u0251\x87\x03\x02\x02\x02\u0252\u0253" + - "\t\x0F\x02\x02\u0253\x89\x03\x02\x02\x027\x8B\x92\x99\x9E\xA5\xA7\xAD" + - "\xB3\xC3\xCA\xD9\xDD\xE6\xEF\xF9\u0106\u010B\u0111\u0115\u011B\u0121\u0139" + - "\u0145\u0157\u015F\u0163\u0168\u016B\u0170\u0173\u017D\u0180\u018C\u0191" + - "\u0196\u01A6\u01A8\u01B0\u01BE\u01C4\u01CA\u01D2\u01E3\u01ED\u01F8\u0203" + - "\u020E\u0219\u0224\u022E\u0235\u023E\u0244"; + "\x02\u023F{\x03\x02\x02\x02\u0240\u023E\x03\x02\x02\x02\u0241\u0242\b" + + "?\x01\x02\u0242\u0243\x05z>\x02\u0243\u0249\x03\x02\x02\x02\u0244\u0245" + + "\f\x03\x02\x02\u0245\u0246\x073\x02\x02\u0246\u0248\x05z>\x02\u0247\u0244" + + "\x03\x02\x02\x02\u0248\u024B\x03\x02\x02\x02\u0249\u0247\x03\x02\x02\x02" + + "\u0249\u024A\x03\x02\x02\x02\u024A}\x03\x02\x02\x02\u024B\u0249\x03\x02" + + "\x02\x02\u024C\u0254\x05|?\x02\u024D\u024E\x05|?\x02\u024E\u024F\x07!" + + '\x02\x02\u024F\u0250\x05~@\x02\u0250\u0251\x07"\x02\x02\u0251\u0252\x05' + + "~@\x02\u0252\u0254\x03\x02\x02\x02\u0253\u024C\x03\x02\x02\x02\u0253\u024D" + + "\x03\x02\x02\x02\u0254\x7F\x03\x02\x02\x02\u0255\u025B\x05~@\x02\u0256" + + "\u0257\x05X-\x02\u0257\u0258\x05\x82B\x02\u0258\u0259\x05\x80A\x02\u0259" + + "\u025B\x03\x02\x02\x02\u025A\u0255\x03\x02\x02\x02\u025A\u0256\x03\x02" + + "\x02\x02\u025B\x81\x03\x02\x02\x02\u025C\u025D\t\x0E\x02\x02\u025D\x83" + + "\x03\x02\x02\x02\u025E\u0263\x05\x80A\x02\u025F\u0260\x07\x1F\x02\x02" + + "\u0260\u0262\x05\x80A\x02\u0261\u025F\x03\x02\x02\x02\u0262\u0265\x03" + + "\x02\x02\x02\u0263\u0261\x03\x02\x02\x02\u0263\u0264\x03\x02\x02\x02\u0264" + + "\x85\x03\x02\x02\x02\u0265\u0263\x03\x02\x02\x02\u0266\u026A\x05\x88E" + + "\x02\u0267\u026A\x05\x8AF\x02\u0268\u026A\x05\x8CG\x02\u0269\u0266\x03" + + "\x02\x02\x02\u0269\u0267\x03\x02\x02\x02\u0269\u0268\x03\x02\x02\x02\u026A" + + "\x87\x03\x02\x02\x02\u026B\u026C\x05\x8EH\x02\u026C\x89\x03\x02\x02\x02" + + "\u026D\u026E\x05\x8EH\x02\u026E\u026F\x07=\x02\x02\u026F\u0270\x05\x8E" + + "H\x02\u0270\u0271\x07?\x02\x02\u0271\x8B\x03\x02\x02\x02\u0272\u0273\x07" + + "\x1B\x02\x02\u0273\u0274\x07#\x02\x02\u0274\u0275\x05\x8EH\x02\u0275\u0276" + + "\x07$\x02\x02\u0276\x8D\x03\x02\x02\x02\u0277\u0278\t\x0F\x02\x02\u0278" + + "\x8F\x03\x02\x02\x02<\x91\x98\x9F\xA4\xAB\xAD\xB3\xB9\xC9\xD0\xDF\xE4" + + "\xEF\xF8\u0102\u010F\u0114\u011A\u011E\u0124\u012A\u0142\u014F\u015D\u0165" + + "\u016D\u0171\u0176\u0179\u017E\u0181\u018B\u018E\u0191\u019B\u019E\u01A1" + + "\u01B1\u01B6\u01BB\u01CB\u01CD\u01D5\u01E3\u01E9\u01EF\u01F7\u0208\u0212" + + "\u021D\u0228\u0233\u023E\u0249\u0253\u025A\u0263\u0269"; public static readonly _serializedATN: string = Utils.join( [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", @@ -4998,9 +5041,6 @@ export class InitializerContext extends KipperParserRuleContext { } export class StatementContext extends KipperParserRuleContext { - public compoundStatement(): CompoundStatementContext | undefined { - return this.tryGetRuleContext(0, CompoundStatementContext); - } public expressionStatement(): ExpressionStatementContext | undefined { return this.tryGetRuleContext(0, ExpressionStatementContext); } @@ -5016,6 +5056,9 @@ export class StatementContext extends KipperParserRuleContext { public returnStatement(): ReturnStatementContext | undefined { return this.tryGetRuleContext(0, ReturnStatementContext); } + public compoundStatement(): CompoundStatementContext | undefined { + return this.tryGetRuleContext(0, CompoundStatementContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } @@ -5595,6 +5638,12 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { public tangledPrimaryExpression(): TangledPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, TangledPrimaryExpressionContext); } + public arrayPrimaryExpression(): ArrayPrimaryExpressionContext | undefined { + return this.tryGetRuleContext(0, ArrayPrimaryExpressionContext); + } + public objectPrimaryExpression(): ObjectPrimaryExpressionContext | undefined { + return this.tryGetRuleContext(0, ObjectPrimaryExpressionContext); + } public boolPrimaryExpression(): BoolPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, BoolPrimaryExpressionContext); } @@ -5610,9 +5659,6 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { public numberPrimaryExpression(): NumberPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, NumberPrimaryExpressionContext); } - public arrayPrimaryExpression(): ArrayPrimaryExpressionContext | undefined { - return this.tryGetRuleContext(0, ArrayPrimaryExpressionContext); - } public voidOrNullOrUndefinedPrimaryExpression(): VoidOrNullOrUndefinedPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, VoidOrNullOrUndefinedPrimaryExpressionContext); } @@ -5786,6 +5832,42 @@ export class IdentifierContext extends KipperParserRuleContext { } } +export class IdentifierOrStringPrimaryExpressionContext extends KipperParserRuleContext { + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); + } + public stringPrimaryExpression(): StringPrimaryExpressionContext | undefined { + return this.tryGetRuleContext(0, StringPrimaryExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_identifierOrStringPrimaryExpression; + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterIdentifierOrStringPrimaryExpression) { + listener.enterIdentifierOrStringPrimaryExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitIdentifierOrStringPrimaryExpression) { + listener.exitIdentifierOrStringPrimaryExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitIdentifierOrStringPrimaryExpression) { + return visitor.visitIdentifierOrStringPrimaryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + export class StringPrimaryExpressionContext extends KipperParserRuleContext { public SingleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); @@ -6056,6 +6138,99 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { } } +export class ObjectPrimaryExpressionContext extends KipperParserRuleContext { + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } + public objectProperty(): ObjectPropertyContext[]; + public objectProperty(i: number): ObjectPropertyContext; + public objectProperty(i?: number): ObjectPropertyContext | ObjectPropertyContext[] { + if (i === undefined) { + return this.getRuleContexts(ObjectPropertyContext); + } else { + return this.getRuleContext(i, ObjectPropertyContext); + } + } + public Comma(): TerminalNode[]; + public Comma(i: number): TerminalNode; + public Comma(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(KipperParser.Comma); + } else { + return this.getToken(KipperParser.Comma, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_objectPrimaryExpression; + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterObjectPrimaryExpression) { + listener.enterObjectPrimaryExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitObjectPrimaryExpression) { + listener.exitObjectPrimaryExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitObjectPrimaryExpression) { + return visitor.visitObjectPrimaryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + +export class ObjectPropertyContext extends KipperParserRuleContext { + public identifierOrStringPrimaryExpression(): IdentifierOrStringPrimaryExpressionContext { + return this.getRuleContext(0, IdentifierOrStringPrimaryExpressionContext); + } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_objectProperty; + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterObjectProperty) { + listener.enterObjectProperty(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitObjectProperty) { + listener.exitObjectProperty(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitObjectProperty) { + return visitor.visitObjectProperty(this); + } else { + return visitor.visitChildren(this); + } + } +} + export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserRuleContext { public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts index 0de2c55ac..9969d10fc 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts @@ -3,6 +3,7 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; @@ -64,12 +65,15 @@ import { TangledPrimaryExpressionContext } from "./KipperParser"; import { BoolPrimaryExpressionContext } from "./KipperParser"; import { IdentifierPrimaryExpressionContext } from "./KipperParser"; import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; import { StringPrimaryExpressionContext } from "./KipperParser"; import { FStringPrimaryExpressionContext } from "./KipperParser"; import { FStringSingleQuoteAtomContext } from "./KipperParser"; import { FStringDoubleQuoteAtomContext } from "./KipperParser"; import { NumberPrimaryExpressionContext } from "./KipperParser"; import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; import { ComputedPrimaryExpressionContext } from "./KipperParser"; import { ArgumentExpressionListContext } from "./KipperParser"; @@ -793,6 +797,17 @@ export interface KipperParserListener extends ParseTreeListener { */ exitIdentifier?: (ctx: IdentifierContext) => void; + /** + * Enter a parse tree produced by `KipperParser.identifierOrStringPrimaryExpression`. + * @param ctx the parse tree + */ + enterIdentifierOrStringPrimaryExpression?: (ctx: IdentifierOrStringPrimaryExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.identifierOrStringPrimaryExpression`. + * @param ctx the parse tree + */ + exitIdentifierOrStringPrimaryExpression?: (ctx: IdentifierOrStringPrimaryExpressionContext) => void; + /** * Enter a parse tree produced by `KipperParser.stringPrimaryExpression`. * @param ctx the parse tree @@ -859,6 +874,28 @@ export interface KipperParserListener extends ParseTreeListener { */ exitArrayPrimaryExpression?: (ctx: ArrayPrimaryExpressionContext) => void; + /** + * Enter a parse tree produced by `KipperParser.objectPrimaryExpression`. + * @param ctx the parse tree + */ + enterObjectPrimaryExpression?: (ctx: ObjectPrimaryExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.objectPrimaryExpression`. + * @param ctx the parse tree + */ + exitObjectPrimaryExpression?: (ctx: ObjectPrimaryExpressionContext) => void; + + /** + * Enter a parse tree produced by `KipperParser.objectProperty`. + * @param ctx the parse tree + */ + enterObjectProperty?: (ctx: ObjectPropertyContext) => void; + /** + * Exit a parse tree produced by `KipperParser.objectProperty`. + * @param ctx the parse tree + */ + exitObjectProperty?: (ctx: ObjectPropertyContext) => void; + /** * Enter a parse tree produced by `KipperParser.voidOrNullOrUndefinedPrimaryExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts index ccc97c4da..1881f733d 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts @@ -3,6 +3,7 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; @@ -64,12 +65,15 @@ import { TangledPrimaryExpressionContext } from "./KipperParser"; import { BoolPrimaryExpressionContext } from "./KipperParser"; import { IdentifierPrimaryExpressionContext } from "./KipperParser"; import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; import { StringPrimaryExpressionContext } from "./KipperParser"; import { FStringPrimaryExpressionContext } from "./KipperParser"; import { FStringSingleQuoteAtomContext } from "./KipperParser"; import { FStringDoubleQuoteAtomContext } from "./KipperParser"; import { NumberPrimaryExpressionContext } from "./KipperParser"; import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; import { ComputedPrimaryExpressionContext } from "./KipperParser"; import { ArgumentExpressionListContext } from "./KipperParser"; @@ -539,6 +543,13 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitIdentifier?: (ctx: IdentifierContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.identifierOrStringPrimaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierOrStringPrimaryExpression?: (ctx: IdentifierOrStringPrimaryExpressionContext) => Result; + /** * Visit a parse tree produced by `KipperParser.stringPrimaryExpression`. * @param ctx the parse tree @@ -581,6 +592,20 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitArrayPrimaryExpression?: (ctx: ArrayPrimaryExpressionContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.objectPrimaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitObjectPrimaryExpression?: (ctx: ObjectPrimaryExpressionContext) => Result; + + /** + * Visit a parse tree produced by `KipperParser.objectProperty`. + * @param ctx the parse tree + * @return the visitor result + */ + visitObjectProperty?: (ctx: ObjectPropertyContext) => Result; + /** * Visit a parse tree produced by `KipperParser.voidOrNullOrUndefinedPrimaryExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts b/kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts new file mode 100644 index 000000000..dd2cb37dd --- /dev/null +++ b/kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts @@ -0,0 +1,27 @@ +import { Parser } from "antlr4ts/Parser"; +import { TokenStream } from "antlr4ts/TokenStream"; + +export default abstract class KipperParserBase extends Parser { + private insideExpression: boolean; + + protected constructor(input: TokenStream) { + super(input); + this.insideExpression = false; + } + + protected insideExpressionStatement(): boolean { + return this.insideExpression; + } + + protected notInsideExpressionStatement(): boolean { + return !this.insideExpression; + } + + protected enterExpressionStatement(): void { + this.insideExpression = true; + } + + protected exitExpressionStatement(): void { + this.insideExpression = false; + } +} diff --git a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts index ec4fc4ff5..4b9ba3bbd 100644 --- a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts @@ -52,44 +52,47 @@ export const ParseRuleKindMapping = { RULE_boolPrimaryExpression: 30, RULE_identifierPrimaryExpression: 31, RULE_identifier: 32, - RULE_stringPrimaryExpression: 33, - RULE_fStringPrimaryExpression: 34, - RULE_fStringSingleQuoteAtom: 35, - RULE_fStringDoubleQuoteAtom: 36, - RULE_numberPrimaryExpression: 37, - RULE_arrayPrimaryExpression: 38, - RULE_voidOrNullOrUndefinedPrimaryExpression: 39, - RULE_computedPrimaryExpression: 40, - RULE_argumentExpressionList: 41, - RULE_dotNotation: 42, - RULE_bracketNotation: 43, - RULE_sliceNotation: 44, - RULE_postfixExpression: 45, - RULE_incrementOrDecrementPostfixExpression: 46, - RULE_unaryExpression: 47, - RULE_incrementOrDecrementUnaryExpression: 48, - RULE_operatorModifiedUnaryExpression: 49, - RULE_incrementOrDecrementOperator: 50, - RULE_unaryOperator: 51, - RULE_castOrConvertExpression: 52, - RULE_multiplicativeExpression: 53, - RULE_additiveExpression: 54, - RULE_relationalExpression: 55, - RULE_equalityExpression: 56, - RULE_logicalAndExpression: 57, - RULE_logicalOrExpression: 58, - RULE_conditionalExpression: 59, - RULE_assignmentExpression: 60, - RULE_assignmentOperator: 61, - RULE_expression: 62, - RULE_typeSpecifierExpression: 63, - RULE_identifierTypeSpecifierExpression: 64, - RULE_genericTypeSpecifierExpression: 65, - RULE_typeofTypeSpecifierExpression: 66, - RULE_typeSpecifierIdentifier: 67, + RULE_identifierOrStringPrimaryExpression: 33, + RULE_stringPrimaryExpression: 34, + RULE_fStringPrimaryExpression: 35, + RULE_fStringSingleQuoteAtom: 36, + RULE_fStringDoubleQuoteAtom: 37, + RULE_numberPrimaryExpression: 38, + RULE_arrayPrimaryExpression: 39, + RULE_objectPrimaryExpression: 40, + RULE_objectProperty: 41, + RULE_voidOrNullOrUndefinedPrimaryExpression: 42, + RULE_computedPrimaryExpression: 43, + RULE_argumentExpressionList: 44, + RULE_dotNotation: 45, + RULE_bracketNotation: 46, + RULE_sliceNotation: 47, + RULE_postfixExpression: 48, + RULE_incrementOrDecrementPostfixExpression: 49, + RULE_unaryExpression: 50, + RULE_incrementOrDecrementUnaryExpression: 51, + RULE_operatorModifiedUnaryExpression: 52, + RULE_incrementOrDecrementOperator: 53, + RULE_unaryOperator: 54, + RULE_castOrConvertExpression: 55, + RULE_multiplicativeExpression: 56, + RULE_additiveExpression: 57, + RULE_relationalExpression: 58, + RULE_equalityExpression: 59, + RULE_logicalAndExpression: 60, + RULE_logicalOrExpression: 61, + RULE_conditionalExpression: 62, + RULE_assignmentExpression: 63, + RULE_assignmentOperator: 64, + RULE_expression: 65, + RULE_typeSpecifierExpression: 66, + RULE_identifierTypeSpecifierExpression: 67, + RULE_genericTypeSpecifierExpression: 68, + RULE_typeofTypeSpecifierExpression: 69, + RULE_typeSpecifierIdentifier: 70, // Labelled rules, which don't have a corresponding identifier number in KipperParser. - RULE_memberAccessExpression: 68, // -> See 'computedPrimaryExpression' - RULE_functionCallExpression: 69, // -> See 'computedPrimaryExpression' + RULE_memberAccessExpression: 71, // -> See 'computedPrimaryExpression' + RULE_functionCallExpression: 72, // -> See 'computedPrimaryExpression' } as const; /** From b3814b88d63fbd32cea30cb69506980763245812 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 27 Jun 2024 16:40:39 +0200 Subject: [PATCH 138/257] other: Prettified README.md --- kipper/cli/README.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 4cc15f778..b85a16c6d 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,17 +52,19 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -207,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper From 1b5bcac4834e7bcea382d2711f59c2006516aded Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 27 Jun 2024 16:54:09 +0200 Subject: [PATCH 139/257] other: Prettified README.md --- kipper/cli/README.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 4cc15f778..b85a16c6d 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,17 +52,19 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -207,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper From d589b7b10ee559293c97c230641d7ebc3bcc0a68 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 27 Jun 2024 16:54:50 +0200 Subject: [PATCH 140/257] fix: Fixed ts-node being missing bug in `kipper new` command --- kipper/cli/src/commands/run.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index 5284b093f..78f1273b8 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -5,7 +5,7 @@ import type { args } from "@oclif/parser"; import { flags } from "@oclif/command"; import { EvaluatedCompileConfig, KipperLogger, LogLevel } from "@kipper/core"; -import { spawn } from "child_process"; +import { fork } from "child_process"; import { CLIEmitHandler } from "../logger"; import { KipperEncodings, verifyEncoding } from "../input/"; import { prettifiedErrors } from "../decorators"; @@ -83,19 +83,23 @@ export default class Run extends Compile { }), }; + /** + * Detects the location for ts-node and returns the path to the executable. + * @private + */ + private detectTSNode(): string { + return require.resolve("ts-node/dist/bin.js"); + } + /** * Run the Kipper program in a new spawned process. * @param entryFile The file that should be executed. */ private async executeKipperProgram(entryFile: string): Promise { - const kipperProgram = spawn("ts-node", [entryFile]); + const kipperProgram = fork(this.detectTSNode(), [entryFile]); // Per default the encoding should be 'utf-8' - kipperProgram.stdin.setDefaultEncoding("utf-8"); - - // Set how to handle streams - kipperProgram.stdout.pipe(process.stdout); - kipperProgram.stderr.pipe(process.stderr); + kipperProgram.stdin?.setDefaultEncoding("utf-8"); // Close immediately after the Kipper program kipperProgram.on("close", (code: number) => process.exit(code)); From cf7b3194e50734eb2cfabef18a93763d49ca2e39 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 27 Jun 2024 17:00:37 +0200 Subject: [PATCH 141/257] release: Bumped Kipper project version to 0.11.0-alpha.5 --- CITATION.cff | 8 ++++---- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 23a8a2912..de1ac5c50 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,8 +13,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.4 - description: The GitHub release URL of tag 0.11.0-alpha.4 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.5 + description: The GitHub release URL of tag 0.11.0-alpha.5 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -31,6 +31,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/LICENSE' -version: 0.11.0-alpha.4 +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/LICENSE' +version: 0.11.0-alpha.5 date-released: '2023-08-15' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 40da9ec64..3e2dcf9a4 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.4"; +export const version = "0.11.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index c97d68af2..a274dc6d3 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.4"; +export const version = "0.11.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 5c0da1904..26d0e50a4 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.4"; +export const version = "0.11.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 7a73d9dba..2ae915fe4 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.4"; +export const version = "0.11.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index c240f185e..6e385c9e7 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.4"; +export const version = "0.11.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 8af055e54..73ba04e6a 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.4"; +export const version = "0.11.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 8209549c1a605acc9ece17163472a35ff1093bb8 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Thu, 27 Jun 2024 17:01:41 +0200 Subject: [PATCH 142/257] Release 0.11.0-alpha.5 --- kipper/cli/README.md | 37 +++++++++++++++-------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 23 insertions(+), 28 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index b85a16c6d..9ae68a37b 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,31 +39,28 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.4 linux-x64 node-v20.10.0 +@kipper/cli/0.11.0-alpha.5 linux-x64 node-v18.18.2 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -86,7 +82,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -126,7 +122,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -143,7 +139,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -160,7 +156,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -199,7 +195,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -210,8 +206,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.4/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 6f53b45e8..55eeddb74 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.11.0-alpha.4", + "version": "0.11.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run" diff --git a/kipper/config/package.json b/kipper/config/package.json index d12e57731..bfbb1d9c4 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.11.0-alpha.4", + "version": "0.11.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index c66ea7ede..71a0f95a4 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.11.0-alpha.4", + "version": "0.11.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 040657ea4..c87581161 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.4", + "version": "0.11.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index bcbcb06fb..52540e8b2 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.4", + "version": "0.11.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index 7cddf6aaf..f04a7eb71 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.11.0-alpha.4", + "version": "0.11.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index c77b5df71..4a7932570 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.11.0-alpha.4", + "version": "0.11.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 760356a59bc248c8f6a5205090d9464ffe41ae3c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 10:13:51 +0200 Subject: [PATCH 143/257] other: Prettified README.md in CLI --- kipper/cli/README.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 9ae68a37b..c88dfe760 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,17 +52,19 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -207,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper From 6bafa088a068904d7e76937bbd50cbd26305a313 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 11:22:46 +0200 Subject: [PATCH 144/257] major: Switched from manual numbers to referencing parser RULE numbers in parse-rule-kind-mapping.ts --- .../parser/parse-rule-kind-mapping.ts | 148 +++++++++--------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts index 4b9ba3bbd..1b1cc4899 100644 --- a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts @@ -4,6 +4,7 @@ */ import type { InverseMap } from "../../tools/types"; import { inverseMap } from "../../tools"; +import {KipperParser} from "./antlr"; /** * A mapping object which maps the KipperParser rules to an AST syntax kind number and in extension with the @@ -18,81 +19,80 @@ import { inverseMap } from "../../tools"; * @since 0.10.0 */ export const ParseRuleKindMapping = { - // Standard rules copied from KipperParser - RULE_compilationUnit: 0, - RULE_translationUnit: 1, - RULE_externalItem: 2, - RULE_blockItemList: 3, - RULE_blockItem: 4, - RULE_declaration: 5, - RULE_functionDeclaration: 6, - RULE_variableDeclaration: 7, - RULE_storageTypeSpecifier: 8, - RULE_declarator: 9, - RULE_directDeclarator: 10, - RULE_initDeclarator: 11, - RULE_parameterList: 12, - RULE_parameterDeclaration: 13, - RULE_initializer: 14, - RULE_statement: 15, - RULE_compoundStatement: 16, - RULE_expressionStatement: 17, - RULE_selectionStatement: 18, - RULE_ifStatement: 19, - RULE_switchStatement: 20, - RULE_switchLabeledStatement: 21, - RULE_iterationStatement: 22, - RULE_forLoopIterationStatement: 23, - RULE_whileLoopIterationStatement: 24, - RULE_doWhileLoopIterationStatement: 25, - RULE_jumpStatement: 26, - RULE_returnStatement: 27, - RULE_primaryExpression: 28, - RULE_tangledPrimaryExpression: 29, - RULE_boolPrimaryExpression: 30, - RULE_identifierPrimaryExpression: 31, - RULE_identifier: 32, - RULE_identifierOrStringPrimaryExpression: 33, - RULE_stringPrimaryExpression: 34, - RULE_fStringPrimaryExpression: 35, - RULE_fStringSingleQuoteAtom: 36, - RULE_fStringDoubleQuoteAtom: 37, - RULE_numberPrimaryExpression: 38, - RULE_arrayPrimaryExpression: 39, - RULE_objectPrimaryExpression: 40, - RULE_objectProperty: 41, - RULE_voidOrNullOrUndefinedPrimaryExpression: 42, - RULE_computedPrimaryExpression: 43, - RULE_argumentExpressionList: 44, - RULE_dotNotation: 45, - RULE_bracketNotation: 46, - RULE_sliceNotation: 47, - RULE_postfixExpression: 48, - RULE_incrementOrDecrementPostfixExpression: 49, - RULE_unaryExpression: 50, - RULE_incrementOrDecrementUnaryExpression: 51, - RULE_operatorModifiedUnaryExpression: 52, - RULE_incrementOrDecrementOperator: 53, - RULE_unaryOperator: 54, - RULE_castOrConvertExpression: 55, - RULE_multiplicativeExpression: 56, - RULE_additiveExpression: 57, - RULE_relationalExpression: 58, - RULE_equalityExpression: 59, - RULE_logicalAndExpression: 60, - RULE_logicalOrExpression: 61, - RULE_conditionalExpression: 62, - RULE_assignmentExpression: 63, - RULE_assignmentOperator: 64, - RULE_expression: 65, - RULE_typeSpecifierExpression: 66, - RULE_identifierTypeSpecifierExpression: 67, - RULE_genericTypeSpecifierExpression: 68, - RULE_typeofTypeSpecifierExpression: 69, - RULE_typeSpecifierIdentifier: 70, + RULE_compilationUnit: KipperParser.RULE_compilationUnit, + RULE_translationUnit: KipperParser.RULE_translationUnit, + RULE_externalItem: KipperParser.RULE_externalItem, + RULE_blockItemList: KipperParser.RULE_blockItemList, + RULE_blockItem: KipperParser.RULE_blockItem, + RULE_declaration: KipperParser.RULE_declaration, + RULE_functionDeclaration: KipperParser.RULE_functionDeclaration, + RULE_variableDeclaration: KipperParser.RULE_variableDeclaration, + RULE_storageTypeSpecifier: KipperParser.RULE_storageTypeSpecifier, + RULE_declarator: KipperParser.RULE_declarator, + RULE_directDeclarator: KipperParser.RULE_directDeclarator, + RULE_initDeclarator: KipperParser.RULE_initDeclarator, + RULE_parameterList: KipperParser.RULE_parameterList, + RULE_parameterDeclaration: KipperParser.RULE_parameterDeclaration, + RULE_initializer: KipperParser.RULE_initializer, + RULE_statement: KipperParser.RULE_statement, + RULE_compoundStatement: KipperParser.RULE_compoundStatement, + RULE_expressionStatement: KipperParser.RULE_expressionStatement, + RULE_selectionStatement: KipperParser.RULE_selectionStatement, + RULE_ifStatement: KipperParser.RULE_ifStatement, + RULE_switchStatement: KipperParser.RULE_switchStatement, + RULE_switchLabeledStatement: KipperParser.RULE_switchLabeledStatement, + RULE_iterationStatement: KipperParser.RULE_iterationStatement, + RULE_forLoopIterationStatement: KipperParser.RULE_forLoopIterationStatement, + RULE_whileLoopIterationStatement: KipperParser.RULE_whileLoopIterationStatement, + RULE_doWhileLoopIterationStatement: KipperParser.RULE_doWhileLoopIterationStatement, + RULE_jumpStatement: KipperParser.RULE_jumpStatement, + RULE_returnStatement: KipperParser.RULE_returnStatement, + RULE_primaryExpression: KipperParser.RULE_primaryExpression, + RULE_tangledPrimaryExpression: KipperParser.RULE_tangledPrimaryExpression, + RULE_boolPrimaryExpression: KipperParser.RULE_boolPrimaryExpression, + RULE_identifierPrimaryExpression: KipperParser.RULE_identifierPrimaryExpression, + RULE_identifier: KipperParser.RULE_identifier, + RULE_identifierOrStringPrimaryExpression: KipperParser.RULE_identifierOrStringPrimaryExpression, + RULE_stringPrimaryExpression: KipperParser.RULE_stringPrimaryExpression, + RULE_fStringPrimaryExpression: KipperParser.RULE_fStringPrimaryExpression, + RULE_fStringSingleQuoteAtom: KipperParser.RULE_fStringSingleQuoteAtom, + RULE_fStringDoubleQuoteAtom: KipperParser.RULE_fStringDoubleQuoteAtom, + RULE_numberPrimaryExpression: KipperParser.RULE_numberPrimaryExpression, + RULE_arrayPrimaryExpression: KipperParser.RULE_arrayPrimaryExpression, + RULE_objectPrimaryExpression: KipperParser.RULE_objectPrimaryExpression, + RULE_objectProperty: KipperParser.RULE_objectProperty, + RULE_voidOrNullOrUndefinedPrimaryExpression: KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression, + RULE_computedPrimaryExpression: KipperParser.RULE_computedPrimaryExpression, + RULE_argumentExpressionList: KipperParser.RULE_argumentExpressionList, + RULE_dotNotation: KipperParser.RULE_dotNotation, + RULE_bracketNotation: KipperParser.RULE_bracketNotation, + RULE_sliceNotation: KipperParser.RULE_sliceNotation, + RULE_postfixExpression: KipperParser.RULE_postfixExpression, + RULE_incrementOrDecrementPostfixExpression: KipperParser.RULE_incrementOrDecrementPostfixExpression, + RULE_unaryExpression: KipperParser.RULE_unaryExpression, + RULE_incrementOrDecrementUnaryExpression: KipperParser.RULE_incrementOrDecrementUnaryExpression, + RULE_operatorModifiedUnaryExpression: KipperParser.RULE_operatorModifiedUnaryExpression, + RULE_incrementOrDecrementOperator: KipperParser.RULE_incrementOrDecrementOperator, + RULE_unaryOperator: KipperParser.RULE_unaryOperator, + RULE_castOrConvertExpression: KipperParser.RULE_castOrConvertExpression, + RULE_multiplicativeExpression: KipperParser.RULE_multiplicativeExpression, + RULE_additiveExpression: KipperParser.RULE_additiveExpression, + RULE_relationalExpression: KipperParser.RULE_relationalExpression, + RULE_equalityExpression: KipperParser.RULE_equalityExpression, + RULE_logicalAndExpression: KipperParser.RULE_logicalAndExpression, + RULE_logicalOrExpression: KipperParser.RULE_logicalOrExpression, + RULE_conditionalExpression: KipperParser.RULE_conditionalExpression, + RULE_assignmentExpression: KipperParser.RULE_assignmentExpression, + RULE_assignmentOperator: KipperParser.RULE_assignmentOperator, + RULE_expression: KipperParser.RULE_expression, + RULE_typeSpecifierExpression: KipperParser.RULE_typeSpecifierExpression, + RULE_identifierTypeSpecifierExpression: KipperParser.RULE_identifierTypeSpecifierExpression, + RULE_genericTypeSpecifierExpression: KipperParser.RULE_genericTypeSpecifierExpression, + RULE_typeofTypeSpecifierExpression: KipperParser.RULE_typeofTypeSpecifierExpression, + RULE_typeSpecifierIdentifier: KipperParser.RULE_typeSpecifierIdentifier, // Labelled rules, which don't have a corresponding identifier number in KipperParser. - RULE_memberAccessExpression: 71, // -> See 'computedPrimaryExpression' - RULE_functionCallExpression: 72, // -> See 'computedPrimaryExpression' + RULE_memberAccessExpression: 1001, // -> See 'computedPrimaryExpression' + RULE_functionCallExpression: 1002, // -> See 'computedPrimaryExpression' } as const; /** From 02456eee91c23a02a0a01ee360d5e830931cc350 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 11:36:36 +0200 Subject: [PATCH 145/257] other: Updated .eslintrc --- .eslintrc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.eslintrc b/.eslintrc index f373e1328..1f1736e24 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,9 +8,10 @@ }, "rules": { "linebreak-style": ["error", "unix"], - "max-params": 0, - "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [1, { "vars": "local", "args": "none" }], + "@typescript-eslint/consistent-type-imports": "error", + "no-unused-vars": "off", + "max-params": 0, "no-warning-comments": 0, "no-useless-catch": 1, "comma-dangle": 0, From da4ff58705fa73f872fb386fb3a360d2d94ca148 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 12:02:23 +0200 Subject: [PATCH 146/257] major (#523): Removed constant expression type and added object-property.ts --- kipper/cli/src/commands/compile.ts | 4 +- kipper/cli/src/commands/help.ts | 2 +- kipper/cli/src/config-loader.ts | 3 +- kipper/cli/src/copy-resources.ts | 4 +- kipper/cli/src/decorators.ts | 5 +- kipper/cli/src/input/file-stream.ts | 4 +- kipper/cli/src/input/target.ts | 2 +- kipper/cli/src/logger.ts | 3 +- kipper/cli/src/output/compile.ts | 4 +- kipper/cli/src/prompt-module.ts | 2 +- kipper/config/src/abstract/config-file.ts | 3 +- .../config/src/abstract/config-interpreter.ts | 7 +- .../src/evaluated-kipper-config-file.ts | 3 +- kipper/config/src/kipper-config-file.ts | 2 +- .../config/src/kipper-config-interpreter.ts | 8 +- kipper/config/src/tools.ts | 9 +- kipper/core/src/antlr-error-listener.ts | 3 +- .../err-handler/semantics-asserter.ts | 2 +- .../err-handler/semantics-error-handler.ts | 2 +- .../analysis/analyser/semantic-checker.ts | 20 ++-- .../analysis/analyser/type-checker.ts | 27 +++-- .../analysis/analyser/warning-issuer.ts | 7 +- .../core/src/compiler/analysis/reference.ts | 2 +- .../symbol-table/entry/scope-declaration.ts | 6 +- .../entry/scope-function-declaration.ts | 2 +- .../analysis/symbol-table/function-scope.ts | 3 +- .../analysis/symbol-table/global-scope.ts | 5 +- .../analysis/symbol-table/local-scope.ts | 3 +- .../compiler/analysis/symbol-table/scope.ts | 4 +- .../analysis/symbol-table/symbol-table.ts | 2 +- .../src/compiler/ast/analysable-ast-node.ts | 12 +- kipper/core/src/compiler/ast/ast-generator.ts | 2 +- kipper/core/src/compiler/ast/ast-node.ts | 2 +- .../core/src/compiler/ast/common/ast-types.ts | 4 +- .../ast/factories/ast-node-factory.ts | 4 +- .../ast/factories/declaration-ast-factory.ts | 2 +- .../ast/factories/expression-ast-factory.ts | 4 +- .../core/src/compiler/ast/factories/index.ts | 6 +- .../ast/factories/statement-ast-factory.ts | 2 +- .../compiler/ast/mapping/ast-node-mapper.ts | 11 +- .../function-declaration-type-semantics.ts | 2 +- .../function-declaration.ts | 5 +- .../parameter-declaration.ts | 3 +- .../variable-declaration-type-semantics.ts | 2 +- .../variable-declaration.ts | 2 +- .../additive-expression.ts | 6 +- .../arithmetic-expression-type-semantics.ts | 2 +- .../arithmetic/arithmetic-expression.ts | 4 +- .../multiplicative-expression.ts | 6 +- .../assignment-expression.ts | 13 +-- .../cast-or-convert-expression.ts | 5 +- .../comparative-expression.ts | 2 +- .../equality-expression.ts | 8 +- .../relational-expression.ts | 8 +- .../conditional-expression.ts | 3 +- .../ast/nodes/expressions/expression.ts | 4 +- .../function-call-expression.ts | 3 +- .../logical-and-expression-type-semantics.ts | 2 +- .../logical-and-expression.ts | 5 +- .../logical-expression/logical-expression.ts | 2 +- .../logical-or-expression.ts | 5 +- ...crement-or-decrement-postfix-expression.ts | 9 +- .../postfix-expression/postfix-expression.ts | 2 +- .../array-primary-expression-semantics.ts | 6 +- ...array-primary-expression-type-semantics.ts | 11 ++ .../array-primary-expression.ts | 15 +-- .../array-primary-expression/index.ts | 0 .../bool-primary-expression-semantics.ts | 6 +- .../bool-primary-expression-type-semantics.ts | 11 ++ .../bool-primary-expression.ts | 13 ++- .../bool-primary-expression/index.ts | 0 ...array-primary-expression-type-semantics.ts | 11 -- .../bool-primary-expression-type-semantics.ts | 11 -- .../constant/constant-expression-semantics.ts | 17 --- .../constant-expression-type-semantics.ts | 11 -- .../constant/constant-expression.ts | 52 --------- .../primary-expression/constant/index.ts | 13 --- ...umber-primary-expression-type-semantics.ts | 11 -- .../object-primary-expression-semantics.ts | 19 ---- ...bject-primary-expression-type-semantics.ts | 7 -- ...tring-primary-expression-type-semantics.ts | 11 -- .../fstring-primary-expression.ts | 4 +- .../identifier-primary-expression.ts | 3 +- .../expressions/primary-expression/index.ts | 7 +- .../number-primary-expression/index.ts | 0 .../number-primary-expression-semantics.ts | 4 +- ...umber-primary-expression-type-semantics.ts | 11 ++ .../number-primary-expression.ts | 11 +- .../object-primary-expression/index.ts | 8 ++ .../object-primary-expression-semantics.ts | 15 +++ ...bject-primary-expression-type-semantics.ts | 7 ++ .../object-primary-expression.ts | 15 +-- .../object-property/index.ts | 7 ++ .../object-property-semantics.ts | 7 ++ .../object-property-type-semantics.ts | 7 ++ .../object-property/object-property.ts | 107 ++++++++++++++++++ .../primary-expression/primary-expression.ts | 11 +- .../string-primary-expression/index.ts | 0 .../string-primary-expression-semantics.ts | 4 +- ...tring-primary-expression-type-semantics.ts | 11 ++ .../string-primary-expression.ts | 11 +- .../tangled-primary-expression.ts | 3 +- .../index.ts | 0 ...-undefined-primary-expression-semantics.ts | 6 +- ...fined-primary-expression-type-semantics.ts | 4 +- ...or-null-or-undefined-primary-expression.ts | 17 ++- .../generic-type-specifier-expression.ts | 7 +- .../identifier-type-specifier-expression.ts | 7 +- .../typeof-type-specifier-expression.ts | 7 +- ...increment-or-decrement-unary-expression.ts | 7 +- .../operator-modified-unary-expression.ts | 8 +- .../unary-expression/unary-expression.ts | 4 +- .../src/compiler/ast/nodes/root-ast-node.ts | 5 +- .../compound-statement/compound-statement.ts | 3 +- .../expression-statement.ts | 5 +- .../statements/if-statement/if-statement.ts | 3 +- .../do-while-loop-iteration-statement.ts | 7 +- .../for-loop-iteration-statement.ts | 5 +- .../while-loop-iteration-statement.ts | 5 +- .../jump-statement-type-semantics.ts | 2 +- .../jump-statement/jump-statement.ts | 5 +- .../return-statement/return-statement.ts | 3 +- .../switch-statement-type-semantics.ts | 2 +- .../switch-statement/switch-statement.ts | 3 +- kipper/core/src/compiler/ast/target-node.ts | 4 +- kipper/core/src/compiler/compile-config.ts | 13 +-- kipper/core/src/compiler/compile-result.ts | 6 +- kipper/core/src/compiler/compiler.ts | 15 ++- kipper/core/src/compiler/const.ts | 2 +- .../core/src/compiler/optimiser/optimiser.ts | 2 +- .../parser/antlr/base/KipperLexerBase.ts | 4 +- .../parser/antlr/base/KipperParserBase.ts | 2 +- kipper/core/src/compiler/parser/parse-data.ts | 6 +- .../parser/parse-rule-kind-mapping.ts | 2 +- .../core/src/compiler/parser/parse-stream.ts | 3 +- .../compiler/parser/parser-rule-context.ts | 2 +- kipper/core/src/compiler/program-ctx.ts | 9 +- .../target-presets/semantic-analyser.ts | 14 ++- .../translation/built-ins-generator.ts | 4 +- .../translation/code-generator.ts | 14 ++- kipper/core/src/errors.ts | 2 +- kipper/core/src/logger.ts | 2 +- .../core/src/tools/functions/inverse-map.ts | 2 +- .../core/src/tools/functions/parser-rules.ts | 2 +- kipper/target-js/src/built-in-generator.ts | 10 +- kipper/target-js/src/code-generator.ts | 34 ++++-- kipper/target-js/src/semantic-analyser.ts | 23 ++-- kipper/target-js/src/target.ts | 3 +- kipper/target-js/src/tools.ts | 2 +- kipper/target-ts/src/built-in-generator.ts | 2 +- kipper/target-ts/src/code-generator.ts | 4 +- kipper/target-ts/src/target.ts | 4 +- kipper/target-ts/src/tools.ts | 2 +- test/module/core/ast-node.test.ts | 9 +- test/module/core/built-ins.test.ts | 3 +- test/module/core/compiler.test.ts | 2 +- test/module/core/core-functionality.test.ts | 3 +- test/module/core/errors/index.ts | 2 +- test/module/core/errors/kipper-error.ts | 3 +- .../semantic-errors/builtin-overwrite.ts | 3 +- .../identifier-already-used-by-parameter.ts | 3 +- .../identifier-already-used-by-variable.ts | 3 +- .../identifier-already-used-function.ts | 3 +- .../incomplete-returns-in-code-paths.ts | 3 +- .../invalid-amount-of-arguments.ts | 3 +- .../semantic-errors/invalid-assignment.ts | 3 +- .../errors/semantic-errors/invalid-global.ts | 3 +- .../invalid-relational-comparison.ts | 3 +- .../reserved-identifier-overwrite.ts | 3 +- .../semantic-errors/undefined-constant.ts | 3 +- .../semantic-errors/undefined-reference.ts | 3 +- .../semantic-errors/unknown-reference.ts | 3 +- .../invalid-unary-exp-operand.ts | 3 +- .../syntax-errors/missing-function-body.ts | 3 +- .../core/errors/syntax-errors/syntax-error.ts | 3 +- .../errors/type-errors/argument-type-error.ts | 3 +- .../type-errors/arithmetic-operation.ts | 3 +- .../errors/type-errors/assignment-type.ts | 3 +- .../errors/type-errors/invalid-conversion.ts | 3 +- .../errors/type-errors/invalid-key-type.ts | 3 +- .../errors/type-errors/invalid-unary-exp.ts | 3 +- .../core/errors/type-errors/readonly-write.ts | 3 +- .../core/errors/type-errors/unknown-type.ts | 3 +- .../errors/type-errors/value-not-indexable.ts | 3 +- test/module/core/global-scope.test.ts | 3 +- test/module/core/not-implemented.test.ts | 3 +- test/module/core/optimiser.test.ts | 3 +- test/module/core/program-ctx.test.ts | 9 +- test/module/core/warnings/index.ts | 2 +- 189 files changed, 677 insertions(+), 532 deletions(-) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/array-primary-expression/array-primary-expression-semantics.ts (54%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/array-primary-expression/array-primary-expression.ts (86%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/array-primary-expression/index.ts (100%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/bool-primary-expression/bool-primary-expression-semantics.ts (53%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/bool-primary-expression/bool-primary-expression.ts (88%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/bool-primary-expression/index.ts (100%) delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/number-primary-expression/index.ts (100%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/number-primary-expression/number-primary-expression-semantics.ts (75%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/number-primary-expression/number-primary-expression.ts (90%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/object-primary-expression/object-primary-expression.ts (86%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/string-primary-expression/index.ts (100%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/string-primary-expression/string-primary-expression-semantics.ts (75%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/string-primary-expression/string-primary-expression.ts (90%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/void-or-null-or-undefined-primary-expression/index.ts (100%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts (75%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts (66%) rename kipper/core/src/compiler/ast/nodes/expressions/primary-expression/{constant => }/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts (89%) diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index cd1d0d2bb..1844a14fb 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -5,13 +5,11 @@ import type { args } from "@oclif/parser"; import { Command, flags } from "@oclif/command"; import { Logger } from "tslog"; +import type { CompileConfig, KipperCompileResult, KipperCompileTarget } from "@kipper/core"; import { - CompileConfig, defaultOptimisationOptions, EvaluatedCompileConfig, KipperCompiler, - KipperCompileResult, - KipperCompileTarget, KipperError, KipperLogger, LogLevel, diff --git a/kipper/cli/src/commands/help.ts b/kipper/cli/src/commands/help.ts index 74db8ce53..c82bdce17 100644 --- a/kipper/cli/src/commands/help.ts +++ b/kipper/cli/src/commands/help.ts @@ -3,7 +3,7 @@ * @since 0.5.0 */ import HelpCommand from "@oclif/plugin-help/lib/commands/help"; -import { flags } from "@oclif/command"; +import type { flags } from "@oclif/command"; /** * This class is only there so oclif auto-generates docs for the help command, which should be visible in the README.md. diff --git a/kipper/cli/src/config-loader.ts b/kipper/cli/src/config-loader.ts index d5250c527..0de28909a 100644 --- a/kipper/cli/src/config-loader.ts +++ b/kipper/cli/src/config-loader.ts @@ -2,7 +2,8 @@ * Load a Kipper configuration file for the CLI. * @since 0.11.0 */ -import { EvaluatedKipperConfigFile, KipperConfigFile, KipperConfigInterpreter } from "@kipper/config"; +import type { EvaluatedKipperConfigFile } from "@kipper/config"; +import { KipperConfigFile, KipperConfigInterpreter } from "@kipper/config"; import * as fs from "fs"; export let defaultConfigInterpreter = new KipperConfigInterpreter(); diff --git a/kipper/cli/src/copy-resources.ts b/kipper/cli/src/copy-resources.ts index 4abd88c42..c783b91ca 100644 --- a/kipper/cli/src/copy-resources.ts +++ b/kipper/cli/src/copy-resources.ts @@ -1,7 +1,7 @@ -import { EvaluatedKipperConfigFile } from "@kipper/config"; +import type { EvaluatedKipperConfigFile } from "@kipper/config"; import * as fs from "node:fs/promises"; import * as fsSync from "node:fs"; -import { KipperLogger } from "@kipper/core"; +import type { KipperLogger } from "@kipper/core"; import path from "node:path"; diff --git a/kipper/cli/src/decorators.ts b/kipper/cli/src/decorators.ts index 277aeaeac..4a5051ef0 100644 --- a/kipper/cli/src/decorators.ts +++ b/kipper/cli/src/decorators.ts @@ -1,10 +1,11 @@ /** * Utility decorators for the Kipper CLI. */ -import { Command } from "@oclif/command"; +import type { Command } from "@oclif/command"; import { KipperInternalError } from "@kipper/core"; import { KipperCLIError } from "./errors"; -import { CLIError as OclifCLIError, PrettyPrintableError } from "@oclif/errors"; +import type { PrettyPrintableError } from "@oclif/errors"; +import { CLIError as OclifCLIError } from "@oclif/errors"; import { ConfigError } from "@kipper/config"; /** diff --git a/kipper/cli/src/input/file-stream.ts b/kipper/cli/src/input/file-stream.ts index 00d911c0c..1b01b467a 100644 --- a/kipper/cli/src/input/file-stream.ts +++ b/kipper/cli/src/input/file-stream.ts @@ -7,8 +7,8 @@ import { constants, promises as fs } from "fs"; import * as path from "path"; import { KipperParseStream } from "@kipper/core"; import { KipperFileAccessError, KipperInvalidInputError, KipperUnsupportedEncodingError } from "../errors"; -import { OutputArgs, OutputFlags } from "@oclif/parser/lib/parse"; -import { EvaluatedKipperConfigFile } from "@kipper/config"; +import type { OutputArgs, OutputFlags } from "@oclif/parser/lib/parse"; +import type { EvaluatedKipperConfigFile } from "@kipper/config"; /** * Valid encodings that Kipper supports. diff --git a/kipper/cli/src/input/target.ts b/kipper/cli/src/input/target.ts index e1d174dc1..0bb72bbd1 100644 --- a/kipper/cli/src/input/target.ts +++ b/kipper/cli/src/input/target.ts @@ -1,4 +1,4 @@ -import { KipperCompileTarget } from "@kipper/core"; +import type { KipperCompileTarget } from "@kipper/core"; import { KipperJavaScriptTarget } from "@kipper/target-js"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; import { KipperInvalidInputError } from "../errors"; diff --git a/kipper/cli/src/logger.ts b/kipper/cli/src/logger.ts index 9794b3385..0983c2ea2 100644 --- a/kipper/cli/src/logger.ts +++ b/kipper/cli/src/logger.ts @@ -3,7 +3,8 @@ * @since 0.0.6 */ import { LogLevel } from "@kipper/core"; -import { ILogObject, ISettingsParam, Logger } from "tslog"; +import type { ILogObject, ISettingsParam } from "tslog"; +import { Logger } from "tslog"; /** * Default {@link ISettingsParam} Configuration for the CLI Logger. diff --git a/kipper/cli/src/output/compile.ts b/kipper/cli/src/output/compile.ts index 1522711cd..122a1c0eb 100644 --- a/kipper/cli/src/output/compile.ts +++ b/kipper/cli/src/output/compile.ts @@ -2,10 +2,10 @@ * CLI implementation and wrapper functions for Kipper compilations. * @since 0.1.0 */ -import { KipperCompileResult } from "@kipper/core"; +import type { KipperCompileResult } from "@kipper/core"; import { constants, promises as fs } from "fs"; import { KipperFileWriteError } from "../errors"; -import { KipperEncoding } from "../input"; +import type { KipperEncoding } from "../input"; /** * Writes the file that exist inside the {@link KipperCompileResult compilation result}. diff --git a/kipper/cli/src/prompt-module.ts b/kipper/cli/src/prompt-module.ts index c4f731d0d..25f42f28d 100644 --- a/kipper/cli/src/prompt-module.ts +++ b/kipper/cli/src/prompt-module.ts @@ -1,4 +1,4 @@ -import { PromptModule as InquirerPromptModule } from "inquirer"; +import type { PromptModule as InquirerPromptModule } from "inquirer"; import chalk from "chalk"; import inquirer from "inquirer"; diff --git a/kipper/config/src/abstract/config-file.ts b/kipper/config/src/abstract/config-file.ts index 1096a63e3..c32f85a5f 100644 --- a/kipper/config/src/abstract/config-file.ts +++ b/kipper/config/src/abstract/config-file.ts @@ -1,4 +1,5 @@ -import { ConfigErrorMetaData, JSONSyntaxError } from "../errors"; +import type { ConfigErrorMetaData } from "../errors"; +import { JSONSyntaxError } from "../errors"; /** * An abstract class that represents a configuration file. diff --git a/kipper/config/src/abstract/config-interpreter.ts b/kipper/config/src/abstract/config-interpreter.ts index 2f99423bf..8009911f8 100644 --- a/kipper/config/src/abstract/config-interpreter.ts +++ b/kipper/config/src/abstract/config-interpreter.ts @@ -1,6 +1,7 @@ -import { ConfigFile } from "./config-file"; -import { ConfigErrorMetaData, ConfigValidationError, UnknownFieldError } from "../errors"; -import { RawEvaluatedKipperConfigFile } from "../evaluated-kipper-config-file"; +import type { ConfigFile } from "./config-file"; +import type { ConfigErrorMetaData } from "../errors"; +import { ConfigValidationError, UnknownFieldError } from "../errors"; +import type { RawEvaluatedKipperConfigFile } from "../evaluated-kipper-config-file"; /** * A type that represents a configuration scheme definition. diff --git a/kipper/config/src/evaluated-kipper-config-file.ts b/kipper/config/src/evaluated-kipper-config-file.ts index 1ed2ea742..f09c6093c 100644 --- a/kipper/config/src/evaluated-kipper-config-file.ts +++ b/kipper/config/src/evaluated-kipper-config-file.ts @@ -1,4 +1,5 @@ -import type { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract"; +import { EvaluatedConfigValue } from "./abstract"; +import type { EvaluatedConfigFile } from "./abstract"; import type * as semver from "semver"; import type { CompileConfig, KipperCompileTarget } from "@kipper/core"; diff --git a/kipper/config/src/kipper-config-file.ts b/kipper/config/src/kipper-config-file.ts index b628f8ca0..7320610eb 100644 --- a/kipper/config/src/kipper-config-file.ts +++ b/kipper/config/src/kipper-config-file.ts @@ -2,7 +2,7 @@ import { ConfigFile } from "./abstract"; import * as path from "node:path"; import * as fs from "node:fs/promises"; import { ensureExistsHasPermAndIsOfType } from "./tools"; -import { ConfigErrorMetaData } from "./errors"; +import type { ConfigErrorMetaData } from "./errors"; /** * A class that represents a Kipper config file. diff --git a/kipper/config/src/kipper-config-interpreter.ts b/kipper/config/src/kipper-config-interpreter.ts index c7762447b..d710ada88 100644 --- a/kipper/config/src/kipper-config-interpreter.ts +++ b/kipper/config/src/kipper-config-interpreter.ts @@ -1,8 +1,10 @@ -import { Config, ConfigInterpreter, type ConfigInterpreterScheme } from "./abstract/config-interpreter"; +import type { Config } from "./abstract/config-interpreter"; +import { ConfigInterpreter, type ConfigInterpreterScheme } from "./abstract/config-interpreter"; import { KipperConfigFile } from "./kipper-config-file"; -import { EvaluatedKipperConfigFile, RawEvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; +import type { RawEvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; +import { EvaluatedKipperConfigFile } from "./evaluated-kipper-config-file"; +import type { ConfigErrorMetaData } from "./errors"; import { - ConfigErrorMetaData, IncompatibleVersionError, InvalidMappingSyntaxError, InvalidVersionSyntaxError, diff --git a/kipper/config/src/tools.ts b/kipper/config/src/tools.ts index 688770b33..38af3dbbd 100644 --- a/kipper/config/src/tools.ts +++ b/kipper/config/src/tools.ts @@ -1,10 +1,5 @@ -import { - RefNotFoundError, - RefInvalidPathError, - ConfigErrorMetaData, - FileNotFoundError, - InvalidPathError, -} from "./errors"; +import type { ConfigErrorMetaData } from "./errors"; +import { RefNotFoundError, RefInvalidPathError, FileNotFoundError, InvalidPathError } from "./errors"; import * as fs from "node:fs/promises"; /** diff --git a/kipper/core/src/antlr-error-listener.ts b/kipper/core/src/antlr-error-listener.ts index e95e3d7f0..b2797af1e 100644 --- a/kipper/core/src/antlr-error-listener.ts +++ b/kipper/core/src/antlr-error-listener.ts @@ -2,7 +2,8 @@ * Antlr4 Error listener handling Antlr4 errors and reporting them. * @since 0.0.2 */ -import { KipperLogger, LogLevel } from "./logger"; +import type { KipperLogger } from "./logger"; +import { LogLevel } from "./logger"; import { LexerOrParserSyntaxError } from "./errors"; import { Interval } from "antlr4ts/misc/Interval"; import { CommonToken } from "antlr4ts"; diff --git a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts index 98c733388..739fb7d19 100644 --- a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts +++ b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-asserter.ts @@ -5,7 +5,7 @@ */ import type { KipperProgramContext } from "../../../program-ctx"; import type { KipperError } from "../../../../errors"; -import { KipperNotImplementedError } from "../../../../errors"; +import type { KipperNotImplementedError } from "../../../../errors"; import type { CompilableASTNode } from "../../../ast"; import { KipperSemanticErrorHandler } from "./semantics-error-handler"; import { getParseRuleSource } from "../../../../tools"; diff --git a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts index 8ddd47fc4..4d526ba35 100644 --- a/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts +++ b/kipper/core/src/compiler/analysis/analyser/err-handler/semantics-error-handler.ts @@ -4,7 +4,7 @@ */ import type { CompilableASTNode } from "../../../ast"; import type { KipperParseStream } from "../../../parser"; -import { KipperError } from "../../../../errors"; +import type { KipperError } from "../../../../errors"; import { getParseRuleSource } from "../../../../tools"; /** diff --git a/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts b/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts index a5ec7d07e..9d0612233 100644 --- a/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/semantic-checker.ts @@ -5,25 +5,19 @@ */ import type { KipperReferenceable } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; -import type { CompilableNodeChild, CompilableNodeParent, ScopeNode } from "../../ast"; -import { - CompoundStatement, +import type { + CompilableNodeChild, + CompilableNodeParent, + ScopeNode, Expression, - FunctionDeclaration, - IdentifierPrimaryExpression, - IterationStatement, JumpStatement, ReturnStatement, VariableDeclaration, } from "../../ast"; +import { CompoundStatement, FunctionDeclaration, IdentifierPrimaryExpression, IterationStatement } from "../../ast"; import { KipperSemanticsAsserter } from "./err-handler"; -import { - LocalScope, - Scope, - ScopeDeclaration, - ScopeFunctionDeclaration, - ScopeVariableDeclaration, -} from "../symbol-table"; +import type { LocalScope, Scope } from "../symbol-table"; +import { ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "../symbol-table"; import { BuiltInOrInternalGeneratorFunctionNotFoundError, BuiltInOverwriteError, diff --git a/kipper/core/src/compiler/analysis/analyser/type-checker.ts b/kipper/core/src/compiler/analysis/analyser/type-checker.ts index 470402d31..ff2a24da1 100644 --- a/kipper/core/src/compiler/analysis/analyser/type-checker.ts +++ b/kipper/core/src/compiler/analysis/analyser/type-checker.ts @@ -9,34 +9,36 @@ import type { IncrementOrDecrementPostfixExpressionSemantics, ParameterDeclarationSemantics, UnaryExpressionSemantics, -} from "../../ast"; -import { AssignmentExpression, - CompoundStatement, Expression, FunctionDeclaration, - IdentifierPrimaryExpression, - IfStatement, IncrementOrDecrementPostfixExpression, MemberAccessExpression, - ParameterDeclaration, RelationalExpression, - ReturnStatement, Statement, - TangledPrimaryExpression, UnaryExpression, } from "../../ast"; +import { + CompoundStatement, + IdentifierPrimaryExpression, + IfStatement, + ParameterDeclaration, + ReturnStatement, + TangledPrimaryExpression, +} from "../../ast"; import { KipperSemanticsAsserter } from "./err-handler"; import { ScopeDeclaration, ScopeParameterDeclaration, ScopeVariableDeclaration } from "../symbol-table"; -import { +import type { KipperArithmeticOperator, KipperCompilableType, + KipperReferenceable, + KipperReferenceableFunction, +} from "../../const"; +import { kipperCompilableTypes, kipperIncrementOrDecrementOperators, kipperMultiplicativeOperators, kipperPlusOperator, - KipperReferenceable, - KipperReferenceableFunction, kipperStrType, kipperSupportedConversions, } from "../../const"; @@ -58,7 +60,8 @@ import { UnknownTypeError, ValueNotIndexableTypeError, } from "../../../errors"; -import { CheckedType, UncheckedType, UndefinedCustomType } from "../type"; +import type { UncheckedType } from "../type"; +import { CheckedType, UndefinedCustomType } from "../type"; /** * Kipper Type Checker, which asserts that type logic and cohesion is valid and throws errors in case that an diff --git a/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts b/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts index 63df9b704..132897f9a 100644 --- a/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts +++ b/kipper/core/src/compiler/analysis/analyser/warning-issuer.ts @@ -1,8 +1,9 @@ -import { KipperProgramContext } from "../../program-ctx"; +import type { KipperProgramContext } from "../../program-ctx"; import { KipperSemanticErrorHandler } from "./err-handler"; import { getParseRuleSource } from "../../../tools"; -import { CompilableASTNode, Expression, ExpressionStatement } from "../../ast"; -import { KipperWarning, UselessExpressionStatementWarning } from "../../../warnings"; +import type { CompilableASTNode, Expression, ExpressionStatement } from "../../ast"; +import type { KipperWarning } from "../../../warnings"; +import { UselessExpressionStatementWarning } from "../../../warnings"; /** * A warning issuer, which is used to check for certain conditions and report warnings to the program context if needed. diff --git a/kipper/core/src/compiler/analysis/reference.ts b/kipper/core/src/compiler/analysis/reference.ts index e36cf92fe..61a0c2575 100644 --- a/kipper/core/src/compiler/analysis/reference.ts +++ b/kipper/core/src/compiler/analysis/reference.ts @@ -4,7 +4,7 @@ */ import type { Expression } from "../ast"; import type { KipperReferenceable } from "../const"; -import { InternalFunction } from "../runtime-built-ins"; +import type { InternalFunction } from "../runtime-built-ins"; /** * A {@link KipperReferenceable reference} to an identifier that stores a value or function. diff --git a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-declaration.ts b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-declaration.ts index 08b0905ec..a2d77bdec 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-declaration.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-declaration.ts @@ -2,9 +2,9 @@ * An symbol table entry of a variable, parameter or function declaration inside a {@link Scope}. * @since 0.10.0 */ -import { Declaration } from "../../../ast"; -import { KipperProgramContext } from "../../../program-ctx"; -import { CheckedType } from "../../type"; +import type { Declaration } from "../../../ast"; +import type { KipperProgramContext } from "../../../program-ctx"; +import type { CheckedType } from "../../type"; /** * An symbol table entry of a variable, parameter or function declaration inside a Kipper scope. diff --git a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts index c6f89146f..a1e86bed7 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/entry/scope-function-declaration.ts @@ -2,7 +2,7 @@ * A symbol table entry for a function declaration. * @since 0.10.0 */ -import { +import type { FunctionDeclaration, FunctionDeclarationSemantics, FunctionDeclarationTypeSemantics, diff --git a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts index 3f6f42921..f68b89a9a 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/function-scope.ts @@ -4,7 +4,8 @@ * @since 0.8.0 */ import type { FunctionDeclaration, ParameterDeclaration } from "../../ast"; -import { ScopeDeclaration, ScopeParameterDeclaration } from "./entry"; +import type { ScopeDeclaration } from "./entry"; +import { ScopeParameterDeclaration } from "./entry"; import { LocalScope } from "./local-scope"; /** diff --git a/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts index 637b9cd5e..38f36fb3e 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/global-scope.ts @@ -4,8 +4,9 @@ * @since 0.8.0 */ import type { KipperProgramContext } from "../../program-ctx"; -import { FunctionDeclaration, VariableDeclaration } from "../../ast"; -import { ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; +import type { FunctionDeclaration, VariableDeclaration } from "../../ast"; +import type { ScopeDeclaration } from "./entry"; +import { ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; import { Scope } from "./scope"; /** diff --git a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts index c6be12d86..8aedaa557 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/local-scope.ts @@ -6,7 +6,8 @@ import type { FunctionDeclaration, ScopeNode, VariableDeclaration } from "../../ast/"; import type { GlobalScope } from "./global-scope"; import { KipperNotImplementedError } from "../../../errors"; -import { ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; +import type { ScopeDeclaration, ScopeFunctionDeclaration } from "./entry"; +import { ScopeVariableDeclaration } from "./entry"; import { Scope } from "./scope"; /** diff --git a/kipper/core/src/compiler/analysis/symbol-table/scope.ts b/kipper/core/src/compiler/analysis/symbol-table/scope.ts index 083e2f8b9..566c03c44 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/scope.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/scope.ts @@ -3,8 +3,8 @@ * @since 0.8.0 */ import type { FunctionDeclaration, VariableDeclaration } from "../../ast"; -import { ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; -import { SymbolTable } from "./symbol-table"; +import type { ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; +import type { SymbolTable } from "./symbol-table"; /** * A scope in a Kipper program, which can contain {@link ScopeVariableDeclaration variables}, diff --git a/kipper/core/src/compiler/analysis/symbol-table/symbol-table.ts b/kipper/core/src/compiler/analysis/symbol-table/symbol-table.ts index 216ca4b26..8228ee664 100644 --- a/kipper/core/src/compiler/analysis/symbol-table/symbol-table.ts +++ b/kipper/core/src/compiler/analysis/symbol-table/symbol-table.ts @@ -1,4 +1,4 @@ -import { ScopeDeclaration } from "./entry"; +import type { ScopeDeclaration } from "./entry"; /** * A simple interface defining the basic functionality of a symbol table. diff --git a/kipper/core/src/compiler/ast/analysable-ast-node.ts b/kipper/core/src/compiler/ast/analysable-ast-node.ts index dcac5d555..835c5db78 100644 --- a/kipper/core/src/compiler/ast/analysable-ast-node.ts +++ b/kipper/core/src/compiler/ast/analysable-ast-node.ts @@ -7,11 +7,13 @@ import type { KipperParserRuleContext } from "../parser"; import type { TargetASTNodeSemanticAnalyser } from "../target-presets"; import type { TargetAnalysableNode } from "./target-node"; -import { ParserASTNode, SemanticData, TypeData } from "./ast-node"; -import { KipperError, MissingRequiredSemanticDataError } from "../../errors"; -import { KipperProgramContext } from "../program-ctx"; -import { RootASTNode } from "./nodes/root-ast-node"; -import { EvaluatedCompileConfig } from "../compile-config"; +import type { SemanticData, TypeData } from "./ast-node"; +import { ParserASTNode } from "./ast-node"; +import type { KipperError } from "../../errors"; +import { MissingRequiredSemanticDataError } from "../../errors"; +import type { KipperProgramContext } from "../program-ctx"; +import type { RootASTNode } from "./nodes/root-ast-node"; +import type { EvaluatedCompileConfig } from "../compile-config"; import { handleSemanticError } from "../analysis"; /** diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 5ad7dcc3f..9fbe45569 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -9,7 +9,7 @@ import type { ParserStatementContext, } from "./common"; import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { +import type { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, ActualCastOrConvertExpressionContext, diff --git a/kipper/core/src/compiler/ast/ast-node.ts b/kipper/core/src/compiler/ast/ast-node.ts index b9e972796..5d1028fee 100644 --- a/kipper/core/src/compiler/ast/ast-node.ts +++ b/kipper/core/src/compiler/ast/ast-node.ts @@ -8,7 +8,7 @@ import type { ParseTree } from "antlr4ts/tree"; import { getParseRuleSource } from "../../tools"; import { UnableToDetermineSemanticDataError, UndefinedSemanticsError } from "../../errors"; -import { KipperParserRuleContext } from "../parser"; +import type { KipperParserRuleContext } from "../parser"; /** * Semantics type which defines the blueprint for {@link CompilableASTNode.semanticData semanticData} inside a diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index 642eb26d9..244260446 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -43,7 +43,7 @@ import type { VoidOrNullOrUndefinedPrimaryExpressionContext, WhileLoopIterationStatementContext, } from "../../parser"; -import { KindParseRuleMapping } from "../../parser"; +import type { KindParseRuleMapping } from "../../parser"; /** * Union type of all usable expression rule context classes implemented by the {@link ParseRuleKindMapping} for an @@ -146,6 +146,7 @@ export type ASTStatementKind = export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_numberPrimaryExpression | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression + | typeof ParseRuleKindMapping.RULE_objectProperty | typeof ParseRuleKindMapping.RULE_objectPrimaryExpression | typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression @@ -214,6 +215,7 @@ export type ASTStatementRuleName = export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_numberPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_objectProperty] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_objectPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression] diff --git a/kipper/core/src/compiler/ast/factories/ast-node-factory.ts b/kipper/core/src/compiler/ast/factories/ast-node-factory.ts index 2ee32ae72..33a9ef00c 100644 --- a/kipper/core/src/compiler/ast/factories/ast-node-factory.ts +++ b/kipper/core/src/compiler/ast/factories/ast-node-factory.ts @@ -4,8 +4,8 @@ */ import type { ConstructableASTKind } from "../common"; import type { ConstructableASTNodeClass } from "./index"; -import { CompilableASTNode } from "../compilable-ast-node"; -import { KipperParserRuleContext } from "../../parser"; +import type { CompilableASTNode } from "../compilable-ast-node"; +import type { KipperParserRuleContext } from "../../parser"; /** * A simple blueprint for a factory for creating AST nodes from a parser context. diff --git a/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts b/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts index ffb2acd82..ec8341376 100644 --- a/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts +++ b/kipper/core/src/compiler/ast/factories/declaration-ast-factory.ts @@ -4,7 +4,7 @@ */ import type { ASTDeclarationKind, ParserDeclarationContext, ParserExpressionContext } from "../common"; import type { CompilableNodeParent } from "../compilable-ast-node"; -import { Declaration } from "../nodes"; +import type { Declaration } from "../nodes"; import { ASTNodeFactory } from "./ast-node-factory"; import { ASTNodeMapper } from "../mapping/"; diff --git a/kipper/core/src/compiler/ast/factories/expression-ast-factory.ts b/kipper/core/src/compiler/ast/factories/expression-ast-factory.ts index 5890c18e8..d7e1493d9 100644 --- a/kipper/core/src/compiler/ast/factories/expression-ast-factory.ts +++ b/kipper/core/src/compiler/ast/factories/expression-ast-factory.ts @@ -3,8 +3,8 @@ * @since 0.9.0 */ import type { ASTExpressionKind, ParserExpressionContext } from "../common"; -import { Expression } from "../nodes"; -import { CompilableASTNode } from "../compilable-ast-node"; +import type { Expression } from "../nodes"; +import type { CompilableASTNode } from "../compilable-ast-node"; import { ASTNodeFactory } from "./ast-node-factory"; import { ASTNodeMapper } from "../mapping"; diff --git a/kipper/core/src/compiler/ast/factories/index.ts b/kipper/core/src/compiler/ast/factories/index.ts index e9e93fb88..69cc9673e 100644 --- a/kipper/core/src/compiler/ast/factories/index.ts +++ b/kipper/core/src/compiler/ast/factories/index.ts @@ -2,9 +2,9 @@ * AST Node factories which are used to create AST nodes from the ANTLR4 parse tree. * @since 0.10.0 */ -import { ConstructableASTExpressionClass } from "./expression-ast-factory"; -import { ConstructableASTStatementClass } from "./statement-ast-factory"; -import { ConstructableASTDeclarationClass } from "./declaration-ast-factory"; +import type { ConstructableASTExpressionClass } from "./expression-ast-factory"; +import type { ConstructableASTStatementClass } from "./statement-ast-factory"; +import type { ConstructableASTDeclarationClass } from "./declaration-ast-factory"; export * from "./ast-node-factory"; export * from "./expression-ast-factory"; diff --git a/kipper/core/src/compiler/ast/factories/statement-ast-factory.ts b/kipper/core/src/compiler/ast/factories/statement-ast-factory.ts index 5ba4247f8..70c36fecc 100644 --- a/kipper/core/src/compiler/ast/factories/statement-ast-factory.ts +++ b/kipper/core/src/compiler/ast/factories/statement-ast-factory.ts @@ -4,7 +4,7 @@ */ import type { ASTStatementKind, ParserExpressionContext, ParserStatementContext } from "../common"; import type { CompilableNodeParent } from "../compilable-ast-node"; -import { Statement } from "../nodes"; +import type { Statement } from "../nodes"; import { ASTNodeFactory } from "./ast-node-factory"; import { ASTNodeMapper } from "../mapping"; diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 911505250..018478717 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -46,6 +46,7 @@ import { VariableDeclarationContext, VoidOrNullOrUndefinedPrimaryExpressionContext, WhileLoopIterationStatementContext, + ObjectPropertyContext, } from "../../parser"; import type { ASTDeclarationKind, @@ -55,6 +56,8 @@ import type { ASTStatementKind, ASTStatementRuleName, } from "../common"; +import type { Declaration, Expression, Statement } from "../nodes"; +import { ObjectProperty } from "../nodes"; import { AdditiveExpression, ArrayPrimaryExpression, @@ -63,10 +66,8 @@ import { CastOrConvertExpression, CompoundStatement, ConditionalExpression, - Declaration, DoWhileLoopIterationStatement, EqualityExpression, - Expression, ExpressionStatement, ForLoopIterationStatement, FStringPrimaryExpression, @@ -84,11 +85,11 @@ import { MemberAccessExpression, MultiplicativeExpression, NumberPrimaryExpression, + ObjectPrimaryExpression, OperatorModifiedUnaryExpression, ParameterDeclaration, RelationalExpression, ReturnStatement, - Statement, StringPrimaryExpression, SwitchStatement, TangledPrimaryExpression, @@ -97,7 +98,6 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; -import { ObjectPrimaryExpression } from "../nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -126,6 +126,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpression, [ParseRuleKindMapping.RULE_arrayPrimaryExpression]: ArrayPrimaryExpression, [ParseRuleKindMapping.RULE_objectPrimaryExpression]: ObjectPrimaryExpression, + [ParseRuleKindMapping.RULE_objectProperty]: ObjectProperty, [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpression, [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpression, [ParseRuleKindMapping.RULE_boolPrimaryExpression]: BoolPrimaryExpression, @@ -187,6 +188,7 @@ export class ASTNodeMapper { public static readonly expressionKindToRuleContextMap = { [ParseRuleKindMapping.RULE_numberPrimaryExpression]: NumberPrimaryExpressionContext, [ParseRuleKindMapping.RULE_arrayPrimaryExpression]: ArrayPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_objectProperty]: ObjectPropertyContext, [ParseRuleKindMapping.RULE_objectPrimaryExpression]: ObjectPrimaryExpressionContext, [ParseRuleKindMapping.RULE_identifierPrimaryExpression]: IdentifierPrimaryExpressionContext, [ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression]: VoidOrNullOrUndefinedPrimaryExpressionContext, @@ -254,6 +256,7 @@ export class ASTNodeMapper { public static readonly expressionRuleNameToClassMap = { RULE_numberPrimaryExpression: NumberPrimaryExpression, RULE_arrayPrimaryExpression: ArrayPrimaryExpression, + RULE_objectProperty: ObjectProperty, RULE_objectPrimaryExpression: ObjectPrimaryExpression, RULE_identifierPrimaryExpression: IdentifierPrimaryExpression, RULE_voidOrNullOrUndefinedPrimaryExpression: VoidOrNullOrUndefinedPrimaryExpression, diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts index b1a6fb123..9392138da 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts @@ -3,7 +3,7 @@ * @since 0.10.0 */ import type { CheckedType } from "../../../../analysis"; -import { DeclarationTypeSemantics } from "../declaration-type-semantics"; +import type { DeclarationTypeSemantics } from "../declaration-type-semantics"; /** * Type semantics for AST Node {@link FunctionDeclaration}. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts index eec33d445..c86d1a323 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts @@ -9,11 +9,12 @@ import type { FunctionDeclarationTypeSemantics } from "./function-declaration-ty import type { CompilableNodeParent } from "../../../compilable-ast-node"; import type { CompoundStatement, Statement } from "../../statements"; import type { IdentifierTypeSpecifierExpression } from "../../expressions"; -import { FunctionScope, ScopeFunctionDeclaration, UncheckedType } from "../../../../analysis"; +import type { ScopeFunctionDeclaration, UncheckedType } from "../../../../analysis"; +import { FunctionScope } from "../../../../analysis"; +import type { FunctionDeclarationContext } from "../../../../parser"; import { CompoundStatementContext, DeclaratorContext, - FunctionDeclarationContext, KindParseRuleMapping, ParseRuleKindMapping, } from "../../../../parser"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts index 9982e285c..c67f2bc8d 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts @@ -9,7 +9,8 @@ import type { FunctionScope, ScopeParameterDeclaration } from "../../../../analy import type { FunctionDeclaration } from "../function-declaration"; import type { IdentifierTypeSpecifierExpression } from "../../expressions"; import { Declaration } from "../declaration"; -import { KindParseRuleMapping, ParameterDeclarationContext, ParseRuleKindMapping } from "../../../../parser"; +import type { ParameterDeclarationContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { getParseTreeSource } from "../../../../../tools"; /** diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts index 52756c66b..4bca21c55 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration-type-semantics.ts @@ -3,7 +3,7 @@ * @since 0.10.0 */ import type { CheckedType } from "../../../../analysis"; -import { DeclarationTypeSemantics } from "../declaration-type-semantics"; +import type { DeclarationTypeSemantics } from "../declaration-type-semantics"; /** * Type semantics for AST Node {@link VariableDeclaration}. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts index d8c9a2c78..0f8879197 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts @@ -13,13 +13,13 @@ import type { Expression, IdentifierTypeSpecifierExpression } from "../../expres import type { ParseTree } from "antlr4ts/tree"; import type { KipperStorageType } from "../../../../const"; import { Declaration } from "../declaration"; +import type { VariableDeclarationContext } from "../../../../parser"; import { DeclaratorContext, InitDeclaratorContext, KindParseRuleMapping, ParseRuleKindMapping, StorageTypeSpecifierContext, - VariableDeclarationContext, } from "../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression.ts index 6e9c2cc86..c2c994e2d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/additive-expression/additive-expression.ts @@ -11,8 +11,10 @@ import type { AdditiveExpressionSemantics } from "./additive-expression-semantic import type { AdditiveExpressionTypeSemantics } from "./additive-expression-type-semantics"; import type { Expression } from "../../expression"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import { AdditiveExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; -import { KipperAdditiveOperator, kipperAdditiveOperators } from "../../../../../const"; +import type { AdditiveExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { KipperAdditiveOperator } from "../../../../../const"; +import { kipperAdditiveOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { ArithmeticExpression } from "../arithmetic-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts index acdcf5c64..8f90c79d0 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression-type-semantics.ts @@ -2,7 +2,7 @@ * Type semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). * @since 0.10.0 */ -import { ExpressionTypeSemantics } from "../expression-type-semantics"; +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; /** * Type semantics for arithmetic expressions ({@link MultiplicativeExpression} and {@link AdditiveExpression}). diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts index 32ed0d7e5..733c207b4 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/arithmetic-expression.ts @@ -7,9 +7,9 @@ import type { ArithmeticExpressionSemantics } from "./arithmetic-expression-semantics"; import type { ArithmeticExpressionTypeSemantics } from "./arithmetic-expression-type-semantics"; import type { ParseRuleKindMapping } from "../../../../parser"; -import { KindParseRuleMapping } from "../../../../parser"; +import type { KindParseRuleMapping } from "../../../../parser"; import { Expression } from "../expression"; -import { ASTNodeMapper } from "../../../mapping"; +import type { ASTNodeMapper } from "../../../mapping"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ArithmeticExpression} AST node. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts index 5ebafd7f9..76f4103c9 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/arithmetic/multiplicative-expression/multiplicative-expression.ts @@ -13,8 +13,10 @@ import type { MultiplicativeExpressionSemantics } from "./multiplicative-express import type { MultiplicativeTypeSemantics } from "./multiplicative-expression-type-semantics"; import type { Expression } from "../../expression"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import { KindParseRuleMapping, MultiplicativeExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; -import { KipperMultiplicativeOperator, kipperMultiplicativeOperators } from "../../../../../const"; +import type { MultiplicativeExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { KipperMultiplicativeOperator } from "../../../../../const"; +import { kipperMultiplicativeOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { ArithmeticExpression } from "../arithmetic-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression.ts index 3f6a12548..e4c59570e 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/assignment-expression/assignment-expression.ts @@ -15,16 +15,13 @@ import type { CompilableASTNode } from "../../../compilable-ast-node"; import type { AssignmentExpressionSemantics } from "./assignment-expression-semantics"; import type { AssignmentExpressionTypeSemantics } from "./assignment-expression-type-semantics"; -import { - AssignmentExpressionContext, - KindParseRuleMapping, - KipperParserRuleContext, - ParseRuleKindMapping, -} from "../../../../parser"; +import type { AssignmentExpressionContext } from "../../../../parser"; +import { KindParseRuleMapping, KipperParserRuleContext, ParseRuleKindMapping } from "../../../../parser"; import { Expression } from "../expression"; -import { IdentifierPrimaryExpression } from "../primary-expression"; +import type { IdentifierPrimaryExpression } from "../primary-expression"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { kipperArithmeticAssignOperators, KipperAssignOperator } from "../../../../const"; +import type { KipperAssignOperator } from "../../../../const"; +import { kipperArithmeticAssignOperators } from "../../../../const"; import { getParseRuleSource } from "../../../../../tools"; import { ScopeVariableDeclaration } from "../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts index defe689c9..41abd03da 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/cast-or-convert-expression/cast-or-convert-expression.ts @@ -12,8 +12,9 @@ import type { CastOrConvertExpressionTypeSemantics } from "./cast-or-convert-exp import type { CompilableASTNode } from "../../../compilable-ast-node"; import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; import { Expression } from "../expression"; -import { CastOrConvertExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { UncheckedType } from "../../../../analysis"; +import type { CastOrConvertExpressionContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { UncheckedType } from "../../../../analysis"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { getConversionFunctionIdentifier } from "../../../../../tools"; import { kipperInternalBuiltInFunctions } from "../../../../runtime-built-ins"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression.ts index 11633b8c9..6f9b2b5ca 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/comparative-expression.ts @@ -7,7 +7,7 @@ import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../par import type { ComparativeExpressionSemantics } from "./comparative-expression-semantics"; import type { ComparativeExpressionTypeSemantics } from "./comparative-expression-type-semantics"; import { Expression } from "../expression"; -import { ASTNodeMapper } from "../../../mapping"; +import type { ASTNodeMapper } from "../../../mapping"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ComparativeExpression} AST node. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression.ts index b8298dfb8..fbbd5b30a 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/equality-expression/equality-expression.ts @@ -12,11 +12,13 @@ import type { EqualityExpressionTypeSemantics } from "./equality-expression-type import type { Expression } from "../../expression"; import { ComparativeExpression } from "../comparative-expression"; import { CheckedType } from "../../../../../analysis"; -import { EqualityExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { EqualityExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; -import { KipperEqualityOperator, kipperEqualityOperators } from "../../../../../const"; +import type { KipperEqualityOperator } from "../../../../../const"; +import { kipperEqualityOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; /** * Equality expression, which can be used to compare two expressions for equality. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression.ts index 171542f92..230df2b3a 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/relational-expression.ts @@ -17,9 +17,11 @@ import type { RelationalExpressionSemantics } from "./relational-expression-sema import type { RelationalExpressionTypeSemantics } from "./relational-expression-type-semantics"; import type { Expression } from "../../expression"; import { ComparativeExpression } from "../comparative-expression"; -import { KindParseRuleMapping, ParseRuleKindMapping, RelationalExpressionContext } from "../../../../../parser"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; -import { KipperRelationalOperator, kipperRelationalOperators } from "../../../../../const"; +import type { RelationalExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { KipperRelationalOperator } from "../../../../../const"; +import { kipperRelationalOperators } from "../../../../../const"; import { TerminalNode } from "antlr4ts/tree/TerminalNode"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression.ts index d2c98b8fc..0dd9294bc 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/conditional-expression/conditional-expression.ts @@ -10,7 +10,8 @@ import type { ConditionalExpressionSemantics } from "./conditional-expression-se import type { ConditionalExpressionTypeSemantics } from "./conditional-expression-type-semantics"; import type { CompilableASTNode } from "../../../compilable-ast-node"; import { Expression } from "../expression"; -import { ConditionalExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { ConditionalExpressionContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { KipperNotImplementedError } from "../../../../../errors"; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts index 88e016b35..5ccfc7505 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/expression.ts @@ -8,10 +8,10 @@ import type { TargetASTNodeCodeGenerator } from "../../../target-presets"; import type { ExpressionSemantics } from "./expression-semantics"; import type { ExpressionTypeSemantics } from "./expression-type-semantics"; -import { TranslatedExpression } from "../../../const"; +import type { TranslatedExpression } from "../../../const"; import { MissingRequiredSemanticDataError } from "../../../../errors"; import { CompilableASTNode } from "../../compilable-ast-node"; -import { ASTExpressionKind, ASTExpressionRuleName, ParserExpressionContext } from "../../common"; +import type { ASTExpressionKind, ASTExpressionRuleName, ParserExpressionContext } from "../../common"; /** * The base abstract AST node class for all expressions, which wrap their corresponding diff --git a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression.ts index 51131bf78..707ffc393 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/function-call-expression/function-call-expression.ts @@ -12,7 +12,8 @@ import type { CompilableASTNode } from "../../../compilable-ast-node"; import type { KipperReferenceableFunction } from "../../../../const"; import type { IdentifierPrimaryExpressionSemantics } from "../primary-expression"; import { Expression } from "../expression"; -import { FunctionCallExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { FunctionCallExpressionContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { CheckedType } from "../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts index d228318d1..6d9345122 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression-type-semantics.ts @@ -2,7 +2,7 @@ * Type semantics for AST Node {@link LogicalAndExpression}. * @since 0.10.0 */ -import { LogicalExpressionTypeSemantics } from "../logical-expression-type-semantics"; +import type { LogicalExpressionTypeSemantics } from "../logical-expression-type-semantics"; /** * Type semantics for AST Node {@link LogicalAndExpression}. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression.ts index 41a704297..498006a7f 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-and-expression/logical-and-expression.ts @@ -12,8 +12,9 @@ import type { LogicalAndExpressionSemantics } from "./logical-and-expression-sem import type { LogicalAndExpressionTypeSemantics } from "./logical-and-expression-type-semantics"; import type { Expression } from "../../expression"; import { LogicalExpression } from "../logical-expression"; -import { KindParseRuleMapping, LogicalAndExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { LogicalAndExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression.ts index 249a6b18b..6830c8c1f 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-expression.ts @@ -8,7 +8,7 @@ import type { LogicalExpressionSemantics } from "./logical-expression-semantics" import type { LogicalExpressionTypeSemantics } from "./logical-expression-type-semantics"; import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { Expression } from "../expression"; -import { ASTNodeMapper } from "../../../mapping"; +import type { ASTNodeMapper } from "../../../mapping"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link LogicalExpression} AST node. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression.ts index 4f06369ce..586c3bc77 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/logical-expression/logical-or-expression/logical-or-expression.ts @@ -12,8 +12,9 @@ import type { LogicalOrExpressionSemantics } from "./logical-or-expression-seman import type { LogicalOrExpressionTypeSemantics } from "./logical-or-expression-type-semantics"; import type { Expression } from "../../expression"; import { LogicalExpression } from "../logical-expression"; -import { KindParseRuleMapping, LogicalOrExpressionContext, ParseRuleKindMapping } from "../../../../../parser"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { LogicalOrExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { kipperLogicalOrOperator } from "../../../../../const"; import { CheckedType } from "../../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression.ts index b07e261cd..3d15626ca 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/increment-or-decrement-postfix-expression/increment-or-decrement-postfix-expression.ts @@ -10,12 +10,9 @@ import type { IncrementOrDecrementPostfixExpressionTypeSemantics } from "./incre import type { KipperIncrementOrDecrementOperator } from "../../../../../const"; import type { Expression } from "../../expression"; import { PostfixExpression } from "../postfix-expression"; -import { - IncrementOrDecrementPostfixExpressionContext, - KindParseRuleMapping, - ParseRuleKindMapping, -} from "../../../../../parser"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { IncrementOrDecrementPostfixExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts index da4f6024e..14bfe9026 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/postfix-expression/postfix-expression.ts @@ -8,7 +8,7 @@ import type { PostfixExpressionSemantics } from "./postfix-expression-semantics" import type { PostfixExpressionTypeSemantics } from "./postfix-expression-type-semantics"; import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { Expression } from "../expression"; -import { ASTNodeMapper } from "../../../mapping"; +import type { ASTNodeMapper } from "../../../mapping"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link PostfixExpression} AST node. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression-semantics.ts similarity index 54% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression-semantics.ts index fec82d789..7dd020b13 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression-semantics.ts @@ -2,14 +2,14 @@ * Semantics for AST Node {@link ArrayPrimaryExpression}. * @since 0.5.0 */ -import type { Expression } from "../../../expression"; -import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; +import type { Expression } from "../../expression"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; /** * Semantics for AST Node {@link ArrayPrimaryExpression}. * @since 0.5.0 */ -export interface ArrayPrimaryExpressionSemantics extends ConstantExpressionSemantics { +export interface ArrayPrimaryExpressionSemantics extends PrimaryExpressionSemantics { /** * The value of the constant list expression. * @since 0.5.0 diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression-type-semantics.ts new file mode 100644 index 000000000..d1c274d55 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link ArrayPrimaryExpression}. + * @since 0.10.0 + */ +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link ArrayPrimaryExpression}. + * @since 0.10.0 + */ +export interface ArrayPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression.ts similarity index 86% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression.ts index b9fc8986c..3571078ee 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/array-primary-expression.ts @@ -4,16 +4,17 @@ */ import type { ArrayPrimaryExpressionSemantics } from "./array-primary-expression-semantics"; import type { ArrayPrimaryExpressionTypeSemantics } from "./array-primary-expression-type-semantics"; -import type { CompilableASTNode } from "../../../../../compilable-ast-node"; -import { ConstantExpression } from "../constant-expression"; -import { ArrayPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; -import { CheckedType } from "../../../../../../analysis"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { ArrayPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; +import { PrimaryExpression } from "../primary-expression"; /** * List constant expression, which represents a list constant that was defined in the source code. * @since 0.1.0 */ -export class ArrayPrimaryExpression extends ConstantExpression< +export class ArrayPrimaryExpression extends PrimaryExpression< ArrayPrimaryExpressionSemantics, ArrayPrimaryExpressionTypeSemantics > { @@ -108,6 +109,6 @@ export class ArrayPrimaryExpression extends ConstantExpression< return this._antlrRuleCtx; } - readonly targetSemanticAnalysis = this.semanticAnalyser.listPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.arrayLiteralExpression; + readonly targetSemanticAnalysis = this.semanticAnalyser.arrayPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.arrayPrimaryExpression; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/index.ts similarity index 100% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/array-primary-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression-semantics.ts similarity index 53% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression-semantics.ts index 4aed9c3ff..c09a6cb78 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression-semantics.ts @@ -2,14 +2,14 @@ * Semantics for AST Node {@link BoolPrimaryExpression}. * @since 0.8.0 */ -import type { KipperBoolTypeLiterals } from "../../../../../../const"; -import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; +import type { KipperBoolTypeLiterals } from "../../../../../const"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; /** * Semantics for AST Node {@link BoolPrimaryExpression}. * @since 0.8.0 */ -export interface BoolPrimaryExpressionSemantics extends ConstantExpressionSemantics { +export interface BoolPrimaryExpressionSemantics extends PrimaryExpressionSemantics { /** * The value of this boolean constant expression. * @since 0.8.0 diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression-type-semantics.ts new file mode 100644 index 000000000..bb36354ef --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link BoolPrimaryExpression}. + * @since 0.10.0 + */ +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link BoolPrimaryExpression}. + * @since 0.10.0 + */ +export interface BoolPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression.ts similarity index 88% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression.ts index 45683cd39..490f633fa 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/bool-primary-expression.ts @@ -4,17 +4,18 @@ */ import type { BoolPrimaryExpressionSemantics } from "./bool-primary-expression-semantics"; import type { BoolPrimaryExpressionTypeSemantics } from "./bool-primary-expression-type-semantics"; -import type { CompilableASTNode } from "../../../../../compilable-ast-node"; -import type { KipperBoolTypeLiterals } from "../../../../../../const"; -import { ConstantExpression } from "../constant-expression"; -import { BoolPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; -import { CheckedType } from "../../../../../../analysis"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { KipperBoolTypeLiterals } from "../../../../../const"; +import type { BoolPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; +import { PrimaryExpression } from "../primary-expression"; /** * Boolean constant expression representing the built-in constants {@link true} and {@link false}. * @since 0.8.0 */ -export class BoolPrimaryExpression extends ConstantExpression< +export class BoolPrimaryExpression extends PrimaryExpression< BoolPrimaryExpressionSemantics, BoolPrimaryExpressionTypeSemantics > { diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/index.ts similarity index 100% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/bool-primary-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts deleted file mode 100644 index 782c21158..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/array-primary-expression/array-primary-expression-type-semantics.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Type semantics for AST Node {@link ArrayPrimaryExpression}. - * @since 0.10.0 - */ -import { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; - -/** - * Type semantics for AST Node {@link ArrayPrimaryExpression}. - * @since 0.10.0 - */ -export interface ArrayPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts deleted file mode 100644 index ff425f30a..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/bool-primary-expression/bool-primary-expression-type-semantics.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Type semantics for AST Node {@link BoolPrimaryExpression}. - * @since 0.10.0 - */ -import type { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; - -/** - * Type semantics for AST Node {@link BoolPrimaryExpression}. - * @since 0.10.0 - */ -export interface BoolPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts deleted file mode 100644 index 016a5f15c..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-semantics.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Semantics for AST Node {@link ConstantExpression}. - * @since 0.5.0 - */ -import type { ExpressionSemantics } from "../../expression-semantics"; - -/** - * Semantics for AST Node {@link ConstantExpression}. - * @since 0.5.0 - */ -export interface ConstantExpressionSemantics extends ExpressionSemantics { - /** - * The value of the constant expression. This is usually either a {@link String} or {@link Number}. - * @since 0.5.0 - */ - value: any; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts deleted file mode 100644 index f8649f9db..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression-type-semantics.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Type semantics for AST Node {@link ConstantExpression}. - * @since 0.11.0 - */ -import type { ExpressionTypeSemantics } from "../../expression-type-semantics"; - -/** - * Type semantics for AST Node {@link ConstantExpression}. - * @since 0.11.0 - */ -export interface ConstantExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts deleted file mode 100644 index 807782df9..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/constant-expression.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Abstract constant expression class representing a constant expression, which was defined in the source code. This - * abstract class only exists to provide the commonality between the different constant expressions. - * @since 0.10.0 - */ -import type { ConstantExpressionTypeSemantics } from "./constant-expression-type-semantics"; -import type { ConstantExpressionSemantics } from "./constant-expression-semantics"; -import type { ParseRuleKindMapping } from "../../../../../parser"; -import { KindParseRuleMapping } from "../../../../../parser"; -import { ASTNodeMapper } from "../../../../mapping"; -import { PrimaryExpression } from "../primary-expression"; - -/** - * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link ConstantExpression} AST node. - * @since 0.10.0 - */ -export type ASTConstantExpressionKind = - | typeof ParseRuleKindMapping.RULE_numberPrimaryExpression - | typeof ParseRuleKindMapping.RULE_stringPrimaryExpression - | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression - | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression - | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression - | typeof ParseRuleKindMapping.RULE_objectPrimaryExpression; - -/** - * Union type of all possible {@link ParserASTNode} context classes for a constructable {@link ConstantExpression} AST node. - * @since 0.10.0 - */ -export type ParserConstantExpressionContext = InstanceType< - (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTConstantExpressionKind] ->; - -/** - * Union type of all possible {@link ParserASTNode.ruleName} values for a constructable {@link ConstantExpression} - * AST node. - * @since 0.11.0 - */ -export type ParserConstantExpressionRuleName = (typeof KindParseRuleMapping)[ASTConstantExpressionKind]; - -/** - * Abstract constant expression class representing a constant expression, which was defined in the source code. This - * abstract class only exists to provide the commonality between the different constant expressions. - * @since 0.10.0 - */ -export abstract class ConstantExpression< - Semantics extends ConstantExpressionSemantics = ConstantExpressionSemantics, - TypeSemantics extends ConstantExpressionTypeSemantics = ConstantExpressionTypeSemantics, -> extends PrimaryExpression { - protected abstract readonly _antlrRuleCtx: ParserConstantExpressionContext; - public abstract get kind(): ASTConstantExpressionKind; - public abstract get ruleName(): ParserConstantExpressionRuleName; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts deleted file mode 100644 index ca19b3cf9..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Constant expression module containing the classes representing expressions, which represent a constant value in a - * specific data structure. - * @since 0.11.0 - */ -export * from "./constant-expression"; -export * from "./constant-expression-semantics"; -export * from "./constant-expression-type-semantics"; -export * from "./array-primary-expression/"; -export * from "./bool-primary-expression/"; -export * from "./number-primary-expression/"; -export * from "./string-primary-expression/"; -export * from "./void-or-null-or-undefined-primary-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts deleted file mode 100644 index ef9fab12c..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-type-semantics.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Type semantics for AST Node {@link NumberPrimaryExpression}. - * @since 0.10.0 - */ -import type { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; - -/** - * Type semantics for AST Node {@link NumberPrimaryExpression}. - * @since 0.10.0 - */ -export interface NumberPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts deleted file mode 100644 index cab148731..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-semantics.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; -import type { Expression } from "../../../expression"; - -/** - * Semantics for AST Node {@link VariableDeclaration}. - * @since 0.3.0 - */ -export interface ObjectPrimaryExpressionSemantics extends ConstantExpressionSemantics { - value: Array<{ - /** - * The identifier of the field inside the object. - */ - identifier: string; - /** - * The value of the field inside the object. - */ - value: Expression; - }>; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts deleted file mode 100644 index e19d205b9..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression-type-semantics.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ConstantExpressionTypeSemantics } from "../constant-expression-type-semantics"; - -/** - * Type semantics for AST Node {@link ObjectPrimaryExpression}. - * @since 0.10.0 - */ -export interface ObjectPrimaryExpressionTypeSemantics extends ConstantExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts deleted file mode 100644 index 6aed112b0..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-type-semantics.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Type semantics for AST Node {@link StringPrimaryExpression}. - * @since 0.10.0 - */ -import type { ExpressionTypeSemantics } from "../../../expression-type-semantics"; - -/** - * Type semantics for AST Node {@link StringPrimaryExpression}. - * @since 0.10.0 - */ -export interface StringPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression.ts index 5752b9ff8..8698e4282 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/fstring-primary-expression/fstring-primary-expression.ts @@ -5,15 +5,15 @@ import type { FStringPrimaryExpressionSemantics } from "./fstring-primary-expression-semantics"; import type { FStringPrimaryExpressionTypeSemantics } from "./fstring-primary-expression-type-semantics"; import { Expression } from "../../expression"; +import type { FStringPrimaryExpressionContext } from "../../../../../parser"; import { ExpressionContext, FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, FStringSingleQuoteAtomContext, KindParseRuleMapping, ParseRuleKindMapping, } from "../../../../../parser"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { CheckedType } from "../../../../../analysis"; import { getParseRuleSource } from "../../../../../../tools"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts index 61b53c919..ce851a2cf 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts @@ -7,7 +7,8 @@ import type { IdentifierPrimaryExpressionSemantics } from "./identifier-primary-expression-semantics"; import type { IdentifierPrimaryExpressionTypeSemantics } from "./identifier-primary-expression-type-semantics"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; -import { IdentifierPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { IdentifierPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { CheckedType, ScopeDeclaration } from "../../../../../analysis"; import { AssignmentExpression } from "../../assignment-expression/assignment-expression"; import { PrimaryExpression } from "../primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts index 9d134f70f..819135910 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts @@ -6,7 +6,12 @@ export * from "./primary-expression"; export * from "./primary-expression-semantics"; export * from "./primary-expression-type-semantics"; -export * from "./constant/"; +export * from "./array-primary-expression/"; +export * from "./bool-primary-expression/"; +export * from "./number-primary-expression/"; +export * from "./string-primary-expression/"; +export * from "./object-primary-expression/"; +export * from "./void-or-null-or-undefined-primary-expression/"; export * from "./fstring-primary-expression/"; export * from "./identifier-primary-expression/"; export * from "./tangled-primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/index.ts similarity index 100% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression-semantics.ts similarity index 75% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression-semantics.ts index 4e4e3e2c9..38bf95d80 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression-semantics.ts @@ -2,13 +2,13 @@ * Semantics for AST Node {@link NumberPrimaryExpression}. * @since 0.5.0 */ -import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; /** * Semantics for AST Node {@link NumberPrimaryExpression}. * @since 0.5.0 */ -export interface NumberPrimaryExpressionSemantics extends ConstantExpressionSemantics { +export interface NumberPrimaryExpressionSemantics extends PrimaryExpressionSemantics { /** * The value of the constant number expression. * diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression-type-semantics.ts new file mode 100644 index 000000000..cee1882ab --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link NumberPrimaryExpression}. + * @since 0.10.0 + */ +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link NumberPrimaryExpression}. + * @since 0.10.0 + */ +export interface NumberPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression.ts index 0923f9378..cc38437f0 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/number-primary-expression/number-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/number-primary-expression/number-primary-expression.ts @@ -4,16 +4,17 @@ */ import type { NumberPrimaryExpressionSemantics } from "./number-primary-expression-semantics"; import type { NumberPrimaryExpressionTypeSemantics } from "./number-primary-expression-type-semantics"; -import type { CompilableASTNode } from "../../../../../compilable-ast-node"; -import { ConstantExpression } from "../constant-expression"; -import { KindParseRuleMapping, NumberPrimaryExpressionContext, ParseRuleKindMapping } from "../../../../../../parser"; -import { CheckedType } from "../../../../../../analysis"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { NumberPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; +import { PrimaryExpression } from "../primary-expression"; /** * Number constant expression, which represents a number constant that was defined in the source code. * @since 0.1.0 */ -export class NumberPrimaryExpression extends ConstantExpression< +export class NumberPrimaryExpression extends PrimaryExpression< NumberPrimaryExpressionSemantics, NumberPrimaryExpressionTypeSemantics > { diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/index.ts new file mode 100644 index 000000000..3170f6dc8 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/index.ts @@ -0,0 +1,8 @@ +/** + * AST Node {@link ObjectPrimaryExpression} and the related {@link ObjectPrimaryExpressionSemantics semantics} + * and {@link ObjectPrimaryExpressionTypeSemantics type semantics}. + */ +export * from "./object-primary-expression"; +export * from "./object-primary-expression-semantics"; +export * from "./object-primary-expression-type-semantics"; +export * from "./object-property/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts new file mode 100644 index 000000000..d52d97fb1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts @@ -0,0 +1,15 @@ +import type { Expression } from "../../expression"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; +import type { ObjectProperty } from "./object-property"; + +/** + * Semantics for AST Node {@link VariableDeclaration}. + * @since 0.11.0 + */ +export interface ObjectPrimaryExpressionSemantics extends PrimaryExpressionSemantics { + /** + * The key-value pairs of the object. + * @since 0.11.0 + */ + keyValuePairs: Array; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-type-semantics.ts new file mode 100644 index 000000000..bd174369e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-type-semantics.ts @@ -0,0 +1,7 @@ +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link ObjectPrimaryExpression}. + * @since 0.11.0 + */ +export interface ObjectPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression.ts similarity index 86% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression.ts index 19b0617f3..a042941f8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/object-primary-expression/object-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression.ts @@ -4,16 +4,17 @@ */ import type { ObjectPrimaryExpressionSemantics } from "./object-primary-expression-semantics"; import type { ObjectPrimaryExpressionTypeSemantics } from "./object-primary-expression-type-semantics"; -import type { CompilableASTNode } from "../../../../../compilable-ast-node"; -import { ConstantExpression } from "../constant-expression"; -import { ObjectPrimaryExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; -import { KipperNotImplementedError } from "../../../../../../../errors"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { ObjectPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { KipperNotImplementedError } from "../../../../../../errors"; +import { PrimaryExpression } from "../primary-expression"; /** * Object literal constant, which represents an object that was defined in the source code. * @since 0.11.0 */ -export class ObjectPrimaryExpression extends ConstantExpression< +export class ObjectPrimaryExpression extends PrimaryExpression< ObjectPrimaryExpressionSemantics, ObjectPrimaryExpressionTypeSemantics > { @@ -107,6 +108,6 @@ export class ObjectPrimaryExpression extends ConstantExpression< return this._antlrRuleCtx; } - readonly targetSemanticAnalysis = this.semanticAnalyser.listPrimaryExpression; - readonly targetCodeGenerator = this.codeGenerator.arrayLiteralExpression; + readonly targetSemanticAnalysis = this.semanticAnalyser.objectPrimaryExpression; + readonly targetCodeGenerator = this.codeGenerator.objectPrimaryExpression; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/index.ts new file mode 100644 index 000000000..1ccb6567d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/index.ts @@ -0,0 +1,7 @@ +/** + * AST Node {@link ObjectProperty} and the related {@link ObjectPropertySemantics semantics} + * and {@link ObjectPropertyTypeSemantics type semantics}. + */ +export * from "./object-property"; +export * from "./object-property-semantics"; +export * from "./object-property-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts new file mode 100644 index 000000000..74aac8b66 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts @@ -0,0 +1,7 @@ +import type { PrimaryExpressionSemantics } from "../../primary-expression-semantics"; + +/** + * Semantics for AST Node {@link ObjectPrimaryExpression}. + * @since 0.11.0 + */ +export interface ObjectPropertySemantics extends PrimaryExpressionSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-type-semantics.ts new file mode 100644 index 000000000..a9ef7d291 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-type-semantics.ts @@ -0,0 +1,7 @@ +import type { PrimaryExpressionTypeSemantics } from "../../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link ObjectPrimaryExpression}. + * @since 0.11.0 + */ +export interface ObjectPropertyTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts new file mode 100644 index 000000000..98b62d132 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts @@ -0,0 +1,107 @@ +import type { ObjectPropertySemantics } from "./object-property-semantics"; +import type { ObjectPropertyTypeSemantics } from "./object-property-type-semantics"; +import type { ObjectPropertyContext } from "../../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; +import { PrimaryExpression } from "../../primary-expression"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import { KipperNotImplementedError } from "../../../../../../../errors"; + +/** + * Object property, which represents a property inside an {@link ObjectPrimaryExpression object}. This is a key-value + * pair, where the key is a string or identifier and the value is any expression. + * @since 0.11.0 + */ +export class ObjectProperty extends PrimaryExpression { + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: ObjectPropertyContext; + + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_objectProperty; + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get kind() { + return ObjectProperty.kind; + } + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return ObjectProperty.ruleName; + } + + constructor(antlrRuleCtx: ObjectPropertyContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Object Properties have not been implemented yet.")); + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.11.0 + */ + public async primarySemanticTypeChecking(): Promise { + throw this.programCtx + .semanticCheck(this) + .notImplementedError(new KipperNotImplementedError("Object Properties have not been implemented yet.")); + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.11.0 + */ + public checkForWarnings = undefined; // TODO! + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): ObjectPropertyContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.objectProperty; + readonly targetCodeGenerator = this.codeGenerator.objectProperty; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts index f00e1a8c3..c5777b387 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/primary-expression.ts @@ -8,15 +8,20 @@ import type { PrimaryExpressionSemantics } from "./primary-expression-semantics" import type { PrimaryExpressionTypeSemantics } from "./primary-expression-type-semantics"; import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { Expression } from "../expression"; -import { ASTNodeMapper } from "../../../mapping"; -import { ASTConstantExpressionKind } from "./constant"; +import type { ASTNodeMapper } from "../../../mapping"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link PrimaryExpression} AST node. * @since 0.10.0 */ export type ASTPrimaryExpressionKind = - | ASTConstantExpressionKind + | typeof ParseRuleKindMapping.RULE_objectProperty + | typeof ParseRuleKindMapping.RULE_numberPrimaryExpression + | typeof ParseRuleKindMapping.RULE_stringPrimaryExpression + | typeof ParseRuleKindMapping.RULE_boolPrimaryExpression + | typeof ParseRuleKindMapping.RULE_voidOrNullOrUndefinedPrimaryExpression + | typeof ParseRuleKindMapping.RULE_arrayPrimaryExpression + | typeof ParseRuleKindMapping.RULE_objectPrimaryExpression | typeof ParseRuleKindMapping.RULE_fStringPrimaryExpression | typeof ParseRuleKindMapping.RULE_identifierPrimaryExpression | typeof ParseRuleKindMapping.RULE_tangledPrimaryExpression; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/index.ts similarity index 100% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression-semantics.ts similarity index 75% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression-semantics.ts index 54bf8a186..414bab64c 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression-semantics.ts @@ -2,13 +2,13 @@ * Semantics for AST Node {@link StringPrimaryExpression}. * @since 0.5.0 */ -import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; /** * Semantics for AST Node {@link StringPrimaryExpression}. * @since 0.5.0 */ -export interface StringPrimaryExpressionSemantics extends ConstantExpressionSemantics { +export interface StringPrimaryExpressionSemantics extends PrimaryExpressionSemantics { /** * The value of the constant string expression. * @since 0.5.0 diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression-type-semantics.ts new file mode 100644 index 000000000..eb13c65cf --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression-type-semantics.ts @@ -0,0 +1,11 @@ +/** + * Type semantics for AST Node {@link StringPrimaryExpression}. + * @since 0.10.0 + */ +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; + +/** + * Type semantics for AST Node {@link StringPrimaryExpression}. + * @since 0.10.0 + */ +export interface StringPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression.ts similarity index 90% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression.ts index 67dc82442..88f59b121 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/string-primary-expression/string-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression.ts @@ -4,16 +4,17 @@ */ import type { StringPrimaryExpressionSemantics } from "./string-primary-expression-semantics"; import type { StringPrimaryExpressionTypeSemantics } from "./string-primary-expression-type-semantics"; -import type { CompilableASTNode } from "../../../../../compilable-ast-node"; -import { ConstantExpression } from "../constant-expression"; -import { KindParseRuleMapping, ParseRuleKindMapping, StringPrimaryExpressionContext } from "../../../../../../parser"; -import { CheckedType } from "../../../../../../analysis"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; +import type { StringPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; +import { PrimaryExpression } from "../primary-expression"; /** * String constant expression, which represents a string constant that was defined in the source code. * @since 0.1.0 */ -export class StringPrimaryExpression extends ConstantExpression< +export class StringPrimaryExpression extends PrimaryExpression< StringPrimaryExpressionSemantics, StringPrimaryExpressionTypeSemantics > { diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression.ts index 82c70614d..d106deccf 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/tangled-primary-expression/tangled-primary-expression.ts @@ -9,7 +9,8 @@ import type { TangledPrimaryExpressionSemantics } from "./tangled-primary-expres import type { TangledPrimaryExpressionTypeSemantics } from "./tangled-primary-expression-type-semantics"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { Expression } from "../../expression"; -import { KindParseRuleMapping, ParseRuleKindMapping, TangledPrimaryExpressionContext } from "../../../../../parser"; +import type { TangledPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { PrimaryExpression } from "../primary-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/index.ts similarity index 100% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts similarity index 75% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts index 77e836ac7..58f239321 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-semantics.ts @@ -2,14 +2,14 @@ * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. * @since 0.10.0 */ -import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../../const"; -import type { ConstantExpressionSemantics } from "../constant-expression-semantics"; +import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../const"; +import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; /** * Semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. * @since 0.10.0 */ -export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends ConstantExpressionSemantics { +export interface VoidOrNullOrUndefinedPrimaryExpressionSemantics extends PrimaryExpressionSemantics { /** * The constant identifier of this expression. * @since 0.10.0 diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts similarity index 66% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts index 8cdd3f789..81c4cd460 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression-type-semantics.ts @@ -2,10 +2,10 @@ * Type semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. * @since 0.10.0 */ -import type { ExpressionTypeSemantics } from "../../../expression-type-semantics"; +import type { PrimaryExpressionTypeSemantics } from "../primary-expression-type-semantics"; /** * Type semantics for AST Node {@link VoidOrNullOrUndefinedPrimaryExpression}. * @since 0.10.0 */ -export interface VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics extends ExpressionTypeSemantics {} +export interface VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics extends PrimaryExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts similarity index 89% rename from kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts index fd37f2947..160510eb2 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/constant/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/void-or-null-or-undefined-primary-expression/void-or-null-or-undefined-primary-expression.ts @@ -2,23 +2,20 @@ * Constant expression, representing the void, null or undefined keyword. * @since 0.10.0 */ -import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../../const"; -import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import type { KipperNullType, KipperUndefinedType, KipperVoidType } from "../../../../../const"; +import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { VoidOrNullOrUndefinedPrimaryExpressionSemantics } from "./void-or-null-or-undefined-primary-expression-semantics"; import type { VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics } from "./void-or-null-or-undefined-primary-expression-type-semantics"; -import { - KindParseRuleMapping, - ParseRuleKindMapping, - VoidOrNullOrUndefinedPrimaryExpressionContext, -} from "../../../../../../parser"; -import { CheckedType } from "../../../../../../analysis"; -import { ConstantExpression } from "../constant-expression"; +import type { VoidOrNullOrUndefinedPrimaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { CheckedType } from "../../../../../analysis"; +import { PrimaryExpression } from "../primary-expression"; /** * Constant expression, representing the void, null or undefined keyword. * @since 0.10.0 */ -export class VoidOrNullOrUndefinedPrimaryExpression extends ConstantExpression< +export class VoidOrNullOrUndefinedPrimaryExpression extends PrimaryExpression< VoidOrNullOrUndefinedPrimaryExpressionSemantics, VoidOrNullOrUndefinedPrimaryExpressionTypeSemantics > { diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts index fdb7b10eb..d6a57430d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts @@ -8,11 +8,8 @@ import type { GenericTypeSpecifierExpressionSemantics } from "./generic-type-spe import type { GenericTypeSpecifierExpressionTypeSemantics } from "./generic-type-specifier-expression-type-semantics"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { TypeSpecifierExpression } from "../type-specifier-expression"; -import { - GenericTypeSpecifierExpressionContext, - KindParseRuleMapping, - ParseRuleKindMapping, -} from "../../../../../parser"; +import type { GenericTypeSpecifierExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { KipperNotImplementedError } from "../../../../../../errors"; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts index bf2e15295..734eb35ad 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts @@ -11,11 +11,8 @@ import type { IdentifierTypeSpecifierExpressionSemantics } from "./identifier-ty import type { IdentifierTypeSpecifierExpressionTypeSemantics } from "./identifier-type-specifier-expression-type-semantics"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { TypeSpecifierExpression } from "../type-specifier-expression"; -import { - IdentifierTypeSpecifierExpressionContext, - KindParseRuleMapping, - ParseRuleKindMapping, -} from "../../../../../parser"; +import type { IdentifierTypeSpecifierExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { CheckedType, UncheckedType } from "../../../../../analysis"; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts index d8b9c9d64..bbddc8fe5 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts @@ -6,11 +6,8 @@ import type { TypeofTypeSpecifierExpressionSemantics } from "./typeof-type-speci import type { TypeofTypeSpecifierExpressionTypeSemantics } from "./typeof-type-specifier-expression-type-semantics"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import { TypeSpecifierExpression } from "../type-specifier-expression"; -import { - KindParseRuleMapping, - ParseRuleKindMapping, - TypeofTypeSpecifierExpressionContext, -} from "../../../../../parser"; +import type { TypeofTypeSpecifierExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { KipperNotImplementedError } from "../../../../../../errors"; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression.ts index 551a2799c..2a327b0b2 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/increment-or-decrement-unary-expression/increment-or-decrement-unary-expression.ts @@ -11,11 +11,8 @@ import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { Expression } from "../../expression"; import type { KipperIncrementOrDecrementOperator } from "../../../../../const"; import { UnaryExpression } from "../unary-expression"; -import { - IncrementOrDecrementUnaryExpressionContext, - KindParseRuleMapping, - ParseRuleKindMapping, -} from "../../../../../parser"; +import type { IncrementOrDecrementUnaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression.ts index e42e17531..0fe7bf259 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/operator-modified-unary-expression/operator-modified-unary-expression.ts @@ -13,12 +13,8 @@ import type { Expression } from "../../expression"; import type { KipperNegateOperator, KipperSignOperator } from "../../../../../const"; import { kipperUnaryModifierOperators } from "../../../../../const"; import { UnaryExpression } from "../unary-expression"; -import { - KindParseRuleMapping, - OperatorModifiedUnaryExpressionContext, - ParseRuleKindMapping, - UnaryOperatorContext, -} from "../../../../../parser"; +import type { OperatorModifiedUnaryExpressionContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping, UnaryOperatorContext } from "../../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression.ts index 02bab51e6..93b9105a2 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/unary-expression/unary-expression.ts @@ -7,9 +7,9 @@ import type { UnaryExpressionSemantics } from "./unary-expression-semantics"; import type { UnaryExpressionTypeSemantics } from "./unary-expression-type-semantics"; import type { ParseRuleKindMapping } from "../../../../parser"; -import { KindParseRuleMapping } from "../../../../parser"; +import type { KindParseRuleMapping } from "../../../../parser"; import { Expression } from "../expression"; -import { ASTNodeMapper } from "../../../mapping"; +import type { ASTNodeMapper } from "../../../mapping"; /** * Union type of all possible {@link ParserASTNode.kind} values for a constructable {@link UnaryExpression} AST node. diff --git a/kipper/core/src/compiler/ast/nodes/root-ast-node.ts b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts index 4f6e87ebe..577ea1f05 100644 --- a/kipper/core/src/compiler/ast/nodes/root-ast-node.ts +++ b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts @@ -16,8 +16,9 @@ import type { KipperProgramContext } from "../../program-ctx"; import type { Declaration } from "./declarations"; import type { Statement } from "./index"; import type { TranslatedCodeLine } from "../../const"; -import { KipperError } from "../../../errors"; -import { CompilationUnitContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../parser"; +import type { KipperError } from "../../../errors"; +import type { CompilationUnitContext } from "../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../parser"; import { handleSemanticError } from "../../analysis"; /** diff --git a/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement.ts index 5ee8d72a6..2e8a17928 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/compound-statement/compound-statement.ts @@ -8,7 +8,8 @@ import type { CompoundStatementSemantics } from "./compound-statement-semantics" import type { CompoundStatementTypeSemantics } from "./compound-statement-type-semantics"; import { Statement } from "../statement"; import { LocalScope } from "../../../../analysis"; -import { CompoundStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { CompoundStatementContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; /** * Compound statement class, which represents a compound statement containing other items in the Kipper diff --git a/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement.ts index 74fed1820..88353e8f7 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/expression-statement/expression-statement.ts @@ -5,8 +5,9 @@ import type { CompilableNodeParent } from "../../../compilable-ast-node"; import type { ExpressionStatementSemantics } from "./expression-statement-semantics"; import type { ExpressionStatementTypeSemantics } from "./expression-statement-type-semantics"; import { Statement } from "../statement"; -import { ExpressionStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { Expression } from "../../expressions"; +import type { ExpressionStatementContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { Expression } from "../../expressions"; /** * Expression statement class, which represents a statement made up of an expression in the Kipper language. diff --git a/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement.ts index ddf790db9..5ed3f0727 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/if-statement/if-statement.ts @@ -7,7 +7,8 @@ import type { IfStatementSemantics } from "./if-statement-semantics"; import type { IfStatementTypeSemantics } from "./if-statement-type-semantics"; import type { Expression } from "../../expressions"; import { Statement } from "../statement"; -import { IfStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { IfStatementContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; /** diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts index 0d1dbc27f..6217cb48c 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts @@ -6,11 +6,8 @@ import type { DoWhileLoopIterationStatementSemantics } from "./do-while-loop-ite import type { DoWhileLoopIterationStatementTypeSemantics } from "./do-while-loop-iteration-statement-type-semantics"; import type { CompilableNodeChild, CompilableNodeParent } from "../../../../compilable-ast-node"; import { IterationStatement } from "../iteration-statement"; -import { - DoWhileLoopIterationStatementContext, - KindParseRuleMapping, - ParseRuleKindMapping, -} from "../../../../../parser"; +import type { DoWhileLoopIterationStatementContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import { KipperNotImplementedError } from "../../../../../../errors"; /** diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement.ts index 59e061bb2..310708480 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/for-loop-iteration-statement/for-loop-iteration-statement.ts @@ -9,8 +9,9 @@ import type { ForLoopStatementSemantics } from "./for-loop-iteration-statement-s import type { ForLoopStatementTypeSemantics } from "./for-loop-iteration-statement-type-semantics"; import type { CompilableNodeChild, CompilableNodeParent } from "../../../../compilable-ast-node"; import { IterationStatement } from "../iteration-statement"; -import { ForLoopIterationStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; -import { Expression } from "../../../expressions"; +import type { ForLoopIterationStatementContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { Expression } from "../../../expressions"; import { LocalScope } from "../../../../../analysis"; /** diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts index 9ae089c37..18eec5857 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts @@ -7,8 +7,9 @@ import type { WhileLoopStatementSemantics } from "./while-loop-iteration-stateme import type { WhileLoopStatementTypeSemantics } from "./while-loop-iteration-statement-type-semantics"; import type { Expression } from "../../../expressions"; import { IterationStatement } from "../iteration-statement"; -import { KindParseRuleMapping, ParseRuleKindMapping, WhileLoopIterationStatementContext } from "../../../../../parser"; -import { Statement } from "../../statement"; +import type { WhileLoopIterationStatementContext } from "../../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import type { Statement } from "../../statement"; /** * While loop statement class, which represents a while loop statement in the Kipper language and is compilable diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts index 838cb5e5d..74fd040e8 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement-type-semantics.ts @@ -1,4 +1,4 @@ -import { StatementTypeSemantics } from "../statement-type-semantics"; +import type { StatementTypeSemantics } from "../statement-type-semantics"; /** * Type semantics for AST Node {@link JumpStatement}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement.ts index f599b75b8..65ef82ddf 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/jump-statement/jump-statement.ts @@ -6,8 +6,9 @@ import type { CompilableNodeParent } from "../../../compilable-ast-node"; import type { JumpStatementSemantics } from "./jump-statement-semantics"; import type { JumpStatementTypeSemantics } from "./jump-statement-type-semantics"; import { Statement } from "../statement"; -import { JumpStatementContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; -import { Expression } from "../../expressions"; +import type { JumpStatementContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import type { Expression } from "../../expressions"; /** * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement.ts index 258700801..9662d3914 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement.ts @@ -8,7 +8,8 @@ import type { ReturnStatementTypeSemantics } from "./return-statement-type-seman import type { Expression } from "../../expressions"; import { Statement } from "../statement"; import { CheckedType } from "../../../../analysis"; -import { KindParseRuleMapping, ParseRuleKindMapping, ReturnStatementContext } from "../../../../parser"; +import type { ReturnStatementContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; /** * Jump statement class, which represents a jump/break statement in the Kipper language and is compilable using diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts index 7dfd5da84..d31547acb 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement-type-semantics.ts @@ -2,7 +2,7 @@ * Type semantics for AST Node {@link SwitchStatement}. * @since 0.11.0 */ -import { StatementTypeSemantics } from "../statement-type-semantics"; +import type { StatementTypeSemantics } from "../statement-type-semantics"; /** * Type semantics for AST Node {@link SwitchStatement}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement.ts index 33c255ba1..cd8d7c335 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/switch-statement/switch-statement.ts @@ -5,7 +5,8 @@ import type { CompilableNodeParent } from "../../../compilable-ast-node"; import type { SwitchStatementSemantics } from "./switch-statement-semantics"; import type { SwitchStatementTypeSemantics } from "./switch-statement-type-semantics"; import { Statement } from "../statement"; -import { KindParseRuleMapping, ParseRuleKindMapping, SwitchStatementContext } from "../../../../parser"; +import type { SwitchStatementContext } from "../../../../parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; import { KipperNotImplementedError } from "../../../../../errors"; /** diff --git a/kipper/core/src/compiler/ast/target-node.ts b/kipper/core/src/compiler/ast/target-node.ts index fc4b3738d..90e81c4ac 100644 --- a/kipper/core/src/compiler/ast/target-node.ts +++ b/kipper/core/src/compiler/ast/target-node.ts @@ -2,8 +2,8 @@ * A node that can be semantically analysed for a specific {@link KipperCompileTarget target language}. * @since 0.10.0 */ -import { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../target-presets"; -import { TranslatedCodeLine } from "../const"; +import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../target-presets"; +import type { TranslatedCodeLine } from "../const"; /** * A node that can be semantically analysed for a specific {@link KipperCompileTarget target language}. diff --git a/kipper/core/src/compiler/compile-config.ts b/kipper/core/src/compiler/compile-config.ts index 655a3f48a..eaef50a60 100644 --- a/kipper/core/src/compiler/compile-config.ts +++ b/kipper/core/src/compiler/compile-config.ts @@ -2,14 +2,11 @@ * Configuration for a Kipper program that can be passed to {@link KipperCompiler.compile}. * @since 0.10.0 */ -import { - BuiltInFunction, - BuiltInVariable, - kipperRuntimeBuiltInFunctions, - kipperRuntimeBuiltInVariables, -} from "./runtime-built-ins"; -import { KipperCompileTarget } from "./target-presets"; -import { defaultOptimisationOptions, OptimisationOptions } from "./optimiser"; +import type { BuiltInFunction, BuiltInVariable } from "./runtime-built-ins"; +import { kipperRuntimeBuiltInFunctions, kipperRuntimeBuiltInVariables } from "./runtime-built-ins"; +import type { KipperCompileTarget } from "./target-presets"; +import type { OptimisationOptions } from "./optimiser"; +import { defaultOptimisationOptions } from "./optimiser"; /** * Compilation Configuration for a Kipper program. This interface will be wrapped using {@link EvaluatedCompileConfig} diff --git a/kipper/core/src/compiler/compile-result.ts b/kipper/core/src/compiler/compile-result.ts index c1388c26e..0179ee314 100644 --- a/kipper/core/src/compiler/compile-result.ts +++ b/kipper/core/src/compiler/compile-result.ts @@ -2,9 +2,9 @@ * The result of a {@link KipperCompiler} compilation. * @since 0.0.3 */ -import { KipperProgramContext } from "./program-ctx"; -import { TranslatedCodeLine } from "./const"; -import { KipperError, KipperSyntaxError } from "../errors"; +import type { KipperProgramContext } from "./program-ctx"; +import type { TranslatedCodeLine } from "./const"; +import type { KipperError, KipperSyntaxError } from "../errors"; /** * The result of a {@link KipperCompiler} compilation. diff --git a/kipper/core/src/compiler/compiler.ts b/kipper/core/src/compiler/compiler.ts index a590b072c..6a4781f93 100644 --- a/kipper/core/src/compiler/compiler.ts +++ b/kipper/core/src/compiler/compiler.ts @@ -2,14 +2,19 @@ * Main Compiler file for interacting with the entire Kipper Compiler * @since 0.0.1 */ -import { InternalFunction, kipperInternalBuiltInFunctions } from "./runtime-built-ins"; -import { CodePointCharStream, CommonTokenStream } from "antlr4ts"; +import type { InternalFunction } from "./runtime-built-ins"; +import { kipperInternalBuiltInFunctions } from "./runtime-built-ins"; +import type { CodePointCharStream } from "antlr4ts"; +import { CommonTokenStream } from "antlr4ts"; import { KipperAntlrErrorListener } from "../antlr-error-listener"; -import { KipperLexer, KipperParser, KipperParseStream, ParseData } from "./parser"; +import type { ParseData } from "./parser"; +import { KipperLexer, KipperParser, KipperParseStream } from "./parser"; import { KipperLogger } from "../logger"; import { KipperProgramContext } from "./program-ctx"; -import { KipperError, KipperSyntaxError } from "../errors"; -import { CompileConfig, EvaluatedCompileConfig } from "./compile-config"; +import type { KipperSyntaxError } from "../errors"; +import { KipperError } from "../errors"; +import type { CompileConfig } from "./compile-config"; +import { EvaluatedCompileConfig } from "./compile-config"; import { KipperCompileResult } from "./compile-result"; /** diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index 5018e01bb..1118e1553 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -10,7 +10,7 @@ import type { UndefinedCustomType, } from "./analysis"; import type { BuiltInFunction, BuiltInVariable } from "./runtime-built-ins"; -import { InternalFunction } from "./runtime-built-ins"; +import type { InternalFunction } from "./runtime-built-ins"; /** * If this variable is true, then this environment is assumed to be inside a browser and special browser support should diff --git a/kipper/core/src/compiler/optimiser/optimiser.ts b/kipper/core/src/compiler/optimiser/optimiser.ts index 43a4aef5a..244a11f9e 100644 --- a/kipper/core/src/compiler/optimiser/optimiser.ts +++ b/kipper/core/src/compiler/optimiser/optimiser.ts @@ -4,7 +4,7 @@ */ import type { RootASTNode } from "../ast"; import type { KipperProgramContext } from "../program-ctx"; -import { BuiltInFunction, BuiltInVariable, InternalFunction } from "../runtime-built-ins"; +import type { BuiltInFunction, BuiltInVariable, InternalFunction } from "../runtime-built-ins"; /** * The options available for an optimisation run in {@link KipperOptimiser.optimise}. diff --git a/kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts b/kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts index 97cb19503..ccfaa63c5 100644 --- a/kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts +++ b/kipper/core/src/compiler/parser/antlr/base/KipperLexerBase.ts @@ -1,6 +1,6 @@ import { Lexer } from "antlr4ts/Lexer"; -import { CharStream } from "antlr4ts/CharStream"; -import { Vocabulary } from "antlr4ts/Vocabulary"; +import type { CharStream } from "antlr4ts/CharStream"; +import type { Vocabulary } from "antlr4ts/Vocabulary"; export default abstract class KipperLexerBase extends Lexer { abstract readonly channelNames: string[]; diff --git a/kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts b/kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts index dd2cb37dd..7266d66c4 100644 --- a/kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts +++ b/kipper/core/src/compiler/parser/antlr/base/KipperParserBase.ts @@ -1,5 +1,5 @@ import { Parser } from "antlr4ts/Parser"; -import { TokenStream } from "antlr4ts/TokenStream"; +import type { TokenStream } from "antlr4ts/TokenStream"; export default abstract class KipperParserBase extends Parser { private insideExpression: boolean; diff --git a/kipper/core/src/compiler/parser/parse-data.ts b/kipper/core/src/compiler/parser/parse-data.ts index 4ba410622..395bc8ade 100644 --- a/kipper/core/src/compiler/parser/parse-data.ts +++ b/kipper/core/src/compiler/parser/parse-data.ts @@ -1,6 +1,6 @@ -import { KipperParseStream } from "./parse-stream"; -import { CompilationUnitContext, KipperParser } from "./antlr/KipperParser"; -import { KipperLexer } from "./antlr/KipperLexer"; +import type { KipperParseStream } from "./parse-stream"; +import type { CompilationUnitContext, KipperParser } from "./antlr/KipperParser"; +import type { KipperLexer } from "./antlr/KipperLexer"; /** * Parse data for a {@link KipperProgramContext}. diff --git a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts index 1b1cc4899..c52c28af1 100644 --- a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts @@ -4,7 +4,7 @@ */ import type { InverseMap } from "../../tools/types"; import { inverseMap } from "../../tools"; -import {KipperParser} from "./antlr"; +import { KipperParser } from "./antlr"; /** * A mapping object which maps the KipperParser rules to an AST syntax kind number and in extension with the diff --git a/kipper/core/src/compiler/parser/parse-stream.ts b/kipper/core/src/compiler/parser/parse-stream.ts index fb04b3fdb..a7b7cb907 100644 --- a/kipper/core/src/compiler/parser/parse-stream.ts +++ b/kipper/core/src/compiler/parser/parse-stream.ts @@ -2,7 +2,8 @@ * A UTF-16 Parse stream, which stores the content of a file/string in an {@link CodePointCharStream}. * @since 0.0.3 */ -import { CharStreams, CodePointCharStream } from "antlr4ts"; +import type { CodePointCharStream } from "antlr4ts"; +import { CharStreams } from "antlr4ts"; import { KipperConfigError } from "../../errors"; /** diff --git a/kipper/core/src/compiler/parser/parser-rule-context.ts b/kipper/core/src/compiler/parser/parser-rule-context.ts index 96452ddbf..84b69103e 100644 --- a/kipper/core/src/compiler/parser/parser-rule-context.ts +++ b/kipper/core/src/compiler/parser/parser-rule-context.ts @@ -1,5 +1,5 @@ import { ParserRuleContext } from "antlr4ts"; -import { ASTKind } from "./parse-rule-kind-mapping"; +import type { ASTKind } from "./parse-rule-kind-mapping"; /** * A custom implementation of the Antlr4 {@link ParserRuleContext} class, representing a node in the parse tree. diff --git a/kipper/core/src/compiler/program-ctx.ts b/kipper/core/src/compiler/program-ctx.ts index 45c781da7..96af91c38 100644 --- a/kipper/core/src/compiler/program-ctx.ts +++ b/kipper/core/src/compiler/program-ctx.ts @@ -14,10 +14,13 @@ import type { KipperWarning } from "../warnings"; import type { CompilableASTNode, Expression, RootASTNode } from "./ast"; import { KipperFileASTGenerator } from "./ast"; import type { EvaluatedCompileConfig } from "./compile-config"; -import { GlobalScope, InternalReference, KipperSemanticChecker, KipperTypeChecker, Reference } from "./analysis"; +import type { InternalReference, Reference } from "./analysis"; +import { GlobalScope, KipperSemanticChecker, KipperTypeChecker } from "./analysis"; import { KipperError, KipperInternalError, UndefinedSemanticsError } from "../errors"; -import { KipperOptimiser, OptimisationOptions } from "./optimiser"; -import { KipperLogger, LogLevel } from "../logger"; +import type { OptimisationOptions } from "./optimiser"; +import { KipperOptimiser } from "./optimiser"; +import type { KipperLogger } from "../logger"; +import { LogLevel } from "../logger"; import { KipperWarningIssuer } from "./analysis/analyser/warning-issuer"; import { ParseTreeWalker } from "antlr4ts/tree"; diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index b868139e5..093931fe8 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -31,6 +31,7 @@ import type { MemberAccessExpression, MultiplicativeExpression, NumberPrimaryExpression, + ObjectPrimaryExpression, OperatorModifiedUnaryExpression, ParameterDeclaration, RelationalExpression, @@ -46,6 +47,7 @@ import type { WhileLoopIterationStatement, } from "../ast"; import { KipperSemanticErrorHandler } from "../analysis"; +import type { ObjectProperty } from "../ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property"; /** * Represents a function that checks the semantics for a {@link AnalysableASTNode}. @@ -136,7 +138,17 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa /** * Performs translation-specific semantic analysis for {@link ArrayPrimaryExpression} instances. */ - public abstract listPrimaryExpression?: TargetASTNodeSemanticAnalyser; + public abstract arrayPrimaryExpression?: TargetASTNodeSemanticAnalyser; + + /** + * Performs translation-specific semantic analysis for {@link ObjectPrimaryExpression} instances. + */ + public abstract objectPrimaryExpression?: TargetASTNodeSemanticAnalyser; + + /** + * Performs translation-specific semantic analysis for {@link ObjectProperty} instances. + */ + public abstract objectProperty?: TargetASTNodeSemanticAnalyser; /** * Performs translation-specific semantic analysis for {@link IdentifierPrimaryExpression} instances. diff --git a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts index e9f51f2f7..8e158034a 100644 --- a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts @@ -4,8 +4,8 @@ */ import type { TranslatedCodeLine } from "../../const"; import type { BuiltInFunction, BuiltInVariable } from "../../runtime-built-ins"; -import { InternalFunction } from "../../runtime-built-ins"; -import { KipperProgramContext } from "../../program-ctx"; +import type { InternalFunction } from "../../runtime-built-ins"; +import type { KipperProgramContext } from "../../program-ctx"; /** * Generator for the Kipper built-ins that are specific for a target. diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 37267cfe1..beb648b47 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -30,6 +30,7 @@ import type { MemberAccessExpression, MultiplicativeExpression, NumberPrimaryExpression, + ObjectPrimaryExpression, OperatorModifiedUnaryExpression, ParameterDeclaration, RelationalExpression, @@ -44,6 +45,7 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; +import type { ObjectProperty } from "../../ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -183,7 +185,17 @@ export abstract class KipperTargetCodeGenerator { * Translates a {@link ArrayPrimaryExpression} into a specific language. * @since 0.10.0 */ - public abstract arrayLiteralExpression: TargetASTNodeCodeGenerator; + public abstract arrayPrimaryExpression: TargetASTNodeCodeGenerator; + + /** + * Translates a {@link ObjectPrimaryExpression} into a specific language. + */ + public abstract objectPrimaryExpression: TargetASTNodeCodeGenerator; + + /** + * Translates a {@link ObjectProperty} into a specific language. + */ + public abstract objectProperty: TargetASTNodeCodeGenerator; /** * Translates a {@link IdentifierPrimaryExpression} into a specific language. diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index 4819a7b85..ddb662fb4 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -8,7 +8,7 @@ import type { FailedPredicateException } from "antlr4ts/FailedPredicateException import type { RecognitionException } from "antlr4ts/RecognitionException"; import type { Recognizer } from "antlr4ts/Recognizer"; import type { KipperParseStream } from "./compiler"; -import { CompilableASTNode, KipperProgramContext } from "./compiler"; +import type { CompilableASTNode, KipperProgramContext } from "./compiler"; import { getParseRuleSource } from "./tools"; /** diff --git a/kipper/core/src/logger.ts b/kipper/core/src/logger.ts index fc8c13b90..d897595c1 100644 --- a/kipper/core/src/logger.ts +++ b/kipper/core/src/logger.ts @@ -4,7 +4,7 @@ */ import { KipperError } from "./errors"; -import { KipperWarning } from "./warnings"; +import type { KipperWarning } from "./warnings"; /** * The log levels for the {@link KipperLogger}, but as numeric values to allow comparisons. diff --git a/kipper/core/src/tools/functions/inverse-map.ts b/kipper/core/src/tools/functions/inverse-map.ts index d7876084f..66092ad4d 100644 --- a/kipper/core/src/tools/functions/inverse-map.ts +++ b/kipper/core/src/tools/functions/inverse-map.ts @@ -1,4 +1,4 @@ -import { InverseMap } from "../types"; +import type { InverseMap } from "../types"; /** * Returns a given object with its keys and value inverted. diff --git a/kipper/core/src/tools/functions/parser-rules.ts b/kipper/core/src/tools/functions/parser-rules.ts index bc1812d05..618a08423 100644 --- a/kipper/core/src/tools/functions/parser-rules.ts +++ b/kipper/core/src/tools/functions/parser-rules.ts @@ -2,7 +2,7 @@ * Utility functions for working with {@link KipperParserRuleContext antlr4 contexts} (also known as parse rules). * @since 0.11.0 */ -import { KipperParserRuleContext } from "../../compiler"; +import type { KipperParserRuleContext } from "../../compiler"; import { Interval } from "antlr4ts/misc/Interval"; import type { CharStream } from "antlr4ts/CharStream"; import type { Token } from "antlr4ts"; diff --git a/kipper/target-js/src/built-in-generator.ts b/kipper/target-js/src/built-in-generator.ts index 25e26a794..e189cf0c1 100644 --- a/kipper/target-js/src/built-in-generator.ts +++ b/kipper/target-js/src/built-in-generator.ts @@ -3,8 +3,14 @@ * functions. * @since 0.10.0 */ -import type { BuiltInFunction, BuiltInVariable, InternalFunction, TranslatedCodeLine } from "@kipper/core"; -import { KipperProgramContext, KipperTargetBuiltInGenerator } from "@kipper/core"; +import type { + BuiltInFunction, + BuiltInVariable, + InternalFunction, + TranslatedCodeLine, + KipperProgramContext, +} from "@kipper/core"; +import { KipperTargetBuiltInGenerator } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature } from "./tools"; import { TargetJS } from "./target"; diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 91eee1504..5a5a897b5 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -8,8 +8,6 @@ import type { LogicalExpressionSemantics, TranslatedCodeLine, TranslatedExpression, -} from "@kipper/core"; -import { AdditiveExpression, AssignmentExpression, BoolPrimaryExpression, @@ -43,18 +41,22 @@ import { SwitchStatement, TangledPrimaryExpression, TypeofTypeSpecifierExpression, - VariableDeclaration, - CompoundStatement, DoWhileLoopIterationStatement, ForLoopIterationStatement, + MemberAccessExpression, + VoidOrNullOrUndefinedPrimaryExpression, + WhileLoopIterationStatement, + ObjectPrimaryExpression, + ObjectProperty, +} from "@kipper/core"; +import { + VariableDeclaration, + CompoundStatement, getConversionFunctionIdentifier, IfStatement, KipperTargetCodeGenerator, - MemberAccessExpression, ScopeDeclaration, ScopeFunctionDeclaration, - VoidOrNullOrUndefinedPrimaryExpression, - WhileLoopIterationStatement, } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; @@ -378,7 +380,23 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { /** * Translates a {@link ArrayPrimaryExpression} into the JavaScript language. */ - arrayLiteralExpression = async (node: ArrayPrimaryExpression): Promise => { + arrayPrimaryExpression = async (node: ArrayPrimaryExpression): Promise => { + return []; + }; + + /** + * Translates a {@link ObjectPrimaryExpression} into the JavaScript language. + * @since 0.11.0 + */ + objectPrimaryExpression = async (node: ObjectPrimaryExpression): Promise => { + return []; + }; + + /** + * Translates a {@link ObjectProperty} into the JavaScript language. + * @since 0.11.0 + */ + objectProperty = async (node: ObjectProperty): Promise => { return []; }; diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index 2e86f7572..3a17c1742 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -2,13 +2,8 @@ * The TypeScript target-specific semantic analyser. * @since 0.10.0 */ -import { - FunctionDeclaration, - ParameterDeclaration, - VariableDeclaration, - KipperTargetSemanticAnalyser, - ReservedIdentifierOverwriteError, -} from "@kipper/core"; +import type { FunctionDeclaration, ParameterDeclaration, VariableDeclaration } from "@kipper/core"; +import { KipperTargetSemanticAnalyser, ReservedIdentifierOverwriteError } from "@kipper/core"; import { TargetJS } from "./target"; /** @@ -116,7 +111,19 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys /** * Performs typescript-specific semantic analysis for {@link ArrayPrimaryExpression} instances. */ - listPrimaryExpression = undefined; + arrayPrimaryExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link ObjectPrimaryExpression} instances. + * @since 0.11.0 + */ + objectPrimaryExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link ObjectPropertyPrimaryExpression} instances. + * @since 0.11.0 + */ + objectProperty = undefined; /** * Performs typescript-specific semantic analysis for {@link IdentifierPrimaryExpression} instances. diff --git a/kipper/target-js/src/target.ts b/kipper/target-js/src/target.ts index 24b76f9df..64f9a617c 100644 --- a/kipper/target-js/src/target.ts +++ b/kipper/target-js/src/target.ts @@ -4,7 +4,8 @@ * @copyright 2021-2022 Luna Klatzer * @since 0.10.0 */ -import { BuiltInFunction, BuiltInVariable, KipperCompileTarget } from "@kipper/core"; +import type { BuiltInFunction, BuiltInVariable } from "@kipper/core"; +import { KipperCompileTarget } from "@kipper/core"; import { JavaScriptTargetSemanticAnalyser } from "./semantic-analyser"; import { JavaScriptTargetCodeGenerator } from "./code-generator"; import { JavaScriptTargetBuiltInGenerator } from "./built-in-generator"; diff --git a/kipper/target-js/src/tools.ts b/kipper/target-js/src/tools.ts index 2d33c0e42..af7495a92 100644 --- a/kipper/target-js/src/tools.ts +++ b/kipper/target-js/src/tools.ts @@ -10,7 +10,7 @@ import type { InternalFunction, InternalFunctionArgument, } from "@kipper/core"; -import { TranslatedCodeLine } from "@kipper/core"; +import type { TranslatedCodeLine } from "@kipper/core"; /** * Generates the signature for the function based on the {@link funcSpec}, which can be used in an JavaScript env. diff --git a/kipper/target-ts/src/built-in-generator.ts b/kipper/target-ts/src/built-in-generator.ts index 27115d80d..f8338178b 100644 --- a/kipper/target-ts/src/built-in-generator.ts +++ b/kipper/target-ts/src/built-in-generator.ts @@ -6,7 +6,7 @@ import type { BuiltInFunction, InternalFunction, TranslatedCodeLine } from "@kipper/core"; import { JavaScriptTargetBuiltInGenerator } from "@kipper/target-js"; import { getTSFunctionSignature, createTSFunctionSignature } from "./tools"; -import { BuiltInVariable, KipperCompilableType, KipperProgramContext } from "@kipper/core"; +import type { BuiltInVariable, KipperCompilableType, KipperProgramContext } from "@kipper/core"; import { TargetTS } from "./target"; /** diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 4e6f8db98..49283d8ad 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -2,8 +2,8 @@ * The TypeScript target-specific code generator for translating Kipper code into TypeScript. * @since 0.8.0 */ -import { TranslatedCodeLine, VariableDeclaration } from "@kipper/core"; -import { FunctionDeclaration } from "@kipper/core"; +import type { TranslatedCodeLine, VariableDeclaration } from "@kipper/core"; +import type { FunctionDeclaration } from "@kipper/core"; import { createTSFunctionSignature, getTSFunctionSignature } from "./tools"; import { JavaScriptTargetCodeGenerator } from "@kipper/target-js"; import { TargetTS } from "./target"; diff --git a/kipper/target-ts/src/target.ts b/kipper/target-ts/src/target.ts index 10b259e43..2028cbfdf 100644 --- a/kipper/target-ts/src/target.ts +++ b/kipper/target-ts/src/target.ts @@ -2,11 +2,9 @@ * The TypeScript translation target for the Kipper language. * @since 0.10.0 */ +import type { BuiltInFunction, BuiltInVariable, KipperCompilableType } from "@kipper/core"; import { - BuiltInFunction, - BuiltInVariable, kipperBoolType, - KipperCompilableType, KipperCompileTarget, kipperFuncType, kipperListType, diff --git a/kipper/target-ts/src/tools.ts b/kipper/target-ts/src/tools.ts index 8e3537452..6d2d1662e 100644 --- a/kipper/target-ts/src/tools.ts +++ b/kipper/target-ts/src/tools.ts @@ -2,7 +2,7 @@ * Tools for handling the translation of Kipper code to TypeScript. * @since 0.8.0 */ -import { +import type { FunctionDeclaration, BuiltInFunction, BuiltInFunctionArgument, diff --git a/test/module/core/ast-node.test.ts b/test/module/core/ast-node.test.ts index 8c710e018..1d1b9538f 100644 --- a/test/module/core/ast-node.test.ts +++ b/test/module/core/ast-node.test.ts @@ -1,19 +1,16 @@ import { assert } from "chai"; import { promises as fs } from "fs"; import * as path from "path"; -import { KipperParserRuleContext } from "@kipper/core"; -import { - CompilableASTNode, - KipperCompiler, - KipperParseStream, +import type { KipperParserRuleContext } from "@kipper/core"; +import type { KipperProgramContext, - RootASTNode, ParseData, TargetASTNodeSemanticAnalyser, TargetASTNodeCodeGenerator, TranslatedCodeLine, CompilableNodeParent, } from "@kipper/core"; +import { CompilableASTNode, KipperCompiler, KipperParseStream, RootASTNode } from "@kipper/core"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; const fileLocation: string = path.resolve(`${__dirname}/../../kipper-files/main.kip`); diff --git a/test/module/core/built-ins.test.ts b/test/module/core/built-ins.test.ts index 9d33b7267..e885babfa 100644 --- a/test/module/core/built-ins.test.ts +++ b/test/module/core/built-ins.test.ts @@ -1,6 +1,7 @@ import { KipperJavaScriptTarget } from "@kipper/target-js"; import { KipperTypeScriptTarget, TargetTS } from "@kipper/target-ts"; -import { CompileConfig, KipperCompiler, KipperCompileResult, KipperError, KipperParseStream } from "@kipper/core"; +import type { CompileConfig, KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler, KipperParseStream } from "@kipper/core"; import { assert } from "chai"; import * as ts from "typescript"; import { testPrintOutput } from "./core-functionality.test"; diff --git a/test/module/core/compiler.test.ts b/test/module/core/compiler.test.ts index 1ee4b6970..ee988e5d3 100644 --- a/test/module/core/compiler.test.ts +++ b/test/module/core/compiler.test.ts @@ -1,7 +1,7 @@ import { assert } from "chai"; +import type { KipperCompileResult } from "@kipper/core"; import { KipperCompiler, - KipperCompileResult, KipperError, KipperLogger, KipperParseStream, diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 5c6ac40e1..5c83a4f8a 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult } from "@kipper/core"; +import type { KipperCompileResult } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { assert } from "chai"; import * as ts from "typescript"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; diff --git a/test/module/core/errors/index.ts b/test/module/core/errors/index.ts index 05c117d5b..3ab5336a6 100644 --- a/test/module/core/errors/index.ts +++ b/test/module/core/errors/index.ts @@ -1,5 +1,5 @@ import { KipperTypeScriptTarget } from "@kipper/target-ts"; -import { CompileConfig, KipperError, KipperProgramContext } from "@kipper/core"; +import type { CompileConfig, KipperError, KipperProgramContext } from "@kipper/core"; import { assert } from "chai"; export const defaultTarget = new KipperTypeScriptTarget(); diff --git a/test/module/core/errors/kipper-error.ts b/test/module/core/errors/kipper-error.ts index 3a802db00..2583608b4 100644 --- a/test/module/core/errors/kipper-error.ts +++ b/test/module/core/errors/kipper-error.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "./index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/builtin-overwrite.ts b/test/module/core/errors/semantic-errors/builtin-overwrite.ts index 7ea554077..d6c612a87 100644 --- a/test/module/core/errors/semantic-errors/builtin-overwrite.ts +++ b/test/module/core/errors/semantic-errors/builtin-overwrite.ts @@ -1,4 +1,5 @@ -import { CompileConfig, KipperCompiler, KipperError } from "@kipper/core"; +import type { CompileConfig, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/identifier-already-used-by-parameter.ts b/test/module/core/errors/semantic-errors/identifier-already-used-by-parameter.ts index b4d5414e2..2e614bd5d 100644 --- a/test/module/core/errors/semantic-errors/identifier-already-used-by-parameter.ts +++ b/test/module/core/errors/semantic-errors/identifier-already-used-by-parameter.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts b/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts index cf72c206b..d3ddf3c07 100644 --- a/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts +++ b/test/module/core/errors/semantic-errors/identifier-already-used-by-variable.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/identifier-already-used-function.ts b/test/module/core/errors/semantic-errors/identifier-already-used-function.ts index 7d1997828..d66fbde64 100644 --- a/test/module/core/errors/semantic-errors/identifier-already-used-function.ts +++ b/test/module/core/errors/semantic-errors/identifier-already-used-function.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts b/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts index 65a4dd66c..2a70512be 100644 --- a/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts +++ b/test/module/core/errors/semantic-errors/incomplete-returns-in-code-paths.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/invalid-amount-of-arguments.ts b/test/module/core/errors/semantic-errors/invalid-amount-of-arguments.ts index fa7aea59f..a28ed67de 100644 --- a/test/module/core/errors/semantic-errors/invalid-amount-of-arguments.ts +++ b/test/module/core/errors/semantic-errors/invalid-amount-of-arguments.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/invalid-assignment.ts b/test/module/core/errors/semantic-errors/invalid-assignment.ts index 830b64334..452de8439 100644 --- a/test/module/core/errors/semantic-errors/invalid-assignment.ts +++ b/test/module/core/errors/semantic-errors/invalid-assignment.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, defaultTarget, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/invalid-global.ts b/test/module/core/errors/semantic-errors/invalid-global.ts index 174df148b..7b0e98a8e 100644 --- a/test/module/core/errors/semantic-errors/invalid-global.ts +++ b/test/module/core/errors/semantic-errors/invalid-global.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError, KipperParseStream, KipperProgramContext, ParseData } from "@kipper/core"; +import type { KipperError, KipperProgramContext, ParseData } from "@kipper/core"; +import { KipperCompiler, KipperParseStream } from "@kipper/core"; import { defaultConfig } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts b/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts index bdbbf5f3f..db1823e1a 100644 --- a/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts +++ b/test/module/core/errors/semantic-errors/invalid-relational-comparison.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts b/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts index f9a394705..dd6a2e39e 100644 --- a/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts +++ b/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/undefined-constant.ts b/test/module/core/errors/semantic-errors/undefined-constant.ts index 6a5bb599e..502497dd0 100644 --- a/test/module/core/errors/semantic-errors/undefined-constant.ts +++ b/test/module/core/errors/semantic-errors/undefined-constant.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/undefined-reference.ts b/test/module/core/errors/semantic-errors/undefined-reference.ts index 9d8280ba6..385741d3b 100644 --- a/test/module/core/errors/semantic-errors/undefined-reference.ts +++ b/test/module/core/errors/semantic-errors/undefined-reference.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/unknown-reference.ts b/test/module/core/errors/semantic-errors/unknown-reference.ts index 7ebd11187..c24754fe0 100644 --- a/test/module/core/errors/semantic-errors/unknown-reference.ts +++ b/test/module/core/errors/semantic-errors/unknown-reference.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/syntax-errors/invalid-unary-exp-operand.ts b/test/module/core/errors/syntax-errors/invalid-unary-exp-operand.ts index 3e7f6eae5..fe57075d9 100644 --- a/test/module/core/errors/syntax-errors/invalid-unary-exp-operand.ts +++ b/test/module/core/errors/syntax-errors/invalid-unary-exp-operand.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/syntax-errors/missing-function-body.ts b/test/module/core/errors/syntax-errors/missing-function-body.ts index 21b4e2ec8..c7f4cb8a5 100644 --- a/test/module/core/errors/syntax-errors/missing-function-body.ts +++ b/test/module/core/errors/syntax-errors/missing-function-body.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError, KipperSyntaxError } from "@kipper/core"; +import type { KipperCompileResult, KipperError, KipperSyntaxError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/syntax-errors/syntax-error.ts b/test/module/core/errors/syntax-errors/syntax-error.ts index 758b411e9..790dded62 100644 --- a/test/module/core/errors/syntax-errors/syntax-error.ts +++ b/test/module/core/errors/syntax-errors/syntax-error.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError, LexerOrParserSyntaxError } from "@kipper/core"; +import type { KipperError, LexerOrParserSyntaxError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/argument-type-error.ts b/test/module/core/errors/type-errors/argument-type-error.ts index 6a30e0409..5e91d674f 100644 --- a/test/module/core/errors/type-errors/argument-type-error.ts +++ b/test/module/core/errors/type-errors/argument-type-error.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { assert } from "chai"; import { defaultConfig, ensureTracebackDataExists } from "../index"; diff --git a/test/module/core/errors/type-errors/arithmetic-operation.ts b/test/module/core/errors/type-errors/arithmetic-operation.ts index 61290a432..bb2c5e929 100644 --- a/test/module/core/errors/type-errors/arithmetic-operation.ts +++ b/test/module/core/errors/type-errors/arithmetic-operation.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, defaultTarget, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/assignment-type.ts b/test/module/core/errors/type-errors/assignment-type.ts index 6ed16fa79..acbcc8e78 100644 --- a/test/module/core/errors/type-errors/assignment-type.ts +++ b/test/module/core/errors/type-errors/assignment-type.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, defaultTarget, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/invalid-conversion.ts b/test/module/core/errors/type-errors/invalid-conversion.ts index 0ed1d1478..b1e57cb1f 100644 --- a/test/module/core/errors/type-errors/invalid-conversion.ts +++ b/test/module/core/errors/type-errors/invalid-conversion.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, defaultTarget, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/invalid-key-type.ts b/test/module/core/errors/type-errors/invalid-key-type.ts index 01a550fac..6eee024af 100644 --- a/test/module/core/errors/type-errors/invalid-key-type.ts +++ b/test/module/core/errors/type-errors/invalid-key-type.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { assert } from "chai"; import { defaultConfig, ensureTracebackDataExists } from "../index"; diff --git a/test/module/core/errors/type-errors/invalid-unary-exp.ts b/test/module/core/errors/type-errors/invalid-unary-exp.ts index 2ab573787..7ad4585b6 100644 --- a/test/module/core/errors/type-errors/invalid-unary-exp.ts +++ b/test/module/core/errors/type-errors/invalid-unary-exp.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/readonly-write.ts b/test/module/core/errors/type-errors/readonly-write.ts index 5662dbcc2..8fc8d0ceb 100644 --- a/test/module/core/errors/type-errors/readonly-write.ts +++ b/test/module/core/errors/type-errors/readonly-write.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/unknown-type.ts b/test/module/core/errors/type-errors/unknown-type.ts index 88b9dcebf..f5920c8c6 100644 --- a/test/module/core/errors/type-errors/unknown-type.ts +++ b/test/module/core/errors/type-errors/unknown-type.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/value-not-indexable.ts b/test/module/core/errors/type-errors/value-not-indexable.ts index 4204937d3..63d4b8aa7 100644 --- a/test/module/core/errors/type-errors/value-not-indexable.ts +++ b/test/module/core/errors/type-errors/value-not-indexable.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, KipperCompileResult, KipperError } from "@kipper/core"; +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { assert } from "chai"; import { defaultConfig, ensureTracebackDataExists } from "../index"; diff --git a/test/module/core/global-scope.test.ts b/test/module/core/global-scope.test.ts index 185e7ca11..bae4f6bd0 100644 --- a/test/module/core/global-scope.test.ts +++ b/test/module/core/global-scope.test.ts @@ -1,4 +1,5 @@ -import { KipperCompiler, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "@kipper/core"; +import type { ScopeFunctionDeclaration } from "@kipper/core"; +import { KipperCompiler, ScopeVariableDeclaration } from "@kipper/core"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; import { assert } from "chai"; diff --git a/test/module/core/not-implemented.test.ts b/test/module/core/not-implemented.test.ts index d7b155eb6..fb5bf5af2 100644 --- a/test/module/core/not-implemented.test.ts +++ b/test/module/core/not-implemented.test.ts @@ -1,5 +1,6 @@ import { KipperTypeScriptTarget } from "@kipper/target-ts"; -import { KipperCompiler, KipperError } from "@kipper/core"; +import type { KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { assert } from "chai"; describe("NotImplemented", () => { diff --git a/test/module/core/optimiser.test.ts b/test/module/core/optimiser.test.ts index 967d5fb1a..8d2abfc7c 100644 --- a/test/module/core/optimiser.test.ts +++ b/test/module/core/optimiser.test.ts @@ -1,4 +1,5 @@ -import { CompileConfig, KipperCompiler, KipperCompileResult } from "@kipper/core"; +import type { CompileConfig, KipperCompileResult } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; import { assert } from "chai"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; diff --git a/test/module/core/program-ctx.test.ts b/test/module/core/program-ctx.test.ts index e60356578..8cd6d1629 100644 --- a/test/module/core/program-ctx.test.ts +++ b/test/module/core/program-ctx.test.ts @@ -1,11 +1,6 @@ import { assert } from "chai"; -import { - BuiltInFunction, - EvaluatedCompileConfig, - InvalidGlobalError, - KipperCompiler, - KipperParseStream, -} from "@kipper/core"; +import type { BuiltInFunction } from "@kipper/core"; +import { EvaluatedCompileConfig, InvalidGlobalError, KipperCompiler, KipperParseStream } from "@kipper/core"; import { promises as fs } from "fs"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; import * as path from "path"; diff --git a/test/module/core/warnings/index.ts b/test/module/core/warnings/index.ts index dddfbe5fa..5505af05e 100644 --- a/test/module/core/warnings/index.ts +++ b/test/module/core/warnings/index.ts @@ -1,5 +1,5 @@ import { defaultConfig, ensureTracebackDataExists } from "../errors"; -import { KipperProgramContext } from "@kipper/core"; +import type { KipperProgramContext } from "@kipper/core"; import { assert } from "chai"; export function ensureWarningWasReported(programCtx?: KipperProgramContext): void { From dea3bfacdf53ac2da20209beba05ddc7982ac3f3 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 13:32:38 +0200 Subject: [PATCH 147/257] other: Updated CHANGELOG.md --- CHANGELOG.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9d95894a..42d9a0b24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,11 +40,13 @@ To use development versions of Kipper download the - `kipper/core/compiler/ast/factories`, which replaces the old file `factories.ts` and contains all AST factory classes and types. - `kipper/core/compiler/ast/mapping`, which contains all AST mapping objects and the `ASTNodeMapper` class. -- New class: +- New classes: - `ASTNodeMapper`, which handles the mapping between kind numbers, rule names, AST classes and parser context classes. - `PrimaryExpression`, which is an abstract base class for all primary expressions. - `PostfixExpression`, which is an abstract base class for all postfix expressions. - `PromptModule` in `@kipper/cli`, which contains all prompt-related functions and classes. + - `ObjectPrimaryExpression`, which represents an AST object primary expression. + - `ObjectProperty`, which represents an AST object property. - New interfaces: - `PrimaryExpressionSemantics`, which represents the semantics of a primary expression. - `PrimaryExpressionTypeSemantics`, which represents the type semantics of a primary expression. @@ -64,6 +66,10 @@ To use development versions of Kipper download the - `JumpStatementTypeSemantics`, which represents the type semantics of a jump statement. - `SwitchStatementSemantics`, which represents the semantics of a switch statement. - `SwitchStatementTypeSemantics`, which represents the type semantics of a switch statement. + - `ObjectPrimaryExpressionSemantics`, which represents the semantics of an object primary expression. + - `ObjectPrimaryExpressionTypeSemantics`, which represents the type semantics of an object primary expression. + - `ObjectPropertySemantics`, which represents the semantics of an object property. + - `ObjectPropertyTypeSemantics`, which represents the type semantics of an object property. - New parameters: - `ignoreParams` in `genJSFunction()`, which, if true makes the function signature define no parameters. - `ignoreParams` in `createJSFunctionSignature()`, which, if true makes the function signature define no parameters. @@ -124,6 +130,8 @@ To use development versions of Kipper download the - Interface `ArrayLiteralPrimaryExpressionTypeSemantics` to `ArrayPrimaryExpressionTypeSemantics`. - Interface `TangledPrimaryTypeSemantics` to `TangledPrimaryExpressionTypeSemantics`. - Interface `DoWhileLoopStatementSemantics` to `DoWhileLoopIterationStatementSemantics`. + - Method `TargetASTNodeCodeGenerator.arrayLiteralExpression` to `arrayPrimaryExpression`. + - Method `TargetASTNodeSemanticAnalyser.listPrimaryExpression` to `arrayPrimaryExpression`. - Moved: - `kipper/core/utils.ts` to `kipper/core/tools` and separated it into multiple files & modules. - `kipper/core/compiler/ast/root-ast-node.ts` to the `kipper/core/compiler/ast/nodes` module. @@ -149,6 +157,11 @@ To use development versions of Kipper download the ### Removed +- Removed AST parent class `ConstantExpression`, its interfaces `ConstantExpressionSemantics` and + `ConstantExpressionTypeSemantics`, as they were not really needed and unnecessarily added another level of + complexity to the AST. All classes which previously inherited from `ConstantExpression` now inherit from + `PrimaryExpression` instead. + ## [0.10.4] - 2023-08-15 From 23efd0e7a9692fae954be34f2cf4142f675a46a6 Mon Sep 17 00:00:00 2001 From: Fabian Date: Mon, 1 Jul 2024 14:20:10 +0200 Subject: [PATCH 148/257] minor (#271) I implemented the AST Node for the do-while-loop --- kipper/cli/lib/commands/analyse.d.ts | 10 ++ kipper/cli/lib/commands/analyse.js | 72 ++++++++ kipper/cli/lib/commands/analyse.js.map | 1 + kipper/cli/lib/commands/compile.d.ts | 31 ++++ kipper/cli/lib/commands/compile.js | 155 ++++++++++++++++++ kipper/cli/lib/commands/compile.js.map | 1 + kipper/cli/lib/commands/help.d.ts | 12 ++ kipper/cli/lib/commands/help.js | 14 ++ kipper/cli/lib/commands/help.js.map | 1 + kipper/cli/lib/commands/new.d.ts | 15 ++ kipper/cli/lib/commands/new.js | 126 ++++++++++++++ kipper/cli/lib/commands/new.js.map | 1 + kipper/cli/lib/commands/run.d.ts | 11 ++ kipper/cli/lib/commands/run.js | 93 +++++++++++ kipper/cli/lib/commands/run.js.map | 1 + kipper/cli/lib/commands/version.d.ts | 5 + kipper/cli/lib/commands/version.js | 11 ++ kipper/cli/lib/commands/version.js.map | 1 + kipper/cli/lib/config-loader.d.ts | 12 ++ kipper/cli/lib/config-loader.js | 33 ++++ kipper/cli/lib/config-loader.js.map | 1 + kipper/cli/lib/copy-resources.d.ts | 3 + kipper/cli/lib/copy-resources.js | 21 +++ kipper/cli/lib/copy-resources.js.map | 1 + kipper/cli/lib/decorators.d.ts | 2 + kipper/cli/lib/decorators.js | 60 +++++++ kipper/cli/lib/decorators.js.map | 1 + kipper/cli/lib/errors.d.ts | 19 +++ kipper/cli/lib/errors.js | 41 +++++ kipper/cli/lib/errors.js.map | 1 + kipper/cli/lib/help.d.ts | 4 + kipper/cli/lib/help.js | 8 + kipper/cli/lib/help.js.map | 1 + kipper/cli/lib/index.d.ts | 10 ++ kipper/cli/lib/index.js | 16 ++ kipper/cli/lib/index.js.map | 1 + kipper/cli/lib/input/file-stream.d.ts | 25 +++ kipper/cli/lib/input/file-stream.js | 86 ++++++++++ kipper/cli/lib/input/file-stream.js.map | 1 + kipper/cli/lib/input/index.d.ts | 2 + kipper/cli/lib/input/index.js | 6 + kipper/cli/lib/input/index.js.map | 1 + kipper/cli/lib/input/target.d.ts | 2 + kipper/cli/lib/input/target.js | 20 +++ kipper/cli/lib/input/target.js.map | 1 + kipper/cli/lib/logger.d.ts | 8 + kipper/cli/lib/logger.js | 33 ++++ kipper/cli/lib/logger.js.map | 1 + kipper/cli/lib/output/compile.d.ts | 3 + kipper/cli/lib/output/compile.js | 33 ++++ kipper/cli/lib/output/compile.js.map | 1 + kipper/cli/lib/output/index.d.ts | 1 + kipper/cli/lib/output/index.js | 5 + kipper/cli/lib/output/index.js.map | 1 + kipper/cli/lib/prompt-module.d.ts | 8 + kipper/cli/lib/prompt-module.js | 54 ++++++ kipper/cli/lib/prompt-module.js.map | 1 + kipper/cli/lib/templates/.gitignore.template | 130 +++++++++++++++ .../lib/templates/kip-config.json.template | 12 ++ kipper/cli/lib/templates/main.kip.template | 12 ++ .../cli/lib/templates/package.json.template | 18 ++ .../templates/templates/.gitignore.template | 130 +++++++++++++++ .../templates/kip-config.json.template | 12 ++ .../lib/templates/templates/main.kip.template | 12 ++ .../templates/templates/package.json.template | 18 ++ ...hile-loop-iteration-statement-semantics.ts | 15 +- .../do-while-loop-iteration-statement.ts | 18 +- .../while-loop-iteration-statement.ts | 1 + kipper/core/src/compiler/program-ctx.ts | 1 + kipper/target-js/src/code-generator.ts | 15 +- test/kipper-files/do-while-loop.kip | 6 + test/module/core/compiler.test.ts | 16 ++ test/module/core/core-functionality.test.ts | 86 ++++++++++ 73 files changed, 1580 insertions(+), 11 deletions(-) create mode 100644 kipper/cli/lib/commands/analyse.d.ts create mode 100644 kipper/cli/lib/commands/analyse.js create mode 100644 kipper/cli/lib/commands/analyse.js.map create mode 100644 kipper/cli/lib/commands/compile.d.ts create mode 100644 kipper/cli/lib/commands/compile.js create mode 100644 kipper/cli/lib/commands/compile.js.map create mode 100644 kipper/cli/lib/commands/help.d.ts create mode 100644 kipper/cli/lib/commands/help.js create mode 100644 kipper/cli/lib/commands/help.js.map create mode 100644 kipper/cli/lib/commands/new.d.ts create mode 100644 kipper/cli/lib/commands/new.js create mode 100644 kipper/cli/lib/commands/new.js.map create mode 100644 kipper/cli/lib/commands/run.d.ts create mode 100644 kipper/cli/lib/commands/run.js create mode 100644 kipper/cli/lib/commands/run.js.map create mode 100644 kipper/cli/lib/commands/version.d.ts create mode 100644 kipper/cli/lib/commands/version.js create mode 100644 kipper/cli/lib/commands/version.js.map create mode 100644 kipper/cli/lib/config-loader.d.ts create mode 100644 kipper/cli/lib/config-loader.js create mode 100644 kipper/cli/lib/config-loader.js.map create mode 100644 kipper/cli/lib/copy-resources.d.ts create mode 100644 kipper/cli/lib/copy-resources.js create mode 100644 kipper/cli/lib/copy-resources.js.map create mode 100644 kipper/cli/lib/decorators.d.ts create mode 100644 kipper/cli/lib/decorators.js create mode 100644 kipper/cli/lib/decorators.js.map create mode 100644 kipper/cli/lib/errors.d.ts create mode 100644 kipper/cli/lib/errors.js create mode 100644 kipper/cli/lib/errors.js.map create mode 100644 kipper/cli/lib/help.d.ts create mode 100644 kipper/cli/lib/help.js create mode 100644 kipper/cli/lib/help.js.map create mode 100644 kipper/cli/lib/index.d.ts create mode 100644 kipper/cli/lib/index.js create mode 100644 kipper/cli/lib/index.js.map create mode 100644 kipper/cli/lib/input/file-stream.d.ts create mode 100644 kipper/cli/lib/input/file-stream.js create mode 100644 kipper/cli/lib/input/file-stream.js.map create mode 100644 kipper/cli/lib/input/index.d.ts create mode 100644 kipper/cli/lib/input/index.js create mode 100644 kipper/cli/lib/input/index.js.map create mode 100644 kipper/cli/lib/input/target.d.ts create mode 100644 kipper/cli/lib/input/target.js create mode 100644 kipper/cli/lib/input/target.js.map create mode 100644 kipper/cli/lib/logger.d.ts create mode 100644 kipper/cli/lib/logger.js create mode 100644 kipper/cli/lib/logger.js.map create mode 100644 kipper/cli/lib/output/compile.d.ts create mode 100644 kipper/cli/lib/output/compile.js create mode 100644 kipper/cli/lib/output/compile.js.map create mode 100644 kipper/cli/lib/output/index.d.ts create mode 100644 kipper/cli/lib/output/index.js create mode 100644 kipper/cli/lib/output/index.js.map create mode 100644 kipper/cli/lib/prompt-module.d.ts create mode 100644 kipper/cli/lib/prompt-module.js create mode 100644 kipper/cli/lib/prompt-module.js.map create mode 100644 kipper/cli/lib/templates/.gitignore.template create mode 100644 kipper/cli/lib/templates/kip-config.json.template create mode 100644 kipper/cli/lib/templates/main.kip.template create mode 100644 kipper/cli/lib/templates/package.json.template create mode 100644 kipper/cli/lib/templates/templates/.gitignore.template create mode 100644 kipper/cli/lib/templates/templates/kip-config.json.template create mode 100644 kipper/cli/lib/templates/templates/main.kip.template create mode 100644 kipper/cli/lib/templates/templates/package.json.template create mode 100644 test/kipper-files/do-while-loop.kip diff --git a/kipper/cli/lib/commands/analyse.d.ts b/kipper/cli/lib/commands/analyse.d.ts new file mode 100644 index 000000000..86b4aea8c --- /dev/null +++ b/kipper/cli/lib/commands/analyse.d.ts @@ -0,0 +1,10 @@ +import type { args } from "@oclif/parser"; +import { Command, flags } from "@oclif/command"; +export default class Analyse extends Command { + static description: string; + static examples: Array; + static args: args.Input; + static flags: flags.Input; + private getRunConfig; + run(): Promise; +} diff --git a/kipper/cli/lib/commands/analyse.js b/kipper/cli/lib/commands/analyse.js new file mode 100644 index 000000000..30ef32adb --- /dev/null +++ b/kipper/cli/lib/commands/analyse.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const command_1 = require("@oclif/command"); +const core_1 = require("@kipper/core"); +const logger_1 = require("../logger"); +const input_1 = require("../input/"); +const decorators_1 = require("../decorators"); +const config_loader_1 = require("../config-loader"); +class Analyse extends command_1.Command { + async getRunConfig() { + const { args, flags } = this.parse(Analyse); + const preExistingConfig = await (0, config_loader_1.loadAutoConfig)(); + const { stream } = await (0, input_1.getParseStream)(args, flags, preExistingConfig); + return { + args, + flags, + config: { + stream, + }, + }; + } + async run() { + const { flags, config } = await this.getRunConfig(); + const logger = new core_1.KipperLogger(logger_1.CLIEmitHandler.emit, core_1.LogLevel.INFO, flags["warnings"]); + const compiler = new core_1.KipperCompiler(logger); + const startTime = new Date().getTime(); + try { + await compiler.syntaxAnalyse(config.stream); + } + catch (e) { + return; + } + const duration = (new Date().getTime() - startTime) / 1000; + await logger.info(`Done in ${duration}s.`); + } +} +Analyse.description = "Analyse a Kipper file and validate its syntax and semantic integrity."; +Analyse.examples = []; +Analyse.args = [ + { + name: "file", + required: false, + description: "The file that should be analysed.", + }, +]; +Analyse.flags = { + encoding: command_1.flags.string({ + char: "e", + default: "utf8", + description: `The encoding that should be used to read the file (${input_1.KipperEncodings.join()}).`, + parse: input_1.verifyEncoding, + }), + "string-code": command_1.flags.string({ + char: "s", + description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter.", + }), + warnings: command_1.flags.boolean({ + char: "w", + default: true, + description: "Show warnings that were emitted during the analysis.", + allowNo: true, + }), +}; +exports.default = Analyse; +tslib_1.__decorate([ + (0, decorators_1.prettifiedErrors)(), + tslib_1.__metadata("design:type", Function), + tslib_1.__metadata("design:paramtypes", []), + tslib_1.__metadata("design:returntype", Promise) +], Analyse.prototype, "run", null); +//# sourceMappingURL=analyse.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/analyse.js.map b/kipper/cli/lib/commands/analyse.js.map new file mode 100644 index 000000000..21fe5c279 --- /dev/null +++ b/kipper/cli/lib/commands/analyse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"analyse.js","sourceRoot":"","sources":["../../src/commands/analyse.ts"],"names":[],"mappings":";;;AAKA,4CAAgD;AAChD,uCAAsE;AACtE,sCAA2C;AAC3C,qCAA4E;AAC5E,8CAAiD;AACjD,oDAAkD;AAElD,MAAqB,OAAQ,SAAQ,iBAAO;IAqCnC,KAAK,CAAC,YAAY;QACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAG5C,MAAM,iBAAiB,GAAG,MAAM,IAAA,8BAAc,GAAE,CAAC;QAGjD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAExE,OAAO;YACN,IAAI;YACJ,KAAK;YACL,MAAM,EAAE;gBACP,MAAM;aACN;SACD,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,GAAG;QACf,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,mBAAY,CAAC,uBAAc,CAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,qBAAc,CAAC,MAAM,CAAC,CAAC;QAG5C,MAAM,SAAS,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAG/C,IAAI;YACH,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACX,OAAO;SACP;QAGD,MAAM,QAAQ,GAAW,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,CAAC;IAC5C,CAAC;;AAzEe,mBAAW,GAAW,uEAAuE,CAAC;AAG9F,gBAAQ,GAAkB,EAAE,CAAC;AAE7B,YAAI,GAAe;IAClC;QACC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,mCAAmC;KAChD;CACD,CAAC;AAEc,aAAK,GAAqB;IACzC,QAAQ,EAAE,eAAK,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,sDAAsD,uBAAe,CAAC,IAAI,EAAE,IAAI;QAC7F,KAAK,EAAE,sBAAc;KACrB,CAAC;IACF,aAAa,EAAE,eAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,4FAA4F;KACzG,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,OAAO,CAAC;QACvB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,sDAAsD;QACnE,OAAO,EAAE,IAAI;KACb,CAAC;CACF,CAAC;kBA/BkB,OAAO;AAwDd;IADZ,IAAA,6BAAgB,GAAW;;;;kCAmB3B"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/compile.d.ts b/kipper/cli/lib/commands/compile.d.ts new file mode 100644 index 000000000..7ac9b78bd --- /dev/null +++ b/kipper/cli/lib/commands/compile.d.ts @@ -0,0 +1,31 @@ +import type { args } from "@oclif/parser"; +import { Command, flags } from "@oclif/command"; +import { CompileConfig, KipperCompileTarget, KipperLogger } from "@kipper/core"; +import { KipperParseFile } from "../input/"; +export default class Compile extends Command { + static description: string; + static examples: Array; + static args: args.Input; + static flags: flags.Input; + protected getRunConfig(): Promise<{ + args: { + [name: string]: any; + }; + flags: { + [x: string]: any; + }; + config: { + stream: KipperParseFile | import("@kipper/core").KipperParseStream; + target: KipperCompileTarget; + outDir: string; + outPath: string; + encoding: any; + resources: { + src: string; + out: string; + }[]; + compilerOptions: CompileConfig; + }; + }>; + run(logger?: KipperLogger): Promise; +} diff --git a/kipper/cli/lib/commands/compile.js b/kipper/cli/lib/commands/compile.js new file mode 100644 index 000000000..f607b932d --- /dev/null +++ b/kipper/cli/lib/commands/compile.js @@ -0,0 +1,155 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const command_1 = require("@oclif/command"); +const tslog_1 = require("tslog"); +const core_1 = require("@kipper/core"); +const logger_1 = require("../logger"); +const input_1 = require("../input/"); +const output_1 = require("../output"); +const decorators_1 = require("../decorators"); +const config_loader_1 = require("../config-loader"); +const copy_resources_1 = require("../copy-resources"); +const node_path_1 = tslib_1.__importDefault(require("node:path")); +class Compile extends command_1.Command { + async getRunConfig() { + const { args, flags } = this.parse(Compile); + const preExistingConfig = await (0, config_loader_1.loadAutoConfig)(); + const preExistingCompileConfig = preExistingConfig?.genCompilerConfig(); + const { stream, outDir } = await (0, input_1.getParseStream)(args, flags, preExistingConfig); + const target = flags["target"] + ? (0, input_1.getTarget)(flags["target"]) + : preExistingCompileConfig?.target ?? (0, input_1.getTarget)("js"); + const encoding = flags["encoding"] || "utf-8"; + const fileName = stream instanceof input_1.KipperParseFile ? stream.path.name : stream.name; + const outPath = `${node_path_1.default.resolve(outDir)}/${fileName}.${target.fileExtension}`; + return { + args, + flags, + config: { + stream, + target, + outDir, + outPath, + encoding, + resources: preExistingConfig?.resources ?? [], + compilerOptions: { + ...preExistingCompileConfig, + target: target, + optimisationOptions: { + optimiseInternals: flags["optimise-internals"] ?? + preExistingCompileConfig?.optimisationOptions?.optimiseInternals ?? + core_1.defaultOptimisationOptions.optimiseInternals, + optimiseBuiltIns: flags["optimise-builtins"] ?? + preExistingCompileConfig?.optimisationOptions?.optimiseBuiltIns ?? + core_1.defaultOptimisationOptions.optimiseBuiltIns, + }, + recover: flags["recover"] ?? preExistingCompileConfig?.recover ?? core_1.EvaluatedCompileConfig.defaults.recover, + abortOnFirstError: flags["abort-on-first-error"] ?? + preExistingCompileConfig?.abortOnFirstError ?? + core_1.EvaluatedCompileConfig.defaults.abortOnFirstError, + }, + }, + }; + } + async run(logger) { + const { flags, config } = await this.getRunConfig(); + logger = logger ?? new core_1.KipperLogger(logger_1.CLIEmitHandler.emit, core_1.LogLevel.INFO, flags["warnings"]); + const compiler = new core_1.KipperCompiler(logger); + if (flags["log-timestamp"]) { + logger_1.CLIEmitHandler.cliLogger = new tslog_1.Logger({ ...logger_1.defaultKipperLoggerConfig, displayDateTime: true }); + } + const startTime = new Date().getTime(); + let result; + try { + result = await compiler.compile(config.stream, config.compilerOptions); + } + catch (e) { + if (e instanceof core_1.KipperError && config.compilerOptions.abortOnFirstError) { + return; + } + throw e; + } + if (!result.success) { + return; + } + const out = await (0, output_1.writeCompilationResult)(result, config.outDir, config.outPath, config.encoding); + logger.debug(`Generated file '${out}'.`); + if (config.resources) { + await (0, copy_resources_1.copyConfigResources)(config.resources); + logger.debug(`Finished copying resources specified in config.`); + } + const duration = (new Date().getTime() - startTime) / 1000; + logger.info(`Done in ${duration}s.`); + } +} +Compile.description = "Compile a Kipper program into the specified target language."; +Compile.examples = []; +Compile.args = [ + { + name: "file", + required: false, + description: "The file that should be compiled. Takes precedence over the 'string-code' flag and the config file.", + }, +]; +Compile.flags = { + target: command_1.flags.string({ + char: "t", + description: "The target language where the compiled program should be emitted to.", + options: ["js", "ts"], + }), + encoding: command_1.flags.string({ + char: "e", + description: `The encoding that should be used to read the file (${input_1.KipperEncodings.join()}).`, + parse: input_1.verifyEncoding, + }), + "output-dir": command_1.flags.string({ + char: "o", + description: "The build directory where the compiled files should be placed. If the path does not exist, it will be created. Takes precedence over the config file, defaults to 'build' if both are not provided", + }), + "string-code": command_1.flags.string({ + char: "s", + description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter. Takes precedence over the config file.", + }), + "optimise-internals": command_1.flags.boolean({ + char: "i", + default: core_1.defaultOptimisationOptions.optimiseInternals, + description: "Optimise the generated internal functions using tree-shaking to reduce the size of the output.", + allowNo: true, + }), + "optimise-builtins": command_1.flags.boolean({ + char: "b", + default: core_1.defaultOptimisationOptions.optimiseInternals, + description: "Optimise the generated built-in functions using tree-shaking to reduce the size of the output.", + allowNo: true, + }), + warnings: command_1.flags.boolean({ + char: "w", + default: true, + description: "Show warnings that were emitted during the compilation.", + allowNo: true, + }), + "log-timestamp": command_1.flags.boolean({ + default: false, + description: "Show the timestamp of each log message.", + allowNo: true, + }), + recover: command_1.flags.boolean({ + default: core_1.EvaluatedCompileConfig.defaults.recover, + description: "Recover from compiler errors and log all detected semantic issues.", + allowNo: true, + }), + "abort-on-first-error": command_1.flags.boolean({ + default: core_1.EvaluatedCompileConfig.defaults.abortOnFirstError, + description: "Abort on the first error the compiler encounters.", + allowNo: true, + }), +}; +exports.default = Compile; +tslib_1.__decorate([ + (0, decorators_1.prettifiedErrors)(), + tslib_1.__metadata("design:type", Function), + tslib_1.__metadata("design:paramtypes", [core_1.KipperLogger]), + tslib_1.__metadata("design:returntype", Promise) +], Compile.prototype, "run", null); +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/compile.js.map b/kipper/cli/lib/commands/compile.js.map new file mode 100644 index 000000000..d1ffc6255 --- /dev/null +++ b/kipper/cli/lib/commands/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":";;;AAKA,4CAAgD;AAChD,iCAA+B;AAC/B,uCAUsB;AACtB,sCAAsE;AACtE,qCAAwH;AACxH,sCAAmD;AACnD,8CAAiD;AACjD,oDAAkD;AAClD,sDAAwD;AACxD,kEAA6B;AAE7B,MAAqB,OAAQ,SAAQ,iBAAO;IAgFjC,KAAK,CAAC,YAAY;QAC3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAG5C,MAAM,iBAAiB,GAAG,MAAM,IAAA,8BAAc,GAAE,CAAC;QACjD,MAAM,wBAAwB,GAAG,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;QAGxE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAChF,MAAM,MAAM,GAAwB,KAAK,CAAC,QAAQ,CAAC;YAClD,CAAC,CAAC,IAAA,iBAAS,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC,CAAC,wBAAwB,EAAE,MAAM,IAAI,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAC;QAGvD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,YAAY,uBAAe,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACpF,MAAM,OAAO,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAE9E,OAAO;YACN,IAAI;YACJ,KAAK;YACL,MAAM,EAAE;gBACP,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,OAAO;gBACP,QAAQ;gBACR,SAAS,EAAE,iBAAiB,EAAE,SAAS,IAAI,EAAE;gBAC7C,eAAe,EAAE;oBAChB,GAAG,wBAAwB;oBAC3B,MAAM,EAAE,MAAM;oBACd,mBAAmB,EAAE;wBACpB,iBAAiB,EAChB,KAAK,CAAC,oBAAoB,CAAC;4BAC3B,wBAAwB,EAAE,mBAAmB,EAAE,iBAAiB;4BAChE,iCAA0B,CAAC,iBAAiB;wBAC7C,gBAAgB,EACf,KAAK,CAAC,mBAAmB,CAAC;4BAC1B,wBAAwB,EAAE,mBAAmB,EAAE,gBAAgB;4BAC/D,iCAA0B,CAAC,gBAAgB;qBAC5C;oBACD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,wBAAwB,EAAE,OAAO,IAAI,6BAAsB,CAAC,QAAQ,CAAC,OAAO;oBACzG,iBAAiB,EAChB,KAAK,CAAC,sBAAsB,CAAC;wBAC7B,wBAAwB,EAAE,iBAAiB;wBAC3C,6BAAsB,CAAC,QAAQ,CAAC,iBAAiB;iBACjC;aAClB;SACD,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,GAAG,CAAC,MAAqB;QACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpD,MAAM,GAAG,MAAM,IAAI,IAAI,mBAAY,CAAC,uBAAc,CAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,IAAI,qBAAc,CAAC,MAAM,CAAC,CAAC;QAG5C,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE;YAC3B,uBAAc,CAAC,SAAS,GAAG,IAAI,cAAM,CAAC,EAAE,GAAG,kCAAyB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/F;QAGD,MAAM,SAAS,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAG/C,IAAI,MAA2B,CAAC;QAChC,IAAI;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;SACvE;QAAC,OAAO,CAAC,EAAE;YACX,IAAI,CAAC,YAAY,kBAAW,IAAI,MAAM,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBAGzE,OAAO;aACP;YACD,MAAM,CAAC,CAAC;SACR;QAGD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACpB,OAAO;SACP;QAGD,MAAM,GAAG,GAAG,MAAM,IAAA,+BAAsB,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjG,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;QAGzC,IAAI,MAAM,CAAC,SAAS,EAAE;YACrB,MAAM,IAAA,oCAAmB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;SAChE;QAGD,MAAM,QAAQ,GAAW,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,CAAC;IACtC,CAAC;;AAhLe,mBAAW,GAAW,8DAA8D,CAAC;AAGrF,gBAAQ,GAAkB,EAAE,CAAC;AAE7B,YAAI,GAAe;IAClC;QACC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EACV,qGAAqG;KACtG;CACD,CAAC;AAEc,aAAK,GAAqB;IACzC,MAAM,EAAE,eAAK,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sEAAsE;QACnF,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sDAAsD,uBAAe,CAAC,IAAI,EAAE,IAAI;QAC7F,KAAK,EAAE,sBAAc;KACrB,CAAC;IACF,YAAY,EAAE,eAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,GAAG;QACT,WAAW,EACV,oMAAoM;KACrM,CAAC;IACF,aAAa,EAAE,eAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,GAAG;QACT,WAAW,EACV,mIAAmI;KACpI,CAAC;IACF,oBAAoB,EAAE,eAAK,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,GAAG;QACT,OAAO,EAAW,iCAA0B,CAAC,iBAAiB;QAC9D,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,mBAAmB,EAAE,eAAK,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,GAAG;QACT,OAAO,EAAW,iCAA0B,CAAC,iBAAiB;QAC9D,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,OAAO,CAAC;QAEvB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,IAAI;KACb,CAAC;IACF,eAAe,EAAE,eAAK,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,IAAI;KACb,CAAC;IACF,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,OAAO;QAChD,WAAW,EAAE,oEAAoE;QACjF,OAAO,EAAE,IAAI;KACb,CAAC;IAKF,sBAAsB,EAAE,eAAK,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,iBAAiB;QAC1D,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,IAAI;KACb,CAAC;CACF,CAAC;kBA1EkB,OAAO;AAoId;IADZ,IAAA,6BAAgB,GAAW;;6CACF,mBAAY;;kCA6CrC"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/help.d.ts b/kipper/cli/lib/commands/help.d.ts new file mode 100644 index 000000000..eae13c2a6 --- /dev/null +++ b/kipper/cli/lib/commands/help.d.ts @@ -0,0 +1,12 @@ +import HelpCommand from "@oclif/plugin-help/lib/commands/help"; +import { flags } from "@oclif/command"; +export default class Help extends HelpCommand { + static description: string; + static args: { + name: string; + required: boolean; + description: string; + }[]; + static flags: flags.Input; + static run(): Promise; +} diff --git a/kipper/cli/lib/commands/help.js b/kipper/cli/lib/commands/help.js new file mode 100644 index 000000000..43aa6fe09 --- /dev/null +++ b/kipper/cli/lib/commands/help.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const help_1 = tslib_1.__importDefault(require("@oclif/plugin-help/lib/commands/help")); +class Help extends help_1.default { + static async run() { + return await super.run(); + } +} +Help.description = "Display help for the Kipper CLI."; +Help.args = help_1.default.args; +Help.flags = help_1.default.flags; +exports.default = Help; +//# sourceMappingURL=help.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/help.js.map b/kipper/cli/lib/commands/help.js.map new file mode 100644 index 000000000..06805066f --- /dev/null +++ b/kipper/cli/lib/commands/help.js.map @@ -0,0 +1 @@ +{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":";;;AAIA,wFAA+D;AAQ/D,MAAqB,IAAK,SAAQ,cAAW;IAK5C,MAAM,CAAU,KAAK,CAAC,GAAG;QACxB,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;;AANe,gBAAW,GAAW,kCAAkC,CAAC;AACzD,SAAI,GAAG,cAAW,CAAC,IAAI,CAAC;AACxB,UAAK,GAAqB,cAAW,CAAC,KAAK,CAAC;kBAHxC,IAAI"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/new.d.ts b/kipper/cli/lib/commands/new.d.ts new file mode 100644 index 000000000..d95f39034 --- /dev/null +++ b/kipper/cli/lib/commands/new.d.ts @@ -0,0 +1,15 @@ +import type { args } from "@oclif/parser"; +import { Command, flags } from "@oclif/command"; +export default class New extends Command { + static description: string; + static examples: Array; + static args: args.Input; + static flags: flags.Input; + private getRunConfig; + private fileExists; + private genKipConfig; + private genMainFile; + private genGitignore; + private genPackageJson; + run(): Promise; +} diff --git a/kipper/cli/lib/commands/new.js b/kipper/cli/lib/commands/new.js new file mode 100644 index 000000000..2b434a57a --- /dev/null +++ b/kipper/cli/lib/commands/new.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const command_1 = require("@oclif/command"); +const decorators_1 = require("../decorators"); +const prompt_module_1 = require("../prompt-module"); +const __1 = require(".."); +const path = tslib_1.__importStar(require("node:path")); +const fs = tslib_1.__importStar(require("node:fs/promises")); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const templates = { + kipConfig: path.resolve(`${__dirname}/../templates/kip-config.json.template`), + mainFile: path.resolve(`${__dirname}/../templates/main.kip.template`), + gitignore: path.resolve(`${__dirname}/../templates/.gitignore.template`), + packageJson: path.resolve(`${__dirname}/../templates/package.json.template`), +}; +class New extends command_1.Command { + async getRunConfig() { + const { args, flags } = this.parse(New); + return { + args, + flags, + }; + } + async fileExists(filePath) { + return !!(await fs.stat(filePath).catch(() => false)); + } + async genKipConfig(rootDir, config) { + const kipConfig = await fs.readFile(templates.kipConfig, { encoding: "utf8" }); + const kipConfigPath = path.join(rootDir, path.basename(templates.kipConfig).replace(".template", "")); + await fs.writeFile(kipConfigPath, kipConfig.replace("", config.target).replace("", `^${__1.version}`)); + } + async genMainFile(rootDir) { + const mainFile = await fs.readFile(templates.mainFile, { encoding: "utf8" }); + const mainFilePath = path.join(rootDir, "src", path.basename(templates.mainFile).replace(".template", "")); + await fs.writeFile(mainFilePath, mainFile); + } + async genGitignore(rootDir) { + const gitignore = await fs.readFile(templates.gitignore, { encoding: "utf8" }); + const gitignorePath = path.join(rootDir, path.basename(templates.gitignore).replace(".template", "")); + await fs.writeFile(gitignorePath, gitignore); + } + async genPackageJson(rootDir, config) { + const packageJson = await fs.readFile(templates.packageJson, { encoding: "utf8" }); + const packageJsonPath = path.join(rootDir, path.basename(templates.packageJson).replace(".template", "")); + await fs.writeFile(packageJsonPath, packageJson + .replace("", config.name) + .replace("", config.description) + .replace("", config.version) + .replace("", config.author) + .replace("", config.license) + .replace("", config.repo ? ` "repository": {\n "type": "git",\n "url": "${config.repo}"\n },` : "") + .replace("", `^${__1.version}`) + .replace(',\n "homepage": ""', config.repo ? `,\n "homepage": "${config.repo}"` : "")); + } + async run() { + const { args, flags } = await this.getRunConfig(); + const rootDir = args.location; + const promptModule = await prompt_module_1.PromptModule.create(); + let projectName = "new-kipper-project"; + let projectDescription = "A new Kipper project"; + let projectVersion = "1.0.0"; + let projectLicense = "MIT"; + let projectAuthor = "Anonymous"; + let projectRepo = undefined; + let projectTarget = "js"; + if (flags.default) { + this.log(chalk_1.default.yellow("Using default settings. Skipping setup wizard.")); + } + else { + projectName = await promptModule.prompt("What is the name of your project?"); + projectDescription = await promptModule.prompt("Describe your project briefly:"); + projectVersion = await promptModule.prompt("Enter project version (default: 1.0.0):", projectVersion); + projectLicense = await promptModule.prompt("Choose project license (default: MIT):", projectLicense); + projectAuthor = await promptModule.prompt("Enter your name or organization:"); + projectRepo = (await promptModule.confirm("Would you like to link a project repository?")) + ? await promptModule.prompt("Enter the repository URL:") + : undefined; + projectTarget = await promptModule.choice("Choose compilation target (default: js):", ["js", "ts"], "js"); + } + if (!(await this.fileExists(rootDir))) { + await fs.mkdir(rootDir, { recursive: true }); + } + const srcDir = path.join(rootDir, "src"); + if (!(await this.fileExists(srcDir))) { + await fs.mkdir(srcDir, { recursive: true }); + } + await this.genKipConfig(rootDir, { target: projectTarget }); + await this.genMainFile(rootDir); + await this.genGitignore(rootDir); + await this.genPackageJson(rootDir, { + name: projectName, + description: projectDescription, + version: projectVersion, + license: projectLicense, + author: projectAuthor, + repo: projectRepo, + }); + this.log(chalk_1.default.green(`\nProject '${projectName}' created successfully!`)); + } +} +New.description = "Generate a new Kipper using a setup wizard. (Node-only for now)"; +New.examples = []; +New.args = [ + { + name: "location", + required: false, + default: process.cwd(), + description: "The directory where the new project should be created. Defaults to the current directory.", + }, +]; +New.flags = { + default: command_1.flags.boolean({ + char: "d", + default: false, + description: "Use the default settings for the new project. Skips the setup wizard.", + }), +}; +exports.default = New; +tslib_1.__decorate([ + (0, decorators_1.prettifiedErrors)(), + tslib_1.__metadata("design:type", Function), + tslib_1.__metadata("design:paramtypes", []), + tslib_1.__metadata("design:returntype", Promise) +], New.prototype, "run", null); +//# sourceMappingURL=new.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/new.js.map b/kipper/cli/lib/commands/new.js.map new file mode 100644 index 000000000..c678366ca --- /dev/null +++ b/kipper/cli/lib/commands/new.js.map @@ -0,0 +1 @@ +{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":";;;AAKA,4CAAgD;AAChD,8CAAiD;AACjD,oDAAgD;AAChD,0BAA6B;AAC7B,wDAAkC;AAClC,6DAAuC;AACvC,0DAA0B;AAE1B,MAAM,SAAS,GAAG;IACjB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,wCAAwC,CAAC;IAC7E,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,iCAAiC,CAAC;IACrE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,mCAAmC,CAAC;IACxE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,qCAAqC,CAAC;CAC5E,CAAC;AAEF,MAAqB,GAAI,SAAQ,iBAAO;IA2B/B,KAAK,CAAC,YAAY;QACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,OAAO;YACN,IAAI;YACJ,KAAK;SACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB;QACxC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,MAA0B;QACrE,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,EAAE,CAAC,SAAS,CACjB,aAAa,EACb,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,WAAO,EAAE,CAAC,CAC/F,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAe;QACxC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAe;QACzC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,cAAc,CAC3B,OAAe,EACf,MAOC;QAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACnF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1G,MAAM,EAAE,CAAC,SAAS,CACjB,eAAe,EACf,WAAW;aACT,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC;aACtC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,WAAW,CAAC;aACpD,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC;aAC5C,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;aAC1C,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC;aAC5C,OAAO,CACP,gBAAgB,EAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,sDAAsD,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAC7F;aACA,OAAO,CAAC,kBAAkB,EAAE,IAAI,WAAO,EAAE,CAAC;aAC1C,OAAO,CAAC,6CAA6C,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAChH,CAAC;IACH,CAAC;IAEY,AAAN,KAAK,CAAC,GAAG;QACf,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,4BAAY,CAAC,MAAM,EAAE,CAAC;QAcjD,IAAI,WAAW,GAAW,oBAAoB,CAAC;QAC/C,IAAI,kBAAkB,GAAW,sBAAsB,CAAC;QACxD,IAAI,cAAc,GAAW,OAAO,CAAC;QACrC,IAAI,cAAc,GAAW,KAAK,CAAC;QACnC,IAAI,aAAa,GAAW,WAAW,CAAC;QACxC,IAAI,WAAW,GAAuB,SAAS,CAAC;QAChD,IAAI,aAAa,GAAW,IAAI,CAAC;QAGjC,IAAI,KAAK,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;SACzE;aAAM;YACN,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC7E,kBAAkB,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACjF,cAAc,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,yCAAyC,EAAE,cAAc,CAAC,CAAC;YACtG,cAAc,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,wCAAwC,EAAE,cAAc,CAAC,CAAC;YACrG,aAAa,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC9E,WAAW,GAAG,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;gBACzF,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,2BAA2B,CAAC;gBACxD,CAAC,CAAC,SAAS,CAAC;YACb,aAAa,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;SAC1G;QAGD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;YACtC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SAC7C;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;YACrC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SAC5C;QAGD,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAClC,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,WAAW;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,cAAc,WAAW,yBAAyB,CAAC,CAAC,CAAC;IAC3E,CAAC;;AAzJe,eAAW,GAAW,iEAAiE,CAAC;AAGxF,YAAQ,GAAkB,EAAE,CAAC;AAE7B,QAAI,GAAe;IAClC;QACC,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;QACtB,WAAW,EAAE,2FAA2F;KACxG;CACD,CAAC;AAEc,SAAK,GAAqB;IACzC,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,uEAAuE;KACpF,CAAC;CACF,CAAC;kBArBkB,GAAG;AA2FV;IADZ,IAAA,6BAAgB,GAAO;;;;8BAgEvB"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/run.d.ts b/kipper/cli/lib/commands/run.d.ts new file mode 100644 index 000000000..34f1bae0c --- /dev/null +++ b/kipper/cli/lib/commands/run.d.ts @@ -0,0 +1,11 @@ +import type { args } from "@oclif/parser"; +import { flags } from "@oclif/command"; +import Compile from "./compile"; +export default class Run extends Compile { + static description: string; + static examples: Array; + static args: args.Input; + static flags: flags.Input; + private executeKipperProgram; + run(): Promise; +} diff --git a/kipper/cli/lib/commands/run.js b/kipper/cli/lib/commands/run.js new file mode 100644 index 000000000..07bed8a15 --- /dev/null +++ b/kipper/cli/lib/commands/run.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const command_1 = require("@oclif/command"); +const core_1 = require("@kipper/core"); +const child_process_1 = require("child_process"); +const logger_1 = require("../logger"); +const input_1 = require("../input/"); +const decorators_1 = require("../decorators"); +const compile_1 = tslib_1.__importDefault(require("./compile")); +class Run extends compile_1.default { + async executeKipperProgram(entryFile) { + const kipperProgram = (0, child_process_1.spawn)("ts-node", [entryFile]); + kipperProgram.stdin.setDefaultEncoding("utf-8"); + kipperProgram.stdout.pipe(process.stdout); + kipperProgram.stderr.pipe(process.stderr); + kipperProgram.on("close", (code) => process.exit(code)); + } + async run() { + const { flags, config } = await this.getRunConfig(); + const logger = new core_1.KipperLogger(logger_1.CLIEmitHandler.emit, core_1.LogLevel.WARN, flags["warnings"]); + await super.run(logger); + await this.executeKipperProgram(config.outPath); + } +} +Run.description = "Compile and execute a Kipper program."; +Run.examples = []; +Run.args = [ + { + name: "file", + required: false, + description: "The file that should be compiled and run.", + }, +]; +Run.flags = { + target: command_1.flags.string({ + char: "t", + description: "The target language where the compiled program should be emitted to.", + options: ["js", "ts"], + }), + encoding: command_1.flags.string({ + char: "e", + description: `The encoding that should be used to read the file (${input_1.KipperEncodings.join()}).`, + parse: input_1.verifyEncoding, + }), + "output-dir": command_1.flags.string({ + char: "o", + description: "The build directory where the compiled files should be placed. If the path does not exist, it will be created.", + }), + "string-code": command_1.flags.string({ + char: "s", + description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter.", + }), + "optimise-internals": command_1.flags.boolean({ + char: "i", + description: "Optimise the generated internal functions using tree-shaking to reduce the size of the output.", + allowNo: true, + }), + "optimise-builtins": command_1.flags.boolean({ + char: "b", + description: "Optimise the generated built-in functions using tree-shaking to reduce the size of the output.", + allowNo: true, + }), + warnings: command_1.flags.boolean({ + char: "w", + default: false, + description: "Show warnings that were emitted during the compilation.", + allowNo: true, + }), + "log-timestamp": command_1.flags.boolean({ + default: false, + description: "Show the timestamp of each log message.", + allowNo: true, + }), + recover: command_1.flags.boolean({ + default: core_1.EvaluatedCompileConfig.defaults.recover, + description: "Recover from compiler errors and display all detected compiler errors.", + allowNo: true, + }), + "abort-on-first-error": command_1.flags.boolean({ + default: core_1.EvaluatedCompileConfig.defaults.abortOnFirstError, + description: "Abort on the first error the compiler encounters. Same behaviour as '--no-recover'.", + allowNo: true, + }), +}; +exports.default = Run; +tslib_1.__decorate([ + (0, decorators_1.prettifiedErrors)(), + tslib_1.__metadata("design:type", Function), + tslib_1.__metadata("design:paramtypes", []), + tslib_1.__metadata("design:returntype", Promise) +], Run.prototype, "run", null); +//# sourceMappingURL=run.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/run.js.map b/kipper/cli/lib/commands/run.js.map new file mode 100644 index 000000000..3e33169dc --- /dev/null +++ b/kipper/cli/lib/commands/run.js.map @@ -0,0 +1 @@ +{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;AAKA,4CAAuC;AACvC,uCAA0G;AAC1G,iDAAsC;AACtC,sCAA2C;AAC3C,qCAA4D;AAC5D,8CAAiD;AACjD,gEAAgC;AAEhC,MAAqB,GAAI,SAAQ,iBAAO;IA4E/B,KAAK,CAAC,oBAAoB,CAAC,SAAiB;QACnD,MAAM,aAAa,GAAG,IAAA,qBAAK,EAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAGpD,aAAa,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAGhD,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAG1C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAGY,AAAN,KAAK,CAAC,GAAG;QACf,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,mBAAY,CAAC,uBAAc,CAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAEvF,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;;AAhGe,eAAW,GAAW,uCAAuC,CAAC;AAG9D,YAAQ,GAAkB,EAAE,CAAC;AAE7B,QAAI,GAAe;IAClC;QACC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,2CAA2C;KACxD;CACD,CAAC;AAEc,SAAK,GAAqB;IACzC,MAAM,EAAE,eAAK,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sEAAsE;QACnF,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sDAAsD,uBAAe,CAAC,IAAI,EAAE,IAAI;QAC7F,KAAK,EAAE,sBAAc;KACrB,CAAC;IACF,YAAY,EAAE,eAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,GAAG;QACT,WAAW,EACV,gHAAgH;KACjH,CAAC;IACF,aAAa,EAAE,eAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,4FAA4F;KACzG,CAAC;IACF,oBAAoB,EAAE,eAAK,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,mBAAmB,EAAE,eAAK,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,OAAO,CAAC;QAEvB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,IAAI;KACb,CAAC;IACF,eAAe,EAAE,eAAK,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,IAAI;KACb,CAAC;IACF,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,OAAO;QAChD,WAAW,EAAE,wEAAwE;QACrF,OAAO,EAAE,IAAI;KACb,CAAC;IAKF,sBAAsB,EAAE,eAAK,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,iBAAiB;QAC1D,WAAW,EAAE,qFAAqF;QAClG,OAAO,EAAE,IAAI;KACb,CAAC;CACF,CAAC;kBAtEkB,GAAG;AA2FV;IADZ,IAAA,6BAAgB,GAAO;;;;8BAOvB"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/version.d.ts b/kipper/cli/lib/commands/version.d.ts new file mode 100644 index 000000000..396259d01 --- /dev/null +++ b/kipper/cli/lib/commands/version.d.ts @@ -0,0 +1,5 @@ +import { Command } from "@oclif/command"; +export default class Version extends Command { + static description: string; + run(): Promise; +} diff --git a/kipper/cli/lib/commands/version.js b/kipper/cli/lib/commands/version.js new file mode 100644 index 000000000..9dd56f7af --- /dev/null +++ b/kipper/cli/lib/commands/version.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const command_1 = require("@oclif/command"); +class Version extends command_1.Command { + async run() { + process.stdout.write(this.config.userAgent + "\n"); + } +} +Version.description = "Display the currently installed Kipper version."; +exports.default = Version; +//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/version.js.map b/kipper/cli/lib/commands/version.js.map new file mode 100644 index 000000000..29ef2b1de --- /dev/null +++ b/kipper/cli/lib/commands/version.js.map @@ -0,0 +1 @@ +{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":";;AAIA,4CAAyC;AAEzC,MAAqB,OAAQ,SAAQ,iBAAO;IAGpC,KAAK,CAAC,GAAG;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;;AAJe,mBAAW,GAAW,iDAAiD,CAAC;kBADpE,OAAO"} \ No newline at end of file diff --git a/kipper/cli/lib/config-loader.d.ts b/kipper/cli/lib/config-loader.d.ts new file mode 100644 index 000000000..196ec856a --- /dev/null +++ b/kipper/cli/lib/config-loader.d.ts @@ -0,0 +1,12 @@ +/// +import { EvaluatedKipperConfigFile, KipperConfigInterpreter } from "@kipper/config"; +export declare let defaultConfigInterpreter: KipperConfigInterpreter; +export declare function setDefaultConfigInterpreter(interpreter: KipperConfigInterpreter): void; +export declare function loadConfig(options: { + path: string; + encoding: BufferEncoding; +} | { + content: string; + encoding: BufferEncoding; +}, interpreter?: KipperConfigInterpreter): Promise; +export declare function loadAutoConfig(): Promise; diff --git a/kipper/cli/lib/config-loader.js b/kipper/cli/lib/config-loader.js new file mode 100644 index 000000000..dff5c94ac --- /dev/null +++ b/kipper/cli/lib/config-loader.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.loadAutoConfig = exports.loadConfig = exports.setDefaultConfigInterpreter = exports.defaultConfigInterpreter = void 0; +const tslib_1 = require("tslib"); +const config_1 = require("@kipper/config"); +const fs = tslib_1.__importStar(require("fs")); +exports.defaultConfigInterpreter = new config_1.KipperConfigInterpreter(); +function setDefaultConfigInterpreter(interpreter) { + exports.defaultConfigInterpreter = interpreter; +} +exports.setDefaultConfigInterpreter = setDefaultConfigInterpreter; +async function loadConfig(options, interpreter) { + interpreter = interpreter ?? exports.defaultConfigInterpreter; + if ("path" in options) { + return interpreter.loadConfig(await config_1.KipperConfigFile.fromFile(options.path, options.encoding)); + } + else { + return interpreter.loadConfig(config_1.KipperConfigFile.fromString(options.content, options.encoding)); + } +} +exports.loadConfig = loadConfig; +async function loadAutoConfig() { + const workdir = process.cwd(); + const potentialPaths = [`${workdir}/kip-config.json`, `${workdir}/kipper-config.json`]; + for (const path of potentialPaths) { + if (fs.existsSync(path)) { + return loadConfig({ path, encoding: "utf8" }); + } + } + return undefined; +} +exports.loadAutoConfig = loadAutoConfig; +//# sourceMappingURL=config-loader.js.map \ No newline at end of file diff --git a/kipper/cli/lib/config-loader.js.map b/kipper/cli/lib/config-loader.js.map new file mode 100644 index 000000000..47a2f7006 --- /dev/null +++ b/kipper/cli/lib/config-loader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":";;;;AAIA,2CAAsG;AACtG,+CAAyB;AAEd,QAAA,wBAAwB,GAAG,IAAI,gCAAuB,EAAE,CAAC;AAQpE,SAAgB,2BAA2B,CAAC,WAAoC;IAC/E,gCAAwB,GAAG,WAAW,CAAC;AACxC,CAAC;AAFD,kEAEC;AAQM,KAAK,UAAU,UAAU,CAC/B,OAUI,EACJ,WAAqC;IAErC,WAAW,GAAG,WAAW,IAAI,gCAAwB,CAAC;IACtD,IAAI,MAAM,IAAI,OAAO,EAAE;QACtB,OAAO,WAAW,CAAC,UAAU,CAAC,MAAM,yBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC/F;SAAM;QACN,OAAO,WAAW,CAAC,UAAU,CAAC,yBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC9F;AACF,CAAC;AApBD,gCAoBC;AAUM,KAAK,UAAU,cAAc;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,kBAAkB,EAAE,GAAG,OAAO,qBAAqB,CAAC,CAAC;IACvF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;QAClC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACxB,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;SAC9C;KACD;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAVD,wCAUC"} \ No newline at end of file diff --git a/kipper/cli/lib/copy-resources.d.ts b/kipper/cli/lib/copy-resources.d.ts new file mode 100644 index 000000000..c900640a8 --- /dev/null +++ b/kipper/cli/lib/copy-resources.d.ts @@ -0,0 +1,3 @@ +import { EvaluatedKipperConfigFile } from "@kipper/config"; +import { KipperLogger } from "@kipper/core"; +export declare function copyConfigResources(resources: EvaluatedKipperConfigFile["resources"], logger?: KipperLogger): Promise; diff --git a/kipper/cli/lib/copy-resources.js b/kipper/cli/lib/copy-resources.js new file mode 100644 index 000000000..8ada5e89f --- /dev/null +++ b/kipper/cli/lib/copy-resources.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.copyConfigResources = void 0; +const tslib_1 = require("tslib"); +const fs = tslib_1.__importStar(require("node:fs/promises")); +const fsSync = tslib_1.__importStar(require("node:fs")); +const node_path_1 = tslib_1.__importDefault(require("node:path")); +async function copyConfigResources(resources, logger) { + for (const resource of resources) { + const dir = node_path_1.default.dirname(resource.out); + if (!fsSync.existsSync(dir) || !(await fs.stat(dir)).isDirectory()) { + await fs.mkdir(dir, { recursive: true }); + } + await fs.copyFile(resource.src, resource.out); + if (logger) { + logger.debug(`Copied resource from ${resource.src} to ${resource.out}`); + } + } +} +exports.copyConfigResources = copyConfigResources; +//# sourceMappingURL=copy-resources.js.map \ No newline at end of file diff --git a/kipper/cli/lib/copy-resources.js.map b/kipper/cli/lib/copy-resources.js.map new file mode 100644 index 000000000..769dc0538 --- /dev/null +++ b/kipper/cli/lib/copy-resources.js.map @@ -0,0 +1 @@ +{"version":3,"file":"copy-resources.js","sourceRoot":"","sources":["../src/copy-resources.ts"],"names":[],"mappings":";;;;AACA,6DAAuC;AACvC,wDAAkC;AAGlC,kEAA6B;AAQtB,KAAK,UAAU,mBAAmB,CACxC,SAAiD,EACjD,MAAqB;IAErB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QACjC,MAAM,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;YACnE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SACzC;QACD,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE;YACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,CAAC,GAAG,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;SACxE;KACD;AACF,CAAC;AAdD,kDAcC"} \ No newline at end of file diff --git a/kipper/cli/lib/decorators.d.ts b/kipper/cli/lib/decorators.d.ts new file mode 100644 index 000000000..0a91b0181 --- /dev/null +++ b/kipper/cli/lib/decorators.d.ts @@ -0,0 +1,2 @@ +import { Command } from "@oclif/command"; +export declare function prettifiedErrors(): (target: TProto, propertyKey: keyof TProto, descriptor: PropertyDescriptor) => TypedPropertyDescriptor<(...argArray: Array) => Promise>; diff --git a/kipper/cli/lib/decorators.js b/kipper/cli/lib/decorators.js new file mode 100644 index 000000000..e667d02e3 --- /dev/null +++ b/kipper/cli/lib/decorators.js @@ -0,0 +1,60 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.prettifiedErrors = void 0; +const core_1 = require("@kipper/core"); +const errors_1 = require("./errors"); +const errors_2 = require("@oclif/errors"); +const config_1 = require("@kipper/config"); +function prettifiedErrors() { + return function (target, propertyKey, descriptor) { + const originalFunc = descriptor.value; + const func = async function (...argArray) { + try { + await originalFunc.call(this, ...argArray); + } + catch (error) { + const cliError = error instanceof errors_1.KipperCLIError || error instanceof errors_2.CLIError; + const configError = error instanceof config_1.ConfigError; + const internalError = error instanceof core_1.KipperInternalError; + const name = getErrorName(cliError, configError, internalError); + const msg = error && typeof error === "object" && "message" in error && typeof error.message === "string" + ? error.message + : String(error); + const errConfig = { + exit: 1, + suggestions: internalError || (!cliError && !configError) + ? [ + "Ensure no invalid types or data were passed to module functions or classes. Otherwise report the " + + "issue on https://github.com/Kipper-Lang/Kipper. Help us improve Kipper!️", + ] + : undefined, + }; + try { + this.error(msg, errConfig); + } + catch (e) { + e.name = name; + throw e; + } + } + }; + target[propertyKey] = func; + return func; + }; +} +exports.prettifiedErrors = prettifiedErrors; +function getErrorName(cliError, configError, internalError) { + if (cliError) { + return "Error"; + } + else if (configError) { + return "Config Error"; + } + else if (internalError) { + return "Internal Error"; + } + else { + return "CLI Error"; + } +} +//# sourceMappingURL=decorators.js.map \ No newline at end of file diff --git a/kipper/cli/lib/decorators.js.map b/kipper/cli/lib/decorators.js.map new file mode 100644 index 000000000..141e001a8 --- /dev/null +++ b/kipper/cli/lib/decorators.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAIA,uCAAmD;AACnD,qCAA0C;AAC1C,0CAAgF;AAChF,2CAA6C;AAQ7C,SAAgB,gBAAgB;IAE/B,OAAO,UAAU,MAAc,EAAE,WAAyB,EAAE,UAA8B;QACzF,MAAM,YAAY,GAAa,UAAU,CAAC,KAAK,CAAC;QAEhD,MAAM,IAAI,GAAG,KAAK,WAA0B,GAAG,QAAoB;YAClE,IAAI;gBACH,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;aAC3C;YAAC,OAAO,KAAK,EAAE;gBACf,MAAM,QAAQ,GAAG,KAAK,YAAY,uBAAc,IAAI,KAAK,YAAY,iBAAa,CAAC;gBACnF,MAAM,WAAW,GAAG,KAAK,YAAY,oBAAW,CAAC;gBACjD,MAAM,aAAa,GAAG,KAAK,YAAY,0BAAmB,CAAC;gBAG3D,MAAM,IAAI,GAAW,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;gBACxE,MAAM,GAAG,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;oBAC5F,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAElB,MAAM,SAAS,GAA4C;oBAC1D,IAAI,EAAE,CAAC;oBACP,WAAW,EACV,aAAa,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC;wBAC3C,CAAC,CAAC;4BACA,mGAAmG;gCAClG,0EAA0E;yBAC3E;wBACF,CAAC,CAAC,SAAS;iBACb,CAAC;gBAIF,IAAI;oBACH,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;iBAC3B;gBAAC,OAAO,CAAC,EAAE;oBACK,CAAE,CAAC,IAAI,GAAG,IAAI,CAAC;oBAE/B,MAAM,CAAC,CAAC;iBACR;aACD;QACF,CAAC,CAAC;QAGF,MAAM,CAAC,WAAW,CAAC,GAAG,IAA4B,CAAC;QACnD,OAAO,IAA2E,CAAC;IACpF,CAAC,CAAC;AACH,CAAC;AA/CD,4CA+CC;AAED,SAAS,YAAY,CAAC,QAAiB,EAAE,WAAoB,EAAE,aAAsB;IACpF,IAAI,QAAQ,EAAE;QACb,OAAO,OAAO,CAAC;KACf;SAAM,IAAI,WAAW,EAAE;QACvB,OAAO,cAAc,CAAC;KACtB;SAAM,IAAI,aAAa,EAAE;QACzB,OAAO,gBAAgB,CAAC;KACxB;SAAM;QACN,OAAO,WAAW,CAAC;KACnB;AACF,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/errors.d.ts b/kipper/cli/lib/errors.d.ts new file mode 100644 index 000000000..963fb04c8 --- /dev/null +++ b/kipper/cli/lib/errors.d.ts @@ -0,0 +1,19 @@ +import { KipperError } from "@kipper/core"; +export declare abstract class KipperCLIError extends KipperError { + protected constructor(msg: string); +} +export declare class KipperUnsupportedEncodingError extends KipperCLIError { + constructor(encoding: string); +} +export declare class KipperFileAccessError extends KipperCLIError { + constructor(filePath: string); +} +export declare class KipperFileWriteError extends KipperCLIError { + constructor(filePath: string); +} +export declare class KipperInvalidInputError extends KipperCLIError { + constructor(err: string); +} +export declare class KipperUnsupportedConfigError extends KipperCLIError { + constructor(err: string); +} diff --git a/kipper/cli/lib/errors.js b/kipper/cli/lib/errors.js new file mode 100644 index 000000000..bdb2e2ad0 --- /dev/null +++ b/kipper/cli/lib/errors.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KipperUnsupportedConfigError = exports.KipperInvalidInputError = exports.KipperFileWriteError = exports.KipperFileAccessError = exports.KipperUnsupportedEncodingError = exports.KipperCLIError = void 0; +const core_1 = require("@kipper/core"); +class KipperCLIError extends core_1.KipperError { + constructor(msg) { + super(msg); + } +} +exports.KipperCLIError = KipperCLIError; +class KipperUnsupportedEncodingError extends KipperCLIError { + constructor(encoding) { + super(`Unsupported encoding '${encoding}'.`); + } +} +exports.KipperUnsupportedEncodingError = KipperUnsupportedEncodingError; +class KipperFileAccessError extends KipperCLIError { + constructor(filePath) { + super(`Failed to access file '${filePath}'. Make sure the file exists and it is readable.`); + } +} +exports.KipperFileAccessError = KipperFileAccessError; +class KipperFileWriteError extends KipperCLIError { + constructor(filePath) { + super(`Failed to write file '${filePath}'.`); + } +} +exports.KipperFileWriteError = KipperFileWriteError; +class KipperInvalidInputError extends KipperCLIError { + constructor(err) { + super(err); + } +} +exports.KipperInvalidInputError = KipperInvalidInputError; +class KipperUnsupportedConfigError extends KipperCLIError { + constructor(err) { + super(err); + } +} +exports.KipperUnsupportedConfigError = KipperUnsupportedConfigError; +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/kipper/cli/lib/errors.js.map b/kipper/cli/lib/errors.js.map new file mode 100644 index 000000000..99da75ee1 --- /dev/null +++ b/kipper/cli/lib/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAIA,uCAA2C;AAM3C,MAAsB,cAAe,SAAQ,kBAAW;IACvD,YAAsB,GAAW;QAChC,KAAK,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;CACD;AAJD,wCAIC;AAMD,MAAa,8BAA+B,SAAQ,cAAc;IACjE,YAAY,QAAgB;QAC3B,KAAK,CAAC,yBAAyB,QAAQ,IAAI,CAAC,CAAC;IAC9C,CAAC;CACD;AAJD,wEAIC;AAMD,MAAa,qBAAsB,SAAQ,cAAc;IACxD,YAAY,QAAgB;QAC3B,KAAK,CAAC,0BAA0B,QAAQ,kDAAkD,CAAC,CAAC;IAC7F,CAAC;CACD;AAJD,sDAIC;AAMD,MAAa,oBAAqB,SAAQ,cAAc;IACvD,YAAY,QAAgB;QAC3B,KAAK,CAAC,yBAAyB,QAAQ,IAAI,CAAC,CAAC;IAC9C,CAAC;CACD;AAJD,oDAIC;AAMD,MAAa,uBAAwB,SAAQ,cAAc;IAC1D,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;CACD;AAJD,0DAIC;AAMD,MAAa,4BAA6B,SAAQ,cAAc;IAC/D,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;CACD;AAJD,oEAIC"} \ No newline at end of file diff --git a/kipper/cli/lib/help.d.ts b/kipper/cli/lib/help.d.ts new file mode 100644 index 000000000..85cb4b2bc --- /dev/null +++ b/kipper/cli/lib/help.d.ts @@ -0,0 +1,4 @@ +import { Help as OclifHelp } from "@oclif/plugin-help"; +export default class Help extends OclifHelp { + static description: string; +} diff --git a/kipper/cli/lib/help.js b/kipper/cli/lib/help.js new file mode 100644 index 000000000..ccf4602a3 --- /dev/null +++ b/kipper/cli/lib/help.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const plugin_help_1 = require("@oclif/plugin-help"); +class Help extends plugin_help_1.Help { +} +Help.description = "Displays help for the Kipper CLI"; +exports.default = Help; +//# sourceMappingURL=help.js.map \ No newline at end of file diff --git a/kipper/cli/lib/help.js.map b/kipper/cli/lib/help.js.map new file mode 100644 index 000000000..572a84055 --- /dev/null +++ b/kipper/cli/lib/help.js.map @@ -0,0 +1 @@ +{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":";;AAIA,oDAAuD;AAEvD,MAAqB,IAAK,SAAQ,kBAAS;;AACnC,gBAAW,GAAW,kCAAkC,CAAC;kBAD5C,IAAI"} \ No newline at end of file diff --git a/kipper/cli/lib/index.d.ts b/kipper/cli/lib/index.d.ts new file mode 100644 index 000000000..b6b158606 --- /dev/null +++ b/kipper/cli/lib/index.d.ts @@ -0,0 +1,10 @@ +export { run } from "@oclif/command"; +export * from "./input"; +export * from "./logger"; +export * from "./errors"; +export * from "./output/compile"; +export declare const name = "@kipper/cli"; +export declare const version = "0.11.0-alpha.1"; +export declare const author = "Luna Klatzer"; +export declare const license = "GPL-3.0-or-later"; +export declare const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/cli/lib/index.js b/kipper/cli/lib/index.js new file mode 100644 index 000000000..1f968d3c3 --- /dev/null +++ b/kipper/cli/lib/index.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.github = exports.license = exports.author = exports.version = exports.name = exports.run = void 0; +const tslib_1 = require("tslib"); +var command_1 = require("@oclif/command"); +Object.defineProperty(exports, "run", { enumerable: true, get: function () { return command_1.run; } }); +tslib_1.__exportStar(require("./input"), exports); +tslib_1.__exportStar(require("./logger"), exports); +tslib_1.__exportStar(require("./errors"), exports); +tslib_1.__exportStar(require("./output/compile"), exports); +exports.name = "@kipper/cli"; +exports.version = "0.11.0-alpha.1"; +exports.author = "Luna Klatzer"; +exports.license = "GPL-3.0-or-later"; +exports.github = "https://github.com/Kipper-Lang/Kipper"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/kipper/cli/lib/index.js.map b/kipper/cli/lib/index.js.map new file mode 100644 index 000000000..8c09c4eb5 --- /dev/null +++ b/kipper/cli/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAKA,0CAAqC;AAA5B,8FAAA,GAAG,OAAA;AAEZ,kDAAwB;AACxB,mDAAyB;AACzB,mDAAyB;AACzB,2DAAiC;AAGpB,QAAA,IAAI,GAAG,aAAa,CAAC;AAErB,QAAA,OAAO,GAAG,gBAAgB,CAAC;AAE3B,QAAA,MAAM,GAAG,cAAc,CAAC;AAExB,QAAA,OAAO,GAAG,kBAAkB,CAAC;AAE7B,QAAA,MAAM,GAAG,uCAAuC,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/input/file-stream.d.ts b/kipper/cli/lib/input/file-stream.d.ts new file mode 100644 index 000000000..63bf3ac23 --- /dev/null +++ b/kipper/cli/lib/input/file-stream.d.ts @@ -0,0 +1,25 @@ +/// +/// +import * as path from "path"; +import { KipperParseStream } from "@kipper/core"; +import { OutputArgs, OutputFlags } from "@oclif/parser/lib/parse"; +import { EvaluatedKipperConfigFile } from "@kipper/config"; +export type KipperEncoding = "ascii" | "utf8" | "utf16le"; +export declare const KipperEncodings: Array; +export declare function verifyEncoding(encoding: string): KipperEncoding; +export declare function getParseStream(args: OutputArgs, flags: OutputFlags, config: EvaluatedKipperConfigFile | undefined): Promise<{ + stream: KipperParseFile | KipperParseStream; + outDir: string; +}>; +export declare class KipperParseFile extends KipperParseStream { + static SPECIAL_CHARACTER_REPLACE_REGEX: RegExp; + private readonly _absolutePath; + private readonly _encoding; + private readonly _path; + constructor(stringContent: string, fileLocation: string, fileName: string, encoding: BufferEncoding); + get absolutePath(): string; + get filePath(): string; + get encoding(): BufferEncoding; + get path(): path.ParsedPath; + static fromFile(filePath: string, encoding?: KipperEncoding): Promise; +} diff --git a/kipper/cli/lib/input/file-stream.js b/kipper/cli/lib/input/file-stream.js new file mode 100644 index 000000000..378600b12 --- /dev/null +++ b/kipper/cli/lib/input/file-stream.js @@ -0,0 +1,86 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KipperParseFile = exports.getParseStream = exports.verifyEncoding = exports.KipperEncodings = void 0; +const tslib_1 = require("tslib"); +const fs_1 = require("fs"); +const path = tslib_1.__importStar(require("path")); +const core_1 = require("@kipper/core"); +const errors_1 = require("../errors"); +exports.KipperEncodings = ["ascii", "utf8", "utf16le"]; +function verifyEncoding(encoding) { + const kipperEncoding = exports.KipperEncodings.find((i) => i == encoding); + if (kipperEncoding) { + return kipperEncoding; + } + else { + throw new errors_1.KipperUnsupportedEncodingError(encoding); + } +} +exports.verifyEncoding = verifyEncoding; +function ensureCompatibleFiles(files) { + if ((files?.length ?? 0) >= 2) { + throw new errors_1.KipperInvalidInputError("Multiple files are not supported in the CLI. This will be updated in a future release."); + } +} +async function getParseStream(args, flags, config) { + let stream; + if (args.file) { + stream = await KipperParseFile.fromFile(args.file, flags["encoding"]); + } + else if (flags["string-code"]) { + stream = new core_1.KipperParseStream({ stringContent: flags["string-code"] }); + } + else if (config?.files) { + ensureCompatibleFiles(config.files); + stream = await KipperParseFile.fromFile(config.files[0].src, flags["encoding"]); + } + else { + throw new errors_1.KipperInvalidInputError("Argument 'file' or flag '-s/--string-code' must be populated"); + } + return { + stream: stream, + outDir: args["output-dir"] ?? config?.outDir ?? "build", + }; +} +exports.getParseStream = getParseStream; +class KipperParseFile extends core_1.KipperParseStream { + constructor(stringContent, fileLocation, fileName, encoding) { + super({ stringContent: stringContent, name: fileName, filePath: fileLocation }); + this._absolutePath = path.resolve(fileLocation); + this._encoding = encoding; + this._path = path.parse(this._absolutePath); + } + get absolutePath() { + return this._absolutePath; + } + get filePath() { + return super.filePath; + } + get encoding() { + return this._encoding; + } + get path() { + return this._path; + } + static async fromFile(filePath, encoding = "utf8") { + const fileLocation = path.resolve(filePath); + const name = (() => { + const items1 = fileLocation.split("\\"); + const items2 = items1[items1.length - 1].split("/"); + return items2[items2.length - 1]; + })(); + try { + await fs_1.promises.access(fileLocation, fs_1.constants.R_OK); + } + catch (e) { + throw new errors_1.KipperFileAccessError(fileLocation); + } + let content = (await fs_1.promises.readFile(fileLocation, encoding)).toString(); + content = content.replace(/(\r(\n)?)/gi, "\n"); + content = content.replace(KipperParseFile.SPECIAL_CHARACTER_REPLACE_REGEX, ""); + return new KipperParseFile(content, fileLocation, name, encoding); + } +} +exports.KipperParseFile = KipperParseFile; +KipperParseFile.SPECIAL_CHARACTER_REPLACE_REGEX = /[\x00-\x09\x0B-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g; +//# sourceMappingURL=file-stream.js.map \ No newline at end of file diff --git a/kipper/cli/lib/input/file-stream.js.map b/kipper/cli/lib/input/file-stream.js.map new file mode 100644 index 000000000..056a70cd4 --- /dev/null +++ b/kipper/cli/lib/input/file-stream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-stream.js","sourceRoot":"","sources":["../../src/input/file-stream.ts"],"names":[],"mappings":";;;;AAKA,2BAA+C;AAC/C,mDAA6B;AAC7B,uCAAiD;AACjD,sCAA2G;AAc9F,QAAA,eAAe,GAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAQnF,SAAgB,cAAc,CAAC,QAAgB;IAC9C,MAAM,cAAc,GAAG,uBAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IAClE,IAAI,cAAc,EAAE;QACnB,OAAO,cAAc,CAAC;KACtB;SAAM;QACN,MAAM,IAAI,uCAA8B,CAAC,QAAQ,CAAC,CAAC;KACnD;AACF,CAAC;AAPD,wCAOC;AAED,SAAS,qBAAqB,CAAC,KAAyD;IACvF,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;QAC9B,MAAM,IAAI,gCAAuB,CAChC,wFAAwF,CACxF,CAAC;KACF;AACF,CAAC;AASM,KAAK,UAAU,cAAc,CACnC,IAAgB,EAChB,KAAuB,EACvB,MAA6C;IAE7C,IAAI,MAA2C,CAAC;IAChD,IAAI,IAAI,CAAC,IAAI,EAAE;QACd,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAmB,CAAC,CAAC;KACxF;SAAM,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE;QAChC,MAAM,GAAG,IAAI,wBAAiB,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;KACxE;SAAM,IAAI,MAAM,EAAE,KAAK,EAAE;QACzB,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;KAChF;SAAM;QACN,MAAM,IAAI,gCAAuB,CAAC,8DAA8D,CAAC,CAAC;KAClG;IAED,OAAO;QACN,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,MAAM,EAAE,MAAM,IAAI,OAAO;KACvD,CAAC;AACH,CAAC;AArBD,wCAqBC;AAQD,MAAa,eAAgB,SAAQ,wBAAiB;IAOrD,YAAY,aAAqB,EAAE,YAAoB,EAAE,QAAgB,EAAE,QAAwB;QAClG,KAAK,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAKD,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAMD,IAAoB,QAAQ;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC;IACvB,CAAC;IAKD,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAMD,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IASM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,WAA2B,MAAM;QAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;YAClB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;QAGL,IAAI;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,YAAY,EAAE,cAAS,CAAC,IAAI,CAAC,CAAC;SAC9C;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,IAAI,8BAAqB,CAAC,YAAY,CAAC,CAAC;SAC9C;QAGD,IAAI,OAAO,GAAW,CAAC,MAAM,aAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,QAA0B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAG/F,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAG/C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;QAE/E,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAA0B,CAAC,CAAC;IACrF,CAAC;;AA5EF,0CA6EC;AA5Ec,+CAA+B,GAC5C,+tHAA+tH,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/input/index.d.ts b/kipper/cli/lib/input/index.d.ts new file mode 100644 index 000000000..e993c2609 --- /dev/null +++ b/kipper/cli/lib/input/index.d.ts @@ -0,0 +1,2 @@ +export * from "./target"; +export * from "./file-stream"; diff --git a/kipper/cli/lib/input/index.js b/kipper/cli/lib/input/index.js new file mode 100644 index 000000000..db5962e52 --- /dev/null +++ b/kipper/cli/lib/input/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +tslib_1.__exportStar(require("./target"), exports); +tslib_1.__exportStar(require("./file-stream"), exports); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/kipper/cli/lib/input/index.js.map b/kipper/cli/lib/input/index.js.map new file mode 100644 index 000000000..2d6f015fa --- /dev/null +++ b/kipper/cli/lib/input/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":";;;AAKA,mDAAyB;AACzB,wDAA8B"} \ No newline at end of file diff --git a/kipper/cli/lib/input/target.d.ts b/kipper/cli/lib/input/target.d.ts new file mode 100644 index 000000000..26f9addfa --- /dev/null +++ b/kipper/cli/lib/input/target.d.ts @@ -0,0 +1,2 @@ +import { KipperCompileTarget } from "@kipper/core"; +export declare function getTarget(name: string): KipperCompileTarget; diff --git a/kipper/cli/lib/input/target.js b/kipper/cli/lib/input/target.js new file mode 100644 index 000000000..61a2ddeb9 --- /dev/null +++ b/kipper/cli/lib/input/target.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getTarget = void 0; +const target_js_1 = require("@kipper/target-js"); +const target_ts_1 = require("@kipper/target-ts"); +const errors_1 = require("../errors"); +function getTarget(name) { + switch (name) { + case "js": { + return new target_js_1.KipperJavaScriptTarget(); + } + case "ts": { + return new target_ts_1.KipperTypeScriptTarget(); + } + default: + throw new errors_1.KipperInvalidInputError(`Invalid target '${name}'.`); + } +} +exports.getTarget = getTarget; +//# sourceMappingURL=target.js.map \ No newline at end of file diff --git a/kipper/cli/lib/input/target.js.map b/kipper/cli/lib/input/target.js.map new file mode 100644 index 000000000..e052ce63f --- /dev/null +++ b/kipper/cli/lib/input/target.js.map @@ -0,0 +1 @@ +{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/input/target.ts"],"names":[],"mappings":";;;AACA,iDAA2D;AAC3D,iDAA2D;AAC3D,sCAAoD;AAOpD,SAAgB,SAAS,CAAC,IAAY;IACrC,QAAQ,IAAI,EAAE;QACb,KAAK,IAAI,CAAC,CAAC;YACV,OAAO,IAAI,kCAAsB,EAAE,CAAC;SACpC;QACD,KAAK,IAAI,CAAC,CAAC;YACV,OAAO,IAAI,kCAAsB,EAAE,CAAC;SACpC;QACD;YACC,MAAM,IAAI,gCAAuB,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC;KAChE;AACF,CAAC;AAXD,8BAWC"} \ No newline at end of file diff --git a/kipper/cli/lib/logger.d.ts b/kipper/cli/lib/logger.d.ts new file mode 100644 index 000000000..b53b2bf62 --- /dev/null +++ b/kipper/cli/lib/logger.d.ts @@ -0,0 +1,8 @@ +import { LogLevel } from "@kipper/core"; +import { ILogObject, ISettingsParam, Logger } from "tslog"; +export declare const defaultKipperLoggerConfig: ISettingsParam; +export declare const defaultCliLogger: Logger; +export declare class CLIEmitHandler { + static cliLogger: Logger; + static emit(level: LogLevel, msg: string): ILogObject; +} diff --git a/kipper/cli/lib/logger.js b/kipper/cli/lib/logger.js new file mode 100644 index 000000000..4ea353525 --- /dev/null +++ b/kipper/cli/lib/logger.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CLIEmitHandler = exports.defaultCliLogger = exports.defaultKipperLoggerConfig = void 0; +const core_1 = require("@kipper/core"); +const tslog_1 = require("tslog"); +exports.defaultKipperLoggerConfig = { + dateTimePattern: "hour:minute:second", + displayFilePath: "hidden", + displayFunctionName: false, + displayDateTime: false, +}; +exports.defaultCliLogger = new tslog_1.Logger(exports.defaultKipperLoggerConfig); +class CLIEmitHandler { + static emit(level, msg) { + switch (level) { + case core_1.LogLevel.FATAL: + return CLIEmitHandler.cliLogger.fatal(msg); + case core_1.LogLevel.ERROR: + return CLIEmitHandler.cliLogger.error(msg); + case core_1.LogLevel.WARN: + return CLIEmitHandler.cliLogger.warn(msg); + case core_1.LogLevel.DEBUG: + return CLIEmitHandler.cliLogger.debug(msg); + case core_1.LogLevel.UNKNOWN: + case core_1.LogLevel.INFO: + default: + return CLIEmitHandler.cliLogger.info(msg); + } + } +} +exports.CLIEmitHandler = CLIEmitHandler; +CLIEmitHandler.cliLogger = exports.defaultCliLogger; +//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/kipper/cli/lib/logger.js.map b/kipper/cli/lib/logger.js.map new file mode 100644 index 000000000..26c16befe --- /dev/null +++ b/kipper/cli/lib/logger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAIA,uCAAwC;AACxC,iCAA2D;AAK9C,QAAA,yBAAyB,GAAmB;IACxD,eAAe,EAAE,oBAAoB;IACrC,eAAe,EAAE,QAAQ;IACzB,mBAAmB,EAAE,KAAK;IAC1B,eAAe,EAAE,KAAK;CACtB,CAAC;AAKW,QAAA,gBAAgB,GAAW,IAAI,cAAM,CAAC,iCAAyB,CAAC,CAAC;AAO9E,MAAa,cAAc;IAenB,MAAM,CAAC,IAAI,CAAC,KAAe,EAAE,GAAW;QAC9C,QAAQ,KAAK,EAAE;YACd,KAAK,eAAQ,CAAC,KAAK;gBAClB,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,KAAK,eAAQ,CAAC,KAAK;gBAClB,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,KAAK,eAAQ,CAAC,IAAI;gBACjB,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3C,KAAK,eAAQ,CAAC,KAAK;gBAClB,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,KAAK,eAAQ,CAAC,OAAO,CAAC;YACtB,KAAK,eAAQ,CAAC,IAAI,CAAC;YACnB;gBACC,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3C;IACF,CAAC;;AA9BF,wCA+BC;AAxBc,wBAAS,GAAW,wBAAgB,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/output/compile.d.ts b/kipper/cli/lib/output/compile.d.ts new file mode 100644 index 000000000..10b06433c --- /dev/null +++ b/kipper/cli/lib/output/compile.d.ts @@ -0,0 +1,3 @@ +import { KipperCompileResult } from "@kipper/core"; +import { KipperEncoding } from "../input"; +export declare function writeCompilationResult(result: KipperCompileResult, outDir: string, outPath: string, encoding: KipperEncoding): Promise; diff --git a/kipper/cli/lib/output/compile.js b/kipper/cli/lib/output/compile.js new file mode 100644 index 000000000..1fbec1616 --- /dev/null +++ b/kipper/cli/lib/output/compile.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.writeCompilationResult = void 0; +const fs_1 = require("fs"); +const errors_1 = require("../errors"); +async function writeCompilationResult(result, outDir, outPath, encoding) { + try { + try { + await fs_1.promises.access(outDir, fs_1.constants.R_OK); + } + catch (e) { + await fs_1.promises.mkdir(outDir); + } + const code = result.write(); + let buffer; + if (encoding === "utf16le") { + buffer = Buffer.from(`\ufeff${code}`, "utf16le"); + } + else if (encoding === "utf8") { + buffer = Buffer.from(code, "utf8"); + } + else { + buffer = Buffer.from(code, "ascii"); + } + await fs_1.promises.writeFile(outPath, buffer, { encoding: encoding }); + } + catch (e) { + throw new errors_1.KipperFileWriteError(outPath); + } + return outPath; +} +exports.writeCompilationResult = writeCompilationResult; +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/kipper/cli/lib/output/compile.js.map b/kipper/cli/lib/output/compile.js.map new file mode 100644 index 000000000..391072c1a --- /dev/null +++ b/kipper/cli/lib/output/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/output/compile.ts"],"names":[],"mappings":";;;AAKA,2BAA+C;AAC/C,sCAAiD;AAW1C,KAAK,UAAU,sBAAsB,CAC3C,MAA2B,EAC3B,MAAc,EACd,OAAe,EACf,QAAwB;IAExB,IAAI;QAEH,IAAI;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,MAAM,EAAE,cAAS,CAAC,IAAI,CAAC,CAAC;SACxC;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,aAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACvB;QAGD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAG5B,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC3B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;SACjD;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC/B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM;YACN,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACpC;QAED,MAAM,aAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC5D;IAAC,OAAO,CAAC,EAAE;QACX,MAAM,IAAI,6BAAoB,CAAC,OAAO,CAAC,CAAC;KACxC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAjCD,wDAiCC"} \ No newline at end of file diff --git a/kipper/cli/lib/output/index.d.ts b/kipper/cli/lib/output/index.d.ts new file mode 100644 index 000000000..46adf0f86 --- /dev/null +++ b/kipper/cli/lib/output/index.d.ts @@ -0,0 +1 @@ +export * from "./compile"; diff --git a/kipper/cli/lib/output/index.js b/kipper/cli/lib/output/index.js new file mode 100644 index 000000000..6d328338f --- /dev/null +++ b/kipper/cli/lib/output/index.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +tslib_1.__exportStar(require("./compile"), exports); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/kipper/cli/lib/output/index.js.map b/kipper/cli/lib/output/index.js.map new file mode 100644 index 000000000..0572f0d9f --- /dev/null +++ b/kipper/cli/lib/output/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":";;;AAKA,oDAA0B"} \ No newline at end of file diff --git a/kipper/cli/lib/prompt-module.d.ts b/kipper/cli/lib/prompt-module.d.ts new file mode 100644 index 000000000..1259a7cb4 --- /dev/null +++ b/kipper/cli/lib/prompt-module.d.ts @@ -0,0 +1,8 @@ +export declare class PromptModule { + private readonly promptModule; + private constructor(); + static create(): Promise; + prompt(question: string, defaultValue?: string): Promise; + confirm(question: string): Promise; + choice(question: string, possibilities: string[], defaultValue: string): Promise; +} diff --git a/kipper/cli/lib/prompt-module.js b/kipper/cli/lib/prompt-module.js new file mode 100644 index 000000000..d05e88f88 --- /dev/null +++ b/kipper/cli/lib/prompt-module.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PromptModule = void 0; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const inquirer_1 = tslib_1.__importDefault(require("inquirer")); +class PromptModule { + constructor(promptModule) { + this.promptModule = promptModule; + } + static async create() { + const promptModule = inquirer_1.default.createPromptModule(); + return new PromptModule(promptModule); + } + async prompt(question, defaultValue) { + const prefix = chalk_1.default.cyan("~ "); + const answer = await this.promptModule([ + { + type: "input", + name: "answer", + message: `${prefix}${question}`, + default: defaultValue, + }, + ]); + return answer.answer; + } + async confirm(question) { + const prefix = chalk_1.default.cyan("~ "); + const answer = await this.promptModule([ + { + type: "confirm", + name: "answer", + message: `${prefix}${question}`, + default: false, + }, + ]); + return answer.answer; + } + async choice(question, possibilities, defaultValue) { + const prefix = chalk_1.default.cyan("~ "); + const answer = await this.promptModule([ + { + type: "list", + name: "answer", + message: `${prefix}${question}`, + choices: possibilities, + default: defaultValue, + }, + ]); + return answer.answer; + } +} +exports.PromptModule = PromptModule; +//# sourceMappingURL=prompt-module.js.map \ No newline at end of file diff --git a/kipper/cli/lib/prompt-module.js.map b/kipper/cli/lib/prompt-module.js.map new file mode 100644 index 000000000..8a55128ed --- /dev/null +++ b/kipper/cli/lib/prompt-module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prompt-module.js","sourceRoot":"","sources":["../src/prompt-module.ts"],"names":[],"mappings":";;;;AACA,0DAA0B;AAC1B,gEAAgC;AAQhC,MAAa,YAAY;IAGxB,YAAoB,YAAkC;QACrD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM;QAClB,MAAM,YAAY,GAAG,kBAAQ,CAAC,kBAAkB,EAAE,CAAC;QACnD,OAAO,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,YAAqB;QAC1D,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC;gBACC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;gBAC/B,OAAO,EAAE,YAAY;aACrB;SACD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAgB;QACpC,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC;gBACC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;gBAC/B,OAAO,EAAE,KAAK;aACd;SACD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,aAAuB,EAAE,YAAoB;QAClF,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;gBAC/B,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,YAAY;aACrB;SACD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;CACD;AAtDD,oCAsDC"} \ No newline at end of file diff --git a/kipper/cli/lib/templates/.gitignore.template b/kipper/cli/lib/templates/.gitignore.template new file mode 100644 index 000000000..c6bba5913 --- /dev/null +++ b/kipper/cli/lib/templates/.gitignore.template @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/kipper/cli/lib/templates/kip-config.json.template b/kipper/cli/lib/templates/kip-config.json.template new file mode 100644 index 000000000..6e112a982 --- /dev/null +++ b/kipper/cli/lib/templates/kip-config.json.template @@ -0,0 +1,12 @@ +{ + "outDir": "build", + "srcDir": "src", + "compiler": { + "version": "", + "target": "" + }, + "files": [ + "./src/main.kip" + ], + "resources": [] +} diff --git a/kipper/cli/lib/templates/main.kip.template b/kipper/cli/lib/templates/main.kip.template new file mode 100644 index 000000000..8fcd87080 --- /dev/null +++ b/kipper/cli/lib/templates/main.kip.template @@ -0,0 +1,12 @@ +/** + * This is the source file of your program. Here all the logic will be written and then executed during runtime. + * + * Visit our quickstart guide to learn more about the language and how to use it: + * https://kipper-lang.org/docs/quickstart + */ + +def main() -> void { + print("Hello world!"); +} + +main(); diff --git a/kipper/cli/lib/templates/package.json.template b/kipper/cli/lib/templates/package.json.template new file mode 100644 index 000000000..a5989a0fb --- /dev/null +++ b/kipper/cli/lib/templates/package.json.template @@ -0,0 +1,18 @@ +{ + "name": "", + "description": "", + "version": "", + "scripts": { + "run": "kipper run ./src/main.kip", + "build": "kipper compile" + }, + "dependencies": { + "@kipper/cli": "" + }, + "keywords": [ + "kipper" + ], + "author": "", + "license": "", + "homepage": "" +} diff --git a/kipper/cli/lib/templates/templates/.gitignore.template b/kipper/cli/lib/templates/templates/.gitignore.template new file mode 100644 index 000000000..c6bba5913 --- /dev/null +++ b/kipper/cli/lib/templates/templates/.gitignore.template @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/kipper/cli/lib/templates/templates/kip-config.json.template b/kipper/cli/lib/templates/templates/kip-config.json.template new file mode 100644 index 000000000..6e112a982 --- /dev/null +++ b/kipper/cli/lib/templates/templates/kip-config.json.template @@ -0,0 +1,12 @@ +{ + "outDir": "build", + "srcDir": "src", + "compiler": { + "version": "", + "target": "" + }, + "files": [ + "./src/main.kip" + ], + "resources": [] +} diff --git a/kipper/cli/lib/templates/templates/main.kip.template b/kipper/cli/lib/templates/templates/main.kip.template new file mode 100644 index 000000000..8fcd87080 --- /dev/null +++ b/kipper/cli/lib/templates/templates/main.kip.template @@ -0,0 +1,12 @@ +/** + * This is the source file of your program. Here all the logic will be written and then executed during runtime. + * + * Visit our quickstart guide to learn more about the language and how to use it: + * https://kipper-lang.org/docs/quickstart + */ + +def main() -> void { + print("Hello world!"); +} + +main(); diff --git a/kipper/cli/lib/templates/templates/package.json.template b/kipper/cli/lib/templates/templates/package.json.template new file mode 100644 index 000000000..a5989a0fb --- /dev/null +++ b/kipper/cli/lib/templates/templates/package.json.template @@ -0,0 +1,18 @@ +{ + "name": "", + "description": "", + "version": "", + "scripts": { + "run": "kipper run ./src/main.kip", + "build": "kipper compile" + }, + "dependencies": { + "@kipper/cli": "" + }, + "keywords": [ + "kipper" + ], + "author": "", + "license": "", + "homepage": "" +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts index 19ad872be..04a277747 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts @@ -3,9 +3,22 @@ * @since 0.10.0 */ import type { IterationStatementSemantics } from "../iteration-statement-semantics"; +import { Expression } from "../../../expressions"; +import { Statement } from "../../statement"; /** * Semantics for AST Node {@link DoWhileLoopIterationStatement}. * @since 0.10.0 */ -export interface DoWhileLoopIterationStatementSemantics extends IterationStatementSemantics {} +export interface DoWhileLoopIterationStatementSemantics extends IterationStatementSemantics { + /** + * The loop condition, which, if it evaluates to true will trigger the loop to continue executing. + * @since 0.10.0 + */ + loopCondition: Expression; + /** + * The body of the loop, which is executed as long as {@link loopCondition} is true. + * @since 0.10.0 + */ + loopBody: Statement; +} diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts index 0d1dbc27f..06ca762fd 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts @@ -12,6 +12,8 @@ import { ParseRuleKindMapping, } from "../../../../../parser"; import { KipperNotImplementedError } from "../../../../../../errors"; +import type { Expression } from "../../../expressions"; +import { Statement } from "../../statement"; /** * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable @@ -94,9 +96,13 @@ export class DoWhileLoopIterationStatement extends IterationStatement< * the children has already failed and as such no parent node should run type checking. */ public async primarySemanticAnalysis(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); + const loopBody = this.children[0]; + const loopCondition = this.children[1]; + + this.semanticData = { + loopCondition: loopCondition, + loopBody: loopBody, + }; } /** @@ -107,11 +113,7 @@ export class DoWhileLoopIterationStatement extends IterationStatement< * the children has already failed and as such no parent node should run type checking. * @since 0.7.0 */ - public async primarySemanticTypeChecking(): Promise { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Do-While loop statements have not been implemented yet.")); - } + public primarySemanticTypeChecking: undefined = undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts index 9ae089c37..db2ed01d3 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts @@ -9,6 +9,7 @@ import type { Expression } from "../../../expressions"; import { IterationStatement } from "../iteration-statement"; import { KindParseRuleMapping, ParseRuleKindMapping, WhileLoopIterationStatementContext } from "../../../../../parser"; import { Statement } from "../../statement"; +import { KipperProgramContext } from "../../../../../program-ctx"; /** * While loop statement class, which represents a while loop statement in the Kipper language and is compilable diff --git a/kipper/core/src/compiler/program-ctx.ts b/kipper/core/src/compiler/program-ctx.ts index 45c781da7..9d5746d6e 100644 --- a/kipper/core/src/compiler/program-ctx.ts +++ b/kipper/core/src/compiler/program-ctx.ts @@ -198,6 +198,7 @@ export class KipperProgramContext { ); } + // @ts-ignore /** * Asserts a certain truth. * @param ctx The AST node context item. diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 2f82c2945..a2a8c628c 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -234,12 +234,23 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { * @since 0.10.0 */ doWhileLoopIterationStatement = async (node: DoWhileLoopIterationStatement): Promise> => { - return []; + const semanticData = node.getSemanticData(); + const condition = await semanticData.loopCondition.translateCtxAndChildren(); + const statement = await semanticData.loopBody.translateCtxAndChildren(); + + // Check whether the loop body is a compound statement + const isCompound = semanticData.loopBody instanceof CompoundStatement; + + return [ + ["do", " ", isCompound ? "{" : ""], + ...(isCompound ? removeBraces(statement) : indentLines(statement)), + [isCompound ? "} " : "", "while", " ", "(", ...condition, ")"], + ]; }; /** * Translates a {@link WhileLoopIterationStatement} into the JavaScript language. - * @since 0.10.0 + * @since 0.// Check whether the loop body is a compound statement10.0 */ whileLoopIterationStatement = async (node: WhileLoopIterationStatement): Promise> => { const semanticData = node.getSemanticData(); diff --git a/test/kipper-files/do-while-loop.kip b/test/kipper-files/do-while-loop.kip new file mode 100644 index 000000000..63afeaa80 --- /dev/null +++ b/test/kipper-files/do-while-loop.kip @@ -0,0 +1,6 @@ +var i: num = 0; +do { + i++; +} while (i < 10); + +print(i as str); diff --git a/test/module/core/compiler.test.ts b/test/module/core/compiler.test.ts index 1ee4b6970..f274489f5 100644 --- a/test/module/core/compiler.test.ts +++ b/test/module/core/compiler.test.ts @@ -40,6 +40,7 @@ const tangledExpressionsFile = getFileName("tangled-expressions.kip"); const ifStatementsFile = getFileName("if-statements.kip"); const forLoopFile = getFileName("for-loop.kip"); const whileLoopFile = getFileName("while-loop.kip"); +const doWhileLoopFile = getFileName("do-while-loop.kip"); describe("KipperCompiler", () => { const defaultTarget = new KipperTypeScriptTarget(); @@ -539,6 +540,21 @@ describe("KipperCompiler", () => { assert(String(i++) === message, `Expected '${String(i - 1)}' from for-loop`); }, jsCode); }); + + it(`Do-While loop [${target.fileExtension}]`, async () => { + const fileContent : string = (await fs.readFile(doWhileLoopFile, "utf8" as BufferEncoding)).toString(); + const result : KipperCompileResult = await compiler.compile(fileContent, { target: target }); + + const code : string = result.write(); + assert(code); + assert(code.includes(TargetTS.getBuiltInIdentifier("print"))); + assert(code.includes(TargetTS.getBuiltInIdentifier("numToStr"))); + + const jsCode = ts.transpile(result.write()); + testPrintOutput((message: any) => { + assert("10" === message, "Expected '10'"); + }, jsCode); + }); }); }); }); diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 5c6ac40e1..5a504c9c0 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -746,6 +746,92 @@ describe("Core functionality", () => { }); }); + //do while loop tests + describe("Do While loop", () => { + it("Simple Loop with compound statement", async () => { + const fileContent = "var x: num = 1; do { x += 1; } while (x <= 5); print(x as str);"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const code = instance.write(); + assert.include(code, "do {\n x += 1;\n} while (x <= 5)", "Invalid TypeScript code (Expected different output)"); + + const jsCode = ts.transpile(code); + testPrintOutput((message: any) => assert.equal(message, "6", "Expected different output"), jsCode); + }); + + it("Simple Loop with expression statement", async () => { + const fileContent = "var x: num = 1; do x += 1; while (x <= 10); print(x as str);"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const code = instance.write(); + assert.include(code, "do \n x += 1;\nwhile (x <= 10)", "Invalid TypeScript code (Expected different output)"); + + const jsCode = ts.transpile(code); + testPrintOutput((message: any) => assert.equal(message, "11", "Expected different output"), jsCode); + }); + + it("Simple Loop with if statement", async () => { + const fileContent = "var x: num = 1; do { if (x != 10) x += 1; } while (x < 10); print(x as str);"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const code = instance.write(); + assert.include( + code, + "do {\n if (x !== 10) {\n x += 1;\n } \n} while (x < 10)", + "Invalid TypeScript code (Expected different output)", + ); + + const jsCode = ts.transpile(code); + testPrintOutput((message: any) => assert.equal(message, "10", "Expected different output"), jsCode); + }); + + it("Can be interrupted with break", async () => { + const fileContent = "var x: num = 1; do { if (x == 5) break; x += 1; } while (x < 10); print(x as str);"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const code = instance.write(); + assert.include( + code, + "do {\n if (x === 5) {\n break;\n } \n x += 1;\n} while (x < 10)", + "Invalid TypeScript code (Expected different output)", + ); + + const jsCode = ts.transpile(code); + testPrintOutput((message: any) => assert.equal(message, "5", "Expected different output"), jsCode); + }); + + it("Can be interrupted with continue", async () => { + const fileContent = + "var x: num = 1; var y: num = 1; do { x++; if (x > 5) continue; y++; } while (x < 10); print(y as str);"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const code = instance.write(); + assert.include( + code, + "do {\n x++;\n if (x > 5) {\n continue;\n } \n y++;\n} while (x < 10)", + "Invalid TypeScript code (Expected different output)", + ); + + const jsCode = ts.transpile(code); + testPrintOutput((message: any) => assert.equal(message, "5", "Expected different output"), jsCode); + }); + }); + describe("Member access", () => { describe("Dot notation", () => {}); From 107f1e34ebf92c42a3af3f94e7d0969318aaf111 Mon Sep 17 00:00:00 2001 From: Fabian Date: Mon, 1 Jul 2024 14:29:30 +0200 Subject: [PATCH 149/257] other (#271) Added Do-While-Loop to Changelog.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3a13d97c..0e7101685 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,8 @@ To use development versions of Kipper download the [`next` tag release](https://www.npmjs.com/package/kipper?activeTab=versions), which will include the specified changes. ### Added - +- Implemented Do-While-Loop (`do ... while ...`) iteration statements. + ([#271](https://github.com/Kipper-Lang/Kipper/issues/271)) - Support for config files with a new monorepo package called `@kipper/config`, which implements config file loading and parsing. This package is used by the Kipper CLI to automatically load and parse config files. ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). From ebf7e64dbabd02c174ad0a316562a349bf62966f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 14:29:48 +0200 Subject: [PATCH 150/257] minor (#523): Added missing parser tree walker in ast-generator.ts --- kipper/core/src/compiler/ast/ast-generator.ts | 15 +++++++++++++++ .../object-property/object-property.ts | 8 ++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 9fbe45569..48d5fefab 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -51,6 +51,7 @@ import type { LogicalAndExpressionContext, NumberPrimaryExpressionContext, ObjectPrimaryExpressionContext, + ObjectPropertyContext, OperatorModifiedUnaryExpressionContext, ParameterDeclarationContext, ParameterListContext, @@ -377,6 +378,20 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ public exitObjectPrimaryExpression: (ctx: ObjectPrimaryExpressionContext) => void = this.handleExitingTreeNode; + /** + * Enter a parse tree produced by `KipperParser.objectProperty`. + * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). + * @since 0.11.0 + */ + public enterObjectProperty: (ctx: ObjectPropertyContext) => void = this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by `KipperParser.objectProperty`. + * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). + * @since 0.11.0 + */ + public exitObjectProperty: (ctx: ObjectPropertyContext) => void = this.handleExitingTreeNode; + /** * Enter a parse tree produced by `KipperParser.boolPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts index 98b62d132..eaf8ad7b0 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts @@ -68,9 +68,7 @@ export class ObjectProperty extends PrimaryExpression { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Object Properties have not been implemented yet.")); + return; // For now, we don't have any semantic analysis for object properties. } /** @@ -82,9 +80,7 @@ export class ObjectProperty extends PrimaryExpression { - throw this.programCtx - .semanticCheck(this) - .notImplementedError(new KipperNotImplementedError("Object Properties have not been implemented yet.")); + return; // For now, we don't have any type checking for object properties. } /** From 42d979d321bc96430f6e1bdc9013a2faf6afa14b Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 14:29:58 +0200 Subject: [PATCH 151/257] other: Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42d9a0b24..0c6e29bc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -158,7 +158,7 @@ To use development versions of Kipper download the ### Removed - Removed AST parent class `ConstantExpression`, its interfaces `ConstantExpressionSemantics` and - `ConstantExpressionTypeSemantics`, as they were not really needed and unnecessarily added another level of + `ConstantExpressionTypeSemantics`, as they were not really needed and unnecessarily added another level of complexity to the AST. All classes which previously inherited from `ConstantExpression` now inherit from `PrimaryExpression` instead. From 4ab11ed9398bdcd86c3db792766099ec3a1ad2e2 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 14:43:57 +0200 Subject: [PATCH 152/257] other: Filled in .gitignore --- kipper/cli/.gitignore | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/kipper/cli/.gitignore b/kipper/cli/.gitignore index e69de29bb..4ad1c7abc 100644 --- a/kipper/cli/.gitignore +++ b/kipper/cli/.gitignore @@ -0,0 +1,79 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# oclif .gitignore ttttt +*-debug.log +*-error.log +/.nyc_output +/tmp +/yarn.lock +node_modules + +# Web builds +kipper-standalone.js +kipper-standalone.min.js + +# Runtime data +pids +*.pid +*.seed +*.pid.lock +gen/ + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc __tests__ coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript controller_v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# Transpiled JavaScript files from Typescript +/lib + +# Cache used by TypeScript's incremental build +*.tsbuildinfo + +*.idea From c85eb665ac950127d2562da2dae604a42fee160c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 14:44:59 +0200 Subject: [PATCH 153/257] other: Removed incorrectly pushed lib folder --- kipper/cli/lib/commands/analyse.d.ts | 10 -- kipper/cli/lib/commands/analyse.js | 72 -------- kipper/cli/lib/commands/analyse.js.map | 1 - kipper/cli/lib/commands/compile.d.ts | 31 ---- kipper/cli/lib/commands/compile.js | 155 ------------------ kipper/cli/lib/commands/compile.js.map | 1 - kipper/cli/lib/commands/help.d.ts | 12 -- kipper/cli/lib/commands/help.js | 14 -- kipper/cli/lib/commands/help.js.map | 1 - kipper/cli/lib/commands/new.d.ts | 15 -- kipper/cli/lib/commands/new.js | 126 -------------- kipper/cli/lib/commands/new.js.map | 1 - kipper/cli/lib/commands/run.d.ts | 11 -- kipper/cli/lib/commands/run.js | 93 ----------- kipper/cli/lib/commands/run.js.map | 1 - kipper/cli/lib/commands/version.d.ts | 5 - kipper/cli/lib/commands/version.js | 11 -- kipper/cli/lib/commands/version.js.map | 1 - kipper/cli/lib/config-loader.d.ts | 12 -- kipper/cli/lib/config-loader.js | 33 ---- kipper/cli/lib/config-loader.js.map | 1 - kipper/cli/lib/copy-resources.d.ts | 3 - kipper/cli/lib/copy-resources.js | 21 --- kipper/cli/lib/copy-resources.js.map | 1 - kipper/cli/lib/decorators.d.ts | 2 - kipper/cli/lib/decorators.js | 60 ------- kipper/cli/lib/decorators.js.map | 1 - kipper/cli/lib/errors.d.ts | 19 --- kipper/cli/lib/errors.js | 41 ----- kipper/cli/lib/errors.js.map | 1 - kipper/cli/lib/help.d.ts | 4 - kipper/cli/lib/help.js | 8 - kipper/cli/lib/help.js.map | 1 - kipper/cli/lib/index.d.ts | 10 -- kipper/cli/lib/index.js | 16 -- kipper/cli/lib/index.js.map | 1 - kipper/cli/lib/input/file-stream.d.ts | 25 --- kipper/cli/lib/input/file-stream.js | 86 ---------- kipper/cli/lib/input/file-stream.js.map | 1 - kipper/cli/lib/input/index.d.ts | 2 - kipper/cli/lib/input/index.js | 6 - kipper/cli/lib/input/index.js.map | 1 - kipper/cli/lib/input/target.d.ts | 2 - kipper/cli/lib/input/target.js | 20 --- kipper/cli/lib/input/target.js.map | 1 - kipper/cli/lib/logger.d.ts | 8 - kipper/cli/lib/logger.js | 33 ---- kipper/cli/lib/logger.js.map | 1 - kipper/cli/lib/output/compile.d.ts | 3 - kipper/cli/lib/output/compile.js | 33 ---- kipper/cli/lib/output/compile.js.map | 1 - kipper/cli/lib/output/index.d.ts | 1 - kipper/cli/lib/output/index.js | 5 - kipper/cli/lib/output/index.js.map | 1 - kipper/cli/lib/prompt-module.d.ts | 8 - kipper/cli/lib/prompt-module.js | 54 ------ kipper/cli/lib/prompt-module.js.map | 1 - kipper/cli/lib/templates/.gitignore.template | 130 --------------- .../lib/templates/kip-config.json.template | 12 -- kipper/cli/lib/templates/main.kip.template | 12 -- .../cli/lib/templates/package.json.template | 18 -- .../templates/templates/.gitignore.template | 130 --------------- .../templates/kip-config.json.template | 12 -- .../lib/templates/templates/main.kip.template | 12 -- .../templates/templates/package.json.template | 18 -- 65 files changed, 1433 deletions(-) delete mode 100644 kipper/cli/lib/commands/analyse.d.ts delete mode 100644 kipper/cli/lib/commands/analyse.js delete mode 100644 kipper/cli/lib/commands/analyse.js.map delete mode 100644 kipper/cli/lib/commands/compile.d.ts delete mode 100644 kipper/cli/lib/commands/compile.js delete mode 100644 kipper/cli/lib/commands/compile.js.map delete mode 100644 kipper/cli/lib/commands/help.d.ts delete mode 100644 kipper/cli/lib/commands/help.js delete mode 100644 kipper/cli/lib/commands/help.js.map delete mode 100644 kipper/cli/lib/commands/new.d.ts delete mode 100644 kipper/cli/lib/commands/new.js delete mode 100644 kipper/cli/lib/commands/new.js.map delete mode 100644 kipper/cli/lib/commands/run.d.ts delete mode 100644 kipper/cli/lib/commands/run.js delete mode 100644 kipper/cli/lib/commands/run.js.map delete mode 100644 kipper/cli/lib/commands/version.d.ts delete mode 100644 kipper/cli/lib/commands/version.js delete mode 100644 kipper/cli/lib/commands/version.js.map delete mode 100644 kipper/cli/lib/config-loader.d.ts delete mode 100644 kipper/cli/lib/config-loader.js delete mode 100644 kipper/cli/lib/config-loader.js.map delete mode 100644 kipper/cli/lib/copy-resources.d.ts delete mode 100644 kipper/cli/lib/copy-resources.js delete mode 100644 kipper/cli/lib/copy-resources.js.map delete mode 100644 kipper/cli/lib/decorators.d.ts delete mode 100644 kipper/cli/lib/decorators.js delete mode 100644 kipper/cli/lib/decorators.js.map delete mode 100644 kipper/cli/lib/errors.d.ts delete mode 100644 kipper/cli/lib/errors.js delete mode 100644 kipper/cli/lib/errors.js.map delete mode 100644 kipper/cli/lib/help.d.ts delete mode 100644 kipper/cli/lib/help.js delete mode 100644 kipper/cli/lib/help.js.map delete mode 100644 kipper/cli/lib/index.d.ts delete mode 100644 kipper/cli/lib/index.js delete mode 100644 kipper/cli/lib/index.js.map delete mode 100644 kipper/cli/lib/input/file-stream.d.ts delete mode 100644 kipper/cli/lib/input/file-stream.js delete mode 100644 kipper/cli/lib/input/file-stream.js.map delete mode 100644 kipper/cli/lib/input/index.d.ts delete mode 100644 kipper/cli/lib/input/index.js delete mode 100644 kipper/cli/lib/input/index.js.map delete mode 100644 kipper/cli/lib/input/target.d.ts delete mode 100644 kipper/cli/lib/input/target.js delete mode 100644 kipper/cli/lib/input/target.js.map delete mode 100644 kipper/cli/lib/logger.d.ts delete mode 100644 kipper/cli/lib/logger.js delete mode 100644 kipper/cli/lib/logger.js.map delete mode 100644 kipper/cli/lib/output/compile.d.ts delete mode 100644 kipper/cli/lib/output/compile.js delete mode 100644 kipper/cli/lib/output/compile.js.map delete mode 100644 kipper/cli/lib/output/index.d.ts delete mode 100644 kipper/cli/lib/output/index.js delete mode 100644 kipper/cli/lib/output/index.js.map delete mode 100644 kipper/cli/lib/prompt-module.d.ts delete mode 100644 kipper/cli/lib/prompt-module.js delete mode 100644 kipper/cli/lib/prompt-module.js.map delete mode 100644 kipper/cli/lib/templates/.gitignore.template delete mode 100644 kipper/cli/lib/templates/kip-config.json.template delete mode 100644 kipper/cli/lib/templates/main.kip.template delete mode 100644 kipper/cli/lib/templates/package.json.template delete mode 100644 kipper/cli/lib/templates/templates/.gitignore.template delete mode 100644 kipper/cli/lib/templates/templates/kip-config.json.template delete mode 100644 kipper/cli/lib/templates/templates/main.kip.template delete mode 100644 kipper/cli/lib/templates/templates/package.json.template diff --git a/kipper/cli/lib/commands/analyse.d.ts b/kipper/cli/lib/commands/analyse.d.ts deleted file mode 100644 index 86b4aea8c..000000000 --- a/kipper/cli/lib/commands/analyse.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { args } from "@oclif/parser"; -import { Command, flags } from "@oclif/command"; -export default class Analyse extends Command { - static description: string; - static examples: Array; - static args: args.Input; - static flags: flags.Input; - private getRunConfig; - run(): Promise; -} diff --git a/kipper/cli/lib/commands/analyse.js b/kipper/cli/lib/commands/analyse.js deleted file mode 100644 index 30ef32adb..000000000 --- a/kipper/cli/lib/commands/analyse.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tslib_1 = require("tslib"); -const command_1 = require("@oclif/command"); -const core_1 = require("@kipper/core"); -const logger_1 = require("../logger"); -const input_1 = require("../input/"); -const decorators_1 = require("../decorators"); -const config_loader_1 = require("../config-loader"); -class Analyse extends command_1.Command { - async getRunConfig() { - const { args, flags } = this.parse(Analyse); - const preExistingConfig = await (0, config_loader_1.loadAutoConfig)(); - const { stream } = await (0, input_1.getParseStream)(args, flags, preExistingConfig); - return { - args, - flags, - config: { - stream, - }, - }; - } - async run() { - const { flags, config } = await this.getRunConfig(); - const logger = new core_1.KipperLogger(logger_1.CLIEmitHandler.emit, core_1.LogLevel.INFO, flags["warnings"]); - const compiler = new core_1.KipperCompiler(logger); - const startTime = new Date().getTime(); - try { - await compiler.syntaxAnalyse(config.stream); - } - catch (e) { - return; - } - const duration = (new Date().getTime() - startTime) / 1000; - await logger.info(`Done in ${duration}s.`); - } -} -Analyse.description = "Analyse a Kipper file and validate its syntax and semantic integrity."; -Analyse.examples = []; -Analyse.args = [ - { - name: "file", - required: false, - description: "The file that should be analysed.", - }, -]; -Analyse.flags = { - encoding: command_1.flags.string({ - char: "e", - default: "utf8", - description: `The encoding that should be used to read the file (${input_1.KipperEncodings.join()}).`, - parse: input_1.verifyEncoding, - }), - "string-code": command_1.flags.string({ - char: "s", - description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter.", - }), - warnings: command_1.flags.boolean({ - char: "w", - default: true, - description: "Show warnings that were emitted during the analysis.", - allowNo: true, - }), -}; -exports.default = Analyse; -tslib_1.__decorate([ - (0, decorators_1.prettifiedErrors)(), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", []), - tslib_1.__metadata("design:returntype", Promise) -], Analyse.prototype, "run", null); -//# sourceMappingURL=analyse.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/analyse.js.map b/kipper/cli/lib/commands/analyse.js.map deleted file mode 100644 index 21fe5c279..000000000 --- a/kipper/cli/lib/commands/analyse.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"analyse.js","sourceRoot":"","sources":["../../src/commands/analyse.ts"],"names":[],"mappings":";;;AAKA,4CAAgD;AAChD,uCAAsE;AACtE,sCAA2C;AAC3C,qCAA4E;AAC5E,8CAAiD;AACjD,oDAAkD;AAElD,MAAqB,OAAQ,SAAQ,iBAAO;IAqCnC,KAAK,CAAC,YAAY;QACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAG5C,MAAM,iBAAiB,GAAG,MAAM,IAAA,8BAAc,GAAE,CAAC;QAGjD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAExE,OAAO;YACN,IAAI;YACJ,KAAK;YACL,MAAM,EAAE;gBACP,MAAM;aACN;SACD,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,GAAG;QACf,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,mBAAY,CAAC,uBAAc,CAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,qBAAc,CAAC,MAAM,CAAC,CAAC;QAG5C,MAAM,SAAS,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAG/C,IAAI;YACH,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACX,OAAO;SACP;QAGD,MAAM,QAAQ,GAAW,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,CAAC;IAC5C,CAAC;;AAzEe,mBAAW,GAAW,uEAAuE,CAAC;AAG9F,gBAAQ,GAAkB,EAAE,CAAC;AAE7B,YAAI,GAAe;IAClC;QACC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,mCAAmC;KAChD;CACD,CAAC;AAEc,aAAK,GAAqB;IACzC,QAAQ,EAAE,eAAK,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,sDAAsD,uBAAe,CAAC,IAAI,EAAE,IAAI;QAC7F,KAAK,EAAE,sBAAc;KACrB,CAAC;IACF,aAAa,EAAE,eAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,4FAA4F;KACzG,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,OAAO,CAAC;QACvB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,sDAAsD;QACnE,OAAO,EAAE,IAAI;KACb,CAAC;CACF,CAAC;kBA/BkB,OAAO;AAwDd;IADZ,IAAA,6BAAgB,GAAW;;;;kCAmB3B"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/compile.d.ts b/kipper/cli/lib/commands/compile.d.ts deleted file mode 100644 index 7ac9b78bd..000000000 --- a/kipper/cli/lib/commands/compile.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { args } from "@oclif/parser"; -import { Command, flags } from "@oclif/command"; -import { CompileConfig, KipperCompileTarget, KipperLogger } from "@kipper/core"; -import { KipperParseFile } from "../input/"; -export default class Compile extends Command { - static description: string; - static examples: Array; - static args: args.Input; - static flags: flags.Input; - protected getRunConfig(): Promise<{ - args: { - [name: string]: any; - }; - flags: { - [x: string]: any; - }; - config: { - stream: KipperParseFile | import("@kipper/core").KipperParseStream; - target: KipperCompileTarget; - outDir: string; - outPath: string; - encoding: any; - resources: { - src: string; - out: string; - }[]; - compilerOptions: CompileConfig; - }; - }>; - run(logger?: KipperLogger): Promise; -} diff --git a/kipper/cli/lib/commands/compile.js b/kipper/cli/lib/commands/compile.js deleted file mode 100644 index f607b932d..000000000 --- a/kipper/cli/lib/commands/compile.js +++ /dev/null @@ -1,155 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tslib_1 = require("tslib"); -const command_1 = require("@oclif/command"); -const tslog_1 = require("tslog"); -const core_1 = require("@kipper/core"); -const logger_1 = require("../logger"); -const input_1 = require("../input/"); -const output_1 = require("../output"); -const decorators_1 = require("../decorators"); -const config_loader_1 = require("../config-loader"); -const copy_resources_1 = require("../copy-resources"); -const node_path_1 = tslib_1.__importDefault(require("node:path")); -class Compile extends command_1.Command { - async getRunConfig() { - const { args, flags } = this.parse(Compile); - const preExistingConfig = await (0, config_loader_1.loadAutoConfig)(); - const preExistingCompileConfig = preExistingConfig?.genCompilerConfig(); - const { stream, outDir } = await (0, input_1.getParseStream)(args, flags, preExistingConfig); - const target = flags["target"] - ? (0, input_1.getTarget)(flags["target"]) - : preExistingCompileConfig?.target ?? (0, input_1.getTarget)("js"); - const encoding = flags["encoding"] || "utf-8"; - const fileName = stream instanceof input_1.KipperParseFile ? stream.path.name : stream.name; - const outPath = `${node_path_1.default.resolve(outDir)}/${fileName}.${target.fileExtension}`; - return { - args, - flags, - config: { - stream, - target, - outDir, - outPath, - encoding, - resources: preExistingConfig?.resources ?? [], - compilerOptions: { - ...preExistingCompileConfig, - target: target, - optimisationOptions: { - optimiseInternals: flags["optimise-internals"] ?? - preExistingCompileConfig?.optimisationOptions?.optimiseInternals ?? - core_1.defaultOptimisationOptions.optimiseInternals, - optimiseBuiltIns: flags["optimise-builtins"] ?? - preExistingCompileConfig?.optimisationOptions?.optimiseBuiltIns ?? - core_1.defaultOptimisationOptions.optimiseBuiltIns, - }, - recover: flags["recover"] ?? preExistingCompileConfig?.recover ?? core_1.EvaluatedCompileConfig.defaults.recover, - abortOnFirstError: flags["abort-on-first-error"] ?? - preExistingCompileConfig?.abortOnFirstError ?? - core_1.EvaluatedCompileConfig.defaults.abortOnFirstError, - }, - }, - }; - } - async run(logger) { - const { flags, config } = await this.getRunConfig(); - logger = logger ?? new core_1.KipperLogger(logger_1.CLIEmitHandler.emit, core_1.LogLevel.INFO, flags["warnings"]); - const compiler = new core_1.KipperCompiler(logger); - if (flags["log-timestamp"]) { - logger_1.CLIEmitHandler.cliLogger = new tslog_1.Logger({ ...logger_1.defaultKipperLoggerConfig, displayDateTime: true }); - } - const startTime = new Date().getTime(); - let result; - try { - result = await compiler.compile(config.stream, config.compilerOptions); - } - catch (e) { - if (e instanceof core_1.KipperError && config.compilerOptions.abortOnFirstError) { - return; - } - throw e; - } - if (!result.success) { - return; - } - const out = await (0, output_1.writeCompilationResult)(result, config.outDir, config.outPath, config.encoding); - logger.debug(`Generated file '${out}'.`); - if (config.resources) { - await (0, copy_resources_1.copyConfigResources)(config.resources); - logger.debug(`Finished copying resources specified in config.`); - } - const duration = (new Date().getTime() - startTime) / 1000; - logger.info(`Done in ${duration}s.`); - } -} -Compile.description = "Compile a Kipper program into the specified target language."; -Compile.examples = []; -Compile.args = [ - { - name: "file", - required: false, - description: "The file that should be compiled. Takes precedence over the 'string-code' flag and the config file.", - }, -]; -Compile.flags = { - target: command_1.flags.string({ - char: "t", - description: "The target language where the compiled program should be emitted to.", - options: ["js", "ts"], - }), - encoding: command_1.flags.string({ - char: "e", - description: `The encoding that should be used to read the file (${input_1.KipperEncodings.join()}).`, - parse: input_1.verifyEncoding, - }), - "output-dir": command_1.flags.string({ - char: "o", - description: "The build directory where the compiled files should be placed. If the path does not exist, it will be created. Takes precedence over the config file, defaults to 'build' if both are not provided", - }), - "string-code": command_1.flags.string({ - char: "s", - description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter. Takes precedence over the config file.", - }), - "optimise-internals": command_1.flags.boolean({ - char: "i", - default: core_1.defaultOptimisationOptions.optimiseInternals, - description: "Optimise the generated internal functions using tree-shaking to reduce the size of the output.", - allowNo: true, - }), - "optimise-builtins": command_1.flags.boolean({ - char: "b", - default: core_1.defaultOptimisationOptions.optimiseInternals, - description: "Optimise the generated built-in functions using tree-shaking to reduce the size of the output.", - allowNo: true, - }), - warnings: command_1.flags.boolean({ - char: "w", - default: true, - description: "Show warnings that were emitted during the compilation.", - allowNo: true, - }), - "log-timestamp": command_1.flags.boolean({ - default: false, - description: "Show the timestamp of each log message.", - allowNo: true, - }), - recover: command_1.flags.boolean({ - default: core_1.EvaluatedCompileConfig.defaults.recover, - description: "Recover from compiler errors and log all detected semantic issues.", - allowNo: true, - }), - "abort-on-first-error": command_1.flags.boolean({ - default: core_1.EvaluatedCompileConfig.defaults.abortOnFirstError, - description: "Abort on the first error the compiler encounters.", - allowNo: true, - }), -}; -exports.default = Compile; -tslib_1.__decorate([ - (0, decorators_1.prettifiedErrors)(), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", [core_1.KipperLogger]), - tslib_1.__metadata("design:returntype", Promise) -], Compile.prototype, "run", null); -//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/compile.js.map b/kipper/cli/lib/commands/compile.js.map deleted file mode 100644 index d1ffc6255..000000000 --- a/kipper/cli/lib/commands/compile.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":";;;AAKA,4CAAgD;AAChD,iCAA+B;AAC/B,uCAUsB;AACtB,sCAAsE;AACtE,qCAAwH;AACxH,sCAAmD;AACnD,8CAAiD;AACjD,oDAAkD;AAClD,sDAAwD;AACxD,kEAA6B;AAE7B,MAAqB,OAAQ,SAAQ,iBAAO;IAgFjC,KAAK,CAAC,YAAY;QAC3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAG5C,MAAM,iBAAiB,GAAG,MAAM,IAAA,8BAAc,GAAE,CAAC;QACjD,MAAM,wBAAwB,GAAG,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;QAGxE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAChF,MAAM,MAAM,GAAwB,KAAK,CAAC,QAAQ,CAAC;YAClD,CAAC,CAAC,IAAA,iBAAS,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC,CAAC,wBAAwB,EAAE,MAAM,IAAI,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAC;QAGvD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,YAAY,uBAAe,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACpF,MAAM,OAAO,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAE9E,OAAO;YACN,IAAI;YACJ,KAAK;YACL,MAAM,EAAE;gBACP,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,OAAO;gBACP,QAAQ;gBACR,SAAS,EAAE,iBAAiB,EAAE,SAAS,IAAI,EAAE;gBAC7C,eAAe,EAAE;oBAChB,GAAG,wBAAwB;oBAC3B,MAAM,EAAE,MAAM;oBACd,mBAAmB,EAAE;wBACpB,iBAAiB,EAChB,KAAK,CAAC,oBAAoB,CAAC;4BAC3B,wBAAwB,EAAE,mBAAmB,EAAE,iBAAiB;4BAChE,iCAA0B,CAAC,iBAAiB;wBAC7C,gBAAgB,EACf,KAAK,CAAC,mBAAmB,CAAC;4BAC1B,wBAAwB,EAAE,mBAAmB,EAAE,gBAAgB;4BAC/D,iCAA0B,CAAC,gBAAgB;qBAC5C;oBACD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,wBAAwB,EAAE,OAAO,IAAI,6BAAsB,CAAC,QAAQ,CAAC,OAAO;oBACzG,iBAAiB,EAChB,KAAK,CAAC,sBAAsB,CAAC;wBAC7B,wBAAwB,EAAE,iBAAiB;wBAC3C,6BAAsB,CAAC,QAAQ,CAAC,iBAAiB;iBACjC;aAClB;SACD,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,GAAG,CAAC,MAAqB;QACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpD,MAAM,GAAG,MAAM,IAAI,IAAI,mBAAY,CAAC,uBAAc,CAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,IAAI,qBAAc,CAAC,MAAM,CAAC,CAAC;QAG5C,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE;YAC3B,uBAAc,CAAC,SAAS,GAAG,IAAI,cAAM,CAAC,EAAE,GAAG,kCAAyB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/F;QAGD,MAAM,SAAS,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAG/C,IAAI,MAA2B,CAAC;QAChC,IAAI;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;SACvE;QAAC,OAAO,CAAC,EAAE;YACX,IAAI,CAAC,YAAY,kBAAW,IAAI,MAAM,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBAGzE,OAAO;aACP;YACD,MAAM,CAAC,CAAC;SACR;QAGD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACpB,OAAO;SACP;QAGD,MAAM,GAAG,GAAG,MAAM,IAAA,+BAAsB,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjG,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;QAGzC,IAAI,MAAM,CAAC,SAAS,EAAE;YACrB,MAAM,IAAA,oCAAmB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;SAChE;QAGD,MAAM,QAAQ,GAAW,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,CAAC;IACtC,CAAC;;AAhLe,mBAAW,GAAW,8DAA8D,CAAC;AAGrF,gBAAQ,GAAkB,EAAE,CAAC;AAE7B,YAAI,GAAe;IAClC;QACC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EACV,qGAAqG;KACtG;CACD,CAAC;AAEc,aAAK,GAAqB;IACzC,MAAM,EAAE,eAAK,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sEAAsE;QACnF,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sDAAsD,uBAAe,CAAC,IAAI,EAAE,IAAI;QAC7F,KAAK,EAAE,sBAAc;KACrB,CAAC;IACF,YAAY,EAAE,eAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,GAAG;QACT,WAAW,EACV,oMAAoM;KACrM,CAAC;IACF,aAAa,EAAE,eAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,GAAG;QACT,WAAW,EACV,mIAAmI;KACpI,CAAC;IACF,oBAAoB,EAAE,eAAK,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,GAAG;QACT,OAAO,EAAW,iCAA0B,CAAC,iBAAiB;QAC9D,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,mBAAmB,EAAE,eAAK,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,GAAG;QACT,OAAO,EAAW,iCAA0B,CAAC,iBAAiB;QAC9D,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,OAAO,CAAC;QAEvB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,IAAI;KACb,CAAC;IACF,eAAe,EAAE,eAAK,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,IAAI;KACb,CAAC;IACF,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,OAAO;QAChD,WAAW,EAAE,oEAAoE;QACjF,OAAO,EAAE,IAAI;KACb,CAAC;IAKF,sBAAsB,EAAE,eAAK,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,iBAAiB;QAC1D,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,IAAI;KACb,CAAC;CACF,CAAC;kBA1EkB,OAAO;AAoId;IADZ,IAAA,6BAAgB,GAAW;;6CACF,mBAAY;;kCA6CrC"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/help.d.ts b/kipper/cli/lib/commands/help.d.ts deleted file mode 100644 index eae13c2a6..000000000 --- a/kipper/cli/lib/commands/help.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import HelpCommand from "@oclif/plugin-help/lib/commands/help"; -import { flags } from "@oclif/command"; -export default class Help extends HelpCommand { - static description: string; - static args: { - name: string; - required: boolean; - description: string; - }[]; - static flags: flags.Input; - static run(): Promise; -} diff --git a/kipper/cli/lib/commands/help.js b/kipper/cli/lib/commands/help.js deleted file mode 100644 index 43aa6fe09..000000000 --- a/kipper/cli/lib/commands/help.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tslib_1 = require("tslib"); -const help_1 = tslib_1.__importDefault(require("@oclif/plugin-help/lib/commands/help")); -class Help extends help_1.default { - static async run() { - return await super.run(); - } -} -Help.description = "Display help for the Kipper CLI."; -Help.args = help_1.default.args; -Help.flags = help_1.default.flags; -exports.default = Help; -//# sourceMappingURL=help.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/help.js.map b/kipper/cli/lib/commands/help.js.map deleted file mode 100644 index 06805066f..000000000 --- a/kipper/cli/lib/commands/help.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":";;;AAIA,wFAA+D;AAQ/D,MAAqB,IAAK,SAAQ,cAAW;IAK5C,MAAM,CAAU,KAAK,CAAC,GAAG;QACxB,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;;AANe,gBAAW,GAAW,kCAAkC,CAAC;AACzD,SAAI,GAAG,cAAW,CAAC,IAAI,CAAC;AACxB,UAAK,GAAqB,cAAW,CAAC,KAAK,CAAC;kBAHxC,IAAI"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/new.d.ts b/kipper/cli/lib/commands/new.d.ts deleted file mode 100644 index d95f39034..000000000 --- a/kipper/cli/lib/commands/new.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { args } from "@oclif/parser"; -import { Command, flags } from "@oclif/command"; -export default class New extends Command { - static description: string; - static examples: Array; - static args: args.Input; - static flags: flags.Input; - private getRunConfig; - private fileExists; - private genKipConfig; - private genMainFile; - private genGitignore; - private genPackageJson; - run(): Promise; -} diff --git a/kipper/cli/lib/commands/new.js b/kipper/cli/lib/commands/new.js deleted file mode 100644 index 2b434a57a..000000000 --- a/kipper/cli/lib/commands/new.js +++ /dev/null @@ -1,126 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tslib_1 = require("tslib"); -const command_1 = require("@oclif/command"); -const decorators_1 = require("../decorators"); -const prompt_module_1 = require("../prompt-module"); -const __1 = require(".."); -const path = tslib_1.__importStar(require("node:path")); -const fs = tslib_1.__importStar(require("node:fs/promises")); -const chalk_1 = tslib_1.__importDefault(require("chalk")); -const templates = { - kipConfig: path.resolve(`${__dirname}/../templates/kip-config.json.template`), - mainFile: path.resolve(`${__dirname}/../templates/main.kip.template`), - gitignore: path.resolve(`${__dirname}/../templates/.gitignore.template`), - packageJson: path.resolve(`${__dirname}/../templates/package.json.template`), -}; -class New extends command_1.Command { - async getRunConfig() { - const { args, flags } = this.parse(New); - return { - args, - flags, - }; - } - async fileExists(filePath) { - return !!(await fs.stat(filePath).catch(() => false)); - } - async genKipConfig(rootDir, config) { - const kipConfig = await fs.readFile(templates.kipConfig, { encoding: "utf8" }); - const kipConfigPath = path.join(rootDir, path.basename(templates.kipConfig).replace(".template", "")); - await fs.writeFile(kipConfigPath, kipConfig.replace("", config.target).replace("", `^${__1.version}`)); - } - async genMainFile(rootDir) { - const mainFile = await fs.readFile(templates.mainFile, { encoding: "utf8" }); - const mainFilePath = path.join(rootDir, "src", path.basename(templates.mainFile).replace(".template", "")); - await fs.writeFile(mainFilePath, mainFile); - } - async genGitignore(rootDir) { - const gitignore = await fs.readFile(templates.gitignore, { encoding: "utf8" }); - const gitignorePath = path.join(rootDir, path.basename(templates.gitignore).replace(".template", "")); - await fs.writeFile(gitignorePath, gitignore); - } - async genPackageJson(rootDir, config) { - const packageJson = await fs.readFile(templates.packageJson, { encoding: "utf8" }); - const packageJsonPath = path.join(rootDir, path.basename(templates.packageJson).replace(".template", "")); - await fs.writeFile(packageJsonPath, packageJson - .replace("", config.name) - .replace("", config.description) - .replace("", config.version) - .replace("", config.author) - .replace("", config.license) - .replace("", config.repo ? ` "repository": {\n "type": "git",\n "url": "${config.repo}"\n },` : "") - .replace("", `^${__1.version}`) - .replace(',\n "homepage": ""', config.repo ? `,\n "homepage": "${config.repo}"` : "")); - } - async run() { - const { args, flags } = await this.getRunConfig(); - const rootDir = args.location; - const promptModule = await prompt_module_1.PromptModule.create(); - let projectName = "new-kipper-project"; - let projectDescription = "A new Kipper project"; - let projectVersion = "1.0.0"; - let projectLicense = "MIT"; - let projectAuthor = "Anonymous"; - let projectRepo = undefined; - let projectTarget = "js"; - if (flags.default) { - this.log(chalk_1.default.yellow("Using default settings. Skipping setup wizard.")); - } - else { - projectName = await promptModule.prompt("What is the name of your project?"); - projectDescription = await promptModule.prompt("Describe your project briefly:"); - projectVersion = await promptModule.prompt("Enter project version (default: 1.0.0):", projectVersion); - projectLicense = await promptModule.prompt("Choose project license (default: MIT):", projectLicense); - projectAuthor = await promptModule.prompt("Enter your name or organization:"); - projectRepo = (await promptModule.confirm("Would you like to link a project repository?")) - ? await promptModule.prompt("Enter the repository URL:") - : undefined; - projectTarget = await promptModule.choice("Choose compilation target (default: js):", ["js", "ts"], "js"); - } - if (!(await this.fileExists(rootDir))) { - await fs.mkdir(rootDir, { recursive: true }); - } - const srcDir = path.join(rootDir, "src"); - if (!(await this.fileExists(srcDir))) { - await fs.mkdir(srcDir, { recursive: true }); - } - await this.genKipConfig(rootDir, { target: projectTarget }); - await this.genMainFile(rootDir); - await this.genGitignore(rootDir); - await this.genPackageJson(rootDir, { - name: projectName, - description: projectDescription, - version: projectVersion, - license: projectLicense, - author: projectAuthor, - repo: projectRepo, - }); - this.log(chalk_1.default.green(`\nProject '${projectName}' created successfully!`)); - } -} -New.description = "Generate a new Kipper using a setup wizard. (Node-only for now)"; -New.examples = []; -New.args = [ - { - name: "location", - required: false, - default: process.cwd(), - description: "The directory where the new project should be created. Defaults to the current directory.", - }, -]; -New.flags = { - default: command_1.flags.boolean({ - char: "d", - default: false, - description: "Use the default settings for the new project. Skips the setup wizard.", - }), -}; -exports.default = New; -tslib_1.__decorate([ - (0, decorators_1.prettifiedErrors)(), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", []), - tslib_1.__metadata("design:returntype", Promise) -], New.prototype, "run", null); -//# sourceMappingURL=new.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/new.js.map b/kipper/cli/lib/commands/new.js.map deleted file mode 100644 index c678366ca..000000000 --- a/kipper/cli/lib/commands/new.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":";;;AAKA,4CAAgD;AAChD,8CAAiD;AACjD,oDAAgD;AAChD,0BAA6B;AAC7B,wDAAkC;AAClC,6DAAuC;AACvC,0DAA0B;AAE1B,MAAM,SAAS,GAAG;IACjB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,wCAAwC,CAAC;IAC7E,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,iCAAiC,CAAC;IACrE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,mCAAmC,CAAC;IACxE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,qCAAqC,CAAC;CAC5E,CAAC;AAEF,MAAqB,GAAI,SAAQ,iBAAO;IA2B/B,KAAK,CAAC,YAAY;QACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,OAAO;YACN,IAAI;YACJ,KAAK;SACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB;QACxC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,MAA0B;QACrE,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,EAAE,CAAC,SAAS,CACjB,aAAa,EACb,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,WAAO,EAAE,CAAC,CAC/F,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAe;QACxC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAe;QACzC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,cAAc,CAC3B,OAAe,EACf,MAOC;QAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACnF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1G,MAAM,EAAE,CAAC,SAAS,CACjB,eAAe,EACf,WAAW;aACT,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC;aACtC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,WAAW,CAAC;aACpD,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC;aAC5C,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;aAC1C,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC;aAC5C,OAAO,CACP,gBAAgB,EAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,sDAAsD,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAC7F;aACA,OAAO,CAAC,kBAAkB,EAAE,IAAI,WAAO,EAAE,CAAC;aAC1C,OAAO,CAAC,6CAA6C,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAChH,CAAC;IACH,CAAC;IAEY,AAAN,KAAK,CAAC,GAAG;QACf,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,4BAAY,CAAC,MAAM,EAAE,CAAC;QAcjD,IAAI,WAAW,GAAW,oBAAoB,CAAC;QAC/C,IAAI,kBAAkB,GAAW,sBAAsB,CAAC;QACxD,IAAI,cAAc,GAAW,OAAO,CAAC;QACrC,IAAI,cAAc,GAAW,KAAK,CAAC;QACnC,IAAI,aAAa,GAAW,WAAW,CAAC;QACxC,IAAI,WAAW,GAAuB,SAAS,CAAC;QAChD,IAAI,aAAa,GAAW,IAAI,CAAC;QAGjC,IAAI,KAAK,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;SACzE;aAAM;YACN,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC7E,kBAAkB,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACjF,cAAc,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,yCAAyC,EAAE,cAAc,CAAC,CAAC;YACtG,cAAc,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,wCAAwC,EAAE,cAAc,CAAC,CAAC;YACrG,aAAa,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC9E,WAAW,GAAG,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;gBACzF,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,2BAA2B,CAAC;gBACxD,CAAC,CAAC,SAAS,CAAC;YACb,aAAa,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;SAC1G;QAGD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;YACtC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SAC7C;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;YACrC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SAC5C;QAGD,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAClC,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,WAAW;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,cAAc,WAAW,yBAAyB,CAAC,CAAC,CAAC;IAC3E,CAAC;;AAzJe,eAAW,GAAW,iEAAiE,CAAC;AAGxF,YAAQ,GAAkB,EAAE,CAAC;AAE7B,QAAI,GAAe;IAClC;QACC,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;QACtB,WAAW,EAAE,2FAA2F;KACxG;CACD,CAAC;AAEc,SAAK,GAAqB;IACzC,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,uEAAuE;KACpF,CAAC;CACF,CAAC;kBArBkB,GAAG;AA2FV;IADZ,IAAA,6BAAgB,GAAO;;;;8BAgEvB"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/run.d.ts b/kipper/cli/lib/commands/run.d.ts deleted file mode 100644 index 34f1bae0c..000000000 --- a/kipper/cli/lib/commands/run.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { args } from "@oclif/parser"; -import { flags } from "@oclif/command"; -import Compile from "./compile"; -export default class Run extends Compile { - static description: string; - static examples: Array; - static args: args.Input; - static flags: flags.Input; - private executeKipperProgram; - run(): Promise; -} diff --git a/kipper/cli/lib/commands/run.js b/kipper/cli/lib/commands/run.js deleted file mode 100644 index 07bed8a15..000000000 --- a/kipper/cli/lib/commands/run.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tslib_1 = require("tslib"); -const command_1 = require("@oclif/command"); -const core_1 = require("@kipper/core"); -const child_process_1 = require("child_process"); -const logger_1 = require("../logger"); -const input_1 = require("../input/"); -const decorators_1 = require("../decorators"); -const compile_1 = tslib_1.__importDefault(require("./compile")); -class Run extends compile_1.default { - async executeKipperProgram(entryFile) { - const kipperProgram = (0, child_process_1.spawn)("ts-node", [entryFile]); - kipperProgram.stdin.setDefaultEncoding("utf-8"); - kipperProgram.stdout.pipe(process.stdout); - kipperProgram.stderr.pipe(process.stderr); - kipperProgram.on("close", (code) => process.exit(code)); - } - async run() { - const { flags, config } = await this.getRunConfig(); - const logger = new core_1.KipperLogger(logger_1.CLIEmitHandler.emit, core_1.LogLevel.WARN, flags["warnings"]); - await super.run(logger); - await this.executeKipperProgram(config.outPath); - } -} -Run.description = "Compile and execute a Kipper program."; -Run.examples = []; -Run.args = [ - { - name: "file", - required: false, - description: "The file that should be compiled and run.", - }, -]; -Run.flags = { - target: command_1.flags.string({ - char: "t", - description: "The target language where the compiled program should be emitted to.", - options: ["js", "ts"], - }), - encoding: command_1.flags.string({ - char: "e", - description: `The encoding that should be used to read the file (${input_1.KipperEncodings.join()}).`, - parse: input_1.verifyEncoding, - }), - "output-dir": command_1.flags.string({ - char: "o", - description: "The build directory where the compiled files should be placed. If the path does not exist, it will be created.", - }), - "string-code": command_1.flags.string({ - char: "s", - description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter.", - }), - "optimise-internals": command_1.flags.boolean({ - char: "i", - description: "Optimise the generated internal functions using tree-shaking to reduce the size of the output.", - allowNo: true, - }), - "optimise-builtins": command_1.flags.boolean({ - char: "b", - description: "Optimise the generated built-in functions using tree-shaking to reduce the size of the output.", - allowNo: true, - }), - warnings: command_1.flags.boolean({ - char: "w", - default: false, - description: "Show warnings that were emitted during the compilation.", - allowNo: true, - }), - "log-timestamp": command_1.flags.boolean({ - default: false, - description: "Show the timestamp of each log message.", - allowNo: true, - }), - recover: command_1.flags.boolean({ - default: core_1.EvaluatedCompileConfig.defaults.recover, - description: "Recover from compiler errors and display all detected compiler errors.", - allowNo: true, - }), - "abort-on-first-error": command_1.flags.boolean({ - default: core_1.EvaluatedCompileConfig.defaults.abortOnFirstError, - description: "Abort on the first error the compiler encounters. Same behaviour as '--no-recover'.", - allowNo: true, - }), -}; -exports.default = Run; -tslib_1.__decorate([ - (0, decorators_1.prettifiedErrors)(), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", []), - tslib_1.__metadata("design:returntype", Promise) -], Run.prototype, "run", null); -//# sourceMappingURL=run.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/run.js.map b/kipper/cli/lib/commands/run.js.map deleted file mode 100644 index 3e33169dc..000000000 --- a/kipper/cli/lib/commands/run.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;AAKA,4CAAuC;AACvC,uCAA0G;AAC1G,iDAAsC;AACtC,sCAA2C;AAC3C,qCAA4D;AAC5D,8CAAiD;AACjD,gEAAgC;AAEhC,MAAqB,GAAI,SAAQ,iBAAO;IA4E/B,KAAK,CAAC,oBAAoB,CAAC,SAAiB;QACnD,MAAM,aAAa,GAAG,IAAA,qBAAK,EAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAGpD,aAAa,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAGhD,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAG1C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAGY,AAAN,KAAK,CAAC,GAAG;QACf,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,mBAAY,CAAC,uBAAc,CAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAEvF,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;;AAhGe,eAAW,GAAW,uCAAuC,CAAC;AAG9D,YAAQ,GAAkB,EAAE,CAAC;AAE7B,QAAI,GAAe;IAClC;QACC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,2CAA2C;KACxD;CACD,CAAC;AAEc,SAAK,GAAqB;IACzC,MAAM,EAAE,eAAK,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sEAAsE;QACnF,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sDAAsD,uBAAe,CAAC,IAAI,EAAE,IAAI;QAC7F,KAAK,EAAE,sBAAc;KACrB,CAAC;IACF,YAAY,EAAE,eAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,GAAG;QACT,WAAW,EACV,gHAAgH;KACjH,CAAC;IACF,aAAa,EAAE,eAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,4FAA4F;KACzG,CAAC;IACF,oBAAoB,EAAE,eAAK,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,mBAAmB,EAAE,eAAK,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,gGAAgG;QAC7G,OAAO,EAAE,IAAI;KACb,CAAC;IACF,QAAQ,EAAE,eAAK,CAAC,OAAO,CAAC;QAEvB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,IAAI;KACb,CAAC;IACF,eAAe,EAAE,eAAK,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,IAAI;KACb,CAAC;IACF,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,OAAO;QAChD,WAAW,EAAE,wEAAwE;QACrF,OAAO,EAAE,IAAI;KACb,CAAC;IAKF,sBAAsB,EAAE,eAAK,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,6BAAsB,CAAC,QAAQ,CAAC,iBAAiB;QAC1D,WAAW,EAAE,qFAAqF;QAClG,OAAO,EAAE,IAAI;KACb,CAAC;CACF,CAAC;kBAtEkB,GAAG;AA2FV;IADZ,IAAA,6BAAgB,GAAO;;;;8BAOvB"} \ No newline at end of file diff --git a/kipper/cli/lib/commands/version.d.ts b/kipper/cli/lib/commands/version.d.ts deleted file mode 100644 index 396259d01..000000000 --- a/kipper/cli/lib/commands/version.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Command } from "@oclif/command"; -export default class Version extends Command { - static description: string; - run(): Promise; -} diff --git a/kipper/cli/lib/commands/version.js b/kipper/cli/lib/commands/version.js deleted file mode 100644 index 9dd56f7af..000000000 --- a/kipper/cli/lib/commands/version.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const command_1 = require("@oclif/command"); -class Version extends command_1.Command { - async run() { - process.stdout.write(this.config.userAgent + "\n"); - } -} -Version.description = "Display the currently installed Kipper version."; -exports.default = Version; -//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/kipper/cli/lib/commands/version.js.map b/kipper/cli/lib/commands/version.js.map deleted file mode 100644 index 29ef2b1de..000000000 --- a/kipper/cli/lib/commands/version.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":";;AAIA,4CAAyC;AAEzC,MAAqB,OAAQ,SAAQ,iBAAO;IAGpC,KAAK,CAAC,GAAG;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;;AAJe,mBAAW,GAAW,iDAAiD,CAAC;kBADpE,OAAO"} \ No newline at end of file diff --git a/kipper/cli/lib/config-loader.d.ts b/kipper/cli/lib/config-loader.d.ts deleted file mode 100644 index 196ec856a..000000000 --- a/kipper/cli/lib/config-loader.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/// -import { EvaluatedKipperConfigFile, KipperConfigInterpreter } from "@kipper/config"; -export declare let defaultConfigInterpreter: KipperConfigInterpreter; -export declare function setDefaultConfigInterpreter(interpreter: KipperConfigInterpreter): void; -export declare function loadConfig(options: { - path: string; - encoding: BufferEncoding; -} | { - content: string; - encoding: BufferEncoding; -}, interpreter?: KipperConfigInterpreter): Promise; -export declare function loadAutoConfig(): Promise; diff --git a/kipper/cli/lib/config-loader.js b/kipper/cli/lib/config-loader.js deleted file mode 100644 index dff5c94ac..000000000 --- a/kipper/cli/lib/config-loader.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.loadAutoConfig = exports.loadConfig = exports.setDefaultConfigInterpreter = exports.defaultConfigInterpreter = void 0; -const tslib_1 = require("tslib"); -const config_1 = require("@kipper/config"); -const fs = tslib_1.__importStar(require("fs")); -exports.defaultConfigInterpreter = new config_1.KipperConfigInterpreter(); -function setDefaultConfigInterpreter(interpreter) { - exports.defaultConfigInterpreter = interpreter; -} -exports.setDefaultConfigInterpreter = setDefaultConfigInterpreter; -async function loadConfig(options, interpreter) { - interpreter = interpreter ?? exports.defaultConfigInterpreter; - if ("path" in options) { - return interpreter.loadConfig(await config_1.KipperConfigFile.fromFile(options.path, options.encoding)); - } - else { - return interpreter.loadConfig(config_1.KipperConfigFile.fromString(options.content, options.encoding)); - } -} -exports.loadConfig = loadConfig; -async function loadAutoConfig() { - const workdir = process.cwd(); - const potentialPaths = [`${workdir}/kip-config.json`, `${workdir}/kipper-config.json`]; - for (const path of potentialPaths) { - if (fs.existsSync(path)) { - return loadConfig({ path, encoding: "utf8" }); - } - } - return undefined; -} -exports.loadAutoConfig = loadAutoConfig; -//# sourceMappingURL=config-loader.js.map \ No newline at end of file diff --git a/kipper/cli/lib/config-loader.js.map b/kipper/cli/lib/config-loader.js.map deleted file mode 100644 index 47a2f7006..000000000 --- a/kipper/cli/lib/config-loader.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":";;;;AAIA,2CAAsG;AACtG,+CAAyB;AAEd,QAAA,wBAAwB,GAAG,IAAI,gCAAuB,EAAE,CAAC;AAQpE,SAAgB,2BAA2B,CAAC,WAAoC;IAC/E,gCAAwB,GAAG,WAAW,CAAC;AACxC,CAAC;AAFD,kEAEC;AAQM,KAAK,UAAU,UAAU,CAC/B,OAUI,EACJ,WAAqC;IAErC,WAAW,GAAG,WAAW,IAAI,gCAAwB,CAAC;IACtD,IAAI,MAAM,IAAI,OAAO,EAAE;QACtB,OAAO,WAAW,CAAC,UAAU,CAAC,MAAM,yBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC/F;SAAM;QACN,OAAO,WAAW,CAAC,UAAU,CAAC,yBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC9F;AACF,CAAC;AApBD,gCAoBC;AAUM,KAAK,UAAU,cAAc;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,kBAAkB,EAAE,GAAG,OAAO,qBAAqB,CAAC,CAAC;IACvF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;QAClC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACxB,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;SAC9C;KACD;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAVD,wCAUC"} \ No newline at end of file diff --git a/kipper/cli/lib/copy-resources.d.ts b/kipper/cli/lib/copy-resources.d.ts deleted file mode 100644 index c900640a8..000000000 --- a/kipper/cli/lib/copy-resources.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { EvaluatedKipperConfigFile } from "@kipper/config"; -import { KipperLogger } from "@kipper/core"; -export declare function copyConfigResources(resources: EvaluatedKipperConfigFile["resources"], logger?: KipperLogger): Promise; diff --git a/kipper/cli/lib/copy-resources.js b/kipper/cli/lib/copy-resources.js deleted file mode 100644 index 8ada5e89f..000000000 --- a/kipper/cli/lib/copy-resources.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.copyConfigResources = void 0; -const tslib_1 = require("tslib"); -const fs = tslib_1.__importStar(require("node:fs/promises")); -const fsSync = tslib_1.__importStar(require("node:fs")); -const node_path_1 = tslib_1.__importDefault(require("node:path")); -async function copyConfigResources(resources, logger) { - for (const resource of resources) { - const dir = node_path_1.default.dirname(resource.out); - if (!fsSync.existsSync(dir) || !(await fs.stat(dir)).isDirectory()) { - await fs.mkdir(dir, { recursive: true }); - } - await fs.copyFile(resource.src, resource.out); - if (logger) { - logger.debug(`Copied resource from ${resource.src} to ${resource.out}`); - } - } -} -exports.copyConfigResources = copyConfigResources; -//# sourceMappingURL=copy-resources.js.map \ No newline at end of file diff --git a/kipper/cli/lib/copy-resources.js.map b/kipper/cli/lib/copy-resources.js.map deleted file mode 100644 index 769dc0538..000000000 --- a/kipper/cli/lib/copy-resources.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"copy-resources.js","sourceRoot":"","sources":["../src/copy-resources.ts"],"names":[],"mappings":";;;;AACA,6DAAuC;AACvC,wDAAkC;AAGlC,kEAA6B;AAQtB,KAAK,UAAU,mBAAmB,CACxC,SAAiD,EACjD,MAAqB;IAErB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QACjC,MAAM,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;YACnE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SACzC;QACD,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE;YACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,CAAC,GAAG,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;SACxE;KACD;AACF,CAAC;AAdD,kDAcC"} \ No newline at end of file diff --git a/kipper/cli/lib/decorators.d.ts b/kipper/cli/lib/decorators.d.ts deleted file mode 100644 index 0a91b0181..000000000 --- a/kipper/cli/lib/decorators.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Command } from "@oclif/command"; -export declare function prettifiedErrors(): (target: TProto, propertyKey: keyof TProto, descriptor: PropertyDescriptor) => TypedPropertyDescriptor<(...argArray: Array) => Promise>; diff --git a/kipper/cli/lib/decorators.js b/kipper/cli/lib/decorators.js deleted file mode 100644 index e667d02e3..000000000 --- a/kipper/cli/lib/decorators.js +++ /dev/null @@ -1,60 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.prettifiedErrors = void 0; -const core_1 = require("@kipper/core"); -const errors_1 = require("./errors"); -const errors_2 = require("@oclif/errors"); -const config_1 = require("@kipper/config"); -function prettifiedErrors() { - return function (target, propertyKey, descriptor) { - const originalFunc = descriptor.value; - const func = async function (...argArray) { - try { - await originalFunc.call(this, ...argArray); - } - catch (error) { - const cliError = error instanceof errors_1.KipperCLIError || error instanceof errors_2.CLIError; - const configError = error instanceof config_1.ConfigError; - const internalError = error instanceof core_1.KipperInternalError; - const name = getErrorName(cliError, configError, internalError); - const msg = error && typeof error === "object" && "message" in error && typeof error.message === "string" - ? error.message - : String(error); - const errConfig = { - exit: 1, - suggestions: internalError || (!cliError && !configError) - ? [ - "Ensure no invalid types or data were passed to module functions or classes. Otherwise report the " + - "issue on https://github.com/Kipper-Lang/Kipper. Help us improve Kipper!️", - ] - : undefined, - }; - try { - this.error(msg, errConfig); - } - catch (e) { - e.name = name; - throw e; - } - } - }; - target[propertyKey] = func; - return func; - }; -} -exports.prettifiedErrors = prettifiedErrors; -function getErrorName(cliError, configError, internalError) { - if (cliError) { - return "Error"; - } - else if (configError) { - return "Config Error"; - } - else if (internalError) { - return "Internal Error"; - } - else { - return "CLI Error"; - } -} -//# sourceMappingURL=decorators.js.map \ No newline at end of file diff --git a/kipper/cli/lib/decorators.js.map b/kipper/cli/lib/decorators.js.map deleted file mode 100644 index 141e001a8..000000000 --- a/kipper/cli/lib/decorators.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAIA,uCAAmD;AACnD,qCAA0C;AAC1C,0CAAgF;AAChF,2CAA6C;AAQ7C,SAAgB,gBAAgB;IAE/B,OAAO,UAAU,MAAc,EAAE,WAAyB,EAAE,UAA8B;QACzF,MAAM,YAAY,GAAa,UAAU,CAAC,KAAK,CAAC;QAEhD,MAAM,IAAI,GAAG,KAAK,WAA0B,GAAG,QAAoB;YAClE,IAAI;gBACH,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;aAC3C;YAAC,OAAO,KAAK,EAAE;gBACf,MAAM,QAAQ,GAAG,KAAK,YAAY,uBAAc,IAAI,KAAK,YAAY,iBAAa,CAAC;gBACnF,MAAM,WAAW,GAAG,KAAK,YAAY,oBAAW,CAAC;gBACjD,MAAM,aAAa,GAAG,KAAK,YAAY,0BAAmB,CAAC;gBAG3D,MAAM,IAAI,GAAW,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;gBACxE,MAAM,GAAG,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;oBAC5F,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAElB,MAAM,SAAS,GAA4C;oBAC1D,IAAI,EAAE,CAAC;oBACP,WAAW,EACV,aAAa,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC;wBAC3C,CAAC,CAAC;4BACA,mGAAmG;gCAClG,0EAA0E;yBAC3E;wBACF,CAAC,CAAC,SAAS;iBACb,CAAC;gBAIF,IAAI;oBACH,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;iBAC3B;gBAAC,OAAO,CAAC,EAAE;oBACK,CAAE,CAAC,IAAI,GAAG,IAAI,CAAC;oBAE/B,MAAM,CAAC,CAAC;iBACR;aACD;QACF,CAAC,CAAC;QAGF,MAAM,CAAC,WAAW,CAAC,GAAG,IAA4B,CAAC;QACnD,OAAO,IAA2E,CAAC;IACpF,CAAC,CAAC;AACH,CAAC;AA/CD,4CA+CC;AAED,SAAS,YAAY,CAAC,QAAiB,EAAE,WAAoB,EAAE,aAAsB;IACpF,IAAI,QAAQ,EAAE;QACb,OAAO,OAAO,CAAC;KACf;SAAM,IAAI,WAAW,EAAE;QACvB,OAAO,cAAc,CAAC;KACtB;SAAM,IAAI,aAAa,EAAE;QACzB,OAAO,gBAAgB,CAAC;KACxB;SAAM;QACN,OAAO,WAAW,CAAC;KACnB;AACF,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/errors.d.ts b/kipper/cli/lib/errors.d.ts deleted file mode 100644 index 963fb04c8..000000000 --- a/kipper/cli/lib/errors.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { KipperError } from "@kipper/core"; -export declare abstract class KipperCLIError extends KipperError { - protected constructor(msg: string); -} -export declare class KipperUnsupportedEncodingError extends KipperCLIError { - constructor(encoding: string); -} -export declare class KipperFileAccessError extends KipperCLIError { - constructor(filePath: string); -} -export declare class KipperFileWriteError extends KipperCLIError { - constructor(filePath: string); -} -export declare class KipperInvalidInputError extends KipperCLIError { - constructor(err: string); -} -export declare class KipperUnsupportedConfigError extends KipperCLIError { - constructor(err: string); -} diff --git a/kipper/cli/lib/errors.js b/kipper/cli/lib/errors.js deleted file mode 100644 index bdb2e2ad0..000000000 --- a/kipper/cli/lib/errors.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.KipperUnsupportedConfigError = exports.KipperInvalidInputError = exports.KipperFileWriteError = exports.KipperFileAccessError = exports.KipperUnsupportedEncodingError = exports.KipperCLIError = void 0; -const core_1 = require("@kipper/core"); -class KipperCLIError extends core_1.KipperError { - constructor(msg) { - super(msg); - } -} -exports.KipperCLIError = KipperCLIError; -class KipperUnsupportedEncodingError extends KipperCLIError { - constructor(encoding) { - super(`Unsupported encoding '${encoding}'.`); - } -} -exports.KipperUnsupportedEncodingError = KipperUnsupportedEncodingError; -class KipperFileAccessError extends KipperCLIError { - constructor(filePath) { - super(`Failed to access file '${filePath}'. Make sure the file exists and it is readable.`); - } -} -exports.KipperFileAccessError = KipperFileAccessError; -class KipperFileWriteError extends KipperCLIError { - constructor(filePath) { - super(`Failed to write file '${filePath}'.`); - } -} -exports.KipperFileWriteError = KipperFileWriteError; -class KipperInvalidInputError extends KipperCLIError { - constructor(err) { - super(err); - } -} -exports.KipperInvalidInputError = KipperInvalidInputError; -class KipperUnsupportedConfigError extends KipperCLIError { - constructor(err) { - super(err); - } -} -exports.KipperUnsupportedConfigError = KipperUnsupportedConfigError; -//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/kipper/cli/lib/errors.js.map b/kipper/cli/lib/errors.js.map deleted file mode 100644 index 99da75ee1..000000000 --- a/kipper/cli/lib/errors.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAIA,uCAA2C;AAM3C,MAAsB,cAAe,SAAQ,kBAAW;IACvD,YAAsB,GAAW;QAChC,KAAK,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;CACD;AAJD,wCAIC;AAMD,MAAa,8BAA+B,SAAQ,cAAc;IACjE,YAAY,QAAgB;QAC3B,KAAK,CAAC,yBAAyB,QAAQ,IAAI,CAAC,CAAC;IAC9C,CAAC;CACD;AAJD,wEAIC;AAMD,MAAa,qBAAsB,SAAQ,cAAc;IACxD,YAAY,QAAgB;QAC3B,KAAK,CAAC,0BAA0B,QAAQ,kDAAkD,CAAC,CAAC;IAC7F,CAAC;CACD;AAJD,sDAIC;AAMD,MAAa,oBAAqB,SAAQ,cAAc;IACvD,YAAY,QAAgB;QAC3B,KAAK,CAAC,yBAAyB,QAAQ,IAAI,CAAC,CAAC;IAC9C,CAAC;CACD;AAJD,oDAIC;AAMD,MAAa,uBAAwB,SAAQ,cAAc;IAC1D,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;CACD;AAJD,0DAIC;AAMD,MAAa,4BAA6B,SAAQ,cAAc;IAC/D,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;CACD;AAJD,oEAIC"} \ No newline at end of file diff --git a/kipper/cli/lib/help.d.ts b/kipper/cli/lib/help.d.ts deleted file mode 100644 index 85cb4b2bc..000000000 --- a/kipper/cli/lib/help.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Help as OclifHelp } from "@oclif/plugin-help"; -export default class Help extends OclifHelp { - static description: string; -} diff --git a/kipper/cli/lib/help.js b/kipper/cli/lib/help.js deleted file mode 100644 index ccf4602a3..000000000 --- a/kipper/cli/lib/help.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const plugin_help_1 = require("@oclif/plugin-help"); -class Help extends plugin_help_1.Help { -} -Help.description = "Displays help for the Kipper CLI"; -exports.default = Help; -//# sourceMappingURL=help.js.map \ No newline at end of file diff --git a/kipper/cli/lib/help.js.map b/kipper/cli/lib/help.js.map deleted file mode 100644 index 572a84055..000000000 --- a/kipper/cli/lib/help.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":";;AAIA,oDAAuD;AAEvD,MAAqB,IAAK,SAAQ,kBAAS;;AACnC,gBAAW,GAAW,kCAAkC,CAAC;kBAD5C,IAAI"} \ No newline at end of file diff --git a/kipper/cli/lib/index.d.ts b/kipper/cli/lib/index.d.ts deleted file mode 100644 index b6b158606..000000000 --- a/kipper/cli/lib/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export { run } from "@oclif/command"; -export * from "./input"; -export * from "./logger"; -export * from "./errors"; -export * from "./output/compile"; -export declare const name = "@kipper/cli"; -export declare const version = "0.11.0-alpha.1"; -export declare const author = "Luna Klatzer"; -export declare const license = "GPL-3.0-or-later"; -export declare const github = "https://github.com/Kipper-Lang/Kipper"; diff --git a/kipper/cli/lib/index.js b/kipper/cli/lib/index.js deleted file mode 100644 index 1f968d3c3..000000000 --- a/kipper/cli/lib/index.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.github = exports.license = exports.author = exports.version = exports.name = exports.run = void 0; -const tslib_1 = require("tslib"); -var command_1 = require("@oclif/command"); -Object.defineProperty(exports, "run", { enumerable: true, get: function () { return command_1.run; } }); -tslib_1.__exportStar(require("./input"), exports); -tslib_1.__exportStar(require("./logger"), exports); -tslib_1.__exportStar(require("./errors"), exports); -tslib_1.__exportStar(require("./output/compile"), exports); -exports.name = "@kipper/cli"; -exports.version = "0.11.0-alpha.1"; -exports.author = "Luna Klatzer"; -exports.license = "GPL-3.0-or-later"; -exports.github = "https://github.com/Kipper-Lang/Kipper"; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/kipper/cli/lib/index.js.map b/kipper/cli/lib/index.js.map deleted file mode 100644 index 8c09c4eb5..000000000 --- a/kipper/cli/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAKA,0CAAqC;AAA5B,8FAAA,GAAG,OAAA;AAEZ,kDAAwB;AACxB,mDAAyB;AACzB,mDAAyB;AACzB,2DAAiC;AAGpB,QAAA,IAAI,GAAG,aAAa,CAAC;AAErB,QAAA,OAAO,GAAG,gBAAgB,CAAC;AAE3B,QAAA,MAAM,GAAG,cAAc,CAAC;AAExB,QAAA,OAAO,GAAG,kBAAkB,CAAC;AAE7B,QAAA,MAAM,GAAG,uCAAuC,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/input/file-stream.d.ts b/kipper/cli/lib/input/file-stream.d.ts deleted file mode 100644 index 63bf3ac23..000000000 --- a/kipper/cli/lib/input/file-stream.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// -/// -import * as path from "path"; -import { KipperParseStream } from "@kipper/core"; -import { OutputArgs, OutputFlags } from "@oclif/parser/lib/parse"; -import { EvaluatedKipperConfigFile } from "@kipper/config"; -export type KipperEncoding = "ascii" | "utf8" | "utf16le"; -export declare const KipperEncodings: Array; -export declare function verifyEncoding(encoding: string): KipperEncoding; -export declare function getParseStream(args: OutputArgs, flags: OutputFlags, config: EvaluatedKipperConfigFile | undefined): Promise<{ - stream: KipperParseFile | KipperParseStream; - outDir: string; -}>; -export declare class KipperParseFile extends KipperParseStream { - static SPECIAL_CHARACTER_REPLACE_REGEX: RegExp; - private readonly _absolutePath; - private readonly _encoding; - private readonly _path; - constructor(stringContent: string, fileLocation: string, fileName: string, encoding: BufferEncoding); - get absolutePath(): string; - get filePath(): string; - get encoding(): BufferEncoding; - get path(): path.ParsedPath; - static fromFile(filePath: string, encoding?: KipperEncoding): Promise; -} diff --git a/kipper/cli/lib/input/file-stream.js b/kipper/cli/lib/input/file-stream.js deleted file mode 100644 index 378600b12..000000000 --- a/kipper/cli/lib/input/file-stream.js +++ /dev/null @@ -1,86 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.KipperParseFile = exports.getParseStream = exports.verifyEncoding = exports.KipperEncodings = void 0; -const tslib_1 = require("tslib"); -const fs_1 = require("fs"); -const path = tslib_1.__importStar(require("path")); -const core_1 = require("@kipper/core"); -const errors_1 = require("../errors"); -exports.KipperEncodings = ["ascii", "utf8", "utf16le"]; -function verifyEncoding(encoding) { - const kipperEncoding = exports.KipperEncodings.find((i) => i == encoding); - if (kipperEncoding) { - return kipperEncoding; - } - else { - throw new errors_1.KipperUnsupportedEncodingError(encoding); - } -} -exports.verifyEncoding = verifyEncoding; -function ensureCompatibleFiles(files) { - if ((files?.length ?? 0) >= 2) { - throw new errors_1.KipperInvalidInputError("Multiple files are not supported in the CLI. This will be updated in a future release."); - } -} -async function getParseStream(args, flags, config) { - let stream; - if (args.file) { - stream = await KipperParseFile.fromFile(args.file, flags["encoding"]); - } - else if (flags["string-code"]) { - stream = new core_1.KipperParseStream({ stringContent: flags["string-code"] }); - } - else if (config?.files) { - ensureCompatibleFiles(config.files); - stream = await KipperParseFile.fromFile(config.files[0].src, flags["encoding"]); - } - else { - throw new errors_1.KipperInvalidInputError("Argument 'file' or flag '-s/--string-code' must be populated"); - } - return { - stream: stream, - outDir: args["output-dir"] ?? config?.outDir ?? "build", - }; -} -exports.getParseStream = getParseStream; -class KipperParseFile extends core_1.KipperParseStream { - constructor(stringContent, fileLocation, fileName, encoding) { - super({ stringContent: stringContent, name: fileName, filePath: fileLocation }); - this._absolutePath = path.resolve(fileLocation); - this._encoding = encoding; - this._path = path.parse(this._absolutePath); - } - get absolutePath() { - return this._absolutePath; - } - get filePath() { - return super.filePath; - } - get encoding() { - return this._encoding; - } - get path() { - return this._path; - } - static async fromFile(filePath, encoding = "utf8") { - const fileLocation = path.resolve(filePath); - const name = (() => { - const items1 = fileLocation.split("\\"); - const items2 = items1[items1.length - 1].split("/"); - return items2[items2.length - 1]; - })(); - try { - await fs_1.promises.access(fileLocation, fs_1.constants.R_OK); - } - catch (e) { - throw new errors_1.KipperFileAccessError(fileLocation); - } - let content = (await fs_1.promises.readFile(fileLocation, encoding)).toString(); - content = content.replace(/(\r(\n)?)/gi, "\n"); - content = content.replace(KipperParseFile.SPECIAL_CHARACTER_REPLACE_REGEX, ""); - return new KipperParseFile(content, fileLocation, name, encoding); - } -} -exports.KipperParseFile = KipperParseFile; -KipperParseFile.SPECIAL_CHARACTER_REPLACE_REGEX = /[\x00-\x09\x0B-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g; -//# sourceMappingURL=file-stream.js.map \ No newline at end of file diff --git a/kipper/cli/lib/input/file-stream.js.map b/kipper/cli/lib/input/file-stream.js.map deleted file mode 100644 index 056a70cd4..000000000 --- a/kipper/cli/lib/input/file-stream.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"file-stream.js","sourceRoot":"","sources":["../../src/input/file-stream.ts"],"names":[],"mappings":";;;;AAKA,2BAA+C;AAC/C,mDAA6B;AAC7B,uCAAiD;AACjD,sCAA2G;AAc9F,QAAA,eAAe,GAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAQnF,SAAgB,cAAc,CAAC,QAAgB;IAC9C,MAAM,cAAc,GAAG,uBAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IAClE,IAAI,cAAc,EAAE;QACnB,OAAO,cAAc,CAAC;KACtB;SAAM;QACN,MAAM,IAAI,uCAA8B,CAAC,QAAQ,CAAC,CAAC;KACnD;AACF,CAAC;AAPD,wCAOC;AAED,SAAS,qBAAqB,CAAC,KAAyD;IACvF,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;QAC9B,MAAM,IAAI,gCAAuB,CAChC,wFAAwF,CACxF,CAAC;KACF;AACF,CAAC;AASM,KAAK,UAAU,cAAc,CACnC,IAAgB,EAChB,KAAuB,EACvB,MAA6C;IAE7C,IAAI,MAA2C,CAAC;IAChD,IAAI,IAAI,CAAC,IAAI,EAAE;QACd,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAmB,CAAC,CAAC;KACxF;SAAM,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE;QAChC,MAAM,GAAG,IAAI,wBAAiB,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;KACxE;SAAM,IAAI,MAAM,EAAE,KAAK,EAAE;QACzB,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;KAChF;SAAM;QACN,MAAM,IAAI,gCAAuB,CAAC,8DAA8D,CAAC,CAAC;KAClG;IAED,OAAO;QACN,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,MAAM,EAAE,MAAM,IAAI,OAAO;KACvD,CAAC;AACH,CAAC;AArBD,wCAqBC;AAQD,MAAa,eAAgB,SAAQ,wBAAiB;IAOrD,YAAY,aAAqB,EAAE,YAAoB,EAAE,QAAgB,EAAE,QAAwB;QAClG,KAAK,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAKD,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAMD,IAAoB,QAAQ;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC;IACvB,CAAC;IAKD,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAMD,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IASM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,WAA2B,MAAM;QAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;YAClB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;QAGL,IAAI;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,YAAY,EAAE,cAAS,CAAC,IAAI,CAAC,CAAC;SAC9C;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,IAAI,8BAAqB,CAAC,YAAY,CAAC,CAAC;SAC9C;QAGD,IAAI,OAAO,GAAW,CAAC,MAAM,aAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,QAA0B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAG/F,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAG/C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;QAE/E,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAA0B,CAAC,CAAC;IACrF,CAAC;;AA5EF,0CA6EC;AA5Ec,+CAA+B,GAC5C,+tHAA+tH,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/input/index.d.ts b/kipper/cli/lib/input/index.d.ts deleted file mode 100644 index e993c2609..000000000 --- a/kipper/cli/lib/input/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./target"; -export * from "./file-stream"; diff --git a/kipper/cli/lib/input/index.js b/kipper/cli/lib/input/index.js deleted file mode 100644 index db5962e52..000000000 --- a/kipper/cli/lib/input/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./target"), exports); -tslib_1.__exportStar(require("./file-stream"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/kipper/cli/lib/input/index.js.map b/kipper/cli/lib/input/index.js.map deleted file mode 100644 index 2d6f015fa..000000000 --- a/kipper/cli/lib/input/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":";;;AAKA,mDAAyB;AACzB,wDAA8B"} \ No newline at end of file diff --git a/kipper/cli/lib/input/target.d.ts b/kipper/cli/lib/input/target.d.ts deleted file mode 100644 index 26f9addfa..000000000 --- a/kipper/cli/lib/input/target.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { KipperCompileTarget } from "@kipper/core"; -export declare function getTarget(name: string): KipperCompileTarget; diff --git a/kipper/cli/lib/input/target.js b/kipper/cli/lib/input/target.js deleted file mode 100644 index 61a2ddeb9..000000000 --- a/kipper/cli/lib/input/target.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getTarget = void 0; -const target_js_1 = require("@kipper/target-js"); -const target_ts_1 = require("@kipper/target-ts"); -const errors_1 = require("../errors"); -function getTarget(name) { - switch (name) { - case "js": { - return new target_js_1.KipperJavaScriptTarget(); - } - case "ts": { - return new target_ts_1.KipperTypeScriptTarget(); - } - default: - throw new errors_1.KipperInvalidInputError(`Invalid target '${name}'.`); - } -} -exports.getTarget = getTarget; -//# sourceMappingURL=target.js.map \ No newline at end of file diff --git a/kipper/cli/lib/input/target.js.map b/kipper/cli/lib/input/target.js.map deleted file mode 100644 index e052ce63f..000000000 --- a/kipper/cli/lib/input/target.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/input/target.ts"],"names":[],"mappings":";;;AACA,iDAA2D;AAC3D,iDAA2D;AAC3D,sCAAoD;AAOpD,SAAgB,SAAS,CAAC,IAAY;IACrC,QAAQ,IAAI,EAAE;QACb,KAAK,IAAI,CAAC,CAAC;YACV,OAAO,IAAI,kCAAsB,EAAE,CAAC;SACpC;QACD,KAAK,IAAI,CAAC,CAAC;YACV,OAAO,IAAI,kCAAsB,EAAE,CAAC;SACpC;QACD;YACC,MAAM,IAAI,gCAAuB,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC;KAChE;AACF,CAAC;AAXD,8BAWC"} \ No newline at end of file diff --git a/kipper/cli/lib/logger.d.ts b/kipper/cli/lib/logger.d.ts deleted file mode 100644 index b53b2bf62..000000000 --- a/kipper/cli/lib/logger.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { LogLevel } from "@kipper/core"; -import { ILogObject, ISettingsParam, Logger } from "tslog"; -export declare const defaultKipperLoggerConfig: ISettingsParam; -export declare const defaultCliLogger: Logger; -export declare class CLIEmitHandler { - static cliLogger: Logger; - static emit(level: LogLevel, msg: string): ILogObject; -} diff --git a/kipper/cli/lib/logger.js b/kipper/cli/lib/logger.js deleted file mode 100644 index 4ea353525..000000000 --- a/kipper/cli/lib/logger.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CLIEmitHandler = exports.defaultCliLogger = exports.defaultKipperLoggerConfig = void 0; -const core_1 = require("@kipper/core"); -const tslog_1 = require("tslog"); -exports.defaultKipperLoggerConfig = { - dateTimePattern: "hour:minute:second", - displayFilePath: "hidden", - displayFunctionName: false, - displayDateTime: false, -}; -exports.defaultCliLogger = new tslog_1.Logger(exports.defaultKipperLoggerConfig); -class CLIEmitHandler { - static emit(level, msg) { - switch (level) { - case core_1.LogLevel.FATAL: - return CLIEmitHandler.cliLogger.fatal(msg); - case core_1.LogLevel.ERROR: - return CLIEmitHandler.cliLogger.error(msg); - case core_1.LogLevel.WARN: - return CLIEmitHandler.cliLogger.warn(msg); - case core_1.LogLevel.DEBUG: - return CLIEmitHandler.cliLogger.debug(msg); - case core_1.LogLevel.UNKNOWN: - case core_1.LogLevel.INFO: - default: - return CLIEmitHandler.cliLogger.info(msg); - } - } -} -exports.CLIEmitHandler = CLIEmitHandler; -CLIEmitHandler.cliLogger = exports.defaultCliLogger; -//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/kipper/cli/lib/logger.js.map b/kipper/cli/lib/logger.js.map deleted file mode 100644 index 26c16befe..000000000 --- a/kipper/cli/lib/logger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAIA,uCAAwC;AACxC,iCAA2D;AAK9C,QAAA,yBAAyB,GAAmB;IACxD,eAAe,EAAE,oBAAoB;IACrC,eAAe,EAAE,QAAQ;IACzB,mBAAmB,EAAE,KAAK;IAC1B,eAAe,EAAE,KAAK;CACtB,CAAC;AAKW,QAAA,gBAAgB,GAAW,IAAI,cAAM,CAAC,iCAAyB,CAAC,CAAC;AAO9E,MAAa,cAAc;IAenB,MAAM,CAAC,IAAI,CAAC,KAAe,EAAE,GAAW;QAC9C,QAAQ,KAAK,EAAE;YACd,KAAK,eAAQ,CAAC,KAAK;gBAClB,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,KAAK,eAAQ,CAAC,KAAK;gBAClB,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,KAAK,eAAQ,CAAC,IAAI;gBACjB,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3C,KAAK,eAAQ,CAAC,KAAK;gBAClB,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,KAAK,eAAQ,CAAC,OAAO,CAAC;YACtB,KAAK,eAAQ,CAAC,IAAI,CAAC;YACnB;gBACC,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3C;IACF,CAAC;;AA9BF,wCA+BC;AAxBc,wBAAS,GAAW,wBAAgB,CAAC"} \ No newline at end of file diff --git a/kipper/cli/lib/output/compile.d.ts b/kipper/cli/lib/output/compile.d.ts deleted file mode 100644 index 10b06433c..000000000 --- a/kipper/cli/lib/output/compile.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { KipperCompileResult } from "@kipper/core"; -import { KipperEncoding } from "../input"; -export declare function writeCompilationResult(result: KipperCompileResult, outDir: string, outPath: string, encoding: KipperEncoding): Promise; diff --git a/kipper/cli/lib/output/compile.js b/kipper/cli/lib/output/compile.js deleted file mode 100644 index 1fbec1616..000000000 --- a/kipper/cli/lib/output/compile.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.writeCompilationResult = void 0; -const fs_1 = require("fs"); -const errors_1 = require("../errors"); -async function writeCompilationResult(result, outDir, outPath, encoding) { - try { - try { - await fs_1.promises.access(outDir, fs_1.constants.R_OK); - } - catch (e) { - await fs_1.promises.mkdir(outDir); - } - const code = result.write(); - let buffer; - if (encoding === "utf16le") { - buffer = Buffer.from(`\ufeff${code}`, "utf16le"); - } - else if (encoding === "utf8") { - buffer = Buffer.from(code, "utf8"); - } - else { - buffer = Buffer.from(code, "ascii"); - } - await fs_1.promises.writeFile(outPath, buffer, { encoding: encoding }); - } - catch (e) { - throw new errors_1.KipperFileWriteError(outPath); - } - return outPath; -} -exports.writeCompilationResult = writeCompilationResult; -//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/kipper/cli/lib/output/compile.js.map b/kipper/cli/lib/output/compile.js.map deleted file mode 100644 index 391072c1a..000000000 --- a/kipper/cli/lib/output/compile.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/output/compile.ts"],"names":[],"mappings":";;;AAKA,2BAA+C;AAC/C,sCAAiD;AAW1C,KAAK,UAAU,sBAAsB,CAC3C,MAA2B,EAC3B,MAAc,EACd,OAAe,EACf,QAAwB;IAExB,IAAI;QAEH,IAAI;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,MAAM,EAAE,cAAS,CAAC,IAAI,CAAC,CAAC;SACxC;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,aAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACvB;QAGD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAG5B,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC3B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;SACjD;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC/B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM;YACN,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACpC;QAED,MAAM,aAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC5D;IAAC,OAAO,CAAC,EAAE;QACX,MAAM,IAAI,6BAAoB,CAAC,OAAO,CAAC,CAAC;KACxC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAjCD,wDAiCC"} \ No newline at end of file diff --git a/kipper/cli/lib/output/index.d.ts b/kipper/cli/lib/output/index.d.ts deleted file mode 100644 index 46adf0f86..000000000 --- a/kipper/cli/lib/output/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./compile"; diff --git a/kipper/cli/lib/output/index.js b/kipper/cli/lib/output/index.js deleted file mode 100644 index 6d328338f..000000000 --- a/kipper/cli/lib/output/index.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tslib_1 = require("tslib"); -tslib_1.__exportStar(require("./compile"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/kipper/cli/lib/output/index.js.map b/kipper/cli/lib/output/index.js.map deleted file mode 100644 index 0572f0d9f..000000000 --- a/kipper/cli/lib/output/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":";;;AAKA,oDAA0B"} \ No newline at end of file diff --git a/kipper/cli/lib/prompt-module.d.ts b/kipper/cli/lib/prompt-module.d.ts deleted file mode 100644 index 1259a7cb4..000000000 --- a/kipper/cli/lib/prompt-module.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare class PromptModule { - private readonly promptModule; - private constructor(); - static create(): Promise; - prompt(question: string, defaultValue?: string): Promise; - confirm(question: string): Promise; - choice(question: string, possibilities: string[], defaultValue: string): Promise; -} diff --git a/kipper/cli/lib/prompt-module.js b/kipper/cli/lib/prompt-module.js deleted file mode 100644 index d05e88f88..000000000 --- a/kipper/cli/lib/prompt-module.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PromptModule = void 0; -const tslib_1 = require("tslib"); -const chalk_1 = tslib_1.__importDefault(require("chalk")); -const inquirer_1 = tslib_1.__importDefault(require("inquirer")); -class PromptModule { - constructor(promptModule) { - this.promptModule = promptModule; - } - static async create() { - const promptModule = inquirer_1.default.createPromptModule(); - return new PromptModule(promptModule); - } - async prompt(question, defaultValue) { - const prefix = chalk_1.default.cyan("~ "); - const answer = await this.promptModule([ - { - type: "input", - name: "answer", - message: `${prefix}${question}`, - default: defaultValue, - }, - ]); - return answer.answer; - } - async confirm(question) { - const prefix = chalk_1.default.cyan("~ "); - const answer = await this.promptModule([ - { - type: "confirm", - name: "answer", - message: `${prefix}${question}`, - default: false, - }, - ]); - return answer.answer; - } - async choice(question, possibilities, defaultValue) { - const prefix = chalk_1.default.cyan("~ "); - const answer = await this.promptModule([ - { - type: "list", - name: "answer", - message: `${prefix}${question}`, - choices: possibilities, - default: defaultValue, - }, - ]); - return answer.answer; - } -} -exports.PromptModule = PromptModule; -//# sourceMappingURL=prompt-module.js.map \ No newline at end of file diff --git a/kipper/cli/lib/prompt-module.js.map b/kipper/cli/lib/prompt-module.js.map deleted file mode 100644 index 8a55128ed..000000000 --- a/kipper/cli/lib/prompt-module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"prompt-module.js","sourceRoot":"","sources":["../src/prompt-module.ts"],"names":[],"mappings":";;;;AACA,0DAA0B;AAC1B,gEAAgC;AAQhC,MAAa,YAAY;IAGxB,YAAoB,YAAkC;QACrD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM;QAClB,MAAM,YAAY,GAAG,kBAAQ,CAAC,kBAAkB,EAAE,CAAC;QACnD,OAAO,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,YAAqB;QAC1D,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC;gBACC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;gBAC/B,OAAO,EAAE,YAAY;aACrB;SACD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAgB;QACpC,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC;gBACC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;gBAC/B,OAAO,EAAE,KAAK;aACd;SACD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,aAAuB,EAAE,YAAoB;QAClF,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;gBAC/B,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,YAAY;aACrB;SACD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;CACD;AAtDD,oCAsDC"} \ No newline at end of file diff --git a/kipper/cli/lib/templates/.gitignore.template b/kipper/cli/lib/templates/.gitignore.template deleted file mode 100644 index c6bba5913..000000000 --- a/kipper/cli/lib/templates/.gitignore.template +++ /dev/null @@ -1,130 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/kipper/cli/lib/templates/kip-config.json.template b/kipper/cli/lib/templates/kip-config.json.template deleted file mode 100644 index 6e112a982..000000000 --- a/kipper/cli/lib/templates/kip-config.json.template +++ /dev/null @@ -1,12 +0,0 @@ -{ - "outDir": "build", - "srcDir": "src", - "compiler": { - "version": "", - "target": "" - }, - "files": [ - "./src/main.kip" - ], - "resources": [] -} diff --git a/kipper/cli/lib/templates/main.kip.template b/kipper/cli/lib/templates/main.kip.template deleted file mode 100644 index 8fcd87080..000000000 --- a/kipper/cli/lib/templates/main.kip.template +++ /dev/null @@ -1,12 +0,0 @@ -/** - * This is the source file of your program. Here all the logic will be written and then executed during runtime. - * - * Visit our quickstart guide to learn more about the language and how to use it: - * https://kipper-lang.org/docs/quickstart - */ - -def main() -> void { - print("Hello world!"); -} - -main(); diff --git a/kipper/cli/lib/templates/package.json.template b/kipper/cli/lib/templates/package.json.template deleted file mode 100644 index a5989a0fb..000000000 --- a/kipper/cli/lib/templates/package.json.template +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "", - "description": "", - "version": "", - "scripts": { - "run": "kipper run ./src/main.kip", - "build": "kipper compile" - }, - "dependencies": { - "@kipper/cli": "" - }, - "keywords": [ - "kipper" - ], - "author": "", - "license": "", - "homepage": "" -} diff --git a/kipper/cli/lib/templates/templates/.gitignore.template b/kipper/cli/lib/templates/templates/.gitignore.template deleted file mode 100644 index c6bba5913..000000000 --- a/kipper/cli/lib/templates/templates/.gitignore.template +++ /dev/null @@ -1,130 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/kipper/cli/lib/templates/templates/kip-config.json.template b/kipper/cli/lib/templates/templates/kip-config.json.template deleted file mode 100644 index 6e112a982..000000000 --- a/kipper/cli/lib/templates/templates/kip-config.json.template +++ /dev/null @@ -1,12 +0,0 @@ -{ - "outDir": "build", - "srcDir": "src", - "compiler": { - "version": "", - "target": "" - }, - "files": [ - "./src/main.kip" - ], - "resources": [] -} diff --git a/kipper/cli/lib/templates/templates/main.kip.template b/kipper/cli/lib/templates/templates/main.kip.template deleted file mode 100644 index 8fcd87080..000000000 --- a/kipper/cli/lib/templates/templates/main.kip.template +++ /dev/null @@ -1,12 +0,0 @@ -/** - * This is the source file of your program. Here all the logic will be written and then executed during runtime. - * - * Visit our quickstart guide to learn more about the language and how to use it: - * https://kipper-lang.org/docs/quickstart - */ - -def main() -> void { - print("Hello world!"); -} - -main(); diff --git a/kipper/cli/lib/templates/templates/package.json.template b/kipper/cli/lib/templates/templates/package.json.template deleted file mode 100644 index a5989a0fb..000000000 --- a/kipper/cli/lib/templates/templates/package.json.template +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "", - "description": "", - "version": "", - "scripts": { - "run": "kipper run ./src/main.kip", - "build": "kipper compile" - }, - "dependencies": { - "@kipper/cli": "" - }, - "keywords": [ - "kipper" - ], - "author": "", - "license": "", - "homepage": "" -} From d1a4582c2adf49ff1660d7172c8ef16d0c056984 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 14:47:41 +0200 Subject: [PATCH 154/257] fix: Fixed ESLint bugs --- .../object-primary-expression-semantics.ts | 1 - .../object-primary-expression/object-property/object-property.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts index d52d97fb1..263f06d4a 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts @@ -1,4 +1,3 @@ -import type { Expression } from "../../expression"; import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; import type { ObjectProperty } from "./object-property"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts index eaf8ad7b0..bbb0d40f6 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property.ts @@ -4,7 +4,6 @@ import type { ObjectPropertyContext } from "../../../../../../parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../parser"; import { PrimaryExpression } from "../../primary-expression"; import type { CompilableASTNode } from "../../../../../compilable-ast-node"; -import { KipperNotImplementedError } from "../../../../../../../errors"; /** * Object property, which represents a property inside an {@link ObjectPrimaryExpression object}. This is a key-value From 353dd4f304cd80ea100967d3cd3db7a42d403c2c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 14:49:29 +0200 Subject: [PATCH 155/257] fix: Fixed ESLint bugs in while-loop-iteration-statement.ts --- .../while-loop-iteration-statement.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts index 5db38d504..18eec5857 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/while-loop-iteration-statement/while-loop-iteration-statement.ts @@ -7,8 +7,6 @@ import type { WhileLoopStatementSemantics } from "./while-loop-iteration-stateme import type { WhileLoopStatementTypeSemantics } from "./while-loop-iteration-statement-type-semantics"; import type { Expression } from "../../../expressions"; import { IterationStatement } from "../iteration-statement"; -import { KindParseRuleMapping, ParseRuleKindMapping, WhileLoopIterationStatementContext } from "../../../../../parser"; -import { Statement } from "../../statement"; import type { WhileLoopIterationStatementContext } from "../../../../../parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; import type { Statement } from "../../statement"; From 12e43b52b731308291c35c68b173b8f4c7e9f8e3 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 15:29:10 +0200 Subject: [PATCH 156/257] fix: Fixed bug that failed compilations still lead to an execution in run.ts --- kipper/cli/src/commands/compile.ts | 7 ++++--- kipper/cli/src/commands/run.ts | 8 ++++++-- kipper/cli/src/decorators.ts | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index 1844a14fb..6d6bc924e 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -154,7 +154,7 @@ export default class Compile extends Command { } @prettifiedErrors() - public async run(logger?: KipperLogger) { + public async run(logger?: KipperLogger): Promise { const { flags, config } = await this.getRunConfig(); logger = logger ?? new KipperLogger(CLIEmitHandler.emit, LogLevel.INFO, flags["warnings"]); @@ -176,14 +176,14 @@ export default class Compile extends Command { if (e instanceof KipperError && config.compilerOptions.abortOnFirstError) { // Ignore the error thrown by the compiler (the logger already logged it) // TODO! This will be removed once 'abortOnFirstError' has been fully removed with v0.11.0 -> #501 - return; + return false; } throw e; } // If the compilation failed, abort if (!result.success) { - return; + return false; } // Write the file output for this compilation @@ -199,5 +199,6 @@ export default class Compile extends Command { // Finished! const duration: number = (new Date().getTime() - startTime) / 1000; logger.info(`Done in ${duration}s.`); + return true; } } diff --git a/kipper/cli/src/commands/run.ts b/kipper/cli/src/commands/run.ts index 78f1273b8..745efff1e 100644 --- a/kipper/cli/src/commands/run.ts +++ b/kipper/cli/src/commands/run.ts @@ -106,11 +106,15 @@ export default class Run extends Compile { } @prettifiedErrors() - public async run() { + public async run(): Promise { const { flags, config } = await this.getRunConfig(); const logger = new KipperLogger(CLIEmitHandler.emit, LogLevel.WARN, flags["warnings"]); - await super.run(logger); + const state = await super.run(logger); + if (!state) return false; + + // We only execute the program if the compilation was successful await this.executeKipperProgram(config.outPath); + return true; } } diff --git a/kipper/cli/src/decorators.ts b/kipper/cli/src/decorators.ts index 4a5051ef0..09011cd7b 100644 --- a/kipper/cli/src/decorators.ts +++ b/kipper/cli/src/decorators.ts @@ -19,7 +19,7 @@ export function prettifiedErrors() { return function (target: TProto, propertyKey: keyof TProto, descriptor: PropertyDescriptor) { const originalFunc: Function = descriptor.value; - const func = async function (this: Command, ...argArray: Array): Promise { + const func = async function (this: Command, ...argArray: Array): Promise { try { await originalFunc.call(this, ...argArray); } catch (error) { @@ -59,7 +59,7 @@ export function prettifiedErrors() { // Modify the prototype and return the property descriptor target[propertyKey] = func as TProto[keyof TProto]; - return func as TypedPropertyDescriptor<(...argArray: Array) => Promise>; + return func as TypedPropertyDescriptor<(...argArray: Array) => Promise>; }; } From 77bd63a8e1a9cd5922409bd267f71411b789dc4b Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 15:29:23 +0200 Subject: [PATCH 157/257] other: Prettified project --- CHANGELOG.md | 3 ++- .../do-while-loop-iteration-statement-semantics.ts | 4 ++-- .../do-while-loop-iteration-statement.ts | 3 +-- test/module/core/compiler.test.ts | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 89d3b1416..9e5137634 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,8 +17,9 @@ To use development versions of Kipper download the [`next` tag release](https://www.npmjs.com/package/kipper?activeTab=versions), which will include the specified changes. ### Added + - Implemented Do-While-Loop (`do ... while ...`) iteration statements. - ([#271](https://github.com/Kipper-Lang/Kipper/issues/271)) + ([#271](https://github.com/Kipper-Lang/Kipper/issues/271)) - Support for config files with a new monorepo package called `@kipper/config`, which implements config file loading and parsing. This package is used by the Kipper CLI to automatically load and parse config files. ([#502](https://github.com/Kipper-Lang/Kipper/issues/502)). diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts index 04a277747..70b8ce723 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement-semantics.ts @@ -3,8 +3,8 @@ * @since 0.10.0 */ import type { IterationStatementSemantics } from "../iteration-statement-semantics"; -import { Expression } from "../../../expressions"; -import { Statement } from "../../statement"; +import type { Expression } from "../../../expressions"; +import type { Statement } from "../../statement"; /** * Semantics for AST Node {@link DoWhileLoopIterationStatement}. diff --git a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts index 52eb9fafd..21d68f8f4 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/iteration-statement/do-while-loop-iteration-statement/do-while-loop-iteration-statement.ts @@ -8,9 +8,8 @@ import type { CompilableNodeChild, CompilableNodeParent } from "../../../../comp import { IterationStatement } from "../iteration-statement"; import type { DoWhileLoopIterationStatementContext } from "../../../../../parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; -import { KipperNotImplementedError } from "../../../../../../errors"; import type { Expression } from "../../../expressions"; -import { Statement } from "../../statement"; +import type { Statement } from "../../statement"; /** * Do-While loop statement class, which represents a do-while loop statement in the Kipper language and is compilable diff --git a/test/module/core/compiler.test.ts b/test/module/core/compiler.test.ts index e9088f09a..101fc2541 100644 --- a/test/module/core/compiler.test.ts +++ b/test/module/core/compiler.test.ts @@ -542,10 +542,10 @@ describe("KipperCompiler", () => { }); it(`Do-While loop [${target.fileExtension}]`, async () => { - const fileContent : string = (await fs.readFile(doWhileLoopFile, "utf8" as BufferEncoding)).toString(); - const result : KipperCompileResult = await compiler.compile(fileContent, { target: target }); + const fileContent: string = (await fs.readFile(doWhileLoopFile, "utf8" as BufferEncoding)).toString(); + const result: KipperCompileResult = await compiler.compile(fileContent, { target: target }); - const code : string = result.write(); + const code: string = result.write(); assert(code); assert(code.includes(TargetTS.getBuiltInIdentifier("print"))); assert(code.includes(TargetTS.getBuiltInIdentifier("numToStr"))); From cd60b907248e9bdf7637353ca7ef770beb992f64 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 15:48:10 +0200 Subject: [PATCH 158/257] minor (#532): Added `--dry-run` flag to CLI command `compile` --- kipper/cli/src/commands/compile.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/kipper/cli/src/commands/compile.ts b/kipper/cli/src/commands/compile.ts index 6d6bc924e..8cc866027 100644 --- a/kipper/cli/src/commands/compile.ts +++ b/kipper/cli/src/commands/compile.ts @@ -70,6 +70,12 @@ export default class Compile extends Command { description: "Optimise the generated built-in functions using tree-shaking to reduce the size of the output.", allowNo: true, }), + "dry-run": flags.boolean({ + char: "d", + default: false, + description: "Run the compiler without writing any output. Useful for checking for errors.", + allowNo: true, + }), warnings: flags.boolean({ // This is different to the compile config field 'warnings', since this is purely about the CLI output char: "w", @@ -184,21 +190,20 @@ export default class Compile extends Command { // If the compilation failed, abort if (!result.success) { return false; - } - - // Write the file output for this compilation - const out = await writeCompilationResult(result, config.outDir, config.outPath, config.encoding); - logger.debug(`Generated file '${out}'.`); - - // Copy resources if they exist - if (config.resources) { - await copyConfigResources(config.resources); - logger.debug(`Finished copying resources specified in config.`); + } else if (!flags["dry-run"]) { + const out = await writeCompilationResult(result, config.outDir, config.outPath, config.encoding); + logger.debug(`Generated file '${out}'.`); + + // Copy resources if they exist + if (config.resources) { + await copyConfigResources(config.resources); + logger.debug(`Finished copying resources specified in config.`); + } } // Finished! const duration: number = (new Date().getTime() - startTime) / 1000; - logger.info(`Done in ${duration}s.`); + logger.info(`Done in ${duration}s.` + (flags["dry-run"] ? " (Dry run)" : "")); return true; } } From f9c8b885a5eda22b5f3eb1e87d05ec0e4aad69a0 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 15:48:23 +0200 Subject: [PATCH 159/257] minor (#532): Removed unneeded CLI command `analyse` --- kipper/cli/src/commands/analyse.ts | 88 ------------------------------ 1 file changed, 88 deletions(-) delete mode 100644 kipper/cli/src/commands/analyse.ts diff --git a/kipper/cli/src/commands/analyse.ts b/kipper/cli/src/commands/analyse.ts deleted file mode 100644 index a964c4621..000000000 --- a/kipper/cli/src/commands/analyse.ts +++ /dev/null @@ -1,88 +0,0 @@ -/** - * 'analyse' command for analysing the syntax of a file. - * @since 0.0.5 - */ -import type { args } from "@oclif/parser"; -import { Command, flags } from "@oclif/command"; -import { KipperCompiler, KipperLogger, LogLevel } from "@kipper/core"; -import { CLIEmitHandler } from "../logger"; -import { getParseStream, KipperEncodings, verifyEncoding } from "../input/"; -import { prettifiedErrors } from "../decorators"; -import { loadAutoConfig } from "../config-loader"; - -export default class Analyse extends Command { - static override description: string = "Analyse a Kipper file and validate its syntax and semantic integrity."; - - // TODO! Add examples when the command moves out of development - static override examples: Array = []; - - static override args: args.Input = [ - { - name: "file", - required: false, - description: "The file that should be analysed.", - }, - ]; - - static override flags: flags.Input = { - encoding: flags.string({ - char: "e", - default: "utf8", - description: `The encoding that should be used to read the file (${KipperEncodings.join()}).`, - parse: verifyEncoding, - }), - "string-code": flags.string({ - char: "s", - description: "The content of a Kipper file that can be passed as a replacement for the 'file' parameter.", - }), - warnings: flags.boolean({ - char: "w", - default: true, - description: "Show warnings that were emitted during the analysis.", - allowNo: true, - }), - }; - - /** - * Gets the configuration for the invocation of this command. - * @private - */ - private async getRunConfig() { - const { args, flags } = this.parse(Analyse); - - // Load the pre-existing configuration - const preExistingConfig = await loadAutoConfig(); - - // Compilation-required - const { stream } = await getParseStream(args, flags, preExistingConfig); - - return { - args, - flags, - config: { - stream, - }, - }; - } - - @prettifiedErrors() - public async run() { - const { flags, config } = await this.getRunConfig(); - const logger = new KipperLogger(CLIEmitHandler.emit, LogLevel.INFO, flags["warnings"]); - const compiler = new KipperCompiler(logger); - - // Start timer for processing - const startTime: number = new Date().getTime(); - - // Actual processing by the compiler - try { - await compiler.syntaxAnalyse(config.stream); - } catch (e) { - return; // Ignore the error thrown by the compiler (the logger already logged it) - } - - // Finished! - const duration: number = (new Date().getTime() - startTime) / 1000; - await logger.info(`Done in ${duration}s.`); - } -} From 32bf34d853cd8696f76e2352d53b1c961818cef5 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Mon, 1 Jul 2024 16:10:43 +0200 Subject: [PATCH 160/257] minor (#493): feature work on bitwise operators --- kipper/cli/README.md | 23 +- kipper/core/.antlr/KipperLexer.interp | 302 + kipper/core/.antlr/KipperLexer.java | 697 ++ kipper/core/.antlr/KipperLexer.tokens | 149 + kipper/core/.antlr/KipperParser.interp | 248 + kipper/core/.antlr/KipperParser.java | 5058 ++++++++++++ kipper/core/.antlr/KipperParser.tokens | 149 + kipper/core/KipperLexer.g4 | 9 + kipper/core/KipperLexer.tokens | 44 +- kipper/core/KipperParser.g4 | 32 +- kipper/core/KipperParser.tokens | 44 +- .../core/src/compiler/ast/common/ast-types.ts | 6 + .../compiler/ast/mapping/ast-node-mapper.ts | 5 +- .../bitwise-and-expression-semantics.ts | 9 + .../bitwise-and-expression-type-semantics.ts | 3 + .../bitwise-and-expression.ts | 63 + .../bitwise-and-expression/index.ts | 3 + .../bitwise-expression-semantics.ts | 14 + .../bitwise-expression-type-semantics.ts | 5 + .../bitwise-expression/bitwise-expression.ts | 30 + .../bitwise-or-expression-semantics.ts | 9 + .../bitwise-or-expression-type-semantics.ts | 3 + .../bitwise-or-expression.ts | 68 + .../bitwise-or-expression/index.ts | 3 + .../bitwise-xor-expression-semantics.ts | 9 + .../bitwise-xor-expression-type-semantics.ts | 3 + .../bitwise-xor-expression.ts | 68 + .../bitwise-xor-expression/index.ts | 3 + ...ro-fill-left-shift-expression-semantics.ts | 9 + ...ll-left-shift-expression-type-semantics.ts | 3 + ...bitwise-zero-fill-left-shift-expression.ts | 70 + .../expressions/bitwise-expression/index.ts | 5 + kipper/core/src/compiler/const.ts | 102 + .../compiler/parser/antlr/KipperLexer.interp | 23 +- .../compiler/parser/antlr/KipperLexer.tokens | 44 +- .../src/compiler/parser/antlr/KipperLexer.ts | 1072 +-- .../compiler/parser/antlr/KipperParser.interp | 21 +- .../compiler/parser/antlr/KipperParser.tokens | 44 +- .../src/compiler/parser/antlr/KipperParser.ts | 7271 ++++++++--------- .../parser/antlr/KipperParserListener.ts | 182 +- .../parser/antlr/KipperParserVisitor.ts | 122 +- .../parser/parse-rule-kind-mapping.ts | 35 +- .../target-presets/semantic-analyser.ts | 13 + .../translation/code-generator.ts | 13 + 44 files changed, 11669 insertions(+), 4419 deletions(-) create mode 100644 kipper/core/.antlr/KipperLexer.interp create mode 100644 kipper/core/.antlr/KipperLexer.java create mode 100644 kipper/core/.antlr/KipperLexer.tokens create mode 100644 kipper/core/.antlr/KipperParser.interp create mode 100644 kipper/core/.antlr/KipperParser.java create mode 100644 kipper/core/.antlr/KipperParser.tokens create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 9ae68a37b..c88dfe760 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,17 +52,19 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper analyse [FILE]`](#kipper-analyse-file) -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper analyse [FILE]`](#kipper-analyse-file) +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -207,6 +211,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/core/.antlr/KipperLexer.interp b/kipper/core/.antlr/KipperLexer.interp new file mode 100644 index 000000000..4554a81da --- /dev/null +++ b/kipper/core/.antlr/KipperLexer.interp @@ -0,0 +1,302 @@ +token literal names: +null +null +null +null +'const' +'var' +'as' +'...' +'switch' +'case' +'default' +'break' +'continue' +'do' +'while' +'if' +'else' +'for' +'enum' +'def' +'return' +'call' +'->' +'true' +'false' +'typeof' +'void' +'null' +'undefined' +',' +';' +'?' +':' +'(' +')' +'[' +']' +null +'{' +'}' +'+' +'++' +'-' +'--' +'*' +'/' +'%' +'**' +'&&' +'||' +'!' +'=' +'+=' +'-=' +'*=' +'/=' +'%=' +'==' +'!=' +'<' +'<=' +'>' +'>=' +'&' +'|' +'^' +'~' +'<<' +'>>' +'>>>' +'.' +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +FStringExpStart +BlockComment +LineComment +Const +Var +As +Spread +Switch +Case +Default +Break +Continue +Do +While +If +Else +For +Enum +DefFunc +Return +CallFunc +RetIndicator +True +False +Typeof +Void +Null +Undefined +Comma +SemiColon +QuestionMark +Colon +LeftParen +RightParen +LeftBracket +RightBracket +FStringExpEnd +LeftBrace +RightBrace +Plus +PlusPlus +Minus +MinusMinus +Star +Div +Mod +PowerTo +AndAnd +OrOr +Not +Assign +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +Equal +NotEqual +Less +LessEqual +Greater +GreaterEqual +BitwiseAnd +BitwiseOr +BitwiseXor +BitwiseNot +BitwiseLeftShift +BitwiseRightShift +BitwiseZeroFillRightShift +Dot +Identifier +IntegerConstant +SingleQuoteStringLiteral +DoubleQuoteStringLiteral +FloatingConstant +Whitespace +Newline +FStringSingleQuoteStart +FStringDoubleQuoteStart +FStringSingleQuoteEnd +FStringSingleQuoteAtom +FStringDoubleQuoteEnd +FStringDoubleQuoteAtom + +rule names: +BlockComment +LineComment +Const +Var +As +Spread +Switch +Case +Default +Break +Continue +Do +While +If +Else +For +Enum +DefFunc +Return +CallFunc +RetIndicator +True +False +Typeof +Void +Null +Undefined +Comma +SemiColon +QuestionMark +Colon +LeftParen +RightParen +LeftBracket +RightBracket +FStringExpEnd +LeftBrace +RightBrace +Plus +PlusPlus +Minus +MinusMinus +Star +Div +Mod +PowerTo +AndAnd +OrOr +Not +Assign +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +Equal +NotEqual +Less +LessEqual +Greater +GreaterEqual +BitwiseAnd +BitwiseOr +BitwiseXor +BitwiseNot +BitwiseLeftShift +BitwiseRightShift +BitwiseZeroFillRightShift +Dot +Identifier +IntegerConstant +SingleQuoteStringLiteral +DoubleQuoteStringLiteral +FloatingConstant +Whitespace +Newline +FStringSingleQuoteStart +FStringDoubleQuoteStart +FStringSingleQuoteExpStart +FStringSingleQuoteEnd +FStringSingleQuoteAtom +FStringDoubleQuoteExpStart +FStringDoubleQuoteEnd +FStringDoubleQuoteAtom +IdentifierNondigit +Nondigit +Digit +DecimalConstant +BinaryConstant +OctalConstant +HexadecimalConstant +NonzeroDigit +BinaryDigit +OctalDigit +HexadecimalDigit +DecimalFloatingConstant +FractionalConstant +ExponentPart +DigitSequence +Sign +CCharSequence +CChar +EscapeSequence +SimpleEscapeSequence +OctalEscapeSequence +HexadecimalEscapeSequence +SingleQuoteFStringSCharSequence +SingleQuoteFStringSChar +DoubleQuoteFStringSCharSequence +DoubleQuoteFStringSChar +SingleQuoteSCharSequence +SingleQuoteSChar +DoubleQuoteSCharSequence +DoubleQuoteSChar + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN +null +null +COMMENT + +mode names: +DEFAULT_MODE +SINGLE_QUOTE_FSTRING +DOUBLE_QUOTE_FSTRING + +atn: +[4, 0, 83, 716, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 236, 8, 0, 10, 0, 12, 0, 239, 9, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 250, 8, 1, 10, 1, 12, 1, 253, 9, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 5, 69, 500, 8, 69, 10, 69, 12, 69, 503, 9, 69, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 509, 8, 70, 1, 71, 1, 71, 3, 71, 513, 8, 71, 1, 71, 1, 71, 1, 72, 1, 72, 3, 72, 519, 8, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 4, 74, 526, 8, 74, 11, 74, 12, 74, 527, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 4, 87, 583, 8, 87, 11, 87, 12, 87, 584, 1, 88, 1, 88, 1, 88, 4, 88, 590, 8, 88, 11, 88, 12, 88, 591, 1, 89, 1, 89, 1, 89, 4, 89, 597, 8, 89, 11, 89, 12, 89, 598, 1, 90, 1, 90, 1, 90, 4, 90, 604, 8, 90, 11, 90, 12, 90, 605, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 95, 1, 95, 3, 95, 618, 8, 95, 1, 95, 1, 95, 1, 95, 3, 95, 623, 8, 95, 1, 96, 3, 96, 626, 8, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 3, 96, 633, 8, 96, 1, 97, 1, 97, 3, 97, 637, 8, 97, 1, 97, 1, 97, 1, 98, 4, 98, 642, 8, 98, 11, 98, 12, 98, 643, 1, 99, 1, 99, 1, 100, 4, 100, 649, 8, 100, 11, 100, 12, 100, 650, 1, 101, 1, 101, 3, 101, 655, 8, 101, 1, 102, 1, 102, 1, 102, 3, 102, 660, 8, 102, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 3, 104, 668, 8, 104, 1, 104, 3, 104, 671, 8, 104, 1, 105, 1, 105, 1, 105, 1, 105, 4, 105, 677, 8, 105, 11, 105, 12, 105, 678, 1, 106, 4, 106, 682, 8, 106, 11, 106, 12, 106, 683, 1, 107, 1, 107, 3, 107, 688, 8, 107, 1, 108, 4, 108, 691, 8, 108, 11, 108, 12, 108, 692, 1, 109, 1, 109, 3, 109, 697, 8, 109, 1, 110, 4, 110, 700, 8, 110, 11, 110, 12, 110, 701, 1, 111, 1, 111, 3, 111, 706, 8, 111, 1, 112, 4, 112, 709, 8, 112, 11, 112, 12, 112, 710, 1, 113, 1, 113, 3, 113, 715, 8, 113, 1, 237, 0, 114, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 0, 161, 80, 163, 81, 165, 0, 167, 82, 169, 83, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, 0, 183, 0, 185, 0, 187, 0, 189, 0, 191, 0, 193, 0, 195, 0, 197, 0, 199, 0, 201, 0, 203, 0, 205, 0, 207, 0, 209, 0, 211, 0, 213, 0, 215, 0, 217, 0, 219, 0, 221, 0, 223, 0, 225, 0, 227, 0, 229, 0, 3, 0, 1, 2, 18, 3, 0, 10, 10, 13, 13, 8232, 8233, 4, 0, 9, 9, 11, 12, 32, 32, 160, 160, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 66, 66, 98, 98, 2, 0, 79, 79, 111, 111, 2, 0, 88, 88, 120, 120, 1, 0, 49, 57, 1, 0, 48, 49, 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 12, 0, 34, 34, 39, 39, 63, 63, 92, 92, 97, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 123, 123, 125, 125, 6, 0, 10, 10, 13, 13, 39, 39, 92, 92, 123, 123, 125, 125, 6, 0, 10, 10, 13, 13, 34, 34, 92, 92, 123, 123, 125, 125, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 718, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 1, 159, 1, 0, 0, 0, 1, 161, 1, 0, 0, 0, 1, 163, 1, 0, 0, 0, 2, 165, 1, 0, 0, 0, 2, 167, 1, 0, 0, 0, 2, 169, 1, 0, 0, 0, 3, 231, 1, 0, 0, 0, 5, 245, 1, 0, 0, 0, 7, 256, 1, 0, 0, 0, 9, 262, 1, 0, 0, 0, 11, 266, 1, 0, 0, 0, 13, 269, 1, 0, 0, 0, 15, 273, 1, 0, 0, 0, 17, 280, 1, 0, 0, 0, 19, 285, 1, 0, 0, 0, 21, 293, 1, 0, 0, 0, 23, 299, 1, 0, 0, 0, 25, 308, 1, 0, 0, 0, 27, 311, 1, 0, 0, 0, 29, 317, 1, 0, 0, 0, 31, 320, 1, 0, 0, 0, 33, 325, 1, 0, 0, 0, 35, 329, 1, 0, 0, 0, 37, 334, 1, 0, 0, 0, 39, 338, 1, 0, 0, 0, 41, 345, 1, 0, 0, 0, 43, 350, 1, 0, 0, 0, 45, 353, 1, 0, 0, 0, 47, 358, 1, 0, 0, 0, 49, 364, 1, 0, 0, 0, 51, 371, 1, 0, 0, 0, 53, 376, 1, 0, 0, 0, 55, 381, 1, 0, 0, 0, 57, 391, 1, 0, 0, 0, 59, 393, 1, 0, 0, 0, 61, 395, 1, 0, 0, 0, 63, 397, 1, 0, 0, 0, 65, 399, 1, 0, 0, 0, 67, 401, 1, 0, 0, 0, 69, 403, 1, 0, 0, 0, 71, 405, 1, 0, 0, 0, 73, 407, 1, 0, 0, 0, 75, 412, 1, 0, 0, 0, 77, 414, 1, 0, 0, 0, 79, 416, 1, 0, 0, 0, 81, 418, 1, 0, 0, 0, 83, 421, 1, 0, 0, 0, 85, 423, 1, 0, 0, 0, 87, 426, 1, 0, 0, 0, 89, 428, 1, 0, 0, 0, 91, 430, 1, 0, 0, 0, 93, 432, 1, 0, 0, 0, 95, 435, 1, 0, 0, 0, 97, 438, 1, 0, 0, 0, 99, 441, 1, 0, 0, 0, 101, 443, 1, 0, 0, 0, 103, 445, 1, 0, 0, 0, 105, 448, 1, 0, 0, 0, 107, 451, 1, 0, 0, 0, 109, 454, 1, 0, 0, 0, 111, 457, 1, 0, 0, 0, 113, 460, 1, 0, 0, 0, 115, 463, 1, 0, 0, 0, 117, 466, 1, 0, 0, 0, 119, 468, 1, 0, 0, 0, 121, 471, 1, 0, 0, 0, 123, 473, 1, 0, 0, 0, 125, 476, 1, 0, 0, 0, 127, 478, 1, 0, 0, 0, 129, 480, 1, 0, 0, 0, 131, 482, 1, 0, 0, 0, 133, 484, 1, 0, 0, 0, 135, 487, 1, 0, 0, 0, 137, 490, 1, 0, 0, 0, 139, 494, 1, 0, 0, 0, 141, 496, 1, 0, 0, 0, 143, 508, 1, 0, 0, 0, 145, 510, 1, 0, 0, 0, 147, 516, 1, 0, 0, 0, 149, 522, 1, 0, 0, 0, 151, 525, 1, 0, 0, 0, 153, 531, 1, 0, 0, 0, 155, 535, 1, 0, 0, 0, 157, 542, 1, 0, 0, 0, 159, 549, 1, 0, 0, 0, 161, 555, 1, 0, 0, 0, 163, 560, 1, 0, 0, 0, 165, 562, 1, 0, 0, 0, 167, 568, 1, 0, 0, 0, 169, 573, 1, 0, 0, 0, 171, 575, 1, 0, 0, 0, 173, 577, 1, 0, 0, 0, 175, 579, 1, 0, 0, 0, 177, 582, 1, 0, 0, 0, 179, 586, 1, 0, 0, 0, 181, 593, 1, 0, 0, 0, 183, 600, 1, 0, 0, 0, 185, 607, 1, 0, 0, 0, 187, 609, 1, 0, 0, 0, 189, 611, 1, 0, 0, 0, 191, 613, 1, 0, 0, 0, 193, 622, 1, 0, 0, 0, 195, 632, 1, 0, 0, 0, 197, 634, 1, 0, 0, 0, 199, 641, 1, 0, 0, 0, 201, 645, 1, 0, 0, 0, 203, 648, 1, 0, 0, 0, 205, 654, 1, 0, 0, 0, 207, 659, 1, 0, 0, 0, 209, 661, 1, 0, 0, 0, 211, 664, 1, 0, 0, 0, 213, 672, 1, 0, 0, 0, 215, 681, 1, 0, 0, 0, 217, 687, 1, 0, 0, 0, 219, 690, 1, 0, 0, 0, 221, 696, 1, 0, 0, 0, 223, 699, 1, 0, 0, 0, 225, 705, 1, 0, 0, 0, 227, 708, 1, 0, 0, 0, 229, 714, 1, 0, 0, 0, 231, 232, 5, 47, 0, 0, 232, 233, 5, 42, 0, 0, 233, 237, 1, 0, 0, 0, 234, 236, 9, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 239, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 238, 240, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 240, 241, 5, 42, 0, 0, 241, 242, 5, 47, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 6, 0, 0, 0, 244, 4, 1, 0, 0, 0, 245, 246, 5, 47, 0, 0, 246, 247, 5, 47, 0, 0, 247, 251, 1, 0, 0, 0, 248, 250, 8, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 254, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 254, 255, 6, 1, 0, 0, 255, 6, 1, 0, 0, 0, 256, 257, 5, 99, 0, 0, 257, 258, 5, 111, 0, 0, 258, 259, 5, 110, 0, 0, 259, 260, 5, 115, 0, 0, 260, 261, 5, 116, 0, 0, 261, 8, 1, 0, 0, 0, 262, 263, 5, 118, 0, 0, 263, 264, 5, 97, 0, 0, 264, 265, 5, 114, 0, 0, 265, 10, 1, 0, 0, 0, 266, 267, 5, 97, 0, 0, 267, 268, 5, 115, 0, 0, 268, 12, 1, 0, 0, 0, 269, 270, 5, 46, 0, 0, 270, 271, 5, 46, 0, 0, 271, 272, 5, 46, 0, 0, 272, 14, 1, 0, 0, 0, 273, 274, 5, 115, 0, 0, 274, 275, 5, 119, 0, 0, 275, 276, 5, 105, 0, 0, 276, 277, 5, 116, 0, 0, 277, 278, 5, 99, 0, 0, 278, 279, 5, 104, 0, 0, 279, 16, 1, 0, 0, 0, 280, 281, 5, 99, 0, 0, 281, 282, 5, 97, 0, 0, 282, 283, 5, 115, 0, 0, 283, 284, 5, 101, 0, 0, 284, 18, 1, 0, 0, 0, 285, 286, 5, 100, 0, 0, 286, 287, 5, 101, 0, 0, 287, 288, 5, 102, 0, 0, 288, 289, 5, 97, 0, 0, 289, 290, 5, 117, 0, 0, 290, 291, 5, 108, 0, 0, 291, 292, 5, 116, 0, 0, 292, 20, 1, 0, 0, 0, 293, 294, 5, 98, 0, 0, 294, 295, 5, 114, 0, 0, 295, 296, 5, 101, 0, 0, 296, 297, 5, 97, 0, 0, 297, 298, 5, 107, 0, 0, 298, 22, 1, 0, 0, 0, 299, 300, 5, 99, 0, 0, 300, 301, 5, 111, 0, 0, 301, 302, 5, 110, 0, 0, 302, 303, 5, 116, 0, 0, 303, 304, 5, 105, 0, 0, 304, 305, 5, 110, 0, 0, 305, 306, 5, 117, 0, 0, 306, 307, 5, 101, 0, 0, 307, 24, 1, 0, 0, 0, 308, 309, 5, 100, 0, 0, 309, 310, 5, 111, 0, 0, 310, 26, 1, 0, 0, 0, 311, 312, 5, 119, 0, 0, 312, 313, 5, 104, 0, 0, 313, 314, 5, 105, 0, 0, 314, 315, 5, 108, 0, 0, 315, 316, 5, 101, 0, 0, 316, 28, 1, 0, 0, 0, 317, 318, 5, 105, 0, 0, 318, 319, 5, 102, 0, 0, 319, 30, 1, 0, 0, 0, 320, 321, 5, 101, 0, 0, 321, 322, 5, 108, 0, 0, 322, 323, 5, 115, 0, 0, 323, 324, 5, 101, 0, 0, 324, 32, 1, 0, 0, 0, 325, 326, 5, 102, 0, 0, 326, 327, 5, 111, 0, 0, 327, 328, 5, 114, 0, 0, 328, 34, 1, 0, 0, 0, 329, 330, 5, 101, 0, 0, 330, 331, 5, 110, 0, 0, 331, 332, 5, 117, 0, 0, 332, 333, 5, 109, 0, 0, 333, 36, 1, 0, 0, 0, 334, 335, 5, 100, 0, 0, 335, 336, 5, 101, 0, 0, 336, 337, 5, 102, 0, 0, 337, 38, 1, 0, 0, 0, 338, 339, 5, 114, 0, 0, 339, 340, 5, 101, 0, 0, 340, 341, 5, 116, 0, 0, 341, 342, 5, 117, 0, 0, 342, 343, 5, 114, 0, 0, 343, 344, 5, 110, 0, 0, 344, 40, 1, 0, 0, 0, 345, 346, 5, 99, 0, 0, 346, 347, 5, 97, 0, 0, 347, 348, 5, 108, 0, 0, 348, 349, 5, 108, 0, 0, 349, 42, 1, 0, 0, 0, 350, 351, 5, 45, 0, 0, 351, 352, 5, 62, 0, 0, 352, 44, 1, 0, 0, 0, 353, 354, 5, 116, 0, 0, 354, 355, 5, 114, 0, 0, 355, 356, 5, 117, 0, 0, 356, 357, 5, 101, 0, 0, 357, 46, 1, 0, 0, 0, 358, 359, 5, 102, 0, 0, 359, 360, 5, 97, 0, 0, 360, 361, 5, 108, 0, 0, 361, 362, 5, 115, 0, 0, 362, 363, 5, 101, 0, 0, 363, 48, 1, 0, 0, 0, 364, 365, 5, 116, 0, 0, 365, 366, 5, 121, 0, 0, 366, 367, 5, 112, 0, 0, 367, 368, 5, 101, 0, 0, 368, 369, 5, 111, 0, 0, 369, 370, 5, 102, 0, 0, 370, 50, 1, 0, 0, 0, 371, 372, 5, 118, 0, 0, 372, 373, 5, 111, 0, 0, 373, 374, 5, 105, 0, 0, 374, 375, 5, 100, 0, 0, 375, 52, 1, 0, 0, 0, 376, 377, 5, 110, 0, 0, 377, 378, 5, 117, 0, 0, 378, 379, 5, 108, 0, 0, 379, 380, 5, 108, 0, 0, 380, 54, 1, 0, 0, 0, 381, 382, 5, 117, 0, 0, 382, 383, 5, 110, 0, 0, 383, 384, 5, 100, 0, 0, 384, 385, 5, 101, 0, 0, 385, 386, 5, 102, 0, 0, 386, 387, 5, 105, 0, 0, 387, 388, 5, 110, 0, 0, 388, 389, 5, 101, 0, 0, 389, 390, 5, 100, 0, 0, 390, 56, 1, 0, 0, 0, 391, 392, 5, 44, 0, 0, 392, 58, 1, 0, 0, 0, 393, 394, 5, 59, 0, 0, 394, 60, 1, 0, 0, 0, 395, 396, 5, 63, 0, 0, 396, 62, 1, 0, 0, 0, 397, 398, 5, 58, 0, 0, 398, 64, 1, 0, 0, 0, 399, 400, 5, 40, 0, 0, 400, 66, 1, 0, 0, 0, 401, 402, 5, 41, 0, 0, 402, 68, 1, 0, 0, 0, 403, 404, 5, 91, 0, 0, 404, 70, 1, 0, 0, 0, 405, 406, 5, 93, 0, 0, 406, 72, 1, 0, 0, 0, 407, 408, 4, 35, 0, 0, 408, 409, 5, 125, 0, 0, 409, 410, 1, 0, 0, 0, 410, 411, 6, 35, 1, 0, 411, 74, 1, 0, 0, 0, 412, 413, 5, 123, 0, 0, 413, 76, 1, 0, 0, 0, 414, 415, 5, 125, 0, 0, 415, 78, 1, 0, 0, 0, 416, 417, 5, 43, 0, 0, 417, 80, 1, 0, 0, 0, 418, 419, 5, 43, 0, 0, 419, 420, 5, 43, 0, 0, 420, 82, 1, 0, 0, 0, 421, 422, 5, 45, 0, 0, 422, 84, 1, 0, 0, 0, 423, 424, 5, 45, 0, 0, 424, 425, 5, 45, 0, 0, 425, 86, 1, 0, 0, 0, 426, 427, 5, 42, 0, 0, 427, 88, 1, 0, 0, 0, 428, 429, 5, 47, 0, 0, 429, 90, 1, 0, 0, 0, 430, 431, 5, 37, 0, 0, 431, 92, 1, 0, 0, 0, 432, 433, 5, 42, 0, 0, 433, 434, 5, 42, 0, 0, 434, 94, 1, 0, 0, 0, 435, 436, 5, 38, 0, 0, 436, 437, 5, 38, 0, 0, 437, 96, 1, 0, 0, 0, 438, 439, 5, 124, 0, 0, 439, 440, 5, 124, 0, 0, 440, 98, 1, 0, 0, 0, 441, 442, 5, 33, 0, 0, 442, 100, 1, 0, 0, 0, 443, 444, 5, 61, 0, 0, 444, 102, 1, 0, 0, 0, 445, 446, 5, 43, 0, 0, 446, 447, 5, 61, 0, 0, 447, 104, 1, 0, 0, 0, 448, 449, 5, 45, 0, 0, 449, 450, 5, 61, 0, 0, 450, 106, 1, 0, 0, 0, 451, 452, 5, 42, 0, 0, 452, 453, 5, 61, 0, 0, 453, 108, 1, 0, 0, 0, 454, 455, 5, 47, 0, 0, 455, 456, 5, 61, 0, 0, 456, 110, 1, 0, 0, 0, 457, 458, 5, 37, 0, 0, 458, 459, 5, 61, 0, 0, 459, 112, 1, 0, 0, 0, 460, 461, 5, 61, 0, 0, 461, 462, 5, 61, 0, 0, 462, 114, 1, 0, 0, 0, 463, 464, 5, 33, 0, 0, 464, 465, 5, 61, 0, 0, 465, 116, 1, 0, 0, 0, 466, 467, 5, 60, 0, 0, 467, 118, 1, 0, 0, 0, 468, 469, 5, 60, 0, 0, 469, 470, 5, 61, 0, 0, 470, 120, 1, 0, 0, 0, 471, 472, 5, 62, 0, 0, 472, 122, 1, 0, 0, 0, 473, 474, 5, 62, 0, 0, 474, 475, 5, 61, 0, 0, 475, 124, 1, 0, 0, 0, 476, 477, 5, 38, 0, 0, 477, 126, 1, 0, 0, 0, 478, 479, 5, 124, 0, 0, 479, 128, 1, 0, 0, 0, 480, 481, 5, 94, 0, 0, 481, 130, 1, 0, 0, 0, 482, 483, 5, 126, 0, 0, 483, 132, 1, 0, 0, 0, 484, 485, 5, 60, 0, 0, 485, 486, 5, 60, 0, 0, 486, 134, 1, 0, 0, 0, 487, 488, 5, 62, 0, 0, 488, 489, 5, 62, 0, 0, 489, 136, 1, 0, 0, 0, 490, 491, 5, 62, 0, 0, 491, 492, 5, 62, 0, 0, 492, 493, 5, 62, 0, 0, 493, 138, 1, 0, 0, 0, 494, 495, 5, 46, 0, 0, 495, 140, 1, 0, 0, 0, 496, 501, 3, 171, 84, 0, 497, 500, 3, 171, 84, 0, 498, 500, 3, 175, 86, 0, 499, 497, 1, 0, 0, 0, 499, 498, 1, 0, 0, 0, 500, 503, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 142, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 509, 3, 177, 87, 0, 505, 509, 3, 181, 89, 0, 506, 509, 3, 183, 90, 0, 507, 509, 3, 179, 88, 0, 508, 504, 1, 0, 0, 0, 508, 505, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 508, 507, 1, 0, 0, 0, 509, 144, 1, 0, 0, 0, 510, 512, 5, 39, 0, 0, 511, 513, 3, 223, 110, 0, 512, 511, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 5, 39, 0, 0, 515, 146, 1, 0, 0, 0, 516, 518, 5, 34, 0, 0, 517, 519, 3, 227, 112, 0, 518, 517, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 5, 34, 0, 0, 521, 148, 1, 0, 0, 0, 522, 523, 3, 193, 95, 0, 523, 150, 1, 0, 0, 0, 524, 526, 7, 1, 0, 0, 525, 524, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 530, 6, 74, 2, 0, 530, 152, 1, 0, 0, 0, 531, 532, 7, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 534, 6, 75, 2, 0, 534, 154, 1, 0, 0, 0, 535, 536, 5, 102, 0, 0, 536, 537, 5, 39, 0, 0, 537, 538, 1, 0, 0, 0, 538, 539, 6, 76, 3, 0, 539, 540, 1, 0, 0, 0, 540, 541, 6, 76, 4, 0, 541, 156, 1, 0, 0, 0, 542, 543, 5, 102, 0, 0, 543, 544, 5, 34, 0, 0, 544, 545, 1, 0, 0, 0, 545, 546, 6, 77, 5, 0, 546, 547, 1, 0, 0, 0, 547, 548, 6, 77, 6, 0, 548, 158, 1, 0, 0, 0, 549, 550, 4, 78, 1, 0, 550, 551, 5, 123, 0, 0, 551, 552, 1, 0, 0, 0, 552, 553, 6, 78, 7, 0, 553, 554, 6, 78, 8, 0, 554, 160, 1, 0, 0, 0, 555, 556, 5, 39, 0, 0, 556, 557, 6, 79, 9, 0, 557, 558, 1, 0, 0, 0, 558, 559, 6, 79, 1, 0, 559, 162, 1, 0, 0, 0, 560, 561, 3, 215, 106, 0, 561, 164, 1, 0, 0, 0, 562, 563, 4, 81, 2, 0, 563, 564, 5, 123, 0, 0, 564, 565, 1, 0, 0, 0, 565, 566, 6, 81, 7, 0, 566, 567, 6, 81, 8, 0, 567, 166, 1, 0, 0, 0, 568, 569, 5, 34, 0, 0, 569, 570, 6, 82, 10, 0, 570, 571, 1, 0, 0, 0, 571, 572, 6, 82, 1, 0, 572, 168, 1, 0, 0, 0, 573, 574, 3, 219, 108, 0, 574, 170, 1, 0, 0, 0, 575, 576, 3, 173, 85, 0, 576, 172, 1, 0, 0, 0, 577, 578, 7, 2, 0, 0, 578, 174, 1, 0, 0, 0, 579, 580, 7, 3, 0, 0, 580, 176, 1, 0, 0, 0, 581, 583, 3, 175, 86, 0, 582, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 178, 1, 0, 0, 0, 586, 587, 5, 48, 0, 0, 587, 589, 7, 4, 0, 0, 588, 590, 3, 187, 92, 0, 589, 588, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 180, 1, 0, 0, 0, 593, 594, 5, 48, 0, 0, 594, 596, 7, 5, 0, 0, 595, 597, 3, 189, 93, 0, 596, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 182, 1, 0, 0, 0, 600, 601, 5, 48, 0, 0, 601, 603, 7, 6, 0, 0, 602, 604, 3, 191, 94, 0, 603, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 184, 1, 0, 0, 0, 607, 608, 7, 7, 0, 0, 608, 186, 1, 0, 0, 0, 609, 610, 7, 8, 0, 0, 610, 188, 1, 0, 0, 0, 611, 612, 7, 9, 0, 0, 612, 190, 1, 0, 0, 0, 613, 614, 7, 10, 0, 0, 614, 192, 1, 0, 0, 0, 615, 617, 3, 195, 96, 0, 616, 618, 3, 197, 97, 0, 617, 616, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 623, 1, 0, 0, 0, 619, 620, 3, 199, 98, 0, 620, 621, 3, 197, 97, 0, 621, 623, 1, 0, 0, 0, 622, 615, 1, 0, 0, 0, 622, 619, 1, 0, 0, 0, 623, 194, 1, 0, 0, 0, 624, 626, 3, 199, 98, 0, 625, 624, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 628, 5, 46, 0, 0, 628, 633, 3, 199, 98, 0, 629, 630, 3, 199, 98, 0, 630, 631, 5, 46, 0, 0, 631, 633, 1, 0, 0, 0, 632, 625, 1, 0, 0, 0, 632, 629, 1, 0, 0, 0, 633, 196, 1, 0, 0, 0, 634, 636, 7, 11, 0, 0, 635, 637, 3, 201, 99, 0, 636, 635, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 639, 3, 199, 98, 0, 639, 198, 1, 0, 0, 0, 640, 642, 3, 175, 86, 0, 641, 640, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 641, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 200, 1, 0, 0, 0, 645, 646, 7, 12, 0, 0, 646, 202, 1, 0, 0, 0, 647, 649, 3, 205, 101, 0, 648, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 204, 1, 0, 0, 0, 652, 655, 8, 13, 0, 0, 653, 655, 3, 207, 102, 0, 654, 652, 1, 0, 0, 0, 654, 653, 1, 0, 0, 0, 655, 206, 1, 0, 0, 0, 656, 660, 3, 209, 103, 0, 657, 660, 3, 211, 104, 0, 658, 660, 3, 213, 105, 0, 659, 656, 1, 0, 0, 0, 659, 657, 1, 0, 0, 0, 659, 658, 1, 0, 0, 0, 660, 208, 1, 0, 0, 0, 661, 662, 5, 92, 0, 0, 662, 663, 7, 14, 0, 0, 663, 210, 1, 0, 0, 0, 664, 665, 5, 92, 0, 0, 665, 667, 3, 189, 93, 0, 666, 668, 3, 189, 93, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 670, 1, 0, 0, 0, 669, 671, 3, 189, 93, 0, 670, 669, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 212, 1, 0, 0, 0, 672, 673, 5, 92, 0, 0, 673, 674, 5, 120, 0, 0, 674, 676, 1, 0, 0, 0, 675, 677, 3, 191, 94, 0, 676, 675, 1, 0, 0, 0, 677, 678, 1, 0, 0, 0, 678, 676, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 214, 1, 0, 0, 0, 680, 682, 3, 217, 107, 0, 681, 680, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 681, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 216, 1, 0, 0, 0, 685, 688, 8, 15, 0, 0, 686, 688, 3, 207, 102, 0, 687, 685, 1, 0, 0, 0, 687, 686, 1, 0, 0, 0, 688, 218, 1, 0, 0, 0, 689, 691, 3, 221, 109, 0, 690, 689, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 690, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 220, 1, 0, 0, 0, 694, 697, 8, 16, 0, 0, 695, 697, 3, 207, 102, 0, 696, 694, 1, 0, 0, 0, 696, 695, 1, 0, 0, 0, 697, 222, 1, 0, 0, 0, 698, 700, 3, 225, 111, 0, 699, 698, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 224, 1, 0, 0, 0, 703, 706, 8, 13, 0, 0, 704, 706, 3, 207, 102, 0, 705, 703, 1, 0, 0, 0, 705, 704, 1, 0, 0, 0, 706, 226, 1, 0, 0, 0, 707, 709, 3, 229, 113, 0, 708, 707, 1, 0, 0, 0, 709, 710, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 228, 1, 0, 0, 0, 712, 715, 8, 17, 0, 0, 713, 715, 3, 207, 102, 0, 714, 712, 1, 0, 0, 0, 714, 713, 1, 0, 0, 0, 715, 230, 1, 0, 0, 0, 35, 0, 1, 2, 237, 251, 499, 501, 508, 512, 518, 527, 584, 591, 598, 605, 617, 622, 625, 632, 636, 643, 650, 654, 659, 667, 670, 678, 683, 687, 692, 696, 701, 705, 710, 714, 11, 0, 2, 0, 4, 0, 0, 0, 1, 0, 1, 76, 0, 5, 1, 0, 1, 77, 1, 5, 2, 0, 7, 1, 0, 5, 0, 0, 1, 79, 2, 1, 82, 3] \ No newline at end of file diff --git a/kipper/core/.antlr/KipperLexer.java b/kipper/core/.antlr/KipperLexer.java new file mode 100644 index 000000000..de76fdc5d --- /dev/null +++ b/kipper/core/.antlr/KipperLexer.java @@ -0,0 +1,697 @@ +// Generated from /home/lorenz/Distrobox/kipper/Documents/Projects/Kipper/kipper/core/KipperLexer.g4 by ANTLR 4.13.1 + + import KipperLexerBase from "./base/KipperLexerBase"; + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class KipperLexer extends KipperLexerBase { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + FStringExpStart=1, BlockComment=2, LineComment=3, Const=4, Var=5, As=6, + Spread=7, Switch=8, Case=9, Default=10, Break=11, Continue=12, Do=13, + While=14, If=15, Else=16, For=17, Enum=18, DefFunc=19, Return=20, CallFunc=21, + RetIndicator=22, True=23, False=24, Typeof=25, Void=26, Null=27, Undefined=28, + Comma=29, SemiColon=30, QuestionMark=31, Colon=32, LeftParen=33, RightParen=34, + LeftBracket=35, RightBracket=36, FStringExpEnd=37, LeftBrace=38, RightBrace=39, + Plus=40, PlusPlus=41, Minus=42, MinusMinus=43, Star=44, Div=45, Mod=46, + PowerTo=47, AndAnd=48, OrOr=49, Not=50, Assign=51, PlusAssign=52, MinusAssign=53, + StarAssign=54, DivAssign=55, ModAssign=56, Equal=57, NotEqual=58, Less=59, + LessEqual=60, Greater=61, GreaterEqual=62, BitwiseAnd=63, BitwiseOr=64, + BitwiseXor=65, BitwiseNot=66, BitwiseLeftShift=67, BitwiseRightShift=68, + BitwiseZeroFillRightShift=69, Dot=70, Identifier=71, IntegerConstant=72, + SingleQuoteStringLiteral=73, DoubleQuoteStringLiteral=74, FloatingConstant=75, + Whitespace=76, Newline=77, FStringSingleQuoteStart=78, FStringDoubleQuoteStart=79, + FStringSingleQuoteEnd=80, FStringSingleQuoteAtom=81, FStringDoubleQuoteEnd=82, + FStringDoubleQuoteAtom=83; + public static final int + COMMENT=2; + public static final int + SINGLE_QUOTE_FSTRING=1, DOUBLE_QUOTE_FSTRING=2; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT" + }; + + public static String[] modeNames = { + "DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING" + }; + + private static String[] makeRuleNames() { + return new String[] { + "BlockComment", "LineComment", "Const", "Var", "As", "Spread", "Switch", + "Case", "Default", "Break", "Continue", "Do", "While", "If", "Else", + "For", "Enum", "DefFunc", "Return", "CallFunc", "RetIndicator", "True", + "False", "Typeof", "Void", "Null", "Undefined", "Comma", "SemiColon", + "QuestionMark", "Colon", "LeftParen", "RightParen", "LeftBracket", "RightBracket", + "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", "PlusPlus", "Minus", + "MinusMinus", "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", "Not", + "Assign", "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", "ModAssign", + "Equal", "NotEqual", "Less", "LessEqual", "Greater", "GreaterEqual", + "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", "BitwiseLeftShift", + "BitwiseRightShift", "BitwiseZeroFillRightShift", "Dot", "Identifier", + "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", + "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", "FStringSingleQuoteExpStart", "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", "FStringDoubleQuoteExpStart", "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", "IdentifierNondigit", "Nondigit", "Digit", + "DecimalConstant", "BinaryConstant", "OctalConstant", "HexadecimalConstant", + "NonzeroDigit", "BinaryDigit", "OctalDigit", "HexadecimalDigit", "DecimalFloatingConstant", + "FractionalConstant", "ExponentPart", "DigitSequence", "Sign", "CCharSequence", + "CChar", "EscapeSequence", "SimpleEscapeSequence", "OctalEscapeSequence", + "HexadecimalEscapeSequence", "SingleQuoteFStringSCharSequence", "SingleQuoteFStringSChar", + "DoubleQuoteFStringSCharSequence", "DoubleQuoteFStringSChar", "SingleQuoteSCharSequence", + "SingleQuoteSChar", "DoubleQuoteSCharSequence", "DoubleQuoteSChar" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, "'const'", "'var'", "'as'", "'...'", "'switch'", + "'case'", "'default'", "'break'", "'continue'", "'do'", "'while'", "'if'", + "'else'", "'for'", "'enum'", "'def'", "'return'", "'call'", "'->'", "'true'", + "'false'", "'typeof'", "'void'", "'null'", "'undefined'", "','", "';'", + "'?'", "':'", "'('", "')'", "'['", "']'", null, "'{'", "'}'", "'+'", + "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", "'||'", "'!'", + "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", "'!='", "'<'", + "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", "'>>'", "'>>>'", + "'.'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "FStringExpStart", "BlockComment", "LineComment", "Const", "Var", + "As", "Spread", "Switch", "Case", "Default", "Break", "Continue", "Do", + "While", "If", "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", + "RetIndicator", "True", "False", "Typeof", "Void", "Null", "Undefined", + "Comma", "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", + "LeftBracket", "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", + "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", + "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", + "GreaterEqual", "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", + "BitwiseLeftShift", "BitwiseRightShift", "BitwiseZeroFillRightShift", + "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", + "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public KipperLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "KipperLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + @Override + public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { + switch (ruleIndex) { + case 76: + FStringSingleQuoteStart_action((RuleContext)_localctx, actionIndex); + break; + case 77: + FStringDoubleQuoteStart_action((RuleContext)_localctx, actionIndex); + break; + case 79: + FStringSingleQuoteEnd_action((RuleContext)_localctx, actionIndex); + break; + case 82: + FStringDoubleQuoteEnd_action((RuleContext)_localctx, actionIndex); + break; + } + } + private void FStringSingleQuoteStart_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 0: + this.incrementFStringDepth() + break; + } + } + private void FStringDoubleQuoteStart_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 1: + this.incrementFStringDepth() + break; + } + } + private void FStringSingleQuoteEnd_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 2: + this.decrementFStringDepth() + break; + } + } + private void FStringDoubleQuoteEnd_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 3: + this.decrementFStringDepth() + break; + } + } + @Override + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 35: + return FStringExpEnd_sempred((RuleContext)_localctx, predIndex); + case 78: + return FStringSingleQuoteExpStart_sempred((RuleContext)_localctx, predIndex); + case 81: + return FStringDoubleQuoteExpStart_sempred((RuleContext)_localctx, predIndex); + } + return true; + } + private boolean FStringExpEnd_sempred(RuleContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return this.insideFString(); + } + return true; + } + private boolean FStringSingleQuoteExpStart_sempred(RuleContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return this.insideFString(); + } + return true; + } + private boolean FStringDoubleQuoteExpStart_sempred(RuleContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return this.insideFString(); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0000S\u02cc\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff\uffff"+ + "\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007\u0002"+ + "\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007\u0005"+ + "\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b\u0002"+ + "\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002\f\u0007\f\u0002"+ + "\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002\u0010"+ + "\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002\u0013"+ + "\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002\u0016"+ + "\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002\u0019"+ + "\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002\u001c"+ + "\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002\u001f"+ + "\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002#\u0007"+ + "#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002(\u0007"+ + "(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002-\u0007"+ + "-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u00022\u0007"+ + "2\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u00027\u0007"+ + "7\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002<\u0007"+ + "<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002A\u0007"+ + "A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002F\u0007"+ + "F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002K\u0007"+ + "K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002P\u0007"+ + "P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002U\u0007"+ + "U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002Z\u0007"+ + "Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002_\u0007"+ + "_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002d\u0007"+ + "d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002i\u0007"+ + "i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002n\u0007"+ + "n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0001\u0000\u0001\u0000\u0001"+ + "\u0000\u0001\u0000\u0005\u0000\u00ec\b\u0000\n\u0000\f\u0000\u00ef\t\u0000"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u00fa\b\u0001\n\u0001"+ + "\f\u0001\u00fd\t\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ + "\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f"+ + "\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001"+ + "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ + "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ + "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ + "\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0001"+ + "\u001c\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f\u0001"+ + "\u001f\u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001\'\u0001"+ + "\'\u0001\'\u0001(\u0001(\u0001)\u0001)\u0001)\u0001*\u0001*\u0001+\u0001"+ + "+\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u0001/\u00010\u00010\u00011\u00011\u00012\u00012\u00012\u00013\u0001"+ + "3\u00013\u00014\u00014\u00014\u00015\u00015\u00015\u00016\u00016\u0001"+ + "6\u00017\u00017\u00017\u00018\u00018\u00018\u00019\u00019\u0001:\u0001"+ + ":\u0001:\u0001;\u0001;\u0001<\u0001<\u0001<\u0001=\u0001=\u0001>\u0001"+ + ">\u0001?\u0001?\u0001@\u0001@\u0001A\u0001A\u0001A\u0001B\u0001B\u0001"+ + "B\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001E\u0001E\u0001E\u0005"+ + "E\u01f4\bE\nE\fE\u01f7\tE\u0001F\u0001F\u0001F\u0001F\u0003F\u01fd\bF"+ + "\u0001G\u0001G\u0003G\u0201\bG\u0001G\u0001G\u0001H\u0001H\u0003H\u0207"+ + "\bH\u0001H\u0001H\u0001I\u0001I\u0001J\u0004J\u020e\bJ\u000bJ\fJ\u020f"+ + "\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001"+ + "L\u0001L\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001O\u0001O\u0001O\u0001"+ + "O\u0001O\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001T\u0001T\u0001U\u0001"+ + "U\u0001V\u0001V\u0001W\u0004W\u0247\bW\u000bW\fW\u0248\u0001X\u0001X\u0001"+ + "X\u0004X\u024e\bX\u000bX\fX\u024f\u0001Y\u0001Y\u0001Y\u0004Y\u0255\b"+ + "Y\u000bY\fY\u0256\u0001Z\u0001Z\u0001Z\u0004Z\u025c\bZ\u000bZ\fZ\u025d"+ + "\u0001[\u0001[\u0001\\\u0001\\\u0001]\u0001]\u0001^\u0001^\u0001_\u0001"+ + "_\u0003_\u026a\b_\u0001_\u0001_\u0001_\u0003_\u026f\b_\u0001`\u0003`\u0272"+ + "\b`\u0001`\u0001`\u0001`\u0001`\u0001`\u0003`\u0279\b`\u0001a\u0001a\u0003"+ + "a\u027d\ba\u0001a\u0001a\u0001b\u0004b\u0282\bb\u000bb\fb\u0283\u0001"+ + "c\u0001c\u0001d\u0004d\u0289\bd\u000bd\fd\u028a\u0001e\u0001e\u0003e\u028f"+ + "\be\u0001f\u0001f\u0001f\u0003f\u0294\bf\u0001g\u0001g\u0001g\u0001h\u0001"+ + "h\u0001h\u0003h\u029c\bh\u0001h\u0003h\u029f\bh\u0001i\u0001i\u0001i\u0001"+ + "i\u0004i\u02a5\bi\u000bi\fi\u02a6\u0001j\u0004j\u02aa\bj\u000bj\fj\u02ab"+ + "\u0001k\u0001k\u0003k\u02b0\bk\u0001l\u0004l\u02b3\bl\u000bl\fl\u02b4"+ + "\u0001m\u0001m\u0003m\u02b9\bm\u0001n\u0004n\u02bc\bn\u000bn\fn\u02bd"+ + "\u0001o\u0001o\u0003o\u02c2\bo\u0001p\u0004p\u02c5\bp\u000bp\fp\u02c6"+ + "\u0001q\u0001q\u0003q\u02cb\bq\u0001\u00ed\u0000r\u0003\u0002\u0005\u0003"+ + "\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+ + "\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012"+ + "%\u0013\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c"+ + "9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6"+ + "m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085C\u0087D\u0089E\u008bF\u008d"+ + "G\u008fH\u0091I\u0093J\u0095K\u0097L\u0099M\u009bN\u009dO\u009f\u0000"+ + "\u00a1P\u00a3Q\u00a5\u0000\u00a7R\u00a9S\u00ab\u0000\u00ad\u0000\u00af"+ + "\u0000\u00b1\u0000\u00b3\u0000\u00b5\u0000\u00b7\u0000\u00b9\u0000\u00bb"+ + "\u0000\u00bd\u0000\u00bf\u0000\u00c1\u0000\u00c3\u0000\u00c5\u0000\u00c7"+ + "\u0000\u00c9\u0000\u00cb\u0000\u00cd\u0000\u00cf\u0000\u00d1\u0000\u00d3"+ + "\u0000\u00d5\u0000\u00d7\u0000\u00d9\u0000\u00db\u0000\u00dd\u0000\u00df"+ + "\u0000\u00e1\u0000\u00e3\u0000\u00e5\u0000\u0003\u0000\u0001\u0002\u0012"+ + "\u0003\u0000\n\n\r\r\u2028\u2029\u0004\u0000\t\t\u000b\f \u00a0\u00a0"+ + "\u0003\u0000AZ__az\u0001\u000009\u0002\u0000BBbb\u0002\u0000OOoo\u0002"+ + "\u0000XXxx\u0001\u000019\u0001\u000001\u0001\u000007\u0003\u000009AFa"+ + "f\u0002\u0000EEee\u0002\u0000++--\u0004\u0000\n\n\r\r\'\'\\\\\f\u0000"+ + "\"\"\'\'??\\\\abffnnrrttvv{{}}\u0006\u0000\n\n\r\r\'\'\\\\{{}}\u0006\u0000"+ + "\n\n\r\r\"\"\\\\{{}}\u0004\u0000\n\n\r\r\"\"\\\\\u02ce\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ + "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ + "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ + "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ + "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ + "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ + "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ + "\u0000\u0000\u0000\u0001\u009f\u0001\u0000\u0000\u0000\u0001\u00a1\u0001"+ + "\u0000\u0000\u0000\u0001\u00a3\u0001\u0000\u0000\u0000\u0002\u00a5\u0001"+ + "\u0000\u0000\u0000\u0002\u00a7\u0001\u0000\u0000\u0000\u0002\u00a9\u0001"+ + "\u0000\u0000\u0000\u0003\u00e7\u0001\u0000\u0000\u0000\u0005\u00f5\u0001"+ + "\u0000\u0000\u0000\u0007\u0100\u0001\u0000\u0000\u0000\t\u0106\u0001\u0000"+ + "\u0000\u0000\u000b\u010a\u0001\u0000\u0000\u0000\r\u010d\u0001\u0000\u0000"+ + "\u0000\u000f\u0111\u0001\u0000\u0000\u0000\u0011\u0118\u0001\u0000\u0000"+ + "\u0000\u0013\u011d\u0001\u0000\u0000\u0000\u0015\u0125\u0001\u0000\u0000"+ + "\u0000\u0017\u012b\u0001\u0000\u0000\u0000\u0019\u0134\u0001\u0000\u0000"+ + "\u0000\u001b\u0137\u0001\u0000\u0000\u0000\u001d\u013d\u0001\u0000\u0000"+ + "\u0000\u001f\u0140\u0001\u0000\u0000\u0000!\u0145\u0001\u0000\u0000\u0000"+ + "#\u0149\u0001\u0000\u0000\u0000%\u014e\u0001\u0000\u0000\u0000\'\u0152"+ + "\u0001\u0000\u0000\u0000)\u0159\u0001\u0000\u0000\u0000+\u015e\u0001\u0000"+ + "\u0000\u0000-\u0161\u0001\u0000\u0000\u0000/\u0166\u0001\u0000\u0000\u0000"+ + "1\u016c\u0001\u0000\u0000\u00003\u0173\u0001\u0000\u0000\u00005\u0178"+ + "\u0001\u0000\u0000\u00007\u017d\u0001\u0000\u0000\u00009\u0187\u0001\u0000"+ + "\u0000\u0000;\u0189\u0001\u0000\u0000\u0000=\u018b\u0001\u0000\u0000\u0000"+ + "?\u018d\u0001\u0000\u0000\u0000A\u018f\u0001\u0000\u0000\u0000C\u0191"+ + "\u0001\u0000\u0000\u0000E\u0193\u0001\u0000\u0000\u0000G\u0195\u0001\u0000"+ + "\u0000\u0000I\u0197\u0001\u0000\u0000\u0000K\u019c\u0001\u0000\u0000\u0000"+ + "M\u019e\u0001\u0000\u0000\u0000O\u01a0\u0001\u0000\u0000\u0000Q\u01a2"+ + "\u0001\u0000\u0000\u0000S\u01a5\u0001\u0000\u0000\u0000U\u01a7\u0001\u0000"+ + "\u0000\u0000W\u01aa\u0001\u0000\u0000\u0000Y\u01ac\u0001\u0000\u0000\u0000"+ + "[\u01ae\u0001\u0000\u0000\u0000]\u01b0\u0001\u0000\u0000\u0000_\u01b3"+ + "\u0001\u0000\u0000\u0000a\u01b6\u0001\u0000\u0000\u0000c\u01b9\u0001\u0000"+ + "\u0000\u0000e\u01bb\u0001\u0000\u0000\u0000g\u01bd\u0001\u0000\u0000\u0000"+ + "i\u01c0\u0001\u0000\u0000\u0000k\u01c3\u0001\u0000\u0000\u0000m\u01c6"+ + "\u0001\u0000\u0000\u0000o\u01c9\u0001\u0000\u0000\u0000q\u01cc\u0001\u0000"+ + "\u0000\u0000s\u01cf\u0001\u0000\u0000\u0000u\u01d2\u0001\u0000\u0000\u0000"+ + "w\u01d4\u0001\u0000\u0000\u0000y\u01d7\u0001\u0000\u0000\u0000{\u01d9"+ + "\u0001\u0000\u0000\u0000}\u01dc\u0001\u0000\u0000\u0000\u007f\u01de\u0001"+ + "\u0000\u0000\u0000\u0081\u01e0\u0001\u0000\u0000\u0000\u0083\u01e2\u0001"+ + "\u0000\u0000\u0000\u0085\u01e4\u0001\u0000\u0000\u0000\u0087\u01e7\u0001"+ + "\u0000\u0000\u0000\u0089\u01ea\u0001\u0000\u0000\u0000\u008b\u01ee\u0001"+ + "\u0000\u0000\u0000\u008d\u01f0\u0001\u0000\u0000\u0000\u008f\u01fc\u0001"+ + "\u0000\u0000\u0000\u0091\u01fe\u0001\u0000\u0000\u0000\u0093\u0204\u0001"+ + "\u0000\u0000\u0000\u0095\u020a\u0001\u0000\u0000\u0000\u0097\u020d\u0001"+ + "\u0000\u0000\u0000\u0099\u0213\u0001\u0000\u0000\u0000\u009b\u0217\u0001"+ + "\u0000\u0000\u0000\u009d\u021e\u0001\u0000\u0000\u0000\u009f\u0225\u0001"+ + "\u0000\u0000\u0000\u00a1\u022b\u0001\u0000\u0000\u0000\u00a3\u0230\u0001"+ + "\u0000\u0000\u0000\u00a5\u0232\u0001\u0000\u0000\u0000\u00a7\u0238\u0001"+ + "\u0000\u0000\u0000\u00a9\u023d\u0001\u0000\u0000\u0000\u00ab\u023f\u0001"+ + "\u0000\u0000\u0000\u00ad\u0241\u0001\u0000\u0000\u0000\u00af\u0243\u0001"+ + "\u0000\u0000\u0000\u00b1\u0246\u0001\u0000\u0000\u0000\u00b3\u024a\u0001"+ + "\u0000\u0000\u0000\u00b5\u0251\u0001\u0000\u0000\u0000\u00b7\u0258\u0001"+ + "\u0000\u0000\u0000\u00b9\u025f\u0001\u0000\u0000\u0000\u00bb\u0261\u0001"+ + "\u0000\u0000\u0000\u00bd\u0263\u0001\u0000\u0000\u0000\u00bf\u0265\u0001"+ + "\u0000\u0000\u0000\u00c1\u026e\u0001\u0000\u0000\u0000\u00c3\u0278\u0001"+ + "\u0000\u0000\u0000\u00c5\u027a\u0001\u0000\u0000\u0000\u00c7\u0281\u0001"+ + "\u0000\u0000\u0000\u00c9\u0285\u0001\u0000\u0000\u0000\u00cb\u0288\u0001"+ + "\u0000\u0000\u0000\u00cd\u028e\u0001\u0000\u0000\u0000\u00cf\u0293\u0001"+ + "\u0000\u0000\u0000\u00d1\u0295\u0001\u0000\u0000\u0000\u00d3\u0298\u0001"+ + "\u0000\u0000\u0000\u00d5\u02a0\u0001\u0000\u0000\u0000\u00d7\u02a9\u0001"+ + "\u0000\u0000\u0000\u00d9\u02af\u0001\u0000\u0000\u0000\u00db\u02b2\u0001"+ + "\u0000\u0000\u0000\u00dd\u02b8\u0001\u0000\u0000\u0000\u00df\u02bb\u0001"+ + "\u0000\u0000\u0000\u00e1\u02c1\u0001\u0000\u0000\u0000\u00e3\u02c4\u0001"+ + "\u0000\u0000\u0000\u00e5\u02ca\u0001\u0000\u0000\u0000\u00e7\u00e8\u0005"+ + "/\u0000\u0000\u00e8\u00e9\u0005*\u0000\u0000\u00e9\u00ed\u0001\u0000\u0000"+ + "\u0000\u00ea\u00ec\t\u0000\u0000\u0000\u00eb\u00ea\u0001\u0000\u0000\u0000"+ + "\u00ec\u00ef\u0001\u0000\u0000\u0000\u00ed\u00ee\u0001\u0000\u0000\u0000"+ + "\u00ed\u00eb\u0001\u0000\u0000\u0000\u00ee\u00f0\u0001\u0000\u0000\u0000"+ + "\u00ef\u00ed\u0001\u0000\u0000\u0000\u00f0\u00f1\u0005*\u0000\u0000\u00f1"+ + "\u00f2\u0005/\u0000\u0000\u00f2\u00f3\u0001\u0000\u0000\u0000\u00f3\u00f4"+ + "\u0006\u0000\u0000\u0000\u00f4\u0004\u0001\u0000\u0000\u0000\u00f5\u00f6"+ + "\u0005/\u0000\u0000\u00f6\u00f7\u0005/\u0000\u0000\u00f7\u00fb\u0001\u0000"+ + "\u0000\u0000\u00f8\u00fa\b\u0000\u0000\u0000\u00f9\u00f8\u0001\u0000\u0000"+ + "\u0000\u00fa\u00fd\u0001\u0000\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000"+ + "\u0000\u00fb\u00fc\u0001\u0000\u0000\u0000\u00fc\u00fe\u0001\u0000\u0000"+ + "\u0000\u00fd\u00fb\u0001\u0000\u0000\u0000\u00fe\u00ff\u0006\u0001\u0000"+ + "\u0000\u00ff\u0006\u0001\u0000\u0000\u0000\u0100\u0101\u0005c\u0000\u0000"+ + "\u0101\u0102\u0005o\u0000\u0000\u0102\u0103\u0005n\u0000\u0000\u0103\u0104"+ + "\u0005s\u0000\u0000\u0104\u0105\u0005t\u0000\u0000\u0105\b\u0001\u0000"+ + "\u0000\u0000\u0106\u0107\u0005v\u0000\u0000\u0107\u0108\u0005a\u0000\u0000"+ + "\u0108\u0109\u0005r\u0000\u0000\u0109\n\u0001\u0000\u0000\u0000\u010a"+ + "\u010b\u0005a\u0000\u0000\u010b\u010c\u0005s\u0000\u0000\u010c\f\u0001"+ + "\u0000\u0000\u0000\u010d\u010e\u0005.\u0000\u0000\u010e\u010f\u0005.\u0000"+ + "\u0000\u010f\u0110\u0005.\u0000\u0000\u0110\u000e\u0001\u0000\u0000\u0000"+ + "\u0111\u0112\u0005s\u0000\u0000\u0112\u0113\u0005w\u0000\u0000\u0113\u0114"+ + "\u0005i\u0000\u0000\u0114\u0115\u0005t\u0000\u0000\u0115\u0116\u0005c"+ + "\u0000\u0000\u0116\u0117\u0005h\u0000\u0000\u0117\u0010\u0001\u0000\u0000"+ + "\u0000\u0118\u0119\u0005c\u0000\u0000\u0119\u011a\u0005a\u0000\u0000\u011a"+ + "\u011b\u0005s\u0000\u0000\u011b\u011c\u0005e\u0000\u0000\u011c\u0012\u0001"+ + "\u0000\u0000\u0000\u011d\u011e\u0005d\u0000\u0000\u011e\u011f\u0005e\u0000"+ + "\u0000\u011f\u0120\u0005f\u0000\u0000\u0120\u0121\u0005a\u0000\u0000\u0121"+ + "\u0122\u0005u\u0000\u0000\u0122\u0123\u0005l\u0000\u0000\u0123\u0124\u0005"+ + "t\u0000\u0000\u0124\u0014\u0001\u0000\u0000\u0000\u0125\u0126\u0005b\u0000"+ + "\u0000\u0126\u0127\u0005r\u0000\u0000\u0127\u0128\u0005e\u0000\u0000\u0128"+ + "\u0129\u0005a\u0000\u0000\u0129\u012a\u0005k\u0000\u0000\u012a\u0016\u0001"+ + "\u0000\u0000\u0000\u012b\u012c\u0005c\u0000\u0000\u012c\u012d\u0005o\u0000"+ + "\u0000\u012d\u012e\u0005n\u0000\u0000\u012e\u012f\u0005t\u0000\u0000\u012f"+ + "\u0130\u0005i\u0000\u0000\u0130\u0131\u0005n\u0000\u0000\u0131\u0132\u0005"+ + "u\u0000\u0000\u0132\u0133\u0005e\u0000\u0000\u0133\u0018\u0001\u0000\u0000"+ + "\u0000\u0134\u0135\u0005d\u0000\u0000\u0135\u0136\u0005o\u0000\u0000\u0136"+ + "\u001a\u0001\u0000\u0000\u0000\u0137\u0138\u0005w\u0000\u0000\u0138\u0139"+ + "\u0005h\u0000\u0000\u0139\u013a\u0005i\u0000\u0000\u013a\u013b\u0005l"+ + "\u0000\u0000\u013b\u013c\u0005e\u0000\u0000\u013c\u001c\u0001\u0000\u0000"+ + "\u0000\u013d\u013e\u0005i\u0000\u0000\u013e\u013f\u0005f\u0000\u0000\u013f"+ + "\u001e\u0001\u0000\u0000\u0000\u0140\u0141\u0005e\u0000\u0000\u0141\u0142"+ + "\u0005l\u0000\u0000\u0142\u0143\u0005s\u0000\u0000\u0143\u0144\u0005e"+ + "\u0000\u0000\u0144 \u0001\u0000\u0000\u0000\u0145\u0146\u0005f\u0000\u0000"+ + "\u0146\u0147\u0005o\u0000\u0000\u0147\u0148\u0005r\u0000\u0000\u0148\""+ + "\u0001\u0000\u0000\u0000\u0149\u014a\u0005e\u0000\u0000\u014a\u014b\u0005"+ + "n\u0000\u0000\u014b\u014c\u0005u\u0000\u0000\u014c\u014d\u0005m\u0000"+ + "\u0000\u014d$\u0001\u0000\u0000\u0000\u014e\u014f\u0005d\u0000\u0000\u014f"+ + "\u0150\u0005e\u0000\u0000\u0150\u0151\u0005f\u0000\u0000\u0151&\u0001"+ + "\u0000\u0000\u0000\u0152\u0153\u0005r\u0000\u0000\u0153\u0154\u0005e\u0000"+ + "\u0000\u0154\u0155\u0005t\u0000\u0000\u0155\u0156\u0005u\u0000\u0000\u0156"+ + "\u0157\u0005r\u0000\u0000\u0157\u0158\u0005n\u0000\u0000\u0158(\u0001"+ + "\u0000\u0000\u0000\u0159\u015a\u0005c\u0000\u0000\u015a\u015b\u0005a\u0000"+ + "\u0000\u015b\u015c\u0005l\u0000\u0000\u015c\u015d\u0005l\u0000\u0000\u015d"+ + "*\u0001\u0000\u0000\u0000\u015e\u015f\u0005-\u0000\u0000\u015f\u0160\u0005"+ + ">\u0000\u0000\u0160,\u0001\u0000\u0000\u0000\u0161\u0162\u0005t\u0000"+ + "\u0000\u0162\u0163\u0005r\u0000\u0000\u0163\u0164\u0005u\u0000\u0000\u0164"+ + "\u0165\u0005e\u0000\u0000\u0165.\u0001\u0000\u0000\u0000\u0166\u0167\u0005"+ + "f\u0000\u0000\u0167\u0168\u0005a\u0000\u0000\u0168\u0169\u0005l\u0000"+ + "\u0000\u0169\u016a\u0005s\u0000\u0000\u016a\u016b\u0005e\u0000\u0000\u016b"+ + "0\u0001\u0000\u0000\u0000\u016c\u016d\u0005t\u0000\u0000\u016d\u016e\u0005"+ + "y\u0000\u0000\u016e\u016f\u0005p\u0000\u0000\u016f\u0170\u0005e\u0000"+ + "\u0000\u0170\u0171\u0005o\u0000\u0000\u0171\u0172\u0005f\u0000\u0000\u0172"+ + "2\u0001\u0000\u0000\u0000\u0173\u0174\u0005v\u0000\u0000\u0174\u0175\u0005"+ + "o\u0000\u0000\u0175\u0176\u0005i\u0000\u0000\u0176\u0177\u0005d\u0000"+ + "\u0000\u01774\u0001\u0000\u0000\u0000\u0178\u0179\u0005n\u0000\u0000\u0179"+ + "\u017a\u0005u\u0000\u0000\u017a\u017b\u0005l\u0000\u0000\u017b\u017c\u0005"+ + "l\u0000\u0000\u017c6\u0001\u0000\u0000\u0000\u017d\u017e\u0005u\u0000"+ + "\u0000\u017e\u017f\u0005n\u0000\u0000\u017f\u0180\u0005d\u0000\u0000\u0180"+ + "\u0181\u0005e\u0000\u0000\u0181\u0182\u0005f\u0000\u0000\u0182\u0183\u0005"+ + "i\u0000\u0000\u0183\u0184\u0005n\u0000\u0000\u0184\u0185\u0005e\u0000"+ + "\u0000\u0185\u0186\u0005d\u0000\u0000\u01868\u0001\u0000\u0000\u0000\u0187"+ + "\u0188\u0005,\u0000\u0000\u0188:\u0001\u0000\u0000\u0000\u0189\u018a\u0005"+ + ";\u0000\u0000\u018a<\u0001\u0000\u0000\u0000\u018b\u018c\u0005?\u0000"+ + "\u0000\u018c>\u0001\u0000\u0000\u0000\u018d\u018e\u0005:\u0000\u0000\u018e"+ + "@\u0001\u0000\u0000\u0000\u018f\u0190\u0005(\u0000\u0000\u0190B\u0001"+ + "\u0000\u0000\u0000\u0191\u0192\u0005)\u0000\u0000\u0192D\u0001\u0000\u0000"+ + "\u0000\u0193\u0194\u0005[\u0000\u0000\u0194F\u0001\u0000\u0000\u0000\u0195"+ + "\u0196\u0005]\u0000\u0000\u0196H\u0001\u0000\u0000\u0000\u0197\u0198\u0004"+ + "#\u0000\u0000\u0198\u0199\u0005}\u0000\u0000\u0199\u019a\u0001\u0000\u0000"+ + "\u0000\u019a\u019b\u0006#\u0001\u0000\u019bJ\u0001\u0000\u0000\u0000\u019c"+ + "\u019d\u0005{\u0000\u0000\u019dL\u0001\u0000\u0000\u0000\u019e\u019f\u0005"+ + "}\u0000\u0000\u019fN\u0001\u0000\u0000\u0000\u01a0\u01a1\u0005+\u0000"+ + "\u0000\u01a1P\u0001\u0000\u0000\u0000\u01a2\u01a3\u0005+\u0000\u0000\u01a3"+ + "\u01a4\u0005+\u0000\u0000\u01a4R\u0001\u0000\u0000\u0000\u01a5\u01a6\u0005"+ + "-\u0000\u0000\u01a6T\u0001\u0000\u0000\u0000\u01a7\u01a8\u0005-\u0000"+ + "\u0000\u01a8\u01a9\u0005-\u0000\u0000\u01a9V\u0001\u0000\u0000\u0000\u01aa"+ + "\u01ab\u0005*\u0000\u0000\u01abX\u0001\u0000\u0000\u0000\u01ac\u01ad\u0005"+ + "/\u0000\u0000\u01adZ\u0001\u0000\u0000\u0000\u01ae\u01af\u0005%\u0000"+ + "\u0000\u01af\\\u0001\u0000\u0000\u0000\u01b0\u01b1\u0005*\u0000\u0000"+ + "\u01b1\u01b2\u0005*\u0000\u0000\u01b2^\u0001\u0000\u0000\u0000\u01b3\u01b4"+ + "\u0005&\u0000\u0000\u01b4\u01b5\u0005&\u0000\u0000\u01b5`\u0001\u0000"+ + "\u0000\u0000\u01b6\u01b7\u0005|\u0000\u0000\u01b7\u01b8\u0005|\u0000\u0000"+ + "\u01b8b\u0001\u0000\u0000\u0000\u01b9\u01ba\u0005!\u0000\u0000\u01bad"+ + "\u0001\u0000\u0000\u0000\u01bb\u01bc\u0005=\u0000\u0000\u01bcf\u0001\u0000"+ + "\u0000\u0000\u01bd\u01be\u0005+\u0000\u0000\u01be\u01bf\u0005=\u0000\u0000"+ + "\u01bfh\u0001\u0000\u0000\u0000\u01c0\u01c1\u0005-\u0000\u0000\u01c1\u01c2"+ + "\u0005=\u0000\u0000\u01c2j\u0001\u0000\u0000\u0000\u01c3\u01c4\u0005*"+ + "\u0000\u0000\u01c4\u01c5\u0005=\u0000\u0000\u01c5l\u0001\u0000\u0000\u0000"+ + "\u01c6\u01c7\u0005/\u0000\u0000\u01c7\u01c8\u0005=\u0000\u0000\u01c8n"+ + "\u0001\u0000\u0000\u0000\u01c9\u01ca\u0005%\u0000\u0000\u01ca\u01cb\u0005"+ + "=\u0000\u0000\u01cbp\u0001\u0000\u0000\u0000\u01cc\u01cd\u0005=\u0000"+ + "\u0000\u01cd\u01ce\u0005=\u0000\u0000\u01cer\u0001\u0000\u0000\u0000\u01cf"+ + "\u01d0\u0005!\u0000\u0000\u01d0\u01d1\u0005=\u0000\u0000\u01d1t\u0001"+ + "\u0000\u0000\u0000\u01d2\u01d3\u0005<\u0000\u0000\u01d3v\u0001\u0000\u0000"+ + "\u0000\u01d4\u01d5\u0005<\u0000\u0000\u01d5\u01d6\u0005=\u0000\u0000\u01d6"+ + "x\u0001\u0000\u0000\u0000\u01d7\u01d8\u0005>\u0000\u0000\u01d8z\u0001"+ + "\u0000\u0000\u0000\u01d9\u01da\u0005>\u0000\u0000\u01da\u01db\u0005=\u0000"+ + "\u0000\u01db|\u0001\u0000\u0000\u0000\u01dc\u01dd\u0005&\u0000\u0000\u01dd"+ + "~\u0001\u0000\u0000\u0000\u01de\u01df\u0005|\u0000\u0000\u01df\u0080\u0001"+ + "\u0000\u0000\u0000\u01e0\u01e1\u0005^\u0000\u0000\u01e1\u0082\u0001\u0000"+ + "\u0000\u0000\u01e2\u01e3\u0005~\u0000\u0000\u01e3\u0084\u0001\u0000\u0000"+ + "\u0000\u01e4\u01e5\u0005<\u0000\u0000\u01e5\u01e6\u0005<\u0000\u0000\u01e6"+ + "\u0086\u0001\u0000\u0000\u0000\u01e7\u01e8\u0005>\u0000\u0000\u01e8\u01e9"+ + "\u0005>\u0000\u0000\u01e9\u0088\u0001\u0000\u0000\u0000\u01ea\u01eb\u0005"+ + ">\u0000\u0000\u01eb\u01ec\u0005>\u0000\u0000\u01ec\u01ed\u0005>\u0000"+ + "\u0000\u01ed\u008a\u0001\u0000\u0000\u0000\u01ee\u01ef\u0005.\u0000\u0000"+ + "\u01ef\u008c\u0001\u0000\u0000\u0000\u01f0\u01f5\u0003\u00abT\u0000\u01f1"+ + "\u01f4\u0003\u00abT\u0000\u01f2\u01f4\u0003\u00afV\u0000\u01f3\u01f1\u0001"+ + "\u0000\u0000\u0000\u01f3\u01f2\u0001\u0000\u0000\u0000\u01f4\u01f7\u0001"+ + "\u0000\u0000\u0000\u01f5\u01f3\u0001\u0000\u0000\u0000\u01f5\u01f6\u0001"+ + "\u0000\u0000\u0000\u01f6\u008e\u0001\u0000\u0000\u0000\u01f7\u01f5\u0001"+ + "\u0000\u0000\u0000\u01f8\u01fd\u0003\u00b1W\u0000\u01f9\u01fd\u0003\u00b5"+ + "Y\u0000\u01fa\u01fd\u0003\u00b7Z\u0000\u01fb\u01fd\u0003\u00b3X\u0000"+ + "\u01fc\u01f8\u0001\u0000\u0000\u0000\u01fc\u01f9\u0001\u0000\u0000\u0000"+ + "\u01fc\u01fa\u0001\u0000\u0000\u0000\u01fc\u01fb\u0001\u0000\u0000\u0000"+ + "\u01fd\u0090\u0001\u0000\u0000\u0000\u01fe\u0200\u0005\'\u0000\u0000\u01ff"+ + "\u0201\u0003\u00dfn\u0000\u0200\u01ff\u0001\u0000\u0000\u0000\u0200\u0201"+ + "\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000\u0000\u0202\u0203"+ + "\u0005\'\u0000\u0000\u0203\u0092\u0001\u0000\u0000\u0000\u0204\u0206\u0005"+ + "\"\u0000\u0000\u0205\u0207\u0003\u00e3p\u0000\u0206\u0205\u0001\u0000"+ + "\u0000\u0000\u0206\u0207\u0001\u0000\u0000\u0000\u0207\u0208\u0001\u0000"+ + "\u0000\u0000\u0208\u0209\u0005\"\u0000\u0000\u0209\u0094\u0001\u0000\u0000"+ + "\u0000\u020a\u020b\u0003\u00c1_\u0000\u020b\u0096\u0001\u0000\u0000\u0000"+ + "\u020c\u020e\u0007\u0001\u0000\u0000\u020d\u020c\u0001\u0000\u0000\u0000"+ + "\u020e\u020f\u0001\u0000\u0000\u0000\u020f\u020d\u0001\u0000\u0000\u0000"+ + "\u020f\u0210\u0001\u0000\u0000\u0000\u0210\u0211\u0001\u0000\u0000\u0000"+ + "\u0211\u0212\u0006J\u0002\u0000\u0212\u0098\u0001\u0000\u0000\u0000\u0213"+ + "\u0214\u0007\u0000\u0000\u0000\u0214\u0215\u0001\u0000\u0000\u0000\u0215"+ + "\u0216\u0006K\u0002\u0000\u0216\u009a\u0001\u0000\u0000\u0000\u0217\u0218"+ + "\u0005f\u0000\u0000\u0218\u0219\u0005\'\u0000\u0000\u0219\u021a\u0001"+ + "\u0000\u0000\u0000\u021a\u021b\u0006L\u0003\u0000\u021b\u021c\u0001\u0000"+ + "\u0000\u0000\u021c\u021d\u0006L\u0004\u0000\u021d\u009c\u0001\u0000\u0000"+ + "\u0000\u021e\u021f\u0005f\u0000\u0000\u021f\u0220\u0005\"\u0000\u0000"+ + "\u0220\u0221\u0001\u0000\u0000\u0000\u0221\u0222\u0006M\u0005\u0000\u0222"+ + "\u0223\u0001\u0000\u0000\u0000\u0223\u0224\u0006M\u0006\u0000\u0224\u009e"+ + "\u0001\u0000\u0000\u0000\u0225\u0226\u0004N\u0001\u0000\u0226\u0227\u0005"+ + "{\u0000\u0000\u0227\u0228\u0001\u0000\u0000\u0000\u0228\u0229\u0006N\u0007"+ + "\u0000\u0229\u022a\u0006N\b\u0000\u022a\u00a0\u0001\u0000\u0000\u0000"+ + "\u022b\u022c\u0005\'\u0000\u0000\u022c\u022d\u0006O\t\u0000\u022d\u022e"+ + "\u0001\u0000\u0000\u0000\u022e\u022f\u0006O\u0001\u0000\u022f\u00a2\u0001"+ + "\u0000\u0000\u0000\u0230\u0231\u0003\u00d7j\u0000\u0231\u00a4\u0001\u0000"+ + "\u0000\u0000\u0232\u0233\u0004Q\u0002\u0000\u0233\u0234\u0005{\u0000\u0000"+ + "\u0234\u0235\u0001\u0000\u0000\u0000\u0235\u0236\u0006Q\u0007\u0000\u0236"+ + "\u0237\u0006Q\b\u0000\u0237\u00a6\u0001\u0000\u0000\u0000\u0238\u0239"+ + "\u0005\"\u0000\u0000\u0239\u023a\u0006R\n\u0000\u023a\u023b\u0001\u0000"+ + "\u0000\u0000\u023b\u023c\u0006R\u0001\u0000\u023c\u00a8\u0001\u0000\u0000"+ + "\u0000\u023d\u023e\u0003\u00dbl\u0000\u023e\u00aa\u0001\u0000\u0000\u0000"+ + "\u023f\u0240\u0003\u00adU\u0000\u0240\u00ac\u0001\u0000\u0000\u0000\u0241"+ + "\u0242\u0007\u0002\u0000\u0000\u0242\u00ae\u0001\u0000\u0000\u0000\u0243"+ + "\u0244\u0007\u0003\u0000\u0000\u0244\u00b0\u0001\u0000\u0000\u0000\u0245"+ + "\u0247\u0003\u00afV\u0000\u0246\u0245\u0001\u0000\u0000\u0000\u0247\u0248"+ + "\u0001\u0000\u0000\u0000\u0248\u0246\u0001\u0000\u0000\u0000\u0248\u0249"+ + "\u0001\u0000\u0000\u0000\u0249\u00b2\u0001\u0000\u0000\u0000\u024a\u024b"+ + "\u00050\u0000\u0000\u024b\u024d\u0007\u0004\u0000\u0000\u024c\u024e\u0003"+ + "\u00bb\\\u0000\u024d\u024c\u0001\u0000\u0000\u0000\u024e\u024f\u0001\u0000"+ + "\u0000\u0000\u024f\u024d\u0001\u0000\u0000\u0000\u024f\u0250\u0001\u0000"+ + "\u0000\u0000\u0250\u00b4\u0001\u0000\u0000\u0000\u0251\u0252\u00050\u0000"+ + "\u0000\u0252\u0254\u0007\u0005\u0000\u0000\u0253\u0255\u0003\u00bd]\u0000"+ + "\u0254\u0253\u0001\u0000\u0000\u0000\u0255\u0256\u0001\u0000\u0000\u0000"+ + "\u0256\u0254\u0001\u0000\u0000\u0000\u0256\u0257\u0001\u0000\u0000\u0000"+ + "\u0257\u00b6\u0001\u0000\u0000\u0000\u0258\u0259\u00050\u0000\u0000\u0259"+ + "\u025b\u0007\u0006\u0000\u0000\u025a\u025c\u0003\u00bf^\u0000\u025b\u025a"+ + "\u0001\u0000\u0000\u0000\u025c\u025d\u0001\u0000\u0000\u0000\u025d\u025b"+ + "\u0001\u0000\u0000\u0000\u025d\u025e\u0001\u0000\u0000\u0000\u025e\u00b8"+ + "\u0001\u0000\u0000\u0000\u025f\u0260\u0007\u0007\u0000\u0000\u0260\u00ba"+ + "\u0001\u0000\u0000\u0000\u0261\u0262\u0007\b\u0000\u0000\u0262\u00bc\u0001"+ + "\u0000\u0000\u0000\u0263\u0264\u0007\t\u0000\u0000\u0264\u00be\u0001\u0000"+ + "\u0000\u0000\u0265\u0266\u0007\n\u0000\u0000\u0266\u00c0\u0001\u0000\u0000"+ + "\u0000\u0267\u0269\u0003\u00c3`\u0000\u0268\u026a\u0003\u00c5a\u0000\u0269"+ + "\u0268\u0001\u0000\u0000\u0000\u0269\u026a\u0001\u0000\u0000\u0000\u026a"+ + "\u026f\u0001\u0000\u0000\u0000\u026b\u026c\u0003\u00c7b\u0000\u026c\u026d"+ + "\u0003\u00c5a\u0000\u026d\u026f\u0001\u0000\u0000\u0000\u026e\u0267\u0001"+ + "\u0000\u0000\u0000\u026e\u026b\u0001\u0000\u0000\u0000\u026f\u00c2\u0001"+ + "\u0000\u0000\u0000\u0270\u0272\u0003\u00c7b\u0000\u0271\u0270\u0001\u0000"+ + "\u0000\u0000\u0271\u0272\u0001\u0000\u0000\u0000\u0272\u0273\u0001\u0000"+ + "\u0000\u0000\u0273\u0274\u0005.\u0000\u0000\u0274\u0279\u0003\u00c7b\u0000"+ + "\u0275\u0276\u0003\u00c7b\u0000\u0276\u0277\u0005.\u0000\u0000\u0277\u0279"+ + "\u0001\u0000\u0000\u0000\u0278\u0271\u0001\u0000\u0000\u0000\u0278\u0275"+ + "\u0001\u0000\u0000\u0000\u0279\u00c4\u0001\u0000\u0000\u0000\u027a\u027c"+ + "\u0007\u000b\u0000\u0000\u027b\u027d\u0003\u00c9c\u0000\u027c\u027b\u0001"+ + "\u0000\u0000\u0000\u027c\u027d\u0001\u0000\u0000\u0000\u027d\u027e\u0001"+ + "\u0000\u0000\u0000\u027e\u027f\u0003\u00c7b\u0000\u027f\u00c6\u0001\u0000"+ + "\u0000\u0000\u0280\u0282\u0003\u00afV\u0000\u0281\u0280\u0001\u0000\u0000"+ + "\u0000\u0282\u0283\u0001\u0000\u0000\u0000\u0283\u0281\u0001\u0000\u0000"+ + "\u0000\u0283\u0284\u0001\u0000\u0000\u0000\u0284\u00c8\u0001\u0000\u0000"+ + "\u0000\u0285\u0286\u0007\f\u0000\u0000\u0286\u00ca\u0001\u0000\u0000\u0000"+ + "\u0287\u0289\u0003\u00cde\u0000\u0288\u0287\u0001\u0000\u0000\u0000\u0289"+ + "\u028a\u0001\u0000\u0000\u0000\u028a\u0288\u0001\u0000\u0000\u0000\u028a"+ + "\u028b\u0001\u0000\u0000\u0000\u028b\u00cc\u0001\u0000\u0000\u0000\u028c"+ + "\u028f\b\r\u0000\u0000\u028d\u028f\u0003\u00cff\u0000\u028e\u028c\u0001"+ + "\u0000\u0000\u0000\u028e\u028d\u0001\u0000\u0000\u0000\u028f\u00ce\u0001"+ + "\u0000\u0000\u0000\u0290\u0294\u0003\u00d1g\u0000\u0291\u0294\u0003\u00d3"+ + "h\u0000\u0292\u0294\u0003\u00d5i\u0000\u0293\u0290\u0001\u0000\u0000\u0000"+ + "\u0293\u0291\u0001\u0000\u0000\u0000\u0293\u0292\u0001\u0000\u0000\u0000"+ + "\u0294\u00d0\u0001\u0000\u0000\u0000\u0295\u0296\u0005\\\u0000\u0000\u0296"+ + "\u0297\u0007\u000e\u0000\u0000\u0297\u00d2\u0001\u0000\u0000\u0000\u0298"+ + "\u0299\u0005\\\u0000\u0000\u0299\u029b\u0003\u00bd]\u0000\u029a\u029c"+ + "\u0003\u00bd]\u0000\u029b\u029a\u0001\u0000\u0000\u0000\u029b\u029c\u0001"+ + "\u0000\u0000\u0000\u029c\u029e\u0001\u0000\u0000\u0000\u029d\u029f\u0003"+ + "\u00bd]\u0000\u029e\u029d\u0001\u0000\u0000\u0000\u029e\u029f\u0001\u0000"+ + "\u0000\u0000\u029f\u00d4\u0001\u0000\u0000\u0000\u02a0\u02a1\u0005\\\u0000"+ + "\u0000\u02a1\u02a2\u0005x\u0000\u0000\u02a2\u02a4\u0001\u0000\u0000\u0000"+ + "\u02a3\u02a5\u0003\u00bf^\u0000\u02a4\u02a3\u0001\u0000\u0000\u0000\u02a5"+ + "\u02a6\u0001\u0000\u0000\u0000\u02a6\u02a4\u0001\u0000\u0000\u0000\u02a6"+ + "\u02a7\u0001\u0000\u0000\u0000\u02a7\u00d6\u0001\u0000\u0000\u0000\u02a8"+ + "\u02aa\u0003\u00d9k\u0000\u02a9\u02a8\u0001\u0000\u0000\u0000\u02aa\u02ab"+ + "\u0001\u0000\u0000\u0000\u02ab\u02a9\u0001\u0000\u0000\u0000\u02ab\u02ac"+ + "\u0001\u0000\u0000\u0000\u02ac\u00d8\u0001\u0000\u0000\u0000\u02ad\u02b0"+ + "\b\u000f\u0000\u0000\u02ae\u02b0\u0003\u00cff\u0000\u02af\u02ad\u0001"+ + "\u0000\u0000\u0000\u02af\u02ae\u0001\u0000\u0000\u0000\u02b0\u00da\u0001"+ + "\u0000\u0000\u0000\u02b1\u02b3\u0003\u00ddm\u0000\u02b2\u02b1\u0001\u0000"+ + "\u0000\u0000\u02b3\u02b4\u0001\u0000\u0000\u0000\u02b4\u02b2\u0001\u0000"+ + "\u0000\u0000\u02b4\u02b5\u0001\u0000\u0000\u0000\u02b5\u00dc\u0001\u0000"+ + "\u0000\u0000\u02b6\u02b9\b\u0010\u0000\u0000\u02b7\u02b9\u0003\u00cff"+ + "\u0000\u02b8\u02b6\u0001\u0000\u0000\u0000\u02b8\u02b7\u0001\u0000\u0000"+ + "\u0000\u02b9\u00de\u0001\u0000\u0000\u0000\u02ba\u02bc\u0003\u00e1o\u0000"+ + "\u02bb\u02ba\u0001\u0000\u0000\u0000\u02bc\u02bd\u0001\u0000\u0000\u0000"+ + "\u02bd\u02bb\u0001\u0000\u0000\u0000\u02bd\u02be\u0001\u0000\u0000\u0000"+ + "\u02be\u00e0\u0001\u0000\u0000\u0000\u02bf\u02c2\b\r\u0000\u0000\u02c0"+ + "\u02c2\u0003\u00cff\u0000\u02c1\u02bf\u0001\u0000\u0000\u0000\u02c1\u02c0"+ + "\u0001\u0000\u0000\u0000\u02c2\u00e2\u0001\u0000\u0000\u0000\u02c3\u02c5"+ + "\u0003\u00e5q\u0000\u02c4\u02c3\u0001\u0000\u0000\u0000\u02c5\u02c6\u0001"+ + "\u0000\u0000\u0000\u02c6\u02c4\u0001\u0000\u0000\u0000\u02c6\u02c7\u0001"+ + "\u0000\u0000\u0000\u02c7\u00e4\u0001\u0000\u0000\u0000\u02c8\u02cb\b\u0011"+ + "\u0000\u0000\u02c9\u02cb\u0003\u00cff\u0000\u02ca\u02c8\u0001\u0000\u0000"+ + "\u0000\u02ca\u02c9\u0001\u0000\u0000\u0000\u02cb\u00e6\u0001\u0000\u0000"+ + "\u0000#\u0000\u0001\u0002\u00ed\u00fb\u01f3\u01f5\u01fc\u0200\u0206\u020f"+ + "\u0248\u024f\u0256\u025d\u0269\u026e\u0271\u0278\u027c\u0283\u028a\u028e"+ + "\u0293\u029b\u029e\u02a6\u02ab\u02af\u02b4\u02b8\u02bd\u02c1\u02c6\u02ca"+ + "\u000b\u0000\u0002\u0000\u0004\u0000\u0000\u0000\u0001\u0000\u0001L\u0000"+ + "\u0005\u0001\u0000\u0001M\u0001\u0005\u0002\u0000\u0007\u0001\u0000\u0005"+ + "\u0000\u0000\u0001O\u0002\u0001R\u0003"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/kipper/core/.antlr/KipperLexer.tokens b/kipper/core/.antlr/KipperLexer.tokens new file mode 100644 index 000000000..a584d5dce --- /dev/null +++ b/kipper/core/.antlr/KipperLexer.tokens @@ -0,0 +1,149 @@ +FStringExpStart=1 +BlockComment=2 +LineComment=3 +Const=4 +Var=5 +As=6 +Spread=7 +Switch=8 +Case=9 +Default=10 +Break=11 +Continue=12 +Do=13 +While=14 +If=15 +Else=16 +For=17 +Enum=18 +DefFunc=19 +Return=20 +CallFunc=21 +RetIndicator=22 +True=23 +False=24 +Typeof=25 +Void=26 +Null=27 +Undefined=28 +Comma=29 +SemiColon=30 +QuestionMark=31 +Colon=32 +LeftParen=33 +RightParen=34 +LeftBracket=35 +RightBracket=36 +FStringExpEnd=37 +LeftBrace=38 +RightBrace=39 +Plus=40 +PlusPlus=41 +Minus=42 +MinusMinus=43 +Star=44 +Div=45 +Mod=46 +PowerTo=47 +AndAnd=48 +OrOr=49 +Not=50 +Assign=51 +PlusAssign=52 +MinusAssign=53 +StarAssign=54 +DivAssign=55 +ModAssign=56 +Equal=57 +NotEqual=58 +Less=59 +LessEqual=60 +Greater=61 +GreaterEqual=62 +BitwiseAnd=63 +BitwiseOr=64 +BitwiseXor=65 +BitwiseNot=66 +BitwiseLeftShift=67 +BitwiseRightShift=68 +BitwiseZeroFillRightShift=69 +Dot=70 +Identifier=71 +IntegerConstant=72 +SingleQuoteStringLiteral=73 +DoubleQuoteStringLiteral=74 +FloatingConstant=75 +Whitespace=76 +Newline=77 +FStringSingleQuoteStart=78 +FStringDoubleQuoteStart=79 +FStringSingleQuoteEnd=80 +FStringSingleQuoteAtom=81 +FStringDoubleQuoteEnd=82 +FStringDoubleQuoteAtom=83 +'const'=4 +'var'=5 +'as'=6 +'...'=7 +'switch'=8 +'case'=9 +'default'=10 +'break'=11 +'continue'=12 +'do'=13 +'while'=14 +'if'=15 +'else'=16 +'for'=17 +'enum'=18 +'def'=19 +'return'=20 +'call'=21 +'->'=22 +'true'=23 +'false'=24 +'typeof'=25 +'void'=26 +'null'=27 +'undefined'=28 +','=29 +';'=30 +'?'=31 +':'=32 +'('=33 +')'=34 +'['=35 +']'=36 +'{'=38 +'}'=39 +'+'=40 +'++'=41 +'-'=42 +'--'=43 +'*'=44 +'/'=45 +'%'=46 +'**'=47 +'&&'=48 +'||'=49 +'!'=50 +'='=51 +'+='=52 +'-='=53 +'*='=54 +'/='=55 +'%='=56 +'=='=57 +'!='=58 +'<'=59 +'<='=60 +'>'=61 +'>='=62 +'&'=63 +'|'=64 +'^'=65 +'~'=66 +'<<'=67 +'>>'=68 +'>>>'=69 +'.'=70 diff --git a/kipper/core/.antlr/KipperParser.interp b/kipper/core/.antlr/KipperParser.interp new file mode 100644 index 000000000..321f0b355 --- /dev/null +++ b/kipper/core/.antlr/KipperParser.interp @@ -0,0 +1,248 @@ +token literal names: +null +null +null +null +'const' +'var' +'as' +'...' +'switch' +'case' +'default' +'break' +'continue' +'do' +'while' +'if' +'else' +'for' +'enum' +'def' +'return' +'call' +'->' +'true' +'false' +'typeof' +'void' +'null' +'undefined' +',' +';' +'?' +':' +'(' +')' +'[' +']' +null +'{' +'}' +'+' +'++' +'-' +'--' +'*' +'/' +'%' +'**' +'&&' +'||' +'!' +'=' +'+=' +'-=' +'*=' +'/=' +'%=' +'==' +'!=' +'<' +'<=' +'>' +'>=' +'&' +'|' +'^' +'~' +'<<' +'>>' +'>>>' +'.' +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +FStringExpStart +BlockComment +LineComment +Const +Var +As +Spread +Switch +Case +Default +Break +Continue +Do +While +If +Else +For +Enum +DefFunc +Return +CallFunc +RetIndicator +True +False +Typeof +Void +Null +Undefined +Comma +SemiColon +QuestionMark +Colon +LeftParen +RightParen +LeftBracket +RightBracket +FStringExpEnd +LeftBrace +RightBrace +Plus +PlusPlus +Minus +MinusMinus +Star +Div +Mod +PowerTo +AndAnd +OrOr +Not +Assign +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +Equal +NotEqual +Less +LessEqual +Greater +GreaterEqual +BitwiseAnd +BitwiseOr +BitwiseXor +BitwiseNot +BitwiseLeftShift +BitwiseRightShift +BitwiseZeroFillRightShift +Dot +Identifier +IntegerConstant +SingleQuoteStringLiteral +DoubleQuoteStringLiteral +FloatingConstant +Whitespace +Newline +FStringSingleQuoteStart +FStringDoubleQuoteStart +FStringSingleQuoteEnd +FStringSingleQuoteAtom +FStringDoubleQuoteEnd +FStringDoubleQuoteAtom + +rule names: +compilationUnit +translationUnit +externalItem +blockItemList +blockItem +declaration +functionDeclaration +variableDeclaration +storageTypeSpecifier +declarator +directDeclarator +initDeclarator +parameterList +parameterDeclaration +initializer +statement +compoundStatement +expressionStatement +selectionStatement +ifStatement +switchStatement +switchLabeledStatement +iterationStatement +forLoopIterationStatement +whileLoopIterationStatement +doWhileLoopIterationStatement +jumpStatement +returnStatement +primaryExpression +tangledPrimaryExpression +boolPrimaryExpression +identifierPrimaryExpression +identifier +stringPrimaryExpression +fStringPrimaryExpression +fStringSingleQuoteAtom +fStringDoubleQuoteAtom +numberPrimaryExpression +arrayPrimaryExpression +voidOrNullOrUndefinedPrimaryExpression +computedPrimaryExpression +argumentExpressionList +dotNotation +bracketNotation +sliceNotation +postfixExpression +incrementOrDecrementPostfixExpression +unaryExpression +incrementOrDecrementUnaryExpression +operatorModifiedUnaryExpression +incrementOrDecrementOperator +unaryOperator +castOrConvertExpression +multiplicativeExpression +additiveExpression +relationalExpression +equalityExpression +bitwiseAndExpression +bitwiseXorExpression +bitwiseOrExpression +logicalAndExpression +logicalOrExpression +conditionalExpression +assignmentExpression +assignmentOperator +expression +typeSpecifierExpression +identifierTypeSpecifierExpression +genericTypeSpecifierExpression +typeofTypeSpecifierExpression +typeSpecifierIdentifier + + +atn: +[4, 1, 83, 634, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 1, 0, 3, 0, 144, 8, 0, 1, 0, 1, 0, 1, 1, 4, 1, 149, 8, 1, 11, 1, 12, 1, 150, 1, 2, 1, 2, 1, 3, 4, 3, 156, 8, 3, 11, 3, 12, 3, 157, 1, 4, 1, 4, 1, 4, 3, 4, 163, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 170, 8, 5, 3, 5, 172, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 178, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 184, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 200, 8, 11, 1, 12, 1, 12, 1, 12, 5, 12, 205, 8, 12, 10, 12, 12, 12, 208, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 222, 8, 15, 1, 16, 1, 16, 3, 16, 226, 8, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 3, 18, 235, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 244, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 252, 8, 20, 10, 20, 12, 20, 255, 9, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 267, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 272, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 278, 8, 23, 1, 23, 1, 23, 3, 23, 282, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 288, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 294, 8, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 3, 27, 318, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 330, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 5, 34, 346, 8, 34, 10, 34, 12, 34, 349, 9, 34, 1, 34, 1, 34, 1, 34, 5, 34, 354, 8, 34, 10, 34, 12, 34, 357, 9, 34, 1, 34, 3, 34, 360, 8, 34, 1, 35, 1, 35, 1, 35, 3, 35, 365, 8, 35, 1, 35, 3, 35, 368, 8, 35, 1, 36, 1, 36, 1, 36, 3, 36, 373, 8, 36, 1, 36, 3, 36, 376, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 5, 38, 384, 8, 38, 10, 38, 12, 38, 387, 9, 38, 3, 38, 389, 8, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 401, 8, 40, 1, 40, 1, 40, 1, 40, 3, 40, 406, 8, 40, 1, 40, 1, 40, 1, 40, 3, 40, 411, 8, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 427, 8, 40, 10, 40, 12, 40, 430, 9, 40, 1, 41, 1, 41, 1, 41, 5, 41, 435, 8, 41, 10, 41, 12, 41, 438, 9, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 451, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 457, 8, 44, 1, 44, 1, 44, 1, 45, 1, 45, 3, 45, 463, 8, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 471, 8, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 488, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 496, 8, 53, 10, 53, 12, 53, 499, 9, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 507, 8, 54, 10, 54, 12, 54, 510, 9, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 518, 8, 55, 10, 55, 12, 55, 521, 9, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 529, 8, 56, 10, 56, 12, 56, 532, 9, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 540, 8, 57, 10, 57, 12, 57, 543, 9, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 551, 8, 58, 10, 58, 12, 58, 554, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 562, 8, 59, 10, 59, 12, 59, 565, 9, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 573, 8, 60, 10, 60, 12, 60, 576, 9, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 584, 8, 61, 10, 61, 12, 61, 587, 9, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 596, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 603, 8, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 5, 65, 610, 8, 65, 10, 65, 12, 65, 613, 9, 65, 1, 66, 1, 66, 1, 66, 3, 66, 618, 8, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 0, 10, 80, 106, 108, 110, 112, 114, 116, 118, 120, 122, 71, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 0, 14, 1, 0, 4, 5, 1, 0, 11, 12, 1, 0, 23, 24, 1, 0, 73, 74, 2, 0, 72, 72, 75, 75, 1, 0, 26, 28, 2, 0, 41, 41, 43, 43, 3, 0, 40, 40, 42, 42, 50, 50, 1, 0, 44, 47, 2, 0, 40, 40, 42, 42, 1, 0, 59, 62, 1, 0, 57, 58, 1, 0, 51, 56, 2, 0, 26, 28, 71, 71, 634, 0, 143, 1, 0, 0, 0, 2, 148, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 6, 155, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 173, 1, 0, 0, 0, 14, 185, 1, 0, 0, 0, 16, 188, 1, 0, 0, 0, 18, 190, 1, 0, 0, 0, 20, 192, 1, 0, 0, 0, 22, 194, 1, 0, 0, 0, 24, 201, 1, 0, 0, 0, 26, 209, 1, 0, 0, 0, 28, 213, 1, 0, 0, 0, 30, 221, 1, 0, 0, 0, 32, 223, 1, 0, 0, 0, 34, 229, 1, 0, 0, 0, 36, 234, 1, 0, 0, 0, 38, 236, 1, 0, 0, 0, 40, 245, 1, 0, 0, 0, 42, 266, 1, 0, 0, 0, 44, 271, 1, 0, 0, 0, 46, 273, 1, 0, 0, 0, 48, 298, 1, 0, 0, 0, 50, 304, 1, 0, 0, 0, 52, 312, 1, 0, 0, 0, 54, 315, 1, 0, 0, 0, 56, 329, 1, 0, 0, 0, 58, 331, 1, 0, 0, 0, 60, 335, 1, 0, 0, 0, 62, 337, 1, 0, 0, 0, 64, 339, 1, 0, 0, 0, 66, 341, 1, 0, 0, 0, 68, 359, 1, 0, 0, 0, 70, 367, 1, 0, 0, 0, 72, 375, 1, 0, 0, 0, 74, 377, 1, 0, 0, 0, 76, 379, 1, 0, 0, 0, 78, 392, 1, 0, 0, 0, 80, 405, 1, 0, 0, 0, 82, 431, 1, 0, 0, 0, 84, 439, 1, 0, 0, 0, 86, 442, 1, 0, 0, 0, 88, 446, 1, 0, 0, 0, 90, 462, 1, 0, 0, 0, 92, 464, 1, 0, 0, 0, 94, 470, 1, 0, 0, 0, 96, 472, 1, 0, 0, 0, 98, 475, 1, 0, 0, 0, 100, 478, 1, 0, 0, 0, 102, 480, 1, 0, 0, 0, 104, 487, 1, 0, 0, 0, 106, 489, 1, 0, 0, 0, 108, 500, 1, 0, 0, 0, 110, 511, 1, 0, 0, 0, 112, 522, 1, 0, 0, 0, 114, 533, 1, 0, 0, 0, 116, 544, 1, 0, 0, 0, 118, 555, 1, 0, 0, 0, 120, 566, 1, 0, 0, 0, 122, 577, 1, 0, 0, 0, 124, 595, 1, 0, 0, 0, 126, 602, 1, 0, 0, 0, 128, 604, 1, 0, 0, 0, 130, 606, 1, 0, 0, 0, 132, 617, 1, 0, 0, 0, 134, 619, 1, 0, 0, 0, 136, 621, 1, 0, 0, 0, 138, 626, 1, 0, 0, 0, 140, 631, 1, 0, 0, 0, 142, 144, 3, 2, 1, 0, 143, 142, 1, 0, 0, 0, 143, 144, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, 146, 5, 0, 0, 1, 146, 1, 1, 0, 0, 0, 147, 149, 3, 4, 2, 0, 148, 147, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 3, 1, 0, 0, 0, 152, 153, 3, 6, 3, 0, 153, 5, 1, 0, 0, 0, 154, 156, 3, 8, 4, 0, 155, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 7, 1, 0, 0, 0, 159, 163, 3, 30, 15, 0, 160, 163, 3, 10, 5, 0, 161, 163, 5, 30, 0, 0, 162, 159, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 161, 1, 0, 0, 0, 163, 9, 1, 0, 0, 0, 164, 165, 3, 14, 7, 0, 165, 166, 5, 30, 0, 0, 166, 172, 1, 0, 0, 0, 167, 169, 3, 12, 6, 0, 168, 170, 5, 30, 0, 0, 169, 168, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 164, 1, 0, 0, 0, 171, 167, 1, 0, 0, 0, 172, 11, 1, 0, 0, 0, 173, 174, 5, 19, 0, 0, 174, 175, 3, 18, 9, 0, 175, 177, 5, 33, 0, 0, 176, 178, 3, 24, 12, 0, 177, 176, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 5, 34, 0, 0, 180, 181, 5, 22, 0, 0, 181, 183, 3, 132, 66, 0, 182, 184, 3, 32, 16, 0, 183, 182, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 13, 1, 0, 0, 0, 185, 186, 3, 16, 8, 0, 186, 187, 3, 22, 11, 0, 187, 15, 1, 0, 0, 0, 188, 189, 7, 0, 0, 0, 189, 17, 1, 0, 0, 0, 190, 191, 3, 20, 10, 0, 191, 19, 1, 0, 0, 0, 192, 193, 5, 71, 0, 0, 193, 21, 1, 0, 0, 0, 194, 195, 3, 18, 9, 0, 195, 196, 5, 32, 0, 0, 196, 199, 3, 132, 66, 0, 197, 198, 5, 51, 0, 0, 198, 200, 3, 28, 14, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 23, 1, 0, 0, 0, 201, 206, 3, 26, 13, 0, 202, 203, 5, 29, 0, 0, 203, 205, 3, 26, 13, 0, 204, 202, 1, 0, 0, 0, 205, 208, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 25, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 209, 210, 3, 18, 9, 0, 210, 211, 5, 32, 0, 0, 211, 212, 3, 132, 66, 0, 212, 27, 1, 0, 0, 0, 213, 214, 3, 126, 63, 0, 214, 29, 1, 0, 0, 0, 215, 222, 3, 32, 16, 0, 216, 222, 3, 34, 17, 0, 217, 222, 3, 36, 18, 0, 218, 222, 3, 44, 22, 0, 219, 222, 3, 52, 26, 0, 220, 222, 3, 54, 27, 0, 221, 215, 1, 0, 0, 0, 221, 216, 1, 0, 0, 0, 221, 217, 1, 0, 0, 0, 221, 218, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 220, 1, 0, 0, 0, 222, 31, 1, 0, 0, 0, 223, 225, 5, 38, 0, 0, 224, 226, 3, 6, 3, 0, 225, 224, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 228, 5, 39, 0, 0, 228, 33, 1, 0, 0, 0, 229, 230, 3, 130, 65, 0, 230, 231, 5, 30, 0, 0, 231, 35, 1, 0, 0, 0, 232, 235, 3, 38, 19, 0, 233, 235, 3, 40, 20, 0, 234, 232, 1, 0, 0, 0, 234, 233, 1, 0, 0, 0, 235, 37, 1, 0, 0, 0, 236, 237, 5, 15, 0, 0, 237, 238, 5, 33, 0, 0, 238, 239, 3, 130, 65, 0, 239, 240, 5, 34, 0, 0, 240, 243, 3, 30, 15, 0, 241, 242, 5, 16, 0, 0, 242, 244, 3, 30, 15, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 39, 1, 0, 0, 0, 245, 246, 5, 8, 0, 0, 246, 247, 5, 33, 0, 0, 247, 248, 3, 130, 65, 0, 248, 249, 5, 34, 0, 0, 249, 253, 5, 38, 0, 0, 250, 252, 3, 42, 21, 0, 251, 250, 1, 0, 0, 0, 252, 255, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 256, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 256, 257, 5, 39, 0, 0, 257, 41, 1, 0, 0, 0, 258, 259, 5, 9, 0, 0, 259, 260, 3, 130, 65, 0, 260, 261, 5, 32, 0, 0, 261, 262, 3, 30, 15, 0, 262, 267, 1, 0, 0, 0, 263, 264, 5, 10, 0, 0, 264, 265, 5, 32, 0, 0, 265, 267, 3, 30, 15, 0, 266, 258, 1, 0, 0, 0, 266, 263, 1, 0, 0, 0, 267, 43, 1, 0, 0, 0, 268, 272, 3, 46, 23, 0, 269, 272, 3, 48, 24, 0, 270, 272, 3, 50, 25, 0, 271, 268, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 271, 270, 1, 0, 0, 0, 272, 45, 1, 0, 0, 0, 273, 274, 5, 17, 0, 0, 274, 281, 5, 33, 0, 0, 275, 278, 3, 14, 7, 0, 276, 278, 3, 130, 65, 0, 277, 275, 1, 0, 0, 0, 277, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 6, 23, -1, 0, 280, 282, 1, 0, 0, 0, 281, 277, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 287, 5, 30, 0, 0, 284, 285, 3, 130, 65, 0, 285, 286, 6, 23, -1, 0, 286, 288, 1, 0, 0, 0, 287, 284, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 293, 5, 30, 0, 0, 290, 291, 3, 130, 65, 0, 291, 292, 6, 23, -1, 0, 292, 294, 1, 0, 0, 0, 293, 290, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 34, 0, 0, 296, 297, 3, 30, 15, 0, 297, 47, 1, 0, 0, 0, 298, 299, 5, 14, 0, 0, 299, 300, 5, 33, 0, 0, 300, 301, 3, 130, 65, 0, 301, 302, 5, 34, 0, 0, 302, 303, 3, 30, 15, 0, 303, 49, 1, 0, 0, 0, 304, 305, 5, 13, 0, 0, 305, 306, 3, 30, 15, 0, 306, 307, 5, 14, 0, 0, 307, 308, 5, 33, 0, 0, 308, 309, 3, 130, 65, 0, 309, 310, 5, 34, 0, 0, 310, 311, 5, 30, 0, 0, 311, 51, 1, 0, 0, 0, 312, 313, 7, 1, 0, 0, 313, 314, 5, 30, 0, 0, 314, 53, 1, 0, 0, 0, 315, 317, 5, 20, 0, 0, 316, 318, 3, 130, 65, 0, 317, 316, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 320, 5, 30, 0, 0, 320, 55, 1, 0, 0, 0, 321, 330, 3, 58, 29, 0, 322, 330, 3, 60, 30, 0, 323, 330, 3, 62, 31, 0, 324, 330, 3, 66, 33, 0, 325, 330, 3, 68, 34, 0, 326, 330, 3, 74, 37, 0, 327, 330, 3, 76, 38, 0, 328, 330, 3, 78, 39, 0, 329, 321, 1, 0, 0, 0, 329, 322, 1, 0, 0, 0, 329, 323, 1, 0, 0, 0, 329, 324, 1, 0, 0, 0, 329, 325, 1, 0, 0, 0, 329, 326, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 328, 1, 0, 0, 0, 330, 57, 1, 0, 0, 0, 331, 332, 5, 33, 0, 0, 332, 333, 3, 130, 65, 0, 333, 334, 5, 34, 0, 0, 334, 59, 1, 0, 0, 0, 335, 336, 7, 2, 0, 0, 336, 61, 1, 0, 0, 0, 337, 338, 3, 64, 32, 0, 338, 63, 1, 0, 0, 0, 339, 340, 5, 71, 0, 0, 340, 65, 1, 0, 0, 0, 341, 342, 7, 3, 0, 0, 342, 67, 1, 0, 0, 0, 343, 347, 5, 78, 0, 0, 344, 346, 3, 70, 35, 0, 345, 344, 1, 0, 0, 0, 346, 349, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 350, 1, 0, 0, 0, 349, 347, 1, 0, 0, 0, 350, 360, 5, 80, 0, 0, 351, 355, 5, 79, 0, 0, 352, 354, 3, 72, 36, 0, 353, 352, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 360, 5, 82, 0, 0, 359, 343, 1, 0, 0, 0, 359, 351, 1, 0, 0, 0, 360, 69, 1, 0, 0, 0, 361, 368, 5, 81, 0, 0, 362, 364, 5, 1, 0, 0, 363, 365, 3, 130, 65, 0, 364, 363, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 368, 5, 37, 0, 0, 367, 361, 1, 0, 0, 0, 367, 362, 1, 0, 0, 0, 368, 71, 1, 0, 0, 0, 369, 376, 5, 83, 0, 0, 370, 372, 5, 1, 0, 0, 371, 373, 3, 130, 65, 0, 372, 371, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 376, 5, 37, 0, 0, 375, 369, 1, 0, 0, 0, 375, 370, 1, 0, 0, 0, 376, 73, 1, 0, 0, 0, 377, 378, 7, 4, 0, 0, 378, 75, 1, 0, 0, 0, 379, 388, 5, 35, 0, 0, 380, 385, 3, 130, 65, 0, 381, 382, 5, 29, 0, 0, 382, 384, 3, 130, 65, 0, 383, 381, 1, 0, 0, 0, 384, 387, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 389, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 388, 380, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 391, 5, 36, 0, 0, 391, 77, 1, 0, 0, 0, 392, 393, 7, 5, 0, 0, 393, 79, 1, 0, 0, 0, 394, 395, 6, 40, -1, 0, 395, 406, 3, 56, 28, 0, 396, 397, 5, 21, 0, 0, 397, 398, 3, 80, 40, 0, 398, 400, 5, 33, 0, 0, 399, 401, 3, 82, 41, 0, 400, 399, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 5, 34, 0, 0, 403, 404, 6, 40, -1, 0, 404, 406, 1, 0, 0, 0, 405, 394, 1, 0, 0, 0, 405, 396, 1, 0, 0, 0, 406, 428, 1, 0, 0, 0, 407, 408, 10, 5, 0, 0, 408, 410, 5, 33, 0, 0, 409, 411, 3, 82, 41, 0, 410, 409, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 413, 5, 34, 0, 0, 413, 427, 6, 40, -1, 0, 414, 415, 10, 3, 0, 0, 415, 416, 3, 84, 42, 0, 416, 417, 6, 40, -1, 0, 417, 427, 1, 0, 0, 0, 418, 419, 10, 2, 0, 0, 419, 420, 3, 86, 43, 0, 420, 421, 6, 40, -1, 0, 421, 427, 1, 0, 0, 0, 422, 423, 10, 1, 0, 0, 423, 424, 3, 88, 44, 0, 424, 425, 6, 40, -1, 0, 425, 427, 1, 0, 0, 0, 426, 407, 1, 0, 0, 0, 426, 414, 1, 0, 0, 0, 426, 418, 1, 0, 0, 0, 426, 422, 1, 0, 0, 0, 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 81, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 436, 3, 126, 63, 0, 432, 433, 5, 29, 0, 0, 433, 435, 3, 126, 63, 0, 434, 432, 1, 0, 0, 0, 435, 438, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 83, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 440, 5, 70, 0, 0, 440, 441, 3, 64, 32, 0, 441, 85, 1, 0, 0, 0, 442, 443, 5, 35, 0, 0, 443, 444, 3, 130, 65, 0, 444, 445, 5, 36, 0, 0, 445, 87, 1, 0, 0, 0, 446, 450, 5, 35, 0, 0, 447, 448, 3, 130, 65, 0, 448, 449, 6, 44, -1, 0, 449, 451, 1, 0, 0, 0, 450, 447, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 456, 5, 32, 0, 0, 453, 454, 3, 130, 65, 0, 454, 455, 6, 44, -1, 0, 455, 457, 1, 0, 0, 0, 456, 453, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 5, 36, 0, 0, 459, 89, 1, 0, 0, 0, 460, 463, 3, 80, 40, 0, 461, 463, 3, 92, 46, 0, 462, 460, 1, 0, 0, 0, 462, 461, 1, 0, 0, 0, 463, 91, 1, 0, 0, 0, 464, 465, 3, 80, 40, 0, 465, 466, 3, 100, 50, 0, 466, 93, 1, 0, 0, 0, 467, 471, 3, 90, 45, 0, 468, 471, 3, 96, 48, 0, 469, 471, 3, 98, 49, 0, 470, 467, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 470, 469, 1, 0, 0, 0, 471, 95, 1, 0, 0, 0, 472, 473, 3, 100, 50, 0, 473, 474, 3, 90, 45, 0, 474, 97, 1, 0, 0, 0, 475, 476, 3, 102, 51, 0, 476, 477, 3, 90, 45, 0, 477, 99, 1, 0, 0, 0, 478, 479, 7, 6, 0, 0, 479, 101, 1, 0, 0, 0, 480, 481, 7, 7, 0, 0, 481, 103, 1, 0, 0, 0, 482, 488, 3, 94, 47, 0, 483, 484, 3, 94, 47, 0, 484, 485, 5, 6, 0, 0, 485, 486, 3, 132, 66, 0, 486, 488, 1, 0, 0, 0, 487, 482, 1, 0, 0, 0, 487, 483, 1, 0, 0, 0, 488, 105, 1, 0, 0, 0, 489, 490, 6, 53, -1, 0, 490, 491, 3, 104, 52, 0, 491, 497, 1, 0, 0, 0, 492, 493, 10, 1, 0, 0, 493, 494, 7, 8, 0, 0, 494, 496, 3, 104, 52, 0, 495, 492, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 107, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 6, 54, -1, 0, 501, 502, 3, 106, 53, 0, 502, 508, 1, 0, 0, 0, 503, 504, 10, 1, 0, 0, 504, 505, 7, 9, 0, 0, 505, 507, 3, 106, 53, 0, 506, 503, 1, 0, 0, 0, 507, 510, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 109, 1, 0, 0, 0, 510, 508, 1, 0, 0, 0, 511, 512, 6, 55, -1, 0, 512, 513, 3, 108, 54, 0, 513, 519, 1, 0, 0, 0, 514, 515, 10, 1, 0, 0, 515, 516, 7, 10, 0, 0, 516, 518, 3, 108, 54, 0, 517, 514, 1, 0, 0, 0, 518, 521, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 111, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 522, 523, 6, 56, -1, 0, 523, 524, 3, 110, 55, 0, 524, 530, 1, 0, 0, 0, 525, 526, 10, 1, 0, 0, 526, 527, 7, 11, 0, 0, 527, 529, 3, 110, 55, 0, 528, 525, 1, 0, 0, 0, 529, 532, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 113, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 533, 534, 6, 57, -1, 0, 534, 535, 3, 112, 56, 0, 535, 541, 1, 0, 0, 0, 536, 537, 10, 1, 0, 0, 537, 538, 5, 63, 0, 0, 538, 540, 3, 112, 56, 0, 539, 536, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 115, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 545, 6, 58, -1, 0, 545, 546, 3, 114, 57, 0, 546, 552, 1, 0, 0, 0, 547, 548, 10, 1, 0, 0, 548, 549, 5, 65, 0, 0, 549, 551, 3, 114, 57, 0, 550, 547, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 117, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 555, 556, 6, 59, -1, 0, 556, 557, 3, 116, 58, 0, 557, 563, 1, 0, 0, 0, 558, 559, 10, 1, 0, 0, 559, 560, 5, 64, 0, 0, 560, 562, 3, 116, 58, 0, 561, 558, 1, 0, 0, 0, 562, 565, 1, 0, 0, 0, 563, 561, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 119, 1, 0, 0, 0, 565, 563, 1, 0, 0, 0, 566, 567, 6, 60, -1, 0, 567, 568, 3, 118, 59, 0, 568, 574, 1, 0, 0, 0, 569, 570, 10, 1, 0, 0, 570, 571, 5, 48, 0, 0, 571, 573, 3, 118, 59, 0, 572, 569, 1, 0, 0, 0, 573, 576, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 121, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 577, 578, 6, 61, -1, 0, 578, 579, 3, 120, 60, 0, 579, 585, 1, 0, 0, 0, 580, 581, 10, 1, 0, 0, 581, 582, 5, 49, 0, 0, 582, 584, 3, 120, 60, 0, 583, 580, 1, 0, 0, 0, 584, 587, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 123, 1, 0, 0, 0, 587, 585, 1, 0, 0, 0, 588, 596, 3, 122, 61, 0, 589, 590, 3, 122, 61, 0, 590, 591, 5, 31, 0, 0, 591, 592, 3, 124, 62, 0, 592, 593, 5, 32, 0, 0, 593, 594, 3, 124, 62, 0, 594, 596, 1, 0, 0, 0, 595, 588, 1, 0, 0, 0, 595, 589, 1, 0, 0, 0, 596, 125, 1, 0, 0, 0, 597, 603, 3, 124, 62, 0, 598, 599, 3, 80, 40, 0, 599, 600, 3, 128, 64, 0, 600, 601, 3, 126, 63, 0, 601, 603, 1, 0, 0, 0, 602, 597, 1, 0, 0, 0, 602, 598, 1, 0, 0, 0, 603, 127, 1, 0, 0, 0, 604, 605, 7, 12, 0, 0, 605, 129, 1, 0, 0, 0, 606, 611, 3, 126, 63, 0, 607, 608, 5, 29, 0, 0, 608, 610, 3, 126, 63, 0, 609, 607, 1, 0, 0, 0, 610, 613, 1, 0, 0, 0, 611, 609, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 131, 1, 0, 0, 0, 613, 611, 1, 0, 0, 0, 614, 618, 3, 134, 67, 0, 615, 618, 3, 136, 68, 0, 616, 618, 3, 138, 69, 0, 617, 614, 1, 0, 0, 0, 617, 615, 1, 0, 0, 0, 617, 616, 1, 0, 0, 0, 618, 133, 1, 0, 0, 0, 619, 620, 3, 140, 70, 0, 620, 135, 1, 0, 0, 0, 621, 622, 3, 140, 70, 0, 622, 623, 5, 59, 0, 0, 623, 624, 3, 140, 70, 0, 624, 625, 5, 61, 0, 0, 625, 137, 1, 0, 0, 0, 626, 627, 5, 25, 0, 0, 627, 628, 5, 33, 0, 0, 628, 629, 3, 140, 70, 0, 629, 630, 5, 34, 0, 0, 630, 139, 1, 0, 0, 0, 631, 632, 7, 13, 0, 0, 632, 141, 1, 0, 0, 0, 56, 143, 150, 157, 162, 169, 171, 177, 183, 199, 206, 221, 225, 234, 243, 253, 266, 271, 277, 281, 287, 293, 317, 329, 347, 355, 359, 364, 367, 372, 375, 385, 388, 400, 405, 410, 426, 428, 436, 450, 456, 462, 470, 487, 497, 508, 519, 530, 541, 552, 563, 574, 585, 595, 602, 611, 617] \ No newline at end of file diff --git a/kipper/core/.antlr/KipperParser.java b/kipper/core/.antlr/KipperParser.java new file mode 100644 index 000000000..d70ff16f0 --- /dev/null +++ b/kipper/core/.antlr/KipperParser.java @@ -0,0 +1,5058 @@ +// Generated from /home/lorenz/Distrobox/kipper/Documents/Projects/Kipper/kipper/core/KipperParser.g4 by ANTLR 4.13.1 + + // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax + // kind values. + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class KipperParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + FStringExpStart=1, BlockComment=2, LineComment=3, Const=4, Var=5, As=6, + Spread=7, Switch=8, Case=9, Default=10, Break=11, Continue=12, Do=13, + While=14, If=15, Else=16, For=17, Enum=18, DefFunc=19, Return=20, CallFunc=21, + RetIndicator=22, True=23, False=24, Typeof=25, Void=26, Null=27, Undefined=28, + Comma=29, SemiColon=30, QuestionMark=31, Colon=32, LeftParen=33, RightParen=34, + LeftBracket=35, RightBracket=36, FStringExpEnd=37, LeftBrace=38, RightBrace=39, + Plus=40, PlusPlus=41, Minus=42, MinusMinus=43, Star=44, Div=45, Mod=46, + PowerTo=47, AndAnd=48, OrOr=49, Not=50, Assign=51, PlusAssign=52, MinusAssign=53, + StarAssign=54, DivAssign=55, ModAssign=56, Equal=57, NotEqual=58, Less=59, + LessEqual=60, Greater=61, GreaterEqual=62, BitwiseAnd=63, BitwiseOr=64, + BitwiseXor=65, BitwiseNot=66, BitwiseLeftShift=67, BitwiseRightShift=68, + BitwiseZeroFillRightShift=69, Dot=70, Identifier=71, IntegerConstant=72, + SingleQuoteStringLiteral=73, DoubleQuoteStringLiteral=74, FloatingConstant=75, + Whitespace=76, Newline=77, FStringSingleQuoteStart=78, FStringDoubleQuoteStart=79, + FStringSingleQuoteEnd=80, FStringSingleQuoteAtom=81, FStringDoubleQuoteEnd=82, + FStringDoubleQuoteAtom=83; + public static final int + RULE_compilationUnit = 0, RULE_translationUnit = 1, RULE_externalItem = 2, + RULE_blockItemList = 3, RULE_blockItem = 4, RULE_declaration = 5, RULE_functionDeclaration = 6, + RULE_variableDeclaration = 7, RULE_storageTypeSpecifier = 8, RULE_declarator = 9, + RULE_directDeclarator = 10, RULE_initDeclarator = 11, RULE_parameterList = 12, + RULE_parameterDeclaration = 13, RULE_initializer = 14, RULE_statement = 15, + RULE_compoundStatement = 16, RULE_expressionStatement = 17, RULE_selectionStatement = 18, + RULE_ifStatement = 19, RULE_switchStatement = 20, RULE_switchLabeledStatement = 21, + RULE_iterationStatement = 22, RULE_forLoopIterationStatement = 23, RULE_whileLoopIterationStatement = 24, + RULE_doWhileLoopIterationStatement = 25, RULE_jumpStatement = 26, RULE_returnStatement = 27, + RULE_primaryExpression = 28, RULE_tangledPrimaryExpression = 29, RULE_boolPrimaryExpression = 30, + RULE_identifierPrimaryExpression = 31, RULE_identifier = 32, RULE_stringPrimaryExpression = 33, + RULE_fStringPrimaryExpression = 34, RULE_fStringSingleQuoteAtom = 35, + RULE_fStringDoubleQuoteAtom = 36, RULE_numberPrimaryExpression = 37, RULE_arrayPrimaryExpression = 38, + RULE_voidOrNullOrUndefinedPrimaryExpression = 39, RULE_computedPrimaryExpression = 40, + RULE_argumentExpressionList = 41, RULE_dotNotation = 42, RULE_bracketNotation = 43, + RULE_sliceNotation = 44, RULE_postfixExpression = 45, RULE_incrementOrDecrementPostfixExpression = 46, + RULE_unaryExpression = 47, RULE_incrementOrDecrementUnaryExpression = 48, + RULE_operatorModifiedUnaryExpression = 49, RULE_incrementOrDecrementOperator = 50, + RULE_unaryOperator = 51, RULE_castOrConvertExpression = 52, RULE_multiplicativeExpression = 53, + RULE_additiveExpression = 54, RULE_relationalExpression = 55, RULE_equalityExpression = 56, + RULE_bitwiseAndExpression = 57, RULE_bitwiseXorExpression = 58, RULE_bitwiseOrExpression = 59, + RULE_logicalAndExpression = 60, RULE_logicalOrExpression = 61, RULE_conditionalExpression = 62, + RULE_assignmentExpression = 63, RULE_assignmentOperator = 64, RULE_expression = 65, + RULE_typeSpecifierExpression = 66, RULE_identifierTypeSpecifierExpression = 67, + RULE_genericTypeSpecifierExpression = 68, RULE_typeofTypeSpecifierExpression = 69, + RULE_typeSpecifierIdentifier = 70; + private static String[] makeRuleNames() { + return new String[] { + "compilationUnit", "translationUnit", "externalItem", "blockItemList", + "blockItem", "declaration", "functionDeclaration", "variableDeclaration", + "storageTypeSpecifier", "declarator", "directDeclarator", "initDeclarator", + "parameterList", "parameterDeclaration", "initializer", "statement", + "compoundStatement", "expressionStatement", "selectionStatement", "ifStatement", + "switchStatement", "switchLabeledStatement", "iterationStatement", "forLoopIterationStatement", + "whileLoopIterationStatement", "doWhileLoopIterationStatement", "jumpStatement", + "returnStatement", "primaryExpression", "tangledPrimaryExpression", "boolPrimaryExpression", + "identifierPrimaryExpression", "identifier", "stringPrimaryExpression", + "fStringPrimaryExpression", "fStringSingleQuoteAtom", "fStringDoubleQuoteAtom", + "numberPrimaryExpression", "arrayPrimaryExpression", "voidOrNullOrUndefinedPrimaryExpression", + "computedPrimaryExpression", "argumentExpressionList", "dotNotation", + "bracketNotation", "sliceNotation", "postfixExpression", "incrementOrDecrementPostfixExpression", + "unaryExpression", "incrementOrDecrementUnaryExpression", "operatorModifiedUnaryExpression", + "incrementOrDecrementOperator", "unaryOperator", "castOrConvertExpression", + "multiplicativeExpression", "additiveExpression", "relationalExpression", + "equalityExpression", "bitwiseAndExpression", "bitwiseXorExpression", + "bitwiseOrExpression", "logicalAndExpression", "logicalOrExpression", + "conditionalExpression", "assignmentExpression", "assignmentOperator", + "expression", "typeSpecifierExpression", "identifierTypeSpecifierExpression", + "genericTypeSpecifierExpression", "typeofTypeSpecifierExpression", "typeSpecifierIdentifier" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, "'const'", "'var'", "'as'", "'...'", "'switch'", + "'case'", "'default'", "'break'", "'continue'", "'do'", "'while'", "'if'", + "'else'", "'for'", "'enum'", "'def'", "'return'", "'call'", "'->'", "'true'", + "'false'", "'typeof'", "'void'", "'null'", "'undefined'", "','", "';'", + "'?'", "':'", "'('", "')'", "'['", "']'", null, "'{'", "'}'", "'+'", + "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", "'||'", "'!'", + "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", "'!='", "'<'", + "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", "'>>'", "'>>>'", + "'.'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "FStringExpStart", "BlockComment", "LineComment", "Const", "Var", + "As", "Spread", "Switch", "Case", "Default", "Break", "Continue", "Do", + "While", "If", "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", + "RetIndicator", "True", "False", "Typeof", "Void", "Null", "Undefined", + "Comma", "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", + "LeftBracket", "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", + "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", + "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", + "GreaterEqual", "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", + "BitwiseLeftShift", "BitwiseRightShift", "BitwiseZeroFillRightShift", + "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", + "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "KipperParser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public KipperParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class CompilationUnitContext extends KipperParserRuleContext { + public TerminalNode EOF() { return getToken(KipperParser.EOF, 0); } + public TranslationUnitContext translationUnit() { + return getRuleContext(TranslationUnitContext.class,0); + } + public CompilationUnitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_compilationUnit; } + } + + public final CompilationUnitContext compilationUnit() throws RecognitionException { + CompilationUnitContext _localctx = new CompilationUnitContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_compilationUnit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(143); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1142711981373744L) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & 415L) != 0)) { + { + setState(142); + translationUnit(); + } + } + + setState(145); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TranslationUnitContext extends KipperParserRuleContext { + public List externalItem() { + return getRuleContexts(ExternalItemContext.class); + } + public ExternalItemContext externalItem(int i) { + return getRuleContext(ExternalItemContext.class,i); + } + public TranslationUnitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_translationUnit; } + } + + public final TranslationUnitContext translationUnit() throws RecognitionException { + TranslationUnitContext _localctx = new TranslationUnitContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_translationUnit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(148); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(147); + externalItem(); + } + } + setState(150); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & 1142711981373744L) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & 415L) != 0) ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExternalItemContext extends KipperParserRuleContext { + public ExternalItemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_externalItem; } + + public ExternalItemContext() { } + public void copyFrom(ExternalItemContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ExternalBlockItemContext extends ExternalItemContext { + public BlockItemListContext blockItemList() { + return getRuleContext(BlockItemListContext.class,0); + } + public ExternalBlockItemContext(ExternalItemContext ctx) { copyFrom(ctx); } + } + + public final ExternalItemContext externalItem() throws RecognitionException { + ExternalItemContext _localctx = new ExternalItemContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_externalItem); + try { + _localctx = new ExternalBlockItemContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(152); + blockItemList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BlockItemListContext extends KipperParserRuleContext { + public List blockItem() { + return getRuleContexts(BlockItemContext.class); + } + public BlockItemContext blockItem(int i) { + return getRuleContext(BlockItemContext.class,i); + } + public BlockItemListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_blockItemList; } + } + + public final BlockItemListContext blockItemList() throws RecognitionException { + BlockItemListContext _localctx = new BlockItemListContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_blockItemList); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(155); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(154); + blockItem(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(157); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BlockItemContext extends KipperParserRuleContext { + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public TerminalNode SemiColon() { return getToken(KipperParser.SemiColon, 0); } + public BlockItemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_blockItem; } + } + + public final BlockItemContext blockItem() throws RecognitionException { + BlockItemContext _localctx = new BlockItemContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_blockItem); + try { + enterOuterAlt(_localctx, 1); + { + setState(162); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Switch: + case Break: + case Continue: + case Do: + case While: + case If: + case For: + case Return: + case CallFunc: + case True: + case False: + case Void: + case Null: + case Undefined: + case LeftParen: + case LeftBracket: + case LeftBrace: + case Plus: + case PlusPlus: + case Minus: + case MinusMinus: + case Not: + case Identifier: + case IntegerConstant: + case SingleQuoteStringLiteral: + case DoubleQuoteStringLiteral: + case FloatingConstant: + case FStringSingleQuoteStart: + case FStringDoubleQuoteStart: + { + setState(159); + statement(); + } + break; + case Const: + case Var: + case DefFunc: + { + setState(160); + declaration(); + } + break; + case SemiColon: + { + setState(161); + match(SemiColon); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DeclarationContext extends KipperParserRuleContext { + public VariableDeclarationContext variableDeclaration() { + return getRuleContext(VariableDeclarationContext.class,0); + } + public TerminalNode SemiColon() { return getToken(KipperParser.SemiColon, 0); } + public FunctionDeclarationContext functionDeclaration() { + return getRuleContext(FunctionDeclarationContext.class,0); + } + public DeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declaration; } + } + + public final DeclarationContext declaration() throws RecognitionException { + DeclarationContext _localctx = new DeclarationContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_declaration); + try { + setState(171); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Const: + case Var: + enterOuterAlt(_localctx, 1); + { + setState(164); + variableDeclaration(); + setState(165); + match(SemiColon); + } + break; + case DefFunc: + enterOuterAlt(_localctx, 2); + { + setState(167); + functionDeclaration(); + setState(169); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { + case 1: + { + setState(168); + match(SemiColon); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionDeclarationContext extends KipperParserRuleContext { + public TerminalNode DefFunc() { return getToken(KipperParser.DefFunc, 0); } + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public TerminalNode RetIndicator() { return getToken(KipperParser.RetIndicator, 0); } + public TypeSpecifierExpressionContext typeSpecifierExpression() { + return getRuleContext(TypeSpecifierExpressionContext.class,0); + } + public ParameterListContext parameterList() { + return getRuleContext(ParameterListContext.class,0); + } + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public FunctionDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionDeclaration; } + } + + public final FunctionDeclarationContext functionDeclaration() throws RecognitionException { + FunctionDeclarationContext _localctx = new FunctionDeclarationContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_functionDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(173); + match(DefFunc); + setState(174); + declarator(); + setState(175); + match(LeftParen); + setState(177); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Identifier) { + { + setState(176); + parameterList(); + } + } + + setState(179); + match(RightParen); + setState(180); + match(RetIndicator); + setState(181); + typeSpecifierExpression(); + setState(183); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + case 1: + { + setState(182); + compoundStatement(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VariableDeclarationContext extends KipperParserRuleContext { + public StorageTypeSpecifierContext storageTypeSpecifier() { + return getRuleContext(StorageTypeSpecifierContext.class,0); + } + public InitDeclaratorContext initDeclarator() { + return getRuleContext(InitDeclaratorContext.class,0); + } + public VariableDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableDeclaration; } + } + + public final VariableDeclarationContext variableDeclaration() throws RecognitionException { + VariableDeclarationContext _localctx = new VariableDeclarationContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_variableDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + setState(185); + storageTypeSpecifier(); + setState(186); + initDeclarator(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StorageTypeSpecifierContext extends KipperParserRuleContext { + public TerminalNode Var() { return getToken(KipperParser.Var, 0); } + public TerminalNode Const() { return getToken(KipperParser.Const, 0); } + public StorageTypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_storageTypeSpecifier; } + } + + public final StorageTypeSpecifierContext storageTypeSpecifier() throws RecognitionException { + StorageTypeSpecifierContext _localctx = new StorageTypeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_storageTypeSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(188); + _la = _input.LA(1); + if ( !(_la==Const || _la==Var) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DeclaratorContext extends KipperParserRuleContext { + public DirectDeclaratorContext directDeclarator() { + return getRuleContext(DirectDeclaratorContext.class,0); + } + public DeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declarator; } + } + + public final DeclaratorContext declarator() throws RecognitionException { + DeclaratorContext _localctx = new DeclaratorContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_declarator); + try { + enterOuterAlt(_localctx, 1); + { + setState(190); + directDeclarator(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DirectDeclaratorContext extends KipperParserRuleContext { + public TerminalNode Identifier() { return getToken(KipperParser.Identifier, 0); } + public DirectDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_directDeclarator; } + } + + public final DirectDeclaratorContext directDeclarator() throws RecognitionException { + DirectDeclaratorContext _localctx = new DirectDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_directDeclarator); + try { + enterOuterAlt(_localctx, 1); + { + setState(192); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class InitDeclaratorContext extends KipperParserRuleContext { + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public TerminalNode Colon() { return getToken(KipperParser.Colon, 0); } + public TypeSpecifierExpressionContext typeSpecifierExpression() { + return getRuleContext(TypeSpecifierExpressionContext.class,0); + } + public TerminalNode Assign() { return getToken(KipperParser.Assign, 0); } + public InitializerContext initializer() { + return getRuleContext(InitializerContext.class,0); + } + public InitDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initDeclarator; } + } + + public final InitDeclaratorContext initDeclarator() throws RecognitionException { + InitDeclaratorContext _localctx = new InitDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_initDeclarator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(194); + declarator(); + setState(195); + match(Colon); + setState(196); + typeSpecifierExpression(); + setState(199); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Assign) { + { + setState(197); + match(Assign); + setState(198); + initializer(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ParameterListContext extends KipperParserRuleContext { + public List parameterDeclaration() { + return getRuleContexts(ParameterDeclarationContext.class); + } + public ParameterDeclarationContext parameterDeclaration(int i) { + return getRuleContext(ParameterDeclarationContext.class,i); + } + public List Comma() { return getTokens(KipperParser.Comma); } + public TerminalNode Comma(int i) { + return getToken(KipperParser.Comma, i); + } + public ParameterListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterList; } + } + + public final ParameterListContext parameterList() throws RecognitionException { + ParameterListContext _localctx = new ParameterListContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_parameterList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(201); + parameterDeclaration(); + setState(206); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(202); + match(Comma); + setState(203); + parameterDeclaration(); + } + } + setState(208); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ParameterDeclarationContext extends KipperParserRuleContext { + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public TerminalNode Colon() { return getToken(KipperParser.Colon, 0); } + public TypeSpecifierExpressionContext typeSpecifierExpression() { + return getRuleContext(TypeSpecifierExpressionContext.class,0); + } + public ParameterDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterDeclaration; } + } + + public final ParameterDeclarationContext parameterDeclaration() throws RecognitionException { + ParameterDeclarationContext _localctx = new ParameterDeclarationContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_parameterDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + setState(209); + declarator(); + setState(210); + match(Colon); + setState(211); + typeSpecifierExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class InitializerContext extends KipperParserRuleContext { + public AssignmentExpressionContext assignmentExpression() { + return getRuleContext(AssignmentExpressionContext.class,0); + } + public InitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initializer; } + } + + public final InitializerContext initializer() throws RecognitionException { + InitializerContext _localctx = new InitializerContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_initializer); + try { + enterOuterAlt(_localctx, 1); + { + setState(213); + assignmentExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StatementContext extends KipperParserRuleContext { + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public ExpressionStatementContext expressionStatement() { + return getRuleContext(ExpressionStatementContext.class,0); + } + public SelectionStatementContext selectionStatement() { + return getRuleContext(SelectionStatementContext.class,0); + } + public IterationStatementContext iterationStatement() { + return getRuleContext(IterationStatementContext.class,0); + } + public JumpStatementContext jumpStatement() { + return getRuleContext(JumpStatementContext.class,0); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public StatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statement; } + } + + public final StatementContext statement() throws RecognitionException { + StatementContext _localctx = new StatementContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_statement); + try { + setState(221); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftBrace: + enterOuterAlt(_localctx, 1); + { + setState(215); + compoundStatement(); + } + break; + case CallFunc: + case True: + case False: + case Void: + case Null: + case Undefined: + case LeftParen: + case LeftBracket: + case Plus: + case PlusPlus: + case Minus: + case MinusMinus: + case Not: + case Identifier: + case IntegerConstant: + case SingleQuoteStringLiteral: + case DoubleQuoteStringLiteral: + case FloatingConstant: + case FStringSingleQuoteStart: + case FStringDoubleQuoteStart: + enterOuterAlt(_localctx, 2); + { + setState(216); + expressionStatement(); + } + break; + case Switch: + case If: + enterOuterAlt(_localctx, 3); + { + setState(217); + selectionStatement(); + } + break; + case Do: + case While: + case For: + enterOuterAlt(_localctx, 4); + { + setState(218); + iterationStatement(); + } + break; + case Break: + case Continue: + enterOuterAlt(_localctx, 5); + { + setState(219); + jumpStatement(); + } + break; + case Return: + enterOuterAlt(_localctx, 6); + { + setState(220); + returnStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CompoundStatementContext extends KipperParserRuleContext { + public TerminalNode LeftBrace() { return getToken(KipperParser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(KipperParser.RightBrace, 0); } + public BlockItemListContext blockItemList() { + return getRuleContext(BlockItemListContext.class,0); + } + public CompoundStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_compoundStatement; } + } + + public final CompoundStatementContext compoundStatement() throws RecognitionException { + CompoundStatementContext _localctx = new CompoundStatementContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_compoundStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(223); + match(LeftBrace); + setState(225); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1142711981373744L) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & 415L) != 0)) { + { + setState(224); + blockItemList(); + } + } + + setState(227); + match(RightBrace); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionStatementContext extends KipperParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode SemiColon() { return getToken(KipperParser.SemiColon, 0); } + public ExpressionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionStatement; } + } + + public final ExpressionStatementContext expressionStatement() throws RecognitionException { + ExpressionStatementContext _localctx = new ExpressionStatementContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_expressionStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(229); + expression(); + setState(230); + match(SemiColon); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SelectionStatementContext extends KipperParserRuleContext { + public IfStatementContext ifStatement() { + return getRuleContext(IfStatementContext.class,0); + } + public SwitchStatementContext switchStatement() { + return getRuleContext(SwitchStatementContext.class,0); + } + public SelectionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectionStatement; } + } + + public final SelectionStatementContext selectionStatement() throws RecognitionException { + SelectionStatementContext _localctx = new SelectionStatementContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_selectionStatement); + try { + setState(234); + _errHandler.sync(this); + switch (_input.LA(1)) { + case If: + enterOuterAlt(_localctx, 1); + { + setState(232); + ifStatement(); + } + break; + case Switch: + enterOuterAlt(_localctx, 2); + { + setState(233); + switchStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IfStatementContext extends KipperParserRuleContext { + public TerminalNode If() { return getToken(KipperParser.If, 0); } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public TerminalNode Else() { return getToken(KipperParser.Else, 0); } + public IfStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifStatement; } + } + + public final IfStatementContext ifStatement() throws RecognitionException { + IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_ifStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(236); + match(If); + setState(237); + match(LeftParen); + setState(238); + expression(); + setState(239); + match(RightParen); + setState(240); + statement(); + setState(243); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + case 1: + { + setState(241); + match(Else); + setState(242); + statement(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SwitchStatementContext extends KipperParserRuleContext { + public TerminalNode Switch() { return getToken(KipperParser.Switch, 0); } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public TerminalNode LeftBrace() { return getToken(KipperParser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(KipperParser.RightBrace, 0); } + public List switchLabeledStatement() { + return getRuleContexts(SwitchLabeledStatementContext.class); + } + public SwitchLabeledStatementContext switchLabeledStatement(int i) { + return getRuleContext(SwitchLabeledStatementContext.class,i); + } + public SwitchStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_switchStatement; } + } + + public final SwitchStatementContext switchStatement() throws RecognitionException { + SwitchStatementContext _localctx = new SwitchStatementContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_switchStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(245); + match(Switch); + setState(246); + match(LeftParen); + setState(247); + expression(); + setState(248); + match(RightParen); + setState(249); + match(LeftBrace); + setState(253); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Case || _la==Default) { + { + { + setState(250); + switchLabeledStatement(); + } + } + setState(255); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(256); + match(RightBrace); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SwitchLabeledStatementContext extends KipperParserRuleContext { + public TerminalNode Case() { return getToken(KipperParser.Case, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode Colon() { return getToken(KipperParser.Colon, 0); } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public TerminalNode Default() { return getToken(KipperParser.Default, 0); } + public SwitchLabeledStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_switchLabeledStatement; } + } + + public final SwitchLabeledStatementContext switchLabeledStatement() throws RecognitionException { + SwitchLabeledStatementContext _localctx = new SwitchLabeledStatementContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_switchLabeledStatement); + try { + setState(266); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Case: + enterOuterAlt(_localctx, 1); + { + setState(258); + match(Case); + setState(259); + expression(); + setState(260); + match(Colon); + setState(261); + statement(); + } + break; + case Default: + enterOuterAlt(_localctx, 2); + { + setState(263); + match(Default); + setState(264); + match(Colon); + setState(265); + statement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IterationStatementContext extends KipperParserRuleContext { + public ForLoopIterationStatementContext forLoopIterationStatement() { + return getRuleContext(ForLoopIterationStatementContext.class,0); + } + public WhileLoopIterationStatementContext whileLoopIterationStatement() { + return getRuleContext(WhileLoopIterationStatementContext.class,0); + } + public DoWhileLoopIterationStatementContext doWhileLoopIterationStatement() { + return getRuleContext(DoWhileLoopIterationStatementContext.class,0); + } + public IterationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_iterationStatement; } + } + + public final IterationStatementContext iterationStatement() throws RecognitionException { + IterationStatementContext _localctx = new IterationStatementContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_iterationStatement); + try { + setState(271); + _errHandler.sync(this); + switch (_input.LA(1)) { + case For: + enterOuterAlt(_localctx, 1); + { + setState(268); + forLoopIterationStatement(); + } + break; + case While: + enterOuterAlt(_localctx, 2); + { + setState(269); + whileLoopIterationStatement(); + } + break; + case Do: + enterOuterAlt(_localctx, 3); + { + setState(270); + doWhileLoopIterationStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ForLoopIterationStatementContext extends KipperParserRuleContext { + public boolean _forDeclaration = false; + public boolean _forCondition = false; + public boolean _forIterationExp = false; + public TerminalNode For() { return getToken(KipperParser.For, 0); } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public List SemiColon() { return getTokens(KipperParser.SemiColon); } + public TerminalNode SemiColon(int i) { + return getToken(KipperParser.SemiColon, i); + } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public VariableDeclarationContext variableDeclaration() { + return getRuleContext(VariableDeclarationContext.class,0); + } + public ForLoopIterationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forLoopIterationStatement; } + } + + public final ForLoopIterationStatementContext forLoopIterationStatement() throws RecognitionException { + ForLoopIterationStatementContext _localctx = new ForLoopIterationStatementContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_forLoopIterationStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(273); + match(For); + setState(274); + match(LeftParen); + setState(281); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1142436027957296L) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & 415L) != 0)) { + { + setState(277); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Const: + case Var: + { + setState(275); + variableDeclaration(); + } + break; + case CallFunc: + case True: + case False: + case Void: + case Null: + case Undefined: + case LeftParen: + case LeftBracket: + case Plus: + case PlusPlus: + case Minus: + case MinusMinus: + case Not: + case Identifier: + case IntegerConstant: + case SingleQuoteStringLiteral: + case DoubleQuoteStringLiteral: + case FloatingConstant: + case FStringSingleQuoteStart: + case FStringDoubleQuoteStart: + { + setState(276); + expression(); + } + break; + default: + throw new NoViableAltException(this); + } + _localctx._forDeclaration = true + } + } + + setState(283); + match(SemiColon); + setState(287); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(284); + expression(); + _localctx._forCondition = true + } + } + + setState(289); + match(SemiColon); + setState(293); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(290); + expression(); + _localctx._forIterationExp = true + } + } + + setState(295); + match(RightParen); + setState(296); + statement(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class WhileLoopIterationStatementContext extends KipperParserRuleContext { + public TerminalNode While() { return getToken(KipperParser.While, 0); } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public WhileLoopIterationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whileLoopIterationStatement; } + } + + public final WhileLoopIterationStatementContext whileLoopIterationStatement() throws RecognitionException { + WhileLoopIterationStatementContext _localctx = new WhileLoopIterationStatementContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_whileLoopIterationStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(298); + match(While); + setState(299); + match(LeftParen); + setState(300); + expression(); + setState(301); + match(RightParen); + setState(302); + statement(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DoWhileLoopIterationStatementContext extends KipperParserRuleContext { + public TerminalNode Do() { return getToken(KipperParser.Do, 0); } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public TerminalNode While() { return getToken(KipperParser.While, 0); } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public TerminalNode SemiColon() { return getToken(KipperParser.SemiColon, 0); } + public DoWhileLoopIterationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_doWhileLoopIterationStatement; } + } + + public final DoWhileLoopIterationStatementContext doWhileLoopIterationStatement() throws RecognitionException { + DoWhileLoopIterationStatementContext _localctx = new DoWhileLoopIterationStatementContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_doWhileLoopIterationStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(304); + match(Do); + setState(305); + statement(); + setState(306); + match(While); + setState(307); + match(LeftParen); + setState(308); + expression(); + setState(309); + match(RightParen); + setState(310); + match(SemiColon); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class JumpStatementContext extends KipperParserRuleContext { + public TerminalNode SemiColon() { return getToken(KipperParser.SemiColon, 0); } + public TerminalNode Continue() { return getToken(KipperParser.Continue, 0); } + public TerminalNode Break() { return getToken(KipperParser.Break, 0); } + public JumpStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_jumpStatement; } + } + + public final JumpStatementContext jumpStatement() throws RecognitionException { + JumpStatementContext _localctx = new JumpStatementContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_jumpStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(312); + _la = _input.LA(1); + if ( !(_la==Break || _la==Continue) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(313); + match(SemiColon); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ReturnStatementContext extends KipperParserRuleContext { + public TerminalNode Return() { return getToken(KipperParser.Return, 0); } + public TerminalNode SemiColon() { return getToken(KipperParser.SemiColon, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ReturnStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_returnStatement; } + } + + public final ReturnStatementContext returnStatement() throws RecognitionException { + ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_returnStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(315); + match(Return); + setState(317); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(316); + expression(); + } + } + + setState(319); + match(SemiColon); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PrimaryExpressionContext extends KipperParserRuleContext { + public TangledPrimaryExpressionContext tangledPrimaryExpression() { + return getRuleContext(TangledPrimaryExpressionContext.class,0); + } + public BoolPrimaryExpressionContext boolPrimaryExpression() { + return getRuleContext(BoolPrimaryExpressionContext.class,0); + } + public IdentifierPrimaryExpressionContext identifierPrimaryExpression() { + return getRuleContext(IdentifierPrimaryExpressionContext.class,0); + } + public StringPrimaryExpressionContext stringPrimaryExpression() { + return getRuleContext(StringPrimaryExpressionContext.class,0); + } + public FStringPrimaryExpressionContext fStringPrimaryExpression() { + return getRuleContext(FStringPrimaryExpressionContext.class,0); + } + public NumberPrimaryExpressionContext numberPrimaryExpression() { + return getRuleContext(NumberPrimaryExpressionContext.class,0); + } + public ArrayPrimaryExpressionContext arrayPrimaryExpression() { + return getRuleContext(ArrayPrimaryExpressionContext.class,0); + } + public VoidOrNullOrUndefinedPrimaryExpressionContext voidOrNullOrUndefinedPrimaryExpression() { + return getRuleContext(VoidOrNullOrUndefinedPrimaryExpressionContext.class,0); + } + public PrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_primaryExpression; } + } + + public final PrimaryExpressionContext primaryExpression() throws RecognitionException { + PrimaryExpressionContext _localctx = new PrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_primaryExpression); + try { + setState(329); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + enterOuterAlt(_localctx, 1); + { + setState(321); + tangledPrimaryExpression(); + } + break; + case True: + case False: + enterOuterAlt(_localctx, 2); + { + setState(322); + boolPrimaryExpression(); + } + break; + case Identifier: + enterOuterAlt(_localctx, 3); + { + setState(323); + identifierPrimaryExpression(); + } + break; + case SingleQuoteStringLiteral: + case DoubleQuoteStringLiteral: + enterOuterAlt(_localctx, 4); + { + setState(324); + stringPrimaryExpression(); + } + break; + case FStringSingleQuoteStart: + case FStringDoubleQuoteStart: + enterOuterAlt(_localctx, 5); + { + setState(325); + fStringPrimaryExpression(); + } + break; + case IntegerConstant: + case FloatingConstant: + enterOuterAlt(_localctx, 6); + { + setState(326); + numberPrimaryExpression(); + } + break; + case LeftBracket: + enterOuterAlt(_localctx, 7); + { + setState(327); + arrayPrimaryExpression(); + } + break; + case Void: + case Null: + case Undefined: + enterOuterAlt(_localctx, 8); + { + setState(328); + voidOrNullOrUndefinedPrimaryExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TangledPrimaryExpressionContext extends KipperParserRuleContext { + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public TangledPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tangledPrimaryExpression; } + } + + public final TangledPrimaryExpressionContext tangledPrimaryExpression() throws RecognitionException { + TangledPrimaryExpressionContext _localctx = new TangledPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_tangledPrimaryExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(331); + match(LeftParen); + setState(332); + expression(); + setState(333); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BoolPrimaryExpressionContext extends KipperParserRuleContext { + public TerminalNode True() { return getToken(KipperParser.True, 0); } + public TerminalNode False() { return getToken(KipperParser.False, 0); } + public BoolPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolPrimaryExpression; } + } + + public final BoolPrimaryExpressionContext boolPrimaryExpression() throws RecognitionException { + BoolPrimaryExpressionContext _localctx = new BoolPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_boolPrimaryExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(335); + _la = _input.LA(1); + if ( !(_la==True || _la==False) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdentifierPrimaryExpressionContext extends KipperParserRuleContext { + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public IdentifierPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identifierPrimaryExpression; } + } + + public final IdentifierPrimaryExpressionContext identifierPrimaryExpression() throws RecognitionException { + IdentifierPrimaryExpressionContext _localctx = new IdentifierPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_identifierPrimaryExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(337); + identifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdentifierContext extends KipperParserRuleContext { + public TerminalNode Identifier() { return getToken(KipperParser.Identifier, 0); } + public IdentifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identifier; } + } + + public final IdentifierContext identifier() throws RecognitionException { + IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_identifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(339); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StringPrimaryExpressionContext extends KipperParserRuleContext { + public TerminalNode SingleQuoteStringLiteral() { return getToken(KipperParser.SingleQuoteStringLiteral, 0); } + public TerminalNode DoubleQuoteStringLiteral() { return getToken(KipperParser.DoubleQuoteStringLiteral, 0); } + public StringPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringPrimaryExpression; } + } + + public final StringPrimaryExpressionContext stringPrimaryExpression() throws RecognitionException { + StringPrimaryExpressionContext _localctx = new StringPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_stringPrimaryExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(341); + _la = _input.LA(1); + if ( !(_la==SingleQuoteStringLiteral || _la==DoubleQuoteStringLiteral) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FStringPrimaryExpressionContext extends KipperParserRuleContext { + public TerminalNode FStringSingleQuoteStart() { return getToken(KipperParser.FStringSingleQuoteStart, 0); } + public TerminalNode FStringSingleQuoteEnd() { return getToken(KipperParser.FStringSingleQuoteEnd, 0); } + public List fStringSingleQuoteAtom() { + return getRuleContexts(FStringSingleQuoteAtomContext.class); + } + public FStringSingleQuoteAtomContext fStringSingleQuoteAtom(int i) { + return getRuleContext(FStringSingleQuoteAtomContext.class,i); + } + public TerminalNode FStringDoubleQuoteStart() { return getToken(KipperParser.FStringDoubleQuoteStart, 0); } + public TerminalNode FStringDoubleQuoteEnd() { return getToken(KipperParser.FStringDoubleQuoteEnd, 0); } + public List fStringDoubleQuoteAtom() { + return getRuleContexts(FStringDoubleQuoteAtomContext.class); + } + public FStringDoubleQuoteAtomContext fStringDoubleQuoteAtom(int i) { + return getRuleContext(FStringDoubleQuoteAtomContext.class,i); + } + public FStringPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fStringPrimaryExpression; } + } + + public final FStringPrimaryExpressionContext fStringPrimaryExpression() throws RecognitionException { + FStringPrimaryExpressionContext _localctx = new FStringPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_fStringPrimaryExpression); + int _la; + try { + setState(359); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FStringSingleQuoteStart: + enterOuterAlt(_localctx, 1); + { + setState(343); + match(FStringSingleQuoteStart); + setState(347); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==FStringExpStart || _la==FStringSingleQuoteAtom) { + { + { + setState(344); + fStringSingleQuoteAtom(); + } + } + setState(349); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(350); + match(FStringSingleQuoteEnd); + } + break; + case FStringDoubleQuoteStart: + enterOuterAlt(_localctx, 2); + { + setState(351); + match(FStringDoubleQuoteStart); + setState(355); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==FStringExpStart || _la==FStringDoubleQuoteAtom) { + { + { + setState(352); + fStringDoubleQuoteAtom(); + } + } + setState(357); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(358); + match(FStringDoubleQuoteEnd); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FStringSingleQuoteAtomContext extends KipperParserRuleContext { + public TerminalNode FStringSingleQuoteAtom() { return getToken(KipperParser.FStringSingleQuoteAtom, 0); } + public TerminalNode FStringExpStart() { return getToken(KipperParser.FStringExpStart, 0); } + public TerminalNode FStringExpEnd() { return getToken(KipperParser.FStringExpEnd, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public FStringSingleQuoteAtomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fStringSingleQuoteAtom; } + } + + public final FStringSingleQuoteAtomContext fStringSingleQuoteAtom() throws RecognitionException { + FStringSingleQuoteAtomContext _localctx = new FStringSingleQuoteAtomContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_fStringSingleQuoteAtom); + int _la; + try { + setState(367); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FStringSingleQuoteAtom: + enterOuterAlt(_localctx, 1); + { + setState(361); + match(FStringSingleQuoteAtom); + } + break; + case FStringExpStart: + enterOuterAlt(_localctx, 2); + { + setState(362); + match(FStringExpStart); + setState(364); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(363); + expression(); + } + } + + setState(366); + match(FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { + public TerminalNode FStringDoubleQuoteAtom() { return getToken(KipperParser.FStringDoubleQuoteAtom, 0); } + public TerminalNode FStringExpStart() { return getToken(KipperParser.FStringExpStart, 0); } + public TerminalNode FStringExpEnd() { return getToken(KipperParser.FStringExpEnd, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public FStringDoubleQuoteAtomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fStringDoubleQuoteAtom; } + } + + public final FStringDoubleQuoteAtomContext fStringDoubleQuoteAtom() throws RecognitionException { + FStringDoubleQuoteAtomContext _localctx = new FStringDoubleQuoteAtomContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_fStringDoubleQuoteAtom); + int _la; + try { + setState(375); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FStringDoubleQuoteAtom: + enterOuterAlt(_localctx, 1); + { + setState(369); + match(FStringDoubleQuoteAtom); + } + break; + case FStringExpStart: + enterOuterAlt(_localctx, 2); + { + setState(370); + match(FStringExpStart); + setState(372); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(371); + expression(); + } + } + + setState(374); + match(FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NumberPrimaryExpressionContext extends KipperParserRuleContext { + public TerminalNode IntegerConstant() { return getToken(KipperParser.IntegerConstant, 0); } + public TerminalNode FloatingConstant() { return getToken(KipperParser.FloatingConstant, 0); } + public NumberPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_numberPrimaryExpression; } + } + + public final NumberPrimaryExpressionContext numberPrimaryExpression() throws RecognitionException { + NumberPrimaryExpressionContext _localctx = new NumberPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_numberPrimaryExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(377); + _la = _input.LA(1); + if ( !(_la==IntegerConstant || _la==FloatingConstant) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ArrayPrimaryExpressionContext extends KipperParserRuleContext { + public TerminalNode LeftBracket() { return getToken(KipperParser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(KipperParser.RightBracket, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List Comma() { return getTokens(KipperParser.Comma); } + public TerminalNode Comma(int i) { + return getToken(KipperParser.Comma, i); + } + public ArrayPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arrayPrimaryExpression; } + } + + public final ArrayPrimaryExpressionContext arrayPrimaryExpression() throws RecognitionException { + ArrayPrimaryExpressionContext _localctx = new ArrayPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_arrayPrimaryExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(379); + match(LeftBracket); + setState(388); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(380); + expression(); + setState(385); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(381); + match(Comma); + setState(382); + expression(); + } + } + setState(387); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(390); + match(RightBracket); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserRuleContext { + public TerminalNode Void() { return getToken(KipperParser.Void, 0); } + public TerminalNode Null() { return getToken(KipperParser.Null, 0); } + public TerminalNode Undefined() { return getToken(KipperParser.Undefined, 0); } + public VoidOrNullOrUndefinedPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_voidOrNullOrUndefinedPrimaryExpression; } + } + + public final VoidOrNullOrUndefinedPrimaryExpressionContext voidOrNullOrUndefinedPrimaryExpression() throws RecognitionException { + VoidOrNullOrUndefinedPrimaryExpressionContext _localctx = new VoidOrNullOrUndefinedPrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_voidOrNullOrUndefinedPrimaryExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(392); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 469762048L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ComputedPrimaryExpressionContext extends KipperParserRuleContext { + public ASTKind | undefined _labelASTKind; + public ComputedPrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_computedPrimaryExpression; } + + public ComputedPrimaryExpressionContext() { } + public void copyFrom(ComputedPrimaryExpressionContext ctx) { + super.copyFrom(ctx); + this._labelASTKind = ctx._labelASTKind; + } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOncomputedPrimaryExpressionContext extends ComputedPrimaryExpressionContext { + public PrimaryExpressionContext primaryExpression() { + return getRuleContext(PrimaryExpressionContext.class,0); + } + public PassOncomputedPrimaryExpressionContext(ComputedPrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class SliceNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public SliceNotationContext sliceNotation() { + return getRuleContext(SliceNotationContext.class,0); + } + public SliceNotationMemberAccessExpressionContext(ComputedPrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class FunctionCallExpressionContext extends ComputedPrimaryExpressionContext { + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public ArgumentExpressionListContext argumentExpressionList() { + return getRuleContext(ArgumentExpressionListContext.class,0); + } + public FunctionCallExpressionContext(ComputedPrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class DotNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public DotNotationContext dotNotation() { + return getRuleContext(DotNotationContext.class,0); + } + public DotNotationMemberAccessExpressionContext(ComputedPrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { + public TerminalNode CallFunc() { return getToken(KipperParser.CallFunc, 0); } + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public ArgumentExpressionListContext argumentExpressionList() { + return getRuleContext(ArgumentExpressionListContext.class,0); + } + public ExplicitCallFunctionCallExpressionContext(ComputedPrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class BracketNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public BracketNotationContext bracketNotation() { + return getRuleContext(BracketNotationContext.class,0); + } + public BracketNotationMemberAccessExpressionContext(ComputedPrimaryExpressionContext ctx) { copyFrom(ctx); } + } + + public final ComputedPrimaryExpressionContext computedPrimaryExpression() throws RecognitionException { + return computedPrimaryExpression(0); + } + + private ComputedPrimaryExpressionContext computedPrimaryExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ComputedPrimaryExpressionContext _localctx = new ComputedPrimaryExpressionContext(_ctx, _parentState); + ComputedPrimaryExpressionContext _prevctx = _localctx; + int _startState = 80; + enterRecursionRule(_localctx, 80, RULE_computedPrimaryExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(405); + _errHandler.sync(this); + switch (_input.LA(1)) { + case True: + case False: + case Void: + case Null: + case Undefined: + case LeftParen: + case LeftBracket: + case Identifier: + case IntegerConstant: + case SingleQuoteStringLiteral: + case DoubleQuoteStringLiteral: + case FloatingConstant: + case FStringSingleQuoteStart: + case FStringDoubleQuoteStart: + { + _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(395); + primaryExpression(); + } + break; + case CallFunc: + { + _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(396); + match(CallFunc); + setState(397); + computedPrimaryExpression(0); + setState(398); + match(LeftParen); + setState(400); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(399); + argumentExpressionList(); + } + } + + setState(402); + match(RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression + } + break; + default: + throw new NoViableAltException(this); + } + _ctx.stop = _input.LT(-1); + setState(428); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(426); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + { + _localctx = new FunctionCallExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_computedPrimaryExpression); + setState(407); + if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(408); + match(LeftParen); + setState(410); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(409); + argumentExpressionList(); + } + } + + setState(412); + match(RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression + } + break; + case 2: + { + _localctx = new DotNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_computedPrimaryExpression); + setState(414); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(415); + dotNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + } + break; + case 3: + { + _localctx = new BracketNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_computedPrimaryExpression); + setState(418); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(419); + bracketNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + } + break; + case 4: + { + _localctx = new SliceNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_computedPrimaryExpression); + setState(422); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(423); + sliceNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + } + break; + } + } + } + setState(430); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ArgumentExpressionListContext extends KipperParserRuleContext { + public List assignmentExpression() { + return getRuleContexts(AssignmentExpressionContext.class); + } + public AssignmentExpressionContext assignmentExpression(int i) { + return getRuleContext(AssignmentExpressionContext.class,i); + } + public List Comma() { return getTokens(KipperParser.Comma); } + public TerminalNode Comma(int i) { + return getToken(KipperParser.Comma, i); + } + public ArgumentExpressionListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_argumentExpressionList; } + } + + public final ArgumentExpressionListContext argumentExpressionList() throws RecognitionException { + ArgumentExpressionListContext _localctx = new ArgumentExpressionListContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_argumentExpressionList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(431); + assignmentExpression(); + setState(436); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(432); + match(Comma); + setState(433); + assignmentExpression(); + } + } + setState(438); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DotNotationContext extends KipperParserRuleContext { + public TerminalNode Dot() { return getToken(KipperParser.Dot, 0); } + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public DotNotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dotNotation; } + } + + public final DotNotationContext dotNotation() throws RecognitionException { + DotNotationContext _localctx = new DotNotationContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_dotNotation); + try { + enterOuterAlt(_localctx, 1); + { + setState(439); + match(Dot); + setState(440); + identifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BracketNotationContext extends KipperParserRuleContext { + public TerminalNode LeftBracket() { return getToken(KipperParser.LeftBracket, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightBracket() { return getToken(KipperParser.RightBracket, 0); } + public BracketNotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bracketNotation; } + } + + public final BracketNotationContext bracketNotation() throws RecognitionException { + BracketNotationContext _localctx = new BracketNotationContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_bracketNotation); + try { + enterOuterAlt(_localctx, 1); + { + setState(442); + match(LeftBracket); + setState(443); + expression(); + setState(444); + match(RightBracket); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SliceNotationContext extends KipperParserRuleContext { + public boolean sliceStart = false; + public boolean sliceEnd = false; + public TerminalNode LeftBracket() { return getToken(KipperParser.LeftBracket, 0); } + public TerminalNode Colon() { return getToken(KipperParser.Colon, 0); } + public TerminalNode RightBracket() { return getToken(KipperParser.RightBracket, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public SliceNotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_sliceNotation; } + } + + public final SliceNotationContext sliceNotation() throws RecognitionException { + SliceNotationContext _localctx = new SliceNotationContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_sliceNotation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(446); + match(LeftBracket); + setState(450); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(447); + expression(); + _localctx.sliceStart = true + } + } + + setState(452); + match(Colon); + setState(456); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 21)) & ~0x3f) == 0 && ((1L << (_la - 21)) & 467248461884444909L) != 0)) { + { + setState(453); + expression(); + _localctx.sliceEnd = true + } + } + + setState(458); + match(RightBracket); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PostfixExpressionContext extends KipperParserRuleContext { + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public IncrementOrDecrementPostfixExpressionContext incrementOrDecrementPostfixExpression() { + return getRuleContext(IncrementOrDecrementPostfixExpressionContext.class,0); + } + public PostfixExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_postfixExpression; } + } + + public final PostfixExpressionContext postfixExpression() throws RecognitionException { + PostfixExpressionContext _localctx = new PostfixExpressionContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_postfixExpression); + try { + setState(462); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(460); + computedPrimaryExpression(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(461); + incrementOrDecrementPostfixExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IncrementOrDecrementPostfixExpressionContext extends KipperParserRuleContext { + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public IncrementOrDecrementOperatorContext incrementOrDecrementOperator() { + return getRuleContext(IncrementOrDecrementOperatorContext.class,0); + } + public IncrementOrDecrementPostfixExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_incrementOrDecrementPostfixExpression; } + } + + public final IncrementOrDecrementPostfixExpressionContext incrementOrDecrementPostfixExpression() throws RecognitionException { + IncrementOrDecrementPostfixExpressionContext _localctx = new IncrementOrDecrementPostfixExpressionContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_incrementOrDecrementPostfixExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(464); + computedPrimaryExpression(0); + setState(465); + incrementOrDecrementOperator(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class UnaryExpressionContext extends KipperParserRuleContext { + public PostfixExpressionContext postfixExpression() { + return getRuleContext(PostfixExpressionContext.class,0); + } + public IncrementOrDecrementUnaryExpressionContext incrementOrDecrementUnaryExpression() { + return getRuleContext(IncrementOrDecrementUnaryExpressionContext.class,0); + } + public OperatorModifiedUnaryExpressionContext operatorModifiedUnaryExpression() { + return getRuleContext(OperatorModifiedUnaryExpressionContext.class,0); + } + public UnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unaryExpression; } + } + + public final UnaryExpressionContext unaryExpression() throws RecognitionException { + UnaryExpressionContext _localctx = new UnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_unaryExpression); + try { + setState(470); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CallFunc: + case True: + case False: + case Void: + case Null: + case Undefined: + case LeftParen: + case LeftBracket: + case Identifier: + case IntegerConstant: + case SingleQuoteStringLiteral: + case DoubleQuoteStringLiteral: + case FloatingConstant: + case FStringSingleQuoteStart: + case FStringDoubleQuoteStart: + enterOuterAlt(_localctx, 1); + { + setState(467); + postfixExpression(); + } + break; + case PlusPlus: + case MinusMinus: + enterOuterAlt(_localctx, 2); + { + setState(468); + incrementOrDecrementUnaryExpression(); + } + break; + case Plus: + case Minus: + case Not: + enterOuterAlt(_localctx, 3); + { + setState(469); + operatorModifiedUnaryExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IncrementOrDecrementUnaryExpressionContext extends KipperParserRuleContext { + public IncrementOrDecrementOperatorContext incrementOrDecrementOperator() { + return getRuleContext(IncrementOrDecrementOperatorContext.class,0); + } + public PostfixExpressionContext postfixExpression() { + return getRuleContext(PostfixExpressionContext.class,0); + } + public IncrementOrDecrementUnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_incrementOrDecrementUnaryExpression; } + } + + public final IncrementOrDecrementUnaryExpressionContext incrementOrDecrementUnaryExpression() throws RecognitionException { + IncrementOrDecrementUnaryExpressionContext _localctx = new IncrementOrDecrementUnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_incrementOrDecrementUnaryExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(472); + incrementOrDecrementOperator(); + setState(473); + postfixExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperatorModifiedUnaryExpressionContext extends KipperParserRuleContext { + public UnaryOperatorContext unaryOperator() { + return getRuleContext(UnaryOperatorContext.class,0); + } + public PostfixExpressionContext postfixExpression() { + return getRuleContext(PostfixExpressionContext.class,0); + } + public OperatorModifiedUnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operatorModifiedUnaryExpression; } + } + + public final OperatorModifiedUnaryExpressionContext operatorModifiedUnaryExpression() throws RecognitionException { + OperatorModifiedUnaryExpressionContext _localctx = new OperatorModifiedUnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_operatorModifiedUnaryExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(475); + unaryOperator(); + setState(476); + postfixExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IncrementOrDecrementOperatorContext extends KipperParserRuleContext { + public TerminalNode PlusPlus() { return getToken(KipperParser.PlusPlus, 0); } + public TerminalNode MinusMinus() { return getToken(KipperParser.MinusMinus, 0); } + public IncrementOrDecrementOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_incrementOrDecrementOperator; } + } + + public final IncrementOrDecrementOperatorContext incrementOrDecrementOperator() throws RecognitionException { + IncrementOrDecrementOperatorContext _localctx = new IncrementOrDecrementOperatorContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_incrementOrDecrementOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(478); + _la = _input.LA(1); + if ( !(_la==PlusPlus || _la==MinusMinus) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class UnaryOperatorContext extends KipperParserRuleContext { + public TerminalNode Plus() { return getToken(KipperParser.Plus, 0); } + public TerminalNode Minus() { return getToken(KipperParser.Minus, 0); } + public TerminalNode Not() { return getToken(KipperParser.Not, 0); } + public UnaryOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unaryOperator; } + } + + public final UnaryOperatorContext unaryOperator() throws RecognitionException { + UnaryOperatorContext _localctx = new UnaryOperatorContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_unaryOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(480); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 1131397464981504L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CastOrConvertExpressionContext extends KipperParserRuleContext { + public CastOrConvertExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_castOrConvertExpression; } + + public CastOrConvertExpressionContext() { } + public void copyFrom(CastOrConvertExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualCastOrConvertExpressionContext extends CastOrConvertExpressionContext { + public UnaryExpressionContext unaryExpression() { + return getRuleContext(UnaryExpressionContext.class,0); + } + public TerminalNode As() { return getToken(KipperParser.As, 0); } + public TypeSpecifierExpressionContext typeSpecifierExpression() { + return getRuleContext(TypeSpecifierExpressionContext.class,0); + } + public ActualCastOrConvertExpressionContext(CastOrConvertExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnCastOrConvertExpressionContext extends CastOrConvertExpressionContext { + public UnaryExpressionContext unaryExpression() { + return getRuleContext(UnaryExpressionContext.class,0); + } + public PassOnCastOrConvertExpressionContext(CastOrConvertExpressionContext ctx) { copyFrom(ctx); } + } + + public final CastOrConvertExpressionContext castOrConvertExpression() throws RecognitionException { + CastOrConvertExpressionContext _localctx = new CastOrConvertExpressionContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_castOrConvertExpression); + try { + setState(487); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + case 1: + _localctx = new PassOnCastOrConvertExpressionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(482); + unaryExpression(); + } + break; + case 2: + _localctx = new ActualCastOrConvertExpressionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(483); + unaryExpression(); + setState(484); + match(As); + setState(485); + typeSpecifierExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MultiplicativeExpressionContext extends KipperParserRuleContext { + public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiplicativeExpression; } + + public MultiplicativeExpressionContext() { } + public void copyFrom(MultiplicativeExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnMultiplicativeExpressionContext extends MultiplicativeExpressionContext { + public CastOrConvertExpressionContext castOrConvertExpression() { + return getRuleContext(CastOrConvertExpressionContext.class,0); + } + public PassOnMultiplicativeExpressionContext(MultiplicativeExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualMultiplicativeExpressionContext extends MultiplicativeExpressionContext { + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public CastOrConvertExpressionContext castOrConvertExpression() { + return getRuleContext(CastOrConvertExpressionContext.class,0); + } + public TerminalNode Star() { return getToken(KipperParser.Star, 0); } + public TerminalNode Div() { return getToken(KipperParser.Div, 0); } + public TerminalNode Mod() { return getToken(KipperParser.Mod, 0); } + public TerminalNode PowerTo() { return getToken(KipperParser.PowerTo, 0); } + public ActualMultiplicativeExpressionContext(MultiplicativeExpressionContext ctx) { copyFrom(ctx); } + } + + public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { + return multiplicativeExpression(0); + } + + private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, _parentState); + MultiplicativeExpressionContext _prevctx = _localctx; + int _startState = 106; + enterRecursionRule(_localctx, 106, RULE_multiplicativeExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnMultiplicativeExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(490); + castOrConvertExpression(); + } + _ctx.stop = _input.LT(-1); + setState(497); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualMultiplicativeExpressionContext(new MultiplicativeExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); + setState(492); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(493); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 263882790666240L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(494); + castOrConvertExpression(); + } + } + } + setState(499); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AdditiveExpressionContext extends KipperParserRuleContext { + public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_additiveExpression; } + + public AdditiveExpressionContext() { } + public void copyFrom(AdditiveExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnAdditiveExpressionContext extends AdditiveExpressionContext { + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public PassOnAdditiveExpressionContext(AdditiveExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualAdditiveExpressionContext extends AdditiveExpressionContext { + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public TerminalNode Plus() { return getToken(KipperParser.Plus, 0); } + public TerminalNode Minus() { return getToken(KipperParser.Minus, 0); } + public ActualAdditiveExpressionContext(AdditiveExpressionContext ctx) { copyFrom(ctx); } + } + + public final AdditiveExpressionContext additiveExpression() throws RecognitionException { + return additiveExpression(0); + } + + private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, _parentState); + AdditiveExpressionContext _prevctx = _localctx; + int _startState = 108; + enterRecursionRule(_localctx, 108, RULE_additiveExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnAdditiveExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(501); + multiplicativeExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(508); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,44,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualAdditiveExpressionContext(new AdditiveExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); + setState(503); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(504); + _la = _input.LA(1); + if ( !(_la==Plus || _la==Minus) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(505); + multiplicativeExpression(0); + } + } + } + setState(510); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,44,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelationalExpressionContext extends KipperParserRuleContext { + public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relationalExpression; } + + public RelationalExpressionContext() { } + public void copyFrom(RelationalExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnRelationalExpressionContext extends RelationalExpressionContext { + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public PassOnRelationalExpressionContext(RelationalExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualRelationalExpressionContext extends RelationalExpressionContext { + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public TerminalNode Less() { return getToken(KipperParser.Less, 0); } + public TerminalNode Greater() { return getToken(KipperParser.Greater, 0); } + public TerminalNode LessEqual() { return getToken(KipperParser.LessEqual, 0); } + public TerminalNode GreaterEqual() { return getToken(KipperParser.GreaterEqual, 0); } + public ActualRelationalExpressionContext(RelationalExpressionContext ctx) { copyFrom(ctx); } + } + + public final RelationalExpressionContext relationalExpression() throws RecognitionException { + return relationalExpression(0); + } + + private RelationalExpressionContext relationalExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, _parentState); + RelationalExpressionContext _prevctx = _localctx; + int _startState = 110; + enterRecursionRule(_localctx, 110, RULE_relationalExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnRelationalExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(512); + additiveExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(519); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,45,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualRelationalExpressionContext(new RelationalExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); + setState(514); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(515); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8646911284551352320L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(516); + additiveExpression(0); + } + } + } + setState(521); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,45,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EqualityExpressionContext extends KipperParserRuleContext { + public EqualityExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_equalityExpression; } + + public EqualityExpressionContext() { } + public void copyFrom(EqualityExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualEqualityExpressionContext extends EqualityExpressionContext { + public EqualityExpressionContext equalityExpression() { + return getRuleContext(EqualityExpressionContext.class,0); + } + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public TerminalNode Equal() { return getToken(KipperParser.Equal, 0); } + public TerminalNode NotEqual() { return getToken(KipperParser.NotEqual, 0); } + public ActualEqualityExpressionContext(EqualityExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnEqualityExpressionContext extends EqualityExpressionContext { + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public PassOnEqualityExpressionContext(EqualityExpressionContext ctx) { copyFrom(ctx); } + } + + public final EqualityExpressionContext equalityExpression() throws RecognitionException { + return equalityExpression(0); + } + + private EqualityExpressionContext equalityExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + EqualityExpressionContext _localctx = new EqualityExpressionContext(_ctx, _parentState); + EqualityExpressionContext _prevctx = _localctx; + int _startState = 112; + enterRecursionRule(_localctx, 112, RULE_equalityExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnEqualityExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(523); + relationalExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(530); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,46,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualEqualityExpressionContext(new EqualityExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_equalityExpression); + setState(525); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(526); + _la = _input.LA(1); + if ( !(_la==Equal || _la==NotEqual) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(527); + relationalExpression(0); + } + } + } + setState(532); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,46,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BitwiseAndExpressionContext extends KipperParserRuleContext { + public BitwiseAndExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bitwiseAndExpression; } + + public BitwiseAndExpressionContext() { } + public void copyFrom(BitwiseAndExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnBitwiseAndExpressionContext extends BitwiseAndExpressionContext { + public EqualityExpressionContext equalityExpression() { + return getRuleContext(EqualityExpressionContext.class,0); + } + public PassOnBitwiseAndExpressionContext(BitwiseAndExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionContext { + public BitwiseAndExpressionContext bitwiseAndExpression() { + return getRuleContext(BitwiseAndExpressionContext.class,0); + } + public TerminalNode BitwiseAnd() { return getToken(KipperParser.BitwiseAnd, 0); } + public EqualityExpressionContext equalityExpression() { + return getRuleContext(EqualityExpressionContext.class,0); + } + public ActualBitwiseAndExpressionContext(BitwiseAndExpressionContext ctx) { copyFrom(ctx); } + } + + public final BitwiseAndExpressionContext bitwiseAndExpression() throws RecognitionException { + return bitwiseAndExpression(0); + } + + private BitwiseAndExpressionContext bitwiseAndExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + BitwiseAndExpressionContext _localctx = new BitwiseAndExpressionContext(_ctx, _parentState); + BitwiseAndExpressionContext _prevctx = _localctx; + int _startState = 114; + enterRecursionRule(_localctx, 114, RULE_bitwiseAndExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnBitwiseAndExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(534); + equalityExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(541); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseAndExpressionContext(new BitwiseAndExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_bitwiseAndExpression); + setState(536); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(537); + match(BitwiseAnd); + setState(538); + equalityExpression(0); + } + } + } + setState(543); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BitwiseXorExpressionContext extends KipperParserRuleContext { + public BitwiseXorExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bitwiseXorExpression; } + + public BitwiseXorExpressionContext() { } + public void copyFrom(BitwiseXorExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionContext { + public BitwiseXorExpressionContext bitwiseXorExpression() { + return getRuleContext(BitwiseXorExpressionContext.class,0); + } + public TerminalNode BitwiseXor() { return getToken(KipperParser.BitwiseXor, 0); } + public BitwiseAndExpressionContext bitwiseAndExpression() { + return getRuleContext(BitwiseAndExpressionContext.class,0); + } + public ActualBitwiseXorExpressionContext(BitwiseXorExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnBitwiseXorExpressionContext extends BitwiseXorExpressionContext { + public BitwiseAndExpressionContext bitwiseAndExpression() { + return getRuleContext(BitwiseAndExpressionContext.class,0); + } + public PassOnBitwiseXorExpressionContext(BitwiseXorExpressionContext ctx) { copyFrom(ctx); } + } + + public final BitwiseXorExpressionContext bitwiseXorExpression() throws RecognitionException { + return bitwiseXorExpression(0); + } + + private BitwiseXorExpressionContext bitwiseXorExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + BitwiseXorExpressionContext _localctx = new BitwiseXorExpressionContext(_ctx, _parentState); + BitwiseXorExpressionContext _prevctx = _localctx; + int _startState = 116; + enterRecursionRule(_localctx, 116, RULE_bitwiseXorExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnBitwiseXorExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(545); + bitwiseAndExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(552); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,48,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseXorExpressionContext(new BitwiseXorExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_bitwiseXorExpression); + setState(547); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(548); + match(BitwiseXor); + setState(549); + bitwiseAndExpression(0); + } + } + } + setState(554); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,48,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BitwiseOrExpressionContext extends KipperParserRuleContext { + public BitwiseOrExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bitwiseOrExpression; } + + public BitwiseOrExpressionContext() { } + public void copyFrom(BitwiseOrExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext { + public BitwiseOrExpressionContext bitwiseOrExpression() { + return getRuleContext(BitwiseOrExpressionContext.class,0); + } + public TerminalNode BitwiseOr() { return getToken(KipperParser.BitwiseOr, 0); } + public BitwiseXorExpressionContext bitwiseXorExpression() { + return getRuleContext(BitwiseXorExpressionContext.class,0); + } + public ActualBitwiseOrExpressionContext(BitwiseOrExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnBitwiseOrExpressionContext extends BitwiseOrExpressionContext { + public BitwiseXorExpressionContext bitwiseXorExpression() { + return getRuleContext(BitwiseXorExpressionContext.class,0); + } + public PassOnBitwiseOrExpressionContext(BitwiseOrExpressionContext ctx) { copyFrom(ctx); } + } + + public final BitwiseOrExpressionContext bitwiseOrExpression() throws RecognitionException { + return bitwiseOrExpression(0); + } + + private BitwiseOrExpressionContext bitwiseOrExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + BitwiseOrExpressionContext _localctx = new BitwiseOrExpressionContext(_ctx, _parentState); + BitwiseOrExpressionContext _prevctx = _localctx; + int _startState = 118; + enterRecursionRule(_localctx, 118, RULE_bitwiseOrExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnBitwiseOrExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(556); + bitwiseXorExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(563); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseOrExpressionContext(new BitwiseOrExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_bitwiseOrExpression); + setState(558); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(559); + match(BitwiseOr); + setState(560); + bitwiseXorExpression(0); + } + } + } + setState(565); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LogicalAndExpressionContext extends KipperParserRuleContext { + public LogicalAndExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_logicalAndExpression; } + + public LogicalAndExpressionContext() { } + public void copyFrom(LogicalAndExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnLogicalAndExpressionContext extends LogicalAndExpressionContext { + public BitwiseOrExpressionContext bitwiseOrExpression() { + return getRuleContext(BitwiseOrExpressionContext.class,0); + } + public PassOnLogicalAndExpressionContext(LogicalAndExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualLogicalAndExpressionContext extends LogicalAndExpressionContext { + public LogicalAndExpressionContext logicalAndExpression() { + return getRuleContext(LogicalAndExpressionContext.class,0); + } + public TerminalNode AndAnd() { return getToken(KipperParser.AndAnd, 0); } + public BitwiseOrExpressionContext bitwiseOrExpression() { + return getRuleContext(BitwiseOrExpressionContext.class,0); + } + public ActualLogicalAndExpressionContext(LogicalAndExpressionContext ctx) { copyFrom(ctx); } + } + + public final LogicalAndExpressionContext logicalAndExpression() throws RecognitionException { + return logicalAndExpression(0); + } + + private LogicalAndExpressionContext logicalAndExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + LogicalAndExpressionContext _localctx = new LogicalAndExpressionContext(_ctx, _parentState); + LogicalAndExpressionContext _prevctx = _localctx; + int _startState = 120; + enterRecursionRule(_localctx, 120, RULE_logicalAndExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnLogicalAndExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(567); + bitwiseOrExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(574); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,50,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalAndExpressionContext(new LogicalAndExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_logicalAndExpression); + setState(569); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(570); + match(AndAnd); + setState(571); + bitwiseOrExpression(0); + } + } + } + setState(576); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,50,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LogicalOrExpressionContext extends KipperParserRuleContext { + public LogicalOrExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_logicalOrExpression; } + + public LogicalOrExpressionContext() { } + public void copyFrom(LogicalOrExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnLogicalOrExpressionContext extends LogicalOrExpressionContext { + public LogicalAndExpressionContext logicalAndExpression() { + return getRuleContext(LogicalAndExpressionContext.class,0); + } + public PassOnLogicalOrExpressionContext(LogicalOrExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext { + public LogicalOrExpressionContext logicalOrExpression() { + return getRuleContext(LogicalOrExpressionContext.class,0); + } + public TerminalNode OrOr() { return getToken(KipperParser.OrOr, 0); } + public LogicalAndExpressionContext logicalAndExpression() { + return getRuleContext(LogicalAndExpressionContext.class,0); + } + public ActualLogicalOrExpressionContext(LogicalOrExpressionContext ctx) { copyFrom(ctx); } + } + + public final LogicalOrExpressionContext logicalOrExpression() throws RecognitionException { + return logicalOrExpression(0); + } + + private LogicalOrExpressionContext logicalOrExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + LogicalOrExpressionContext _localctx = new LogicalOrExpressionContext(_ctx, _parentState); + LogicalOrExpressionContext _prevctx = _localctx; + int _startState = 122; + enterRecursionRule(_localctx, 122, RULE_logicalOrExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnLogicalOrExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(578); + logicalAndExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(585); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,51,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalOrExpressionContext(new LogicalOrExpressionContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_logicalOrExpression); + setState(580); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(581); + match(OrOr); + setState(582); + logicalAndExpression(0); + } + } + } + setState(587); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,51,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConditionalExpressionContext extends KipperParserRuleContext { + public ConditionalExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conditionalExpression; } + + public ConditionalExpressionContext() { } + public void copyFrom(ConditionalExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualConditionalExpressionContext extends ConditionalExpressionContext { + public LogicalOrExpressionContext logicalOrExpression() { + return getRuleContext(LogicalOrExpressionContext.class,0); + } + public TerminalNode QuestionMark() { return getToken(KipperParser.QuestionMark, 0); } + public List conditionalExpression() { + return getRuleContexts(ConditionalExpressionContext.class); + } + public ConditionalExpressionContext conditionalExpression(int i) { + return getRuleContext(ConditionalExpressionContext.class,i); + } + public TerminalNode Colon() { return getToken(KipperParser.Colon, 0); } + public ActualConditionalExpressionContext(ConditionalExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnConditionalExpressionContext extends ConditionalExpressionContext { + public LogicalOrExpressionContext logicalOrExpression() { + return getRuleContext(LogicalOrExpressionContext.class,0); + } + public PassOnConditionalExpressionContext(ConditionalExpressionContext ctx) { copyFrom(ctx); } + } + + public final ConditionalExpressionContext conditionalExpression() throws RecognitionException { + ConditionalExpressionContext _localctx = new ConditionalExpressionContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_conditionalExpression); + try { + setState(595); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) { + case 1: + _localctx = new PassOnConditionalExpressionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(588); + logicalOrExpression(0); + } + break; + case 2: + _localctx = new ActualConditionalExpressionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(589); + logicalOrExpression(0); + setState(590); + match(QuestionMark); + setState(591); + conditionalExpression(); + setState(592); + match(Colon); + setState(593); + conditionalExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssignmentExpressionContext extends KipperParserRuleContext { + public AssignmentExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignmentExpression; } + + public AssignmentExpressionContext() { } + public void copyFrom(AssignmentExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ActualAssignmentExpressionContext extends AssignmentExpressionContext { + public ComputedPrimaryExpressionContext computedPrimaryExpression() { + return getRuleContext(ComputedPrimaryExpressionContext.class,0); + } + public AssignmentOperatorContext assignmentOperator() { + return getRuleContext(AssignmentOperatorContext.class,0); + } + public AssignmentExpressionContext assignmentExpression() { + return getRuleContext(AssignmentExpressionContext.class,0); + } + public ActualAssignmentExpressionContext(AssignmentExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PassOnAssignmentExpressionContext extends AssignmentExpressionContext { + public ConditionalExpressionContext conditionalExpression() { + return getRuleContext(ConditionalExpressionContext.class,0); + } + public PassOnAssignmentExpressionContext(AssignmentExpressionContext ctx) { copyFrom(ctx); } + } + + public final AssignmentExpressionContext assignmentExpression() throws RecognitionException { + AssignmentExpressionContext _localctx = new AssignmentExpressionContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_assignmentExpression); + try { + setState(602); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) { + case 1: + _localctx = new PassOnAssignmentExpressionContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(597); + conditionalExpression(); + } + break; + case 2: + _localctx = new ActualAssignmentExpressionContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(598); + computedPrimaryExpression(0); + setState(599); + assignmentOperator(); + setState(600); + assignmentExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssignmentOperatorContext extends KipperParserRuleContext { + public TerminalNode Assign() { return getToken(KipperParser.Assign, 0); } + public TerminalNode StarAssign() { return getToken(KipperParser.StarAssign, 0); } + public TerminalNode DivAssign() { return getToken(KipperParser.DivAssign, 0); } + public TerminalNode ModAssign() { return getToken(KipperParser.ModAssign, 0); } + public TerminalNode PlusAssign() { return getToken(KipperParser.PlusAssign, 0); } + public TerminalNode MinusAssign() { return getToken(KipperParser.MinusAssign, 0); } + public AssignmentOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignmentOperator; } + } + + public final AssignmentOperatorContext assignmentOperator() throws RecognitionException { + AssignmentOperatorContext _localctx = new AssignmentOperatorContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_assignmentOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(604); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 141863388262170624L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionContext extends KipperParserRuleContext { + public List assignmentExpression() { + return getRuleContexts(AssignmentExpressionContext.class); + } + public AssignmentExpressionContext assignmentExpression(int i) { + return getRuleContext(AssignmentExpressionContext.class,i); + } + public List Comma() { return getTokens(KipperParser.Comma); } + public TerminalNode Comma(int i) { + return getToken(KipperParser.Comma, i); + } + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + } + + public final ExpressionContext expression() throws RecognitionException { + ExpressionContext _localctx = new ExpressionContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_expression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(606); + assignmentExpression(); + setState(611); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,54,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(607); + match(Comma); + setState(608); + assignmentExpression(); + } + } + } + setState(613); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,54,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TypeSpecifierExpressionContext extends KipperParserRuleContext { + public IdentifierTypeSpecifierExpressionContext identifierTypeSpecifierExpression() { + return getRuleContext(IdentifierTypeSpecifierExpressionContext.class,0); + } + public GenericTypeSpecifierExpressionContext genericTypeSpecifierExpression() { + return getRuleContext(GenericTypeSpecifierExpressionContext.class,0); + } + public TypeofTypeSpecifierExpressionContext typeofTypeSpecifierExpression() { + return getRuleContext(TypeofTypeSpecifierExpressionContext.class,0); + } + public TypeSpecifierExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeSpecifierExpression; } + } + + public final TypeSpecifierExpressionContext typeSpecifierExpression() throws RecognitionException { + TypeSpecifierExpressionContext _localctx = new TypeSpecifierExpressionContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_typeSpecifierExpression); + try { + setState(617); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(614); + identifierTypeSpecifierExpression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(615); + genericTypeSpecifierExpression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(616); + typeofTypeSpecifierExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleContext { + public TypeSpecifierIdentifierContext typeSpecifierIdentifier() { + return getRuleContext(TypeSpecifierIdentifierContext.class,0); + } + public IdentifierTypeSpecifierExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identifierTypeSpecifierExpression; } + } + + public final IdentifierTypeSpecifierExpressionContext identifierTypeSpecifierExpression() throws RecognitionException { + IdentifierTypeSpecifierExpressionContext _localctx = new IdentifierTypeSpecifierExpressionContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_identifierTypeSpecifierExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(619); + typeSpecifierIdentifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GenericTypeSpecifierExpressionContext extends KipperParserRuleContext { + public List typeSpecifierIdentifier() { + return getRuleContexts(TypeSpecifierIdentifierContext.class); + } + public TypeSpecifierIdentifierContext typeSpecifierIdentifier(int i) { + return getRuleContext(TypeSpecifierIdentifierContext.class,i); + } + public TerminalNode Less() { return getToken(KipperParser.Less, 0); } + public TerminalNode Greater() { return getToken(KipperParser.Greater, 0); } + public GenericTypeSpecifierExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_genericTypeSpecifierExpression; } + } + + public final GenericTypeSpecifierExpressionContext genericTypeSpecifierExpression() throws RecognitionException { + GenericTypeSpecifierExpressionContext _localctx = new GenericTypeSpecifierExpressionContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_genericTypeSpecifierExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(621); + typeSpecifierIdentifier(); + setState(622); + match(Less); + setState(623); + typeSpecifierIdentifier(); + setState(624); + match(Greater); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContext { + public TerminalNode Typeof() { return getToken(KipperParser.Typeof, 0); } + public TerminalNode LeftParen() { return getToken(KipperParser.LeftParen, 0); } + public TypeSpecifierIdentifierContext typeSpecifierIdentifier() { + return getRuleContext(TypeSpecifierIdentifierContext.class,0); + } + public TerminalNode RightParen() { return getToken(KipperParser.RightParen, 0); } + public TypeofTypeSpecifierExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeofTypeSpecifierExpression; } + } + + public final TypeofTypeSpecifierExpressionContext typeofTypeSpecifierExpression() throws RecognitionException { + TypeofTypeSpecifierExpressionContext _localctx = new TypeofTypeSpecifierExpressionContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_typeofTypeSpecifierExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(626); + match(Typeof); + setState(627); + match(LeftParen); + setState(628); + typeSpecifierIdentifier(); + setState(629); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TypeSpecifierIdentifierContext extends KipperParserRuleContext { + public TerminalNode Identifier() { return getToken(KipperParser.Identifier, 0); } + public TerminalNode Null() { return getToken(KipperParser.Null, 0); } + public TerminalNode Undefined() { return getToken(KipperParser.Undefined, 0); } + public TerminalNode Void() { return getToken(KipperParser.Void, 0); } + public TypeSpecifierIdentifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeSpecifierIdentifier; } + } + + public final TypeSpecifierIdentifierContext typeSpecifierIdentifier() throws RecognitionException { + TypeSpecifierIdentifierContext _localctx = new TypeSpecifierIdentifierContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_typeSpecifierIdentifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(631); + _la = _input.LA(1); + if ( !(((((_la - 26)) & ~0x3f) == 0 && ((1L << (_la - 26)) & 35184372088839L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 40: + return computedPrimaryExpression_sempred((ComputedPrimaryExpressionContext)_localctx, predIndex); + case 53: + return multiplicativeExpression_sempred((MultiplicativeExpressionContext)_localctx, predIndex); + case 54: + return additiveExpression_sempred((AdditiveExpressionContext)_localctx, predIndex); + case 55: + return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); + case 56: + return equalityExpression_sempred((EqualityExpressionContext)_localctx, predIndex); + case 57: + return bitwiseAndExpression_sempred((BitwiseAndExpressionContext)_localctx, predIndex); + case 58: + return bitwiseXorExpression_sempred((BitwiseXorExpressionContext)_localctx, predIndex); + case 59: + return bitwiseOrExpression_sempred((BitwiseOrExpressionContext)_localctx, predIndex); + case 60: + return logicalAndExpression_sempred((LogicalAndExpressionContext)_localctx, predIndex); + case 61: + return logicalOrExpression_sempred((LogicalOrExpressionContext)_localctx, predIndex); + } + return true; + } + private boolean computedPrimaryExpression_sempred(ComputedPrimaryExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 5); + case 1: + return precpred(_ctx, 3); + case 2: + return precpred(_ctx, 2); + case 3: + return precpred(_ctx, 1); + } + return true; + } + private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 4: + return precpred(_ctx, 1); + } + return true; + } + private boolean additiveExpression_sempred(AdditiveExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 5: + return precpred(_ctx, 1); + } + return true; + } + private boolean relationalExpression_sempred(RelationalExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 6: + return precpred(_ctx, 1); + } + return true; + } + private boolean equalityExpression_sempred(EqualityExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 7: + return precpred(_ctx, 1); + } + return true; + } + private boolean bitwiseAndExpression_sempred(BitwiseAndExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 8: + return precpred(_ctx, 1); + } + return true; + } + private boolean bitwiseXorExpression_sempred(BitwiseXorExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 9: + return precpred(_ctx, 1); + } + return true; + } + private boolean bitwiseOrExpression_sempred(BitwiseOrExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 10: + return precpred(_ctx, 1); + } + return true; + } + private boolean logicalAndExpression_sempred(LogicalAndExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 11: + return precpred(_ctx, 1); + } + return true; + } + private boolean logicalOrExpression_sempred(LogicalOrExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 12: + return precpred(_ctx, 1); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001S\u027a\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ + "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ + "\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+ + "\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+ + "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+ + "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ + "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ + "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ + "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+ + "#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+ + "(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+ + "-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+ + "2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+ + "7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+ + "<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+ + "A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+ + "F\u0007F\u0001\u0000\u0003\u0000\u0090\b\u0000\u0001\u0000\u0001\u0000"+ + "\u0001\u0001\u0004\u0001\u0095\b\u0001\u000b\u0001\f\u0001\u0096\u0001"+ + "\u0002\u0001\u0002\u0001\u0003\u0004\u0003\u009c\b\u0003\u000b\u0003\f"+ + "\u0003\u009d\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004\u00a3\b\u0004"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005"+ + "\u00aa\b\u0005\u0003\u0005\u00ac\b\u0005\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0003\u0006\u00b2\b\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0003\u0006\u00b8\b\u0006\u0001\u0007\u0001\u0007\u0001"+ + "\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\u000b\u0001"+ + "\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0003\u000b\u00c8\b\u000b\u0001"+ + "\f\u0001\f\u0001\f\u0005\f\u00cd\b\f\n\f\f\f\u00d0\t\f\u0001\r\u0001\r"+ + "\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u00de\b\u000f\u0001"+ + "\u0010\u0001\u0010\u0003\u0010\u00e2\b\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0003\u0012\u00eb"+ + "\b\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0013\u0003\u0013\u00f4\b\u0013\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0005\u0014\u00fc\b\u0014\n"+ + "\u0014\f\u0014\u00ff\t\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ + "\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ + "\u0015\u0003\u0015\u010b\b\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0003"+ + "\u0016\u0110\b\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003"+ + "\u0017\u0116\b\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u011a\b\u0017"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u0120\b\u0017"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u0126\b\u0017"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0003\u001b\u013e\b\u001b"+ + "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u014a\b\u001c"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e"+ + "\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0005"+ + "\"\u015a\b\"\n\"\f\"\u015d\t\"\u0001\"\u0001\"\u0001\"\u0005\"\u0162\b"+ + "\"\n\"\f\"\u0165\t\"\u0001\"\u0003\"\u0168\b\"\u0001#\u0001#\u0001#\u0003"+ + "#\u016d\b#\u0001#\u0003#\u0170\b#\u0001$\u0001$\u0001$\u0003$\u0175\b"+ + "$\u0001$\u0003$\u0178\b$\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0005"+ + "&\u0180\b&\n&\f&\u0183\t&\u0003&\u0185\b&\u0001&\u0001&\u0001\'\u0001"+ + "\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0003(\u0191\b(\u0001(\u0001"+ + "(\u0001(\u0003(\u0196\b(\u0001(\u0001(\u0001(\u0003(\u019b\b(\u0001(\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+ + "(\u0001(\u0001(\u0005(\u01ab\b(\n(\f(\u01ae\t(\u0001)\u0001)\u0001)\u0005"+ + ")\u01b3\b)\n)\f)\u01b6\t)\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001"+ + "+\u0001,\u0001,\u0001,\u0001,\u0003,\u01c3\b,\u0001,\u0001,\u0001,\u0001"+ + ",\u0003,\u01c9\b,\u0001,\u0001,\u0001-\u0001-\u0003-\u01cf\b-\u0001.\u0001"+ + ".\u0001.\u0001/\u0001/\u0001/\u0003/\u01d7\b/\u00010\u00010\u00010\u0001"+ + "1\u00011\u00011\u00012\u00012\u00013\u00013\u00014\u00014\u00014\u0001"+ + "4\u00014\u00034\u01e8\b4\u00015\u00015\u00015\u00015\u00015\u00015\u0005"+ + "5\u01f0\b5\n5\f5\u01f3\t5\u00016\u00016\u00016\u00016\u00016\u00016\u0005"+ + "6\u01fb\b6\n6\f6\u01fe\t6\u00017\u00017\u00017\u00017\u00017\u00017\u0005"+ + "7\u0206\b7\n7\f7\u0209\t7\u00018\u00018\u00018\u00018\u00018\u00018\u0005"+ + "8\u0211\b8\n8\f8\u0214\t8\u00019\u00019\u00019\u00019\u00019\u00019\u0005"+ + "9\u021c\b9\n9\f9\u021f\t9\u0001:\u0001:\u0001:\u0001:\u0001:\u0001:\u0005"+ + ":\u0227\b:\n:\f:\u022a\t:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0005"+ + ";\u0232\b;\n;\f;\u0235\t;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0005"+ + "<\u023d\b<\n<\f<\u0240\t<\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0005"+ + "=\u0248\b=\n=\f=\u024b\t=\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001"+ + ">\u0003>\u0254\b>\u0001?\u0001?\u0001?\u0001?\u0001?\u0003?\u025b\b?\u0001"+ + "@\u0001@\u0001A\u0001A\u0001A\u0005A\u0262\bA\nA\fA\u0265\tA\u0001B\u0001"+ + "B\u0001B\u0003B\u026a\bB\u0001C\u0001C\u0001D\u0001D\u0001D\u0001D\u0001"+ + "D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001F\u0000\nPjln"+ + "prtvxzG\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018"+ + "\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080"+ + "\u0082\u0084\u0086\u0088\u008a\u008c\u0000\u000e\u0001\u0000\u0004\u0005"+ + "\u0001\u0000\u000b\f\u0001\u0000\u0017\u0018\u0001\u0000IJ\u0002\u0000"+ + "HHKK\u0001\u0000\u001a\u001c\u0002\u0000))++\u0003\u0000((**22\u0001\u0000"+ + ",/\u0002\u0000((**\u0001\u0000;>\u0001\u00009:\u0001\u000038\u0002\u0000"+ + "\u001a\u001cGG\u027a\u0000\u008f\u0001\u0000\u0000\u0000\u0002\u0094\u0001"+ + "\u0000\u0000\u0000\u0004\u0098\u0001\u0000\u0000\u0000\u0006\u009b\u0001"+ + "\u0000\u0000\u0000\b\u00a2\u0001\u0000\u0000\u0000\n\u00ab\u0001\u0000"+ + "\u0000\u0000\f\u00ad\u0001\u0000\u0000\u0000\u000e\u00b9\u0001\u0000\u0000"+ + "\u0000\u0010\u00bc\u0001\u0000\u0000\u0000\u0012\u00be\u0001\u0000\u0000"+ + "\u0000\u0014\u00c0\u0001\u0000\u0000\u0000\u0016\u00c2\u0001\u0000\u0000"+ + "\u0000\u0018\u00c9\u0001\u0000\u0000\u0000\u001a\u00d1\u0001\u0000\u0000"+ + "\u0000\u001c\u00d5\u0001\u0000\u0000\u0000\u001e\u00dd\u0001\u0000\u0000"+ + "\u0000 \u00df\u0001\u0000\u0000\u0000\"\u00e5\u0001\u0000\u0000\u0000"+ + "$\u00ea\u0001\u0000\u0000\u0000&\u00ec\u0001\u0000\u0000\u0000(\u00f5"+ + "\u0001\u0000\u0000\u0000*\u010a\u0001\u0000\u0000\u0000,\u010f\u0001\u0000"+ + "\u0000\u0000.\u0111\u0001\u0000\u0000\u00000\u012a\u0001\u0000\u0000\u0000"+ + "2\u0130\u0001\u0000\u0000\u00004\u0138\u0001\u0000\u0000\u00006\u013b"+ + "\u0001\u0000\u0000\u00008\u0149\u0001\u0000\u0000\u0000:\u014b\u0001\u0000"+ + "\u0000\u0000<\u014f\u0001\u0000\u0000\u0000>\u0151\u0001\u0000\u0000\u0000"+ + "@\u0153\u0001\u0000\u0000\u0000B\u0155\u0001\u0000\u0000\u0000D\u0167"+ + "\u0001\u0000\u0000\u0000F\u016f\u0001\u0000\u0000\u0000H\u0177\u0001\u0000"+ + "\u0000\u0000J\u0179\u0001\u0000\u0000\u0000L\u017b\u0001\u0000\u0000\u0000"+ + "N\u0188\u0001\u0000\u0000\u0000P\u0195\u0001\u0000\u0000\u0000R\u01af"+ + "\u0001\u0000\u0000\u0000T\u01b7\u0001\u0000\u0000\u0000V\u01ba\u0001\u0000"+ + "\u0000\u0000X\u01be\u0001\u0000\u0000\u0000Z\u01ce\u0001\u0000\u0000\u0000"+ + "\\\u01d0\u0001\u0000\u0000\u0000^\u01d6\u0001\u0000\u0000\u0000`\u01d8"+ + "\u0001\u0000\u0000\u0000b\u01db\u0001\u0000\u0000\u0000d\u01de\u0001\u0000"+ + "\u0000\u0000f\u01e0\u0001\u0000\u0000\u0000h\u01e7\u0001\u0000\u0000\u0000"+ + "j\u01e9\u0001\u0000\u0000\u0000l\u01f4\u0001\u0000\u0000\u0000n\u01ff"+ + "\u0001\u0000\u0000\u0000p\u020a\u0001\u0000\u0000\u0000r\u0215\u0001\u0000"+ + "\u0000\u0000t\u0220\u0001\u0000\u0000\u0000v\u022b\u0001\u0000\u0000\u0000"+ + "x\u0236\u0001\u0000\u0000\u0000z\u0241\u0001\u0000\u0000\u0000|\u0253"+ + "\u0001\u0000\u0000\u0000~\u025a\u0001\u0000\u0000\u0000\u0080\u025c\u0001"+ + "\u0000\u0000\u0000\u0082\u025e\u0001\u0000\u0000\u0000\u0084\u0269\u0001"+ + "\u0000\u0000\u0000\u0086\u026b\u0001\u0000\u0000\u0000\u0088\u026d\u0001"+ + "\u0000\u0000\u0000\u008a\u0272\u0001\u0000\u0000\u0000\u008c\u0277\u0001"+ + "\u0000\u0000\u0000\u008e\u0090\u0003\u0002\u0001\u0000\u008f\u008e\u0001"+ + "\u0000\u0000\u0000\u008f\u0090\u0001\u0000\u0000\u0000\u0090\u0091\u0001"+ + "\u0000\u0000\u0000\u0091\u0092\u0005\u0000\u0000\u0001\u0092\u0001\u0001"+ + "\u0000\u0000\u0000\u0093\u0095\u0003\u0004\u0002\u0000\u0094\u0093\u0001"+ + "\u0000\u0000\u0000\u0095\u0096\u0001\u0000\u0000\u0000\u0096\u0094\u0001"+ + "\u0000\u0000\u0000\u0096\u0097\u0001\u0000\u0000\u0000\u0097\u0003\u0001"+ + "\u0000\u0000\u0000\u0098\u0099\u0003\u0006\u0003\u0000\u0099\u0005\u0001"+ + "\u0000\u0000\u0000\u009a\u009c\u0003\b\u0004\u0000\u009b\u009a\u0001\u0000"+ + "\u0000\u0000\u009c\u009d\u0001\u0000\u0000\u0000\u009d\u009b\u0001\u0000"+ + "\u0000\u0000\u009d\u009e\u0001\u0000\u0000\u0000\u009e\u0007\u0001\u0000"+ + "\u0000\u0000\u009f\u00a3\u0003\u001e\u000f\u0000\u00a0\u00a3\u0003\n\u0005"+ + "\u0000\u00a1\u00a3\u0005\u001e\u0000\u0000\u00a2\u009f\u0001\u0000\u0000"+ + "\u0000\u00a2\u00a0\u0001\u0000\u0000\u0000\u00a2\u00a1\u0001\u0000\u0000"+ + "\u0000\u00a3\t\u0001\u0000\u0000\u0000\u00a4\u00a5\u0003\u000e\u0007\u0000"+ + "\u00a5\u00a6\u0005\u001e\u0000\u0000\u00a6\u00ac\u0001\u0000\u0000\u0000"+ + "\u00a7\u00a9\u0003\f\u0006\u0000\u00a8\u00aa\u0005\u001e\u0000\u0000\u00a9"+ + "\u00a8\u0001\u0000\u0000\u0000\u00a9\u00aa\u0001\u0000\u0000\u0000\u00aa"+ + "\u00ac\u0001\u0000\u0000\u0000\u00ab\u00a4\u0001\u0000\u0000\u0000\u00ab"+ + "\u00a7\u0001\u0000\u0000\u0000\u00ac\u000b\u0001\u0000\u0000\u0000\u00ad"+ + "\u00ae\u0005\u0013\u0000\u0000\u00ae\u00af\u0003\u0012\t\u0000\u00af\u00b1"+ + "\u0005!\u0000\u0000\u00b0\u00b2\u0003\u0018\f\u0000\u00b1\u00b0\u0001"+ + "\u0000\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3\u0001"+ + "\u0000\u0000\u0000\u00b3\u00b4\u0005\"\u0000\u0000\u00b4\u00b5\u0005\u0016"+ + "\u0000\u0000\u00b5\u00b7\u0003\u0084B\u0000\u00b6\u00b8\u0003 \u0010\u0000"+ + "\u00b7\u00b6\u0001\u0000\u0000\u0000\u00b7\u00b8\u0001\u0000\u0000\u0000"+ + "\u00b8\r\u0001\u0000\u0000\u0000\u00b9\u00ba\u0003\u0010\b\u0000\u00ba"+ + "\u00bb\u0003\u0016\u000b\u0000\u00bb\u000f\u0001\u0000\u0000\u0000\u00bc"+ + "\u00bd\u0007\u0000\u0000\u0000\u00bd\u0011\u0001\u0000\u0000\u0000\u00be"+ + "\u00bf\u0003\u0014\n\u0000\u00bf\u0013\u0001\u0000\u0000\u0000\u00c0\u00c1"+ + "\u0005G\u0000\u0000\u00c1\u0015\u0001\u0000\u0000\u0000\u00c2\u00c3\u0003"+ + "\u0012\t\u0000\u00c3\u00c4\u0005 \u0000\u0000\u00c4\u00c7\u0003\u0084"+ + "B\u0000\u00c5\u00c6\u00053\u0000\u0000\u00c6\u00c8\u0003\u001c\u000e\u0000"+ + "\u00c7\u00c5\u0001\u0000\u0000\u0000\u00c7\u00c8\u0001\u0000\u0000\u0000"+ + "\u00c8\u0017\u0001\u0000\u0000\u0000\u00c9\u00ce\u0003\u001a\r\u0000\u00ca"+ + "\u00cb\u0005\u001d\u0000\u0000\u00cb\u00cd\u0003\u001a\r\u0000\u00cc\u00ca"+ + "\u0001\u0000\u0000\u0000\u00cd\u00d0\u0001\u0000\u0000\u0000\u00ce\u00cc"+ + "\u0001\u0000\u0000\u0000\u00ce\u00cf\u0001\u0000\u0000\u0000\u00cf\u0019"+ + "\u0001\u0000\u0000\u0000\u00d0\u00ce\u0001\u0000\u0000\u0000\u00d1\u00d2"+ + "\u0003\u0012\t\u0000\u00d2\u00d3\u0005 \u0000\u0000\u00d3\u00d4\u0003"+ + "\u0084B\u0000\u00d4\u001b\u0001\u0000\u0000\u0000\u00d5\u00d6\u0003~?"+ + "\u0000\u00d6\u001d\u0001\u0000\u0000\u0000\u00d7\u00de\u0003 \u0010\u0000"+ + "\u00d8\u00de\u0003\"\u0011\u0000\u00d9\u00de\u0003$\u0012\u0000\u00da"+ + "\u00de\u0003,\u0016\u0000\u00db\u00de\u00034\u001a\u0000\u00dc\u00de\u0003"+ + "6\u001b\u0000\u00dd\u00d7\u0001\u0000\u0000\u0000\u00dd\u00d8\u0001\u0000"+ + "\u0000\u0000\u00dd\u00d9\u0001\u0000\u0000\u0000\u00dd\u00da\u0001\u0000"+ + "\u0000\u0000\u00dd\u00db\u0001\u0000\u0000\u0000\u00dd\u00dc\u0001\u0000"+ + "\u0000\u0000\u00de\u001f\u0001\u0000\u0000\u0000\u00df\u00e1\u0005&\u0000"+ + "\u0000\u00e0\u00e2\u0003\u0006\u0003\u0000\u00e1\u00e0\u0001\u0000\u0000"+ + "\u0000\u00e1\u00e2\u0001\u0000\u0000\u0000\u00e2\u00e3\u0001\u0000\u0000"+ + "\u0000\u00e3\u00e4\u0005\'\u0000\u0000\u00e4!\u0001\u0000\u0000\u0000"+ + "\u00e5\u00e6\u0003\u0082A\u0000\u00e6\u00e7\u0005\u001e\u0000\u0000\u00e7"+ + "#\u0001\u0000\u0000\u0000\u00e8\u00eb\u0003&\u0013\u0000\u00e9\u00eb\u0003"+ + "(\u0014\u0000\u00ea\u00e8\u0001\u0000\u0000\u0000\u00ea\u00e9\u0001\u0000"+ + "\u0000\u0000\u00eb%\u0001\u0000\u0000\u0000\u00ec\u00ed\u0005\u000f\u0000"+ + "\u0000\u00ed\u00ee\u0005!\u0000\u0000\u00ee\u00ef\u0003\u0082A\u0000\u00ef"+ + "\u00f0\u0005\"\u0000\u0000\u00f0\u00f3\u0003\u001e\u000f\u0000\u00f1\u00f2"+ + "\u0005\u0010\u0000\u0000\u00f2\u00f4\u0003\u001e\u000f\u0000\u00f3\u00f1"+ + "\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000\u00f4\'\u0001"+ + "\u0000\u0000\u0000\u00f5\u00f6\u0005\b\u0000\u0000\u00f6\u00f7\u0005!"+ + "\u0000\u0000\u00f7\u00f8\u0003\u0082A\u0000\u00f8\u00f9\u0005\"\u0000"+ + "\u0000\u00f9\u00fd\u0005&\u0000\u0000\u00fa\u00fc\u0003*\u0015\u0000\u00fb"+ + "\u00fa\u0001\u0000\u0000\u0000\u00fc\u00ff\u0001\u0000\u0000\u0000\u00fd"+ + "\u00fb\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001\u0000\u0000\u0000\u00fe"+ + "\u0100\u0001\u0000\u0000\u0000\u00ff\u00fd\u0001\u0000\u0000\u0000\u0100"+ + "\u0101\u0005\'\u0000\u0000\u0101)\u0001\u0000\u0000\u0000\u0102\u0103"+ + "\u0005\t\u0000\u0000\u0103\u0104\u0003\u0082A\u0000\u0104\u0105\u0005"+ + " \u0000\u0000\u0105\u0106\u0003\u001e\u000f\u0000\u0106\u010b\u0001\u0000"+ + "\u0000\u0000\u0107\u0108\u0005\n\u0000\u0000\u0108\u0109\u0005 \u0000"+ + "\u0000\u0109\u010b\u0003\u001e\u000f\u0000\u010a\u0102\u0001\u0000\u0000"+ + "\u0000\u010a\u0107\u0001\u0000\u0000\u0000\u010b+\u0001\u0000\u0000\u0000"+ + "\u010c\u0110\u0003.\u0017\u0000\u010d\u0110\u00030\u0018\u0000\u010e\u0110"+ + "\u00032\u0019\u0000\u010f\u010c\u0001\u0000\u0000\u0000\u010f\u010d\u0001"+ + "\u0000\u0000\u0000\u010f\u010e\u0001\u0000\u0000\u0000\u0110-\u0001\u0000"+ + "\u0000\u0000\u0111\u0112\u0005\u0011\u0000\u0000\u0112\u0119\u0005!\u0000"+ + "\u0000\u0113\u0116\u0003\u000e\u0007\u0000\u0114\u0116\u0003\u0082A\u0000"+ + "\u0115\u0113\u0001\u0000\u0000\u0000\u0115\u0114\u0001\u0000\u0000\u0000"+ + "\u0116\u0117\u0001\u0000\u0000\u0000\u0117\u0118\u0006\u0017\uffff\uffff"+ + "\u0000\u0118\u011a\u0001\u0000\u0000\u0000\u0119\u0115\u0001\u0000\u0000"+ + "\u0000\u0119\u011a\u0001\u0000\u0000\u0000\u011a\u011b\u0001\u0000\u0000"+ + "\u0000\u011b\u011f\u0005\u001e\u0000\u0000\u011c\u011d\u0003\u0082A\u0000"+ + "\u011d\u011e\u0006\u0017\uffff\uffff\u0000\u011e\u0120\u0001\u0000\u0000"+ + "\u0000\u011f\u011c\u0001\u0000\u0000\u0000\u011f\u0120\u0001\u0000\u0000"+ + "\u0000\u0120\u0121\u0001\u0000\u0000\u0000\u0121\u0125\u0005\u001e\u0000"+ + "\u0000\u0122\u0123\u0003\u0082A\u0000\u0123\u0124\u0006\u0017\uffff\uffff"+ + "\u0000\u0124\u0126\u0001\u0000\u0000\u0000\u0125\u0122\u0001\u0000\u0000"+ + "\u0000\u0125\u0126\u0001\u0000\u0000\u0000\u0126\u0127\u0001\u0000\u0000"+ + "\u0000\u0127\u0128\u0005\"\u0000\u0000\u0128\u0129\u0003\u001e\u000f\u0000"+ + "\u0129/\u0001\u0000\u0000\u0000\u012a\u012b\u0005\u000e\u0000\u0000\u012b"+ + "\u012c\u0005!\u0000\u0000\u012c\u012d\u0003\u0082A\u0000\u012d\u012e\u0005"+ + "\"\u0000\u0000\u012e\u012f\u0003\u001e\u000f\u0000\u012f1\u0001\u0000"+ + "\u0000\u0000\u0130\u0131\u0005\r\u0000\u0000\u0131\u0132\u0003\u001e\u000f"+ + "\u0000\u0132\u0133\u0005\u000e\u0000\u0000\u0133\u0134\u0005!\u0000\u0000"+ + "\u0134\u0135\u0003\u0082A\u0000\u0135\u0136\u0005\"\u0000\u0000\u0136"+ + "\u0137\u0005\u001e\u0000\u0000\u01373\u0001\u0000\u0000\u0000\u0138\u0139"+ + "\u0007\u0001\u0000\u0000\u0139\u013a\u0005\u001e\u0000\u0000\u013a5\u0001"+ + "\u0000\u0000\u0000\u013b\u013d\u0005\u0014\u0000\u0000\u013c\u013e\u0003"+ + "\u0082A\u0000\u013d\u013c\u0001\u0000\u0000\u0000\u013d\u013e\u0001\u0000"+ + "\u0000\u0000\u013e\u013f\u0001\u0000\u0000\u0000\u013f\u0140\u0005\u001e"+ + "\u0000\u0000\u01407\u0001\u0000\u0000\u0000\u0141\u014a\u0003:\u001d\u0000"+ + "\u0142\u014a\u0003<\u001e\u0000\u0143\u014a\u0003>\u001f\u0000\u0144\u014a"+ + "\u0003B!\u0000\u0145\u014a\u0003D\"\u0000\u0146\u014a\u0003J%\u0000\u0147"+ + "\u014a\u0003L&\u0000\u0148\u014a\u0003N\'\u0000\u0149\u0141\u0001\u0000"+ + "\u0000\u0000\u0149\u0142\u0001\u0000\u0000\u0000\u0149\u0143\u0001\u0000"+ + "\u0000\u0000\u0149\u0144\u0001\u0000\u0000\u0000\u0149\u0145\u0001\u0000"+ + "\u0000\u0000\u0149\u0146\u0001\u0000\u0000\u0000\u0149\u0147\u0001\u0000"+ + "\u0000\u0000\u0149\u0148\u0001\u0000\u0000\u0000\u014a9\u0001\u0000\u0000"+ + "\u0000\u014b\u014c\u0005!\u0000\u0000\u014c\u014d\u0003\u0082A\u0000\u014d"+ + "\u014e\u0005\"\u0000\u0000\u014e;\u0001\u0000\u0000\u0000\u014f\u0150"+ + "\u0007\u0002\u0000\u0000\u0150=\u0001\u0000\u0000\u0000\u0151\u0152\u0003"+ + "@ \u0000\u0152?\u0001\u0000\u0000\u0000\u0153\u0154\u0005G\u0000\u0000"+ + "\u0154A\u0001\u0000\u0000\u0000\u0155\u0156\u0007\u0003\u0000\u0000\u0156"+ + "C\u0001\u0000\u0000\u0000\u0157\u015b\u0005N\u0000\u0000\u0158\u015a\u0003"+ + "F#\u0000\u0159\u0158\u0001\u0000\u0000\u0000\u015a\u015d\u0001\u0000\u0000"+ + "\u0000\u015b\u0159\u0001\u0000\u0000\u0000\u015b\u015c\u0001\u0000\u0000"+ + "\u0000\u015c\u015e\u0001\u0000\u0000\u0000\u015d\u015b\u0001\u0000\u0000"+ + "\u0000\u015e\u0168\u0005P\u0000\u0000\u015f\u0163\u0005O\u0000\u0000\u0160"+ + "\u0162\u0003H$\u0000\u0161\u0160\u0001\u0000\u0000\u0000\u0162\u0165\u0001"+ + "\u0000\u0000\u0000\u0163\u0161\u0001\u0000\u0000\u0000\u0163\u0164\u0001"+ + "\u0000\u0000\u0000\u0164\u0166\u0001\u0000\u0000\u0000\u0165\u0163\u0001"+ + "\u0000\u0000\u0000\u0166\u0168\u0005R\u0000\u0000\u0167\u0157\u0001\u0000"+ + "\u0000\u0000\u0167\u015f\u0001\u0000\u0000\u0000\u0168E\u0001\u0000\u0000"+ + "\u0000\u0169\u0170\u0005Q\u0000\u0000\u016a\u016c\u0005\u0001\u0000\u0000"+ + "\u016b\u016d\u0003\u0082A\u0000\u016c\u016b\u0001\u0000\u0000\u0000\u016c"+ + "\u016d\u0001\u0000\u0000\u0000\u016d\u016e\u0001\u0000\u0000\u0000\u016e"+ + "\u0170\u0005%\u0000\u0000\u016f\u0169\u0001\u0000\u0000\u0000\u016f\u016a"+ + "\u0001\u0000\u0000\u0000\u0170G\u0001\u0000\u0000\u0000\u0171\u0178\u0005"+ + "S\u0000\u0000\u0172\u0174\u0005\u0001\u0000\u0000\u0173\u0175\u0003\u0082"+ + "A\u0000\u0174\u0173\u0001\u0000\u0000\u0000\u0174\u0175\u0001\u0000\u0000"+ + "\u0000\u0175\u0176\u0001\u0000\u0000\u0000\u0176\u0178\u0005%\u0000\u0000"+ + "\u0177\u0171\u0001\u0000\u0000\u0000\u0177\u0172\u0001\u0000\u0000\u0000"+ + "\u0178I\u0001\u0000\u0000\u0000\u0179\u017a\u0007\u0004\u0000\u0000\u017a"+ + "K\u0001\u0000\u0000\u0000\u017b\u0184\u0005#\u0000\u0000\u017c\u0181\u0003"+ + "\u0082A\u0000\u017d\u017e\u0005\u001d\u0000\u0000\u017e\u0180\u0003\u0082"+ + "A\u0000\u017f\u017d\u0001\u0000\u0000\u0000\u0180\u0183\u0001\u0000\u0000"+ + "\u0000\u0181\u017f\u0001\u0000\u0000\u0000\u0181\u0182\u0001\u0000\u0000"+ + "\u0000\u0182\u0185\u0001\u0000\u0000\u0000\u0183\u0181\u0001\u0000\u0000"+ + "\u0000\u0184\u017c\u0001\u0000\u0000\u0000\u0184\u0185\u0001\u0000\u0000"+ + "\u0000\u0185\u0186\u0001\u0000\u0000\u0000\u0186\u0187\u0005$\u0000\u0000"+ + "\u0187M\u0001\u0000\u0000\u0000\u0188\u0189\u0007\u0005\u0000\u0000\u0189"+ + "O\u0001\u0000\u0000\u0000\u018a\u018b\u0006(\uffff\uffff\u0000\u018b\u0196"+ + "\u00038\u001c\u0000\u018c\u018d\u0005\u0015\u0000\u0000\u018d\u018e\u0003"+ + "P(\u0000\u018e\u0190\u0005!\u0000\u0000\u018f\u0191\u0003R)\u0000\u0190"+ + "\u018f\u0001\u0000\u0000\u0000\u0190\u0191\u0001\u0000\u0000\u0000\u0191"+ + "\u0192\u0001\u0000\u0000\u0000\u0192\u0193\u0005\"\u0000\u0000\u0193\u0194"+ + "\u0006(\uffff\uffff\u0000\u0194\u0196\u0001\u0000\u0000\u0000\u0195\u018a"+ + "\u0001\u0000\u0000\u0000\u0195\u018c\u0001\u0000\u0000\u0000\u0196\u01ac"+ + "\u0001\u0000\u0000\u0000\u0197\u0198\n\u0005\u0000\u0000\u0198\u019a\u0005"+ + "!\u0000\u0000\u0199\u019b\u0003R)\u0000\u019a\u0199\u0001\u0000\u0000"+ + "\u0000\u019a\u019b\u0001\u0000\u0000\u0000\u019b\u019c\u0001\u0000\u0000"+ + "\u0000\u019c\u019d\u0005\"\u0000\u0000\u019d\u01ab\u0006(\uffff\uffff"+ + "\u0000\u019e\u019f\n\u0003\u0000\u0000\u019f\u01a0\u0003T*\u0000\u01a0"+ + "\u01a1\u0006(\uffff\uffff\u0000\u01a1\u01ab\u0001\u0000\u0000\u0000\u01a2"+ + "\u01a3\n\u0002\u0000\u0000\u01a3\u01a4\u0003V+\u0000\u01a4\u01a5\u0006"+ + "(\uffff\uffff\u0000\u01a5\u01ab\u0001\u0000\u0000\u0000\u01a6\u01a7\n"+ + "\u0001\u0000\u0000\u01a7\u01a8\u0003X,\u0000\u01a8\u01a9\u0006(\uffff"+ + "\uffff\u0000\u01a9\u01ab\u0001\u0000\u0000\u0000\u01aa\u0197\u0001\u0000"+ + "\u0000\u0000\u01aa\u019e\u0001\u0000\u0000\u0000\u01aa\u01a2\u0001\u0000"+ + "\u0000\u0000\u01aa\u01a6\u0001\u0000\u0000\u0000\u01ab\u01ae\u0001\u0000"+ + "\u0000\u0000\u01ac\u01aa\u0001\u0000\u0000\u0000\u01ac\u01ad\u0001\u0000"+ + "\u0000\u0000\u01adQ\u0001\u0000\u0000\u0000\u01ae\u01ac\u0001\u0000\u0000"+ + "\u0000\u01af\u01b4\u0003~?\u0000\u01b0\u01b1\u0005\u001d\u0000\u0000\u01b1"+ + "\u01b3\u0003~?\u0000\u01b2\u01b0\u0001\u0000\u0000\u0000\u01b3\u01b6\u0001"+ + "\u0000\u0000\u0000\u01b4\u01b2\u0001\u0000\u0000\u0000\u01b4\u01b5\u0001"+ + "\u0000\u0000\u0000\u01b5S\u0001\u0000\u0000\u0000\u01b6\u01b4\u0001\u0000"+ + "\u0000\u0000\u01b7\u01b8\u0005F\u0000\u0000\u01b8\u01b9\u0003@ \u0000"+ + "\u01b9U\u0001\u0000\u0000\u0000\u01ba\u01bb\u0005#\u0000\u0000\u01bb\u01bc"+ + "\u0003\u0082A\u0000\u01bc\u01bd\u0005$\u0000\u0000\u01bdW\u0001\u0000"+ + "\u0000\u0000\u01be\u01c2\u0005#\u0000\u0000\u01bf\u01c0\u0003\u0082A\u0000"+ + "\u01c0\u01c1\u0006,\uffff\uffff\u0000\u01c1\u01c3\u0001\u0000\u0000\u0000"+ + "\u01c2\u01bf\u0001\u0000\u0000\u0000\u01c2\u01c3\u0001\u0000\u0000\u0000"+ + "\u01c3\u01c4\u0001\u0000\u0000\u0000\u01c4\u01c8\u0005 \u0000\u0000\u01c5"+ + "\u01c6\u0003\u0082A\u0000\u01c6\u01c7\u0006,\uffff\uffff\u0000\u01c7\u01c9"+ + "\u0001\u0000\u0000\u0000\u01c8\u01c5\u0001\u0000\u0000\u0000\u01c8\u01c9"+ + "\u0001\u0000\u0000\u0000\u01c9\u01ca\u0001\u0000\u0000\u0000\u01ca\u01cb"+ + "\u0005$\u0000\u0000\u01cbY\u0001\u0000\u0000\u0000\u01cc\u01cf\u0003P"+ + "(\u0000\u01cd\u01cf\u0003\\.\u0000\u01ce\u01cc\u0001\u0000\u0000\u0000"+ + "\u01ce\u01cd\u0001\u0000\u0000\u0000\u01cf[\u0001\u0000\u0000\u0000\u01d0"+ + "\u01d1\u0003P(\u0000\u01d1\u01d2\u0003d2\u0000\u01d2]\u0001\u0000\u0000"+ + "\u0000\u01d3\u01d7\u0003Z-\u0000\u01d4\u01d7\u0003`0\u0000\u01d5\u01d7"+ + "\u0003b1\u0000\u01d6\u01d3\u0001\u0000\u0000\u0000\u01d6\u01d4\u0001\u0000"+ + "\u0000\u0000\u01d6\u01d5\u0001\u0000\u0000\u0000\u01d7_\u0001\u0000\u0000"+ + "\u0000\u01d8\u01d9\u0003d2\u0000\u01d9\u01da\u0003Z-\u0000\u01daa\u0001"+ + "\u0000\u0000\u0000\u01db\u01dc\u0003f3\u0000\u01dc\u01dd\u0003Z-\u0000"+ + "\u01ddc\u0001\u0000\u0000\u0000\u01de\u01df\u0007\u0006\u0000\u0000\u01df"+ + "e\u0001\u0000\u0000\u0000\u01e0\u01e1\u0007\u0007\u0000\u0000\u01e1g\u0001"+ + "\u0000\u0000\u0000\u01e2\u01e8\u0003^/\u0000\u01e3\u01e4\u0003^/\u0000"+ + "\u01e4\u01e5\u0005\u0006\u0000\u0000\u01e5\u01e6\u0003\u0084B\u0000\u01e6"+ + "\u01e8\u0001\u0000\u0000\u0000\u01e7\u01e2\u0001\u0000\u0000\u0000\u01e7"+ + "\u01e3\u0001\u0000\u0000\u0000\u01e8i\u0001\u0000\u0000\u0000\u01e9\u01ea"+ + "\u00065\uffff\uffff\u0000\u01ea\u01eb\u0003h4\u0000\u01eb\u01f1\u0001"+ + "\u0000\u0000\u0000\u01ec\u01ed\n\u0001\u0000\u0000\u01ed\u01ee\u0007\b"+ + "\u0000\u0000\u01ee\u01f0\u0003h4\u0000\u01ef\u01ec\u0001\u0000\u0000\u0000"+ + "\u01f0\u01f3\u0001\u0000\u0000\u0000\u01f1\u01ef\u0001\u0000\u0000\u0000"+ + "\u01f1\u01f2\u0001\u0000\u0000\u0000\u01f2k\u0001\u0000\u0000\u0000\u01f3"+ + "\u01f1\u0001\u0000\u0000\u0000\u01f4\u01f5\u00066\uffff\uffff\u0000\u01f5"+ + "\u01f6\u0003j5\u0000\u01f6\u01fc\u0001\u0000\u0000\u0000\u01f7\u01f8\n"+ + "\u0001\u0000\u0000\u01f8\u01f9\u0007\t\u0000\u0000\u01f9\u01fb\u0003j"+ + "5\u0000\u01fa\u01f7\u0001\u0000\u0000\u0000\u01fb\u01fe\u0001\u0000\u0000"+ + "\u0000\u01fc\u01fa\u0001\u0000\u0000\u0000\u01fc\u01fd\u0001\u0000\u0000"+ + "\u0000\u01fdm\u0001\u0000\u0000\u0000\u01fe\u01fc\u0001\u0000\u0000\u0000"+ + "\u01ff\u0200\u00067\uffff\uffff\u0000\u0200\u0201\u0003l6\u0000\u0201"+ + "\u0207\u0001\u0000\u0000\u0000\u0202\u0203\n\u0001\u0000\u0000\u0203\u0204"+ + "\u0007\n\u0000\u0000\u0204\u0206\u0003l6\u0000\u0205\u0202\u0001\u0000"+ + "\u0000\u0000\u0206\u0209\u0001\u0000\u0000\u0000\u0207\u0205\u0001\u0000"+ + "\u0000\u0000\u0207\u0208\u0001\u0000\u0000\u0000\u0208o\u0001\u0000\u0000"+ + "\u0000\u0209\u0207\u0001\u0000\u0000\u0000\u020a\u020b\u00068\uffff\uffff"+ + "\u0000\u020b\u020c\u0003n7\u0000\u020c\u0212\u0001\u0000\u0000\u0000\u020d"+ + "\u020e\n\u0001\u0000\u0000\u020e\u020f\u0007\u000b\u0000\u0000\u020f\u0211"+ + "\u0003n7\u0000\u0210\u020d\u0001\u0000\u0000\u0000\u0211\u0214\u0001\u0000"+ + "\u0000\u0000\u0212\u0210\u0001\u0000\u0000\u0000\u0212\u0213\u0001\u0000"+ + "\u0000\u0000\u0213q\u0001\u0000\u0000\u0000\u0214\u0212\u0001\u0000\u0000"+ + "\u0000\u0215\u0216\u00069\uffff\uffff\u0000\u0216\u0217\u0003p8\u0000"+ + "\u0217\u021d\u0001\u0000\u0000\u0000\u0218\u0219\n\u0001\u0000\u0000\u0219"+ + "\u021a\u0005?\u0000\u0000\u021a\u021c\u0003p8\u0000\u021b\u0218\u0001"+ + "\u0000\u0000\u0000\u021c\u021f\u0001\u0000\u0000\u0000\u021d\u021b\u0001"+ + "\u0000\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000\u021es\u0001\u0000"+ + "\u0000\u0000\u021f\u021d\u0001\u0000\u0000\u0000\u0220\u0221\u0006:\uffff"+ + "\uffff\u0000\u0221\u0222\u0003r9\u0000\u0222\u0228\u0001\u0000\u0000\u0000"+ + "\u0223\u0224\n\u0001\u0000\u0000\u0224\u0225\u0005A\u0000\u0000\u0225"+ + "\u0227\u0003r9\u0000\u0226\u0223\u0001\u0000\u0000\u0000\u0227\u022a\u0001"+ + "\u0000\u0000\u0000\u0228\u0226\u0001\u0000\u0000\u0000\u0228\u0229\u0001"+ + "\u0000\u0000\u0000\u0229u\u0001\u0000\u0000\u0000\u022a\u0228\u0001\u0000"+ + "\u0000\u0000\u022b\u022c\u0006;\uffff\uffff\u0000\u022c\u022d\u0003t:"+ + "\u0000\u022d\u0233\u0001\u0000\u0000\u0000\u022e\u022f\n\u0001\u0000\u0000"+ + "\u022f\u0230\u0005@\u0000\u0000\u0230\u0232\u0003t:\u0000\u0231\u022e"+ + "\u0001\u0000\u0000\u0000\u0232\u0235\u0001\u0000\u0000\u0000\u0233\u0231"+ + "\u0001\u0000\u0000\u0000\u0233\u0234\u0001\u0000\u0000\u0000\u0234w\u0001"+ + "\u0000\u0000\u0000\u0235\u0233\u0001\u0000\u0000\u0000\u0236\u0237\u0006"+ + "<\uffff\uffff\u0000\u0237\u0238\u0003v;\u0000\u0238\u023e\u0001\u0000"+ + "\u0000\u0000\u0239\u023a\n\u0001\u0000\u0000\u023a\u023b\u00050\u0000"+ + "\u0000\u023b\u023d\u0003v;\u0000\u023c\u0239\u0001\u0000\u0000\u0000\u023d"+ + "\u0240\u0001\u0000\u0000\u0000\u023e\u023c\u0001\u0000\u0000\u0000\u023e"+ + "\u023f\u0001\u0000\u0000\u0000\u023fy\u0001\u0000\u0000\u0000\u0240\u023e"+ + "\u0001\u0000\u0000\u0000\u0241\u0242\u0006=\uffff\uffff\u0000\u0242\u0243"+ + "\u0003x<\u0000\u0243\u0249\u0001\u0000\u0000\u0000\u0244\u0245\n\u0001"+ + "\u0000\u0000\u0245\u0246\u00051\u0000\u0000\u0246\u0248\u0003x<\u0000"+ + "\u0247\u0244\u0001\u0000\u0000\u0000\u0248\u024b\u0001\u0000\u0000\u0000"+ + "\u0249\u0247\u0001\u0000\u0000\u0000\u0249\u024a\u0001\u0000\u0000\u0000"+ + "\u024a{\u0001\u0000\u0000\u0000\u024b\u0249\u0001\u0000\u0000\u0000\u024c"+ + "\u0254\u0003z=\u0000\u024d\u024e\u0003z=\u0000\u024e\u024f\u0005\u001f"+ + "\u0000\u0000\u024f\u0250\u0003|>\u0000\u0250\u0251\u0005 \u0000\u0000"+ + "\u0251\u0252\u0003|>\u0000\u0252\u0254\u0001\u0000\u0000\u0000\u0253\u024c"+ + "\u0001\u0000\u0000\u0000\u0253\u024d\u0001\u0000\u0000\u0000\u0254}\u0001"+ + "\u0000\u0000\u0000\u0255\u025b\u0003|>\u0000\u0256\u0257\u0003P(\u0000"+ + "\u0257\u0258\u0003\u0080@\u0000\u0258\u0259\u0003~?\u0000\u0259\u025b"+ + "\u0001\u0000\u0000\u0000\u025a\u0255\u0001\u0000\u0000\u0000\u025a\u0256"+ + "\u0001\u0000\u0000\u0000\u025b\u007f\u0001\u0000\u0000\u0000\u025c\u025d"+ + "\u0007\f\u0000\u0000\u025d\u0081\u0001\u0000\u0000\u0000\u025e\u0263\u0003"+ + "~?\u0000\u025f\u0260\u0005\u001d\u0000\u0000\u0260\u0262\u0003~?\u0000"+ + "\u0261\u025f\u0001\u0000\u0000\u0000\u0262\u0265\u0001\u0000\u0000\u0000"+ + "\u0263\u0261\u0001\u0000\u0000\u0000\u0263\u0264\u0001\u0000\u0000\u0000"+ + "\u0264\u0083\u0001\u0000\u0000\u0000\u0265\u0263\u0001\u0000\u0000\u0000"+ + "\u0266\u026a\u0003\u0086C\u0000\u0267\u026a\u0003\u0088D\u0000\u0268\u026a"+ + "\u0003\u008aE\u0000\u0269\u0266\u0001\u0000\u0000\u0000\u0269\u0267\u0001"+ + "\u0000\u0000\u0000\u0269\u0268\u0001\u0000\u0000\u0000\u026a\u0085\u0001"+ + "\u0000\u0000\u0000\u026b\u026c\u0003\u008cF\u0000\u026c\u0087\u0001\u0000"+ + "\u0000\u0000\u026d\u026e\u0003\u008cF\u0000\u026e\u026f\u0005;\u0000\u0000"+ + "\u026f\u0270\u0003\u008cF\u0000\u0270\u0271\u0005=\u0000\u0000\u0271\u0089"+ + "\u0001\u0000\u0000\u0000\u0272\u0273\u0005\u0019\u0000\u0000\u0273\u0274"+ + "\u0005!\u0000\u0000\u0274\u0275\u0003\u008cF\u0000\u0275\u0276\u0005\""+ + "\u0000\u0000\u0276\u008b\u0001\u0000\u0000\u0000\u0277\u0278\u0007\r\u0000"+ + "\u0000\u0278\u008d\u0001\u0000\u0000\u00008\u008f\u0096\u009d\u00a2\u00a9"+ + "\u00ab\u00b1\u00b7\u00c7\u00ce\u00dd\u00e1\u00ea\u00f3\u00fd\u010a\u010f"+ + "\u0115\u0119\u011f\u0125\u013d\u0149\u015b\u0163\u0167\u016c\u016f\u0174"+ + "\u0177\u0181\u0184\u0190\u0195\u019a\u01aa\u01ac\u01b4\u01c2\u01c8\u01ce"+ + "\u01d6\u01e7\u01f1\u01fc\u0207\u0212\u021d\u0228\u0233\u023e\u0249\u0253"+ + "\u025a\u0263\u0269"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/kipper/core/.antlr/KipperParser.tokens b/kipper/core/.antlr/KipperParser.tokens new file mode 100644 index 000000000..a584d5dce --- /dev/null +++ b/kipper/core/.antlr/KipperParser.tokens @@ -0,0 +1,149 @@ +FStringExpStart=1 +BlockComment=2 +LineComment=3 +Const=4 +Var=5 +As=6 +Spread=7 +Switch=8 +Case=9 +Default=10 +Break=11 +Continue=12 +Do=13 +While=14 +If=15 +Else=16 +For=17 +Enum=18 +DefFunc=19 +Return=20 +CallFunc=21 +RetIndicator=22 +True=23 +False=24 +Typeof=25 +Void=26 +Null=27 +Undefined=28 +Comma=29 +SemiColon=30 +QuestionMark=31 +Colon=32 +LeftParen=33 +RightParen=34 +LeftBracket=35 +RightBracket=36 +FStringExpEnd=37 +LeftBrace=38 +RightBrace=39 +Plus=40 +PlusPlus=41 +Minus=42 +MinusMinus=43 +Star=44 +Div=45 +Mod=46 +PowerTo=47 +AndAnd=48 +OrOr=49 +Not=50 +Assign=51 +PlusAssign=52 +MinusAssign=53 +StarAssign=54 +DivAssign=55 +ModAssign=56 +Equal=57 +NotEqual=58 +Less=59 +LessEqual=60 +Greater=61 +GreaterEqual=62 +BitwiseAnd=63 +BitwiseOr=64 +BitwiseXor=65 +BitwiseNot=66 +BitwiseLeftShift=67 +BitwiseRightShift=68 +BitwiseZeroFillRightShift=69 +Dot=70 +Identifier=71 +IntegerConstant=72 +SingleQuoteStringLiteral=73 +DoubleQuoteStringLiteral=74 +FloatingConstant=75 +Whitespace=76 +Newline=77 +FStringSingleQuoteStart=78 +FStringDoubleQuoteStart=79 +FStringSingleQuoteEnd=80 +FStringSingleQuoteAtom=81 +FStringDoubleQuoteEnd=82 +FStringDoubleQuoteAtom=83 +'const'=4 +'var'=5 +'as'=6 +'...'=7 +'switch'=8 +'case'=9 +'default'=10 +'break'=11 +'continue'=12 +'do'=13 +'while'=14 +'if'=15 +'else'=16 +'for'=17 +'enum'=18 +'def'=19 +'return'=20 +'call'=21 +'->'=22 +'true'=23 +'false'=24 +'typeof'=25 +'void'=26 +'null'=27 +'undefined'=28 +','=29 +';'=30 +'?'=31 +':'=32 +'('=33 +')'=34 +'['=35 +']'=36 +'{'=38 +'}'=39 +'+'=40 +'++'=41 +'-'=42 +'--'=43 +'*'=44 +'/'=45 +'%'=46 +'**'=47 +'&&'=48 +'||'=49 +'!'=50 +'='=51 +'+='=52 +'-='=53 +'*='=54 +'/='=55 +'%='=56 +'=='=57 +'!='=58 +'<'=59 +'<='=60 +'>'=61 +'>='=62 +'&'=63 +'|'=64 +'^'=65 +'~'=66 +'<<'=67 +'>>'=68 +'>>>'=69 +'.'=70 diff --git a/kipper/core/KipperLexer.g4 b/kipper/core/KipperLexer.g4 index 0c61f0830..459ff4d06 100644 --- a/kipper/core/KipperLexer.g4 +++ b/kipper/core/KipperLexer.g4 @@ -132,6 +132,15 @@ LessEqual : '<='; Greater : '>'; GreaterEqual : '>='; +// Bitwise Operators +BitwiseAnd : '&'; +BitwiseOr : '|'; +BitwiseXor : '^'; +BitwiseNot : '~'; +BitwiseZeroFillLeftShift : '<<'; +BitwiseSignedRightShift : '>>'; +BitwiseZeroFillRightShift : '>>>'; + // Property accessing Dot : '.'; diff --git a/kipper/core/KipperLexer.tokens b/kipper/core/KipperLexer.tokens index a8e8b39b6..4623d5795 100644 --- a/kipper/core/KipperLexer.tokens +++ b/kipper/core/KipperLexer.tokens @@ -60,20 +60,27 @@ Less=59 LessEqual=60 Greater=61 GreaterEqual=62 -Dot=63 -Identifier=64 -IntegerConstant=65 -SingleQuoteStringLiteral=66 -DoubleQuoteStringLiteral=67 -FloatingConstant=68 -Whitespace=69 -Newline=70 -FStringSingleQuoteStart=71 -FStringDoubleQuoteStart=72 -FStringSingleQuoteEnd=73 -FStringSingleQuoteAtom=74 -FStringDoubleQuoteEnd=75 -FStringDoubleQuoteAtom=76 +BitwiseAnd=63 +BitwiseOr=64 +BitwiseXor=65 +BitwiseNot=66 +BitwiseZeroFillLeftShift=67 +BitwiseSignedRightShift=68 +BitwiseZeroFillRightShift=69 +Dot=70 +Identifier=71 +IntegerConstant=72 +SingleQuoteStringLiteral=73 +DoubleQuoteStringLiteral=74 +FloatingConstant=75 +Whitespace=76 +Newline=77 +FStringSingleQuoteStart=78 +FStringDoubleQuoteStart=79 +FStringSingleQuoteEnd=80 +FStringSingleQuoteAtom=81 +FStringDoubleQuoteEnd=82 +FStringDoubleQuoteAtom=83 'const'=4 'var'=5 'as'=6 @@ -132,4 +139,11 @@ FStringDoubleQuoteAtom=76 '<='=60 '>'=61 '>='=62 -'.'=63 +'&'=63 +'|'=64 +'^'=65 +'~'=66 +'<<'=67 +'>>'=68 +'>>>'=69 +'.'=70 diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 0fb272adf..7428d7966 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -291,9 +291,18 @@ additiveExpression | additiveExpression ('+'|'-') multiplicativeExpression # actualAdditiveExpression ; +bitwiseShiftExpression + : additiveExpression # passOnBitwiseShiftExpression + | bitwiseShiftExpression bitwiseShiftOperators bitwiseAndExpression # actualBitwiseShiftExpression + ; + +bitwiseShiftOperators + : '<<' | '>>' | '>>>' + ; + relationalExpression - : additiveExpression # passOnRelationalExpression - | relationalExpression ('<'|'>'|'<='|'>=') additiveExpression # actualRelationalExpression + : bitwiseShiftExpression # passOnRelationalExpression + | relationalExpression ('<'|'>'|'<='|'>=') bitwiseShiftExpression # actualRelationalExpression ; equalityExpression @@ -301,9 +310,24 @@ equalityExpression | equalityExpression ('=='| '!=') relationalExpression # actualEqualityExpression ; +bitwiseAndExpression + : equalityExpression # passOnBitwiseAndExpression + | bitwiseAndExpression '&' equalityExpression # actualBitwiseAndExpression + ; + +bitwiseXorExpression + : bitwiseAndExpression # passOnBitwiseXorExpression + | bitwiseXorExpression '^' bitwiseAndExpression # actualBitwiseXorExpression + ; + +bitwiseOrExpression + : bitwiseXorExpression # passOnBitwiseOrExpression + | bitwiseOrExpression '|' bitwiseXorExpression # actualBitwiseOrExpression + ; + logicalAndExpression - : equalityExpression # passOnLogicalAndExpression - | logicalAndExpression '&&' equalityExpression # actualLogicalAndExpression + : bitwiseOrExpression # passOnLogicalAndExpression + | logicalAndExpression '&&' bitwiseOrExpression # actualLogicalAndExpression ; logicalOrExpression diff --git a/kipper/core/KipperParser.tokens b/kipper/core/KipperParser.tokens index a8e8b39b6..4623d5795 100644 --- a/kipper/core/KipperParser.tokens +++ b/kipper/core/KipperParser.tokens @@ -60,20 +60,27 @@ Less=59 LessEqual=60 Greater=61 GreaterEqual=62 -Dot=63 -Identifier=64 -IntegerConstant=65 -SingleQuoteStringLiteral=66 -DoubleQuoteStringLiteral=67 -FloatingConstant=68 -Whitespace=69 -Newline=70 -FStringSingleQuoteStart=71 -FStringDoubleQuoteStart=72 -FStringSingleQuoteEnd=73 -FStringSingleQuoteAtom=74 -FStringDoubleQuoteEnd=75 -FStringDoubleQuoteAtom=76 +BitwiseAnd=63 +BitwiseOr=64 +BitwiseXor=65 +BitwiseNot=66 +BitwiseZeroFillLeftShift=67 +BitwiseSignedRightShift=68 +BitwiseZeroFillRightShift=69 +Dot=70 +Identifier=71 +IntegerConstant=72 +SingleQuoteStringLiteral=73 +DoubleQuoteStringLiteral=74 +FloatingConstant=75 +Whitespace=76 +Newline=77 +FStringSingleQuoteStart=78 +FStringDoubleQuoteStart=79 +FStringSingleQuoteEnd=80 +FStringSingleQuoteAtom=81 +FStringDoubleQuoteEnd=82 +FStringDoubleQuoteAtom=83 'const'=4 'var'=5 'as'=6 @@ -132,4 +139,11 @@ FStringDoubleQuoteAtom=76 '<='=60 '>'=61 '>='=62 -'.'=63 +'&'=63 +'|'=64 +'^'=65 +'~'=66 +'<<'=67 +'>>'=68 +'>>>'=69 +'.'=70 diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index 6042eb89e..f94f0fe98 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -168,6 +168,9 @@ export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression | typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression | typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression + | typeof ParseRuleKindMapping.RULE_bitwiseOrExpression + | typeof ParseRuleKindMapping.RULE_bitwiseAndExpression + | typeof ParseRuleKindMapping.RULE_bitwiseXorExpression | typeof ParseRuleKindMapping.RULE_memberAccessExpression; /** @@ -235,6 +238,9 @@ export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseOrExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseAndExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseXorExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_memberAccessExpression]; /** diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 8aa123cba..fc747b93b 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -7,7 +7,7 @@ import { AdditiveExpressionContext, ArrayPrimaryExpressionContext, - AssignmentExpressionContext, + AssignmentExpressionContext, BitwiseAndExpressionContext, BitwiseOrExpressionContext, BitwiseXorExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, CastOrConvertExpressionContext, @@ -206,6 +206,9 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression]: IdentifierTypeSpecifierExpressionContext, [ParseRuleKindMapping.RULE_genericTypeSpecifierExpression]: GenericTypeSpecifierExpressionContext, [ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression]: TypeofTypeSpecifierExpressionContext, + [ParseRuleKindMapping.RULE_bitwiseOrExpression]: BitwiseOrExpressionContext, + [ParseRuleKindMapping.RULE_bitwiseAndExpression]: BitwiseAndExpressionContext, + [ParseRuleKindMapping.RULE_bitwiseXorExpression]: BitwiseXorExpressionContext, [ParseRuleKindMapping.RULE_memberAccessExpression]: [ // Due to the nature of the parser not handling the notations as one rule, it's an array DotNotationMemberAccessExpressionContext, diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-semantics.ts new file mode 100644 index 000000000..1c73a23f7 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-semantics.ts @@ -0,0 +1,9 @@ +import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; +import { Expression } from "../../expression"; +import { KipperBitwiseAndOperator } from "../../../../../const"; + +export interface BitwiseAndExpressionSemantics extends BitwiseExpressionSemantics { + leftOp: Expression; + rightOp: Expression; + operator: KipperBitwiseAndOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-type-semantics.ts new file mode 100644 index 000000000..3fe8f0959 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression-type-semantics.ts @@ -0,0 +1,3 @@ +import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; + +export interface BitwiseAndExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts new file mode 100644 index 000000000..4c2c8d8de --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts @@ -0,0 +1,63 @@ +import { BitwiseAndExpressionSemantics } from "./bitwise-and-expression-semantics"; +import { BitwiseAndExpressionTypeSemantics } from "./bitwise-and-expression-type-semantics"; +import { BitwiseExpression } from "../bitwise-expression"; +import { BitwiseAndExpressionContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { Expression } from "../../expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; + +export class BitwiseAndExpression extends BitwiseExpression< + BitwiseAndExpressionSemantics, + BitwiseAndExpressionTypeSemantics +> { + protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; + + public static readonly kind = ParseRuleKindMapping.RULE_bitwiseAndExpression; + + public override get kind() { + return BitwiseAndExpression.kind; + } + + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + public override get ruleName() { + return BitwiseAndExpression.ruleName; + } + + constructor(antlrRuleCtx: BitwiseAndExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public async primarySemanticAnalysis(): Promise { + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + if(!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: "&", + }; + } + + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + public checkForWarnings = undefined; + + public override get antlrRuleCtx(): BitwiseAndExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseAndExpression; + + readonly targetCodeGenerator = this.codeGenerator.bitwiseAndExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/index.ts new file mode 100644 index 000000000..573d86ef4 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/index.ts @@ -0,0 +1,3 @@ +export * from "./bitwise-and-expression"; +export * from "./bitwise-and-expression-semantics"; +export * from "./bitwise-and-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts new file mode 100644 index 000000000..f76f907f8 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts @@ -0,0 +1,14 @@ +import { ExpressionSemantics } from "../expression-semantics"; +import { + KipperBitwiseAndOperator, + KipperBitwiseOrOperator, KipperBitwiseSignedRightShiftOperator, + KipperBitwiseXorOperator, + KipperBitwiseZeroFillLeftShiftOperator, KipperBitwiseZeroFillRightShiftOperator, +} from "../../../../const"; +import { Expression } from "../expression"; + +export interface BitwiseExpressionSemantics extends ExpressionSemantics { + operator: KipperBitwiseAndOperator | KipperBitwiseOrOperator | KipperBitwiseXorOperator | KipperBitwiseZeroFillLeftShiftOperator | KipperBitwiseZeroFillRightShiftOperator | KipperBitwiseSignedRightShiftOperator; + leftOp: Expression; + rightOp: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts new file mode 100644 index 000000000..55f8c969e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts @@ -0,0 +1,5 @@ +import { BitwiseExpressionSemantics } from "./bitwise-expression-semantics"; +import { ExpressionTypeSemantics } from "../expression-type-semantics"; + + +export interface BitwiseExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts new file mode 100644 index 000000000..c515e5849 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts @@ -0,0 +1,30 @@ +/** + * BitwiseExpression which represents a bitwise operation. + * + */ +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../parser"; +import { ASTNodeMapper } from "../../../mapping"; +import { Expression } from "../expression"; +import { BitwiseExpressionTypeSemantics } from "./bitwise-expression-type-semantics"; +import { BitwiseExpressionSemantics } from "./bitwise-expression-semantics"; + + +export type ASTBitwiseExpressionKind = + | typeof ParseRuleKindMapping.RULE_bitwiseAndExpression + | typeof ParseRuleKindMapping.RULE_bitwiseOrExpression + | typeof ParseRuleKindMapping.RULE_bitwiseXorExpression; + +export type ParserBitwiseExpressionContext = InstanceType< + (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTBitwiseExpressionKind] +>; + +export type ParserBitwiseExpressionRuleName = (typeof KindParseRuleMapping)[ASTBitwiseExpressionKind]; + +export abstract class BitwiseExpression< + Semantics extends BitwiseExpressionSemantics = BitwiseExpressionSemantics, + TypeSemantics extends BitwiseExpressionTypeSemantics = BitwiseExpressionTypeSemantics, +> extends Expression { + protected abstract readonly _antlrRuleCtx: ParserBitwiseExpressionContext; + public abstract get kind(): ASTBitwiseExpressionKind; + public abstract get ruleName(): ParserBitwiseExpressionRuleName; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-semantics.ts new file mode 100644 index 000000000..57a935908 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-semantics.ts @@ -0,0 +1,9 @@ +import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; +import { Expression } from "../../expression"; +import { KipperBitwiseOrOperator } from "../../../../../const"; + +export interface BitwiseOrExpressionSemantics extends BitwiseExpressionSemantics { + leftOp: Expression; + rightOp: Expression; + operator: KipperBitwiseOrOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-type-semantics.ts new file mode 100644 index 000000000..3864d3620 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression-type-semantics.ts @@ -0,0 +1,3 @@ +import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; + +export interface BitwiseOrExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts new file mode 100644 index 000000000..a31877d9e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts @@ -0,0 +1,68 @@ +import { BitwiseExpression } from "../bitwise-expression"; +import { + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { Expression } from "../../expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; +import { BitwiseOrExpressionSemantics } from "./bitwise-or-expression-semantics"; +import { BitwiseOrExpressionTypeSemantics } from "./bitwise-or-expression-type-semantics"; + +export class BitwiseOrExpression extends BitwiseExpression< + BitwiseOrExpressionSemantics, + BitwiseOrExpressionTypeSemantics +> { + protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; + + public static readonly kind = ParseRuleKindMapping.RULE_bitwiseAndExpression; + + public override get kind() { + return BitwiseOrExpression.kind; + } + + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + public override get ruleName() { + return BitwiseOrExpression.ruleName; + } + + constructor(antlrRuleCtx: BitwiseOrExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public async primarySemanticAnalysis(): Promise { + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + if(!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: "|", + }; + } + + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + public checkForWarnings = undefined; + + public override get antlrRuleCtx(): BitwiseOrExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseOrExpression; + + readonly targetCodeGenerator = this.codeGenerator.bitwiseOrExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts new file mode 100644 index 000000000..85b3fa6ba --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts @@ -0,0 +1,3 @@ +export * from './bitwise-or-expression'; +export * from './bitwise-or-expression-semantics'; +export * from './bitwise-or-expression-type-semantics'; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-semantics.ts new file mode 100644 index 000000000..397cd7dc3 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-semantics.ts @@ -0,0 +1,9 @@ +import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; +import { Expression } from "../../expression"; +import { KipperBitwiseXorOperator } from "../../../../../const"; + +export interface BitwiseXorExpressionSemantics extends BitwiseExpressionSemantics { + leftOp: Expression; + rightOp: Expression; + operator: KipperBitwiseXorOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-type-semantics.ts new file mode 100644 index 000000000..e769bb1f1 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression-type-semantics.ts @@ -0,0 +1,3 @@ +import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; + +export interface BitwiseXorExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts new file mode 100644 index 000000000..5c811a16b --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts @@ -0,0 +1,68 @@ +import { BitwiseExpression } from "../bitwise-expression"; +import { + BitwiseOrExpressionContext, + BitwiseXorExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { Expression } from "../../expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; +import { BitwiseXorExpressionSemantics } from "./bitwise-xor-expression-semantics"; +import { BitwiseXorExpressionTypeSemantics } from "./bitwise-xor-expression-type-semantics"; + +export class BitwiseXorExpression extends BitwiseExpression< + BitwiseXorExpressionSemantics, + BitwiseXorExpressionTypeSemantics +> { + protected override readonly _antlrRuleCtx: BitwiseXorExpressionContext; + + public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; + + public override get kind() { + return BitwiseXorExpression.kind; + } + + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + public override get ruleName() { + return BitwiseXorExpression.ruleName; + } + + constructor(antlrRuleCtx: BitwiseXorExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public async primarySemanticAnalysis(): Promise { + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + if(!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: "^", + }; + } + + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + public checkForWarnings = undefined; + + public override get antlrRuleCtx(): BitwiseOrExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseXorExpression; + + readonly targetCodeGenerator = this.codeGenerator.bitwiseXorExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/index.ts new file mode 100644 index 000000000..eeda807c6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/index.ts @@ -0,0 +1,3 @@ +export * from "./bitwise-xor-expression"; +export * from "./bitwise-xor-expression-semantics"; +export * from "./bitwise-xor-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts new file mode 100644 index 000000000..a94de9add --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts @@ -0,0 +1,9 @@ +import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; +import { Expression } from "../../expression"; +import { KipperBitwiseZeroFillLeftShiftOperator } from "../../../../../const"; + +export interface BitwiseZeroFillLeftShiftExpressionSemantics extends BitwiseExpressionSemantics { + leftOp: Expression; + rightOp: Expression; + operator: KipperBitwiseZeroFillLeftShiftOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts new file mode 100644 index 000000000..bba78be85 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts @@ -0,0 +1,3 @@ +import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; + +export interface BitwiseZeroFillLeftShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts new file mode 100644 index 000000000..53618a69c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts @@ -0,0 +1,70 @@ +import { BitwiseExpression } from "../bitwise-expression"; +import { + BitwiseAndExpressionContext, + BitwiseShiftExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { Expression } from "../../expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; +import { BitwiseZeroFillLeftShiftExpressionSemantics } from "./bitwise-zero-fill-left-shift-expression-semantics"; +import { + BitwiseZeroFillLeftShiftExpressionTypeSemantics +} from "./bitwise-zero-fill-left-shift-expression-type-semantics"; + +export class BitwiseZeroFillLeftShiftExpressionExpression extends BitwiseExpression< + BitwiseZeroFillLeftShiftExpressionSemantics, + BitwiseZeroFillLeftShiftExpressionTypeSemantics +> { + protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; + + public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; + + public override get kind() { + return BitwiseZeroFillLeftShiftExpressionExpression.kind; + } + + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + public override get ruleName() { + return BitwiseZeroFillLeftShiftExpressionExpression.ruleName; + } + + constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public async primarySemanticAnalysis(): Promise { + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + if(!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: "<<", + }; + } + + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + public checkForWarnings = undefined; + + public override get antlrRuleCtx(): BitwiseShiftExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseXorExpression; + + readonly targetCodeGenerator = this.codeGenerator.bitwiseXorExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts new file mode 100644 index 000000000..3526a55f6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts @@ -0,0 +1,5 @@ +export * from "./bitwise-expression"; +export * from "./bitwise-expression-semantics"; +export * from "./bitwise-expression-type-semantics"; +export * from "./bitwise-and-expression/"; +export * from "./bitwise-or-expression/"; diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index 5018e01bb..e624adcc1 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -291,6 +291,108 @@ export type KipperLogicalOperator = KipperLogicalAndOperator | KipperLogicalOrOp */ export const kipperLogicalOperator: Array = ["&&", "||"]; +/** + * The bitwise-and operator, which can be used to combine two numbers bitwise. + * @example + * EXP & EXP; + * @since 0.9.0 + */ +export type KipperBitwiseAndOperator = "&"; + +/** + * The bitwise-and operator, which can be used to combine two numbers bitwise. + * @example + * EXP & EXP; + * @since 0.9.0 + */ +export const kipperBitwiseAndOperator: KipperBitwiseAndOperator = "&"; + +/** + * The bitwise-or operator, which can be used to combine two numbers bitwise. + * @example + * EXP | EXP; + * @since 0.9.0 + */ +export type KipperBitwiseOrOperator = "|"; + +/** + * The bitwise-or operator, which can be used to combine two numbers bitwise. + * @example + * EXP | EXP; + * @since 0.9.0 + */ +export const kipperBitwiseOrOperator: KipperBitwiseOrOperator = "|"; + +/** + * The bitwise left-shift operator, which can be used to shift a number to the left by a certain amount of bits. + * @example + * EXP << EXP; + * @since 0.9.0 + */ +export type KipperBitwiseZeroFillLeftShiftOperator = "<<"; + +/** + * The bitwise left-shift operator, which can be used to shift a number to the left by a certain amount of bits. + * @example + * EXP << EXP; + * @since 0.9.0 + */ +export const kipperBitwiseLeftZeroFillShiftOperator: KipperBitwiseZeroFillLeftShiftOperator = "<<"; + +/** + * The bitwise right-shift operator, which can be used to shift a number to the right by a certain amount of bits. + * @example + * EXP >> EXP; + * @since 0.9.0 + */ +export type KipperBitwiseSignedRightShiftOperator = ">>"; + +/** + * The bitwise right-shift operator, which can be used to shift a number to the right by a certain amount of bits. + * @example + * EXP >> EXP; + * @since 0.9.0 + */ +export const kipperBitwiseRightShiftOperator: KipperBitwiseSignedRightShiftOperator = ">>"; + +/** + * The bitwise zero-fill right-shift operator, which can be used to shift a number to the right by a certain amount of bits. + * @example + * EXP >>> EXP; + * @since 0.9.0 + */ +export type KipperBitwiseZeroFillRightShiftOperator = ">>>"; + +/** + * The bitwise zero-fill right-shift operator, which can be used to shift a number to the right by a certain amount of bits. + * @example + * EXP >>> EXP; + * @since 0.9.0 + */ +export const kipperBitwiseZeroFillRightShiftOperator: KipperBitwiseZeroFillRightShiftOperator = ">>>"; + +/** + * The bitwise-xor operator, which can be used to combine two numbers bitwise. + * @example + * EXP ^ EXP; + * @since 0.9.0 + */ +export type KipperBitwiseXorOperator = "^"; + +/** + * The bitwise-xor operator, which can be used to combine two numbers bitwise. + * @example + * EXP ^ EXP; + * @since 0.9.0 + */ +export const kipperBitwiseXorOperator: KipperBitwiseXorOperator = "^"; + +/** + * All available bitwise operators inside Kipper, which can be used to combine two numbers bitwise. + * @since 0.9.0 + */ +export type KipperBitwiseOperator = KipperBitwiseAndOperator | KipperBitwiseOrOperator | KipperBitwiseXorOperator; + /** * All available equality operators inside Kipper, which can be used to compare two expressions against each other. * @since 0.9.0 diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.interp b/kipper/core/src/compiler/parser/antlr/KipperLexer.interp index c67e06923..f64a559fa 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.interp +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.interp @@ -62,6 +62,13 @@ null '<=' '>' '>=' +'&' +'|' +'^' +'~' +'<<' +'>>' +'>>>' '.' null null @@ -141,6 +148,13 @@ Less LessEqual Greater GreaterEqual +BitwiseAnd +BitwiseOr +BitwiseXor +BitwiseNot +BitwiseZeroFillLeftShift +BitwiseSignedRightShift +BitwiseZeroFillRightShift Dot Identifier IntegerConstant @@ -218,6 +232,13 @@ Less LessEqual Greater GreaterEqual +BitwiseAnd +BitwiseOr +BitwiseXor +BitwiseNot +BitwiseZeroFillLeftShift +BitwiseSignedRightShift +BitwiseZeroFillRightShift Dot Identifier IntegerConstant @@ -278,4 +299,4 @@ SINGLE_QUOTE_FSTRING DOUBLE_QUOTE_FSTRING atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 78, 686, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 224, 10, 2, 12, 2, 14, 2, 227, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 238, 10, 3, 12, 3, 14, 3, 241, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 7, 64, 470, 10, 64, 12, 64, 14, 64, 473, 11, 64, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 479, 10, 65, 3, 66, 3, 66, 5, 66, 483, 10, 66, 3, 66, 3, 66, 3, 67, 3, 67, 5, 67, 489, 10, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 6, 69, 496, 10, 69, 13, 69, 14, 69, 497, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 6, 82, 553, 10, 82, 13, 82, 14, 82, 554, 3, 83, 3, 83, 3, 83, 6, 83, 560, 10, 83, 13, 83, 14, 83, 561, 3, 84, 3, 84, 3, 84, 6, 84, 567, 10, 84, 13, 84, 14, 84, 568, 3, 85, 3, 85, 3, 85, 6, 85, 574, 10, 85, 13, 85, 14, 85, 575, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 5, 90, 588, 10, 90, 3, 90, 3, 90, 3, 90, 5, 90, 593, 10, 90, 3, 91, 5, 91, 596, 10, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 5, 91, 603, 10, 91, 3, 92, 3, 92, 5, 92, 607, 10, 92, 3, 92, 3, 92, 3, 93, 6, 93, 612, 10, 93, 13, 93, 14, 93, 613, 3, 94, 3, 94, 3, 95, 6, 95, 619, 10, 95, 13, 95, 14, 95, 620, 3, 96, 3, 96, 5, 96, 625, 10, 96, 3, 97, 3, 97, 3, 97, 5, 97, 630, 10, 97, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 5, 99, 638, 10, 99, 3, 99, 5, 99, 641, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 6, 100, 647, 10, 100, 13, 100, 14, 100, 648, 3, 101, 6, 101, 652, 10, 101, 13, 101, 14, 101, 653, 3, 102, 3, 102, 5, 102, 658, 10, 102, 3, 103, 6, 103, 661, 10, 103, 13, 103, 14, 103, 662, 3, 104, 3, 104, 5, 104, 667, 10, 104, 3, 105, 6, 105, 670, 10, 105, 13, 105, 14, 105, 671, 3, 106, 3, 106, 5, 106, 676, 10, 106, 3, 107, 6, 107, 679, 10, 107, 13, 107, 14, 107, 680, 3, 108, 3, 108, 5, 108, 685, 10, 108, 3, 225, 2, 2, 109, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 2, 149, 2, 75, 151, 2, 76, 153, 2, 2, 155, 2, 77, 157, 2, 78, 159, 2, 2, 161, 2, 2, 163, 2, 2, 165, 2, 2, 167, 2, 2, 169, 2, 2, 171, 2, 2, 173, 2, 2, 175, 2, 2, 177, 2, 2, 179, 2, 2, 181, 2, 2, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 5, 2, 3, 4, 20, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 688, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 3, 147, 3, 2, 2, 2, 3, 149, 3, 2, 2, 2, 3, 151, 3, 2, 2, 2, 4, 153, 3, 2, 2, 2, 4, 155, 3, 2, 2, 2, 4, 157, 3, 2, 2, 2, 5, 219, 3, 2, 2, 2, 7, 233, 3, 2, 2, 2, 9, 244, 3, 2, 2, 2, 11, 250, 3, 2, 2, 2, 13, 254, 3, 2, 2, 2, 15, 257, 3, 2, 2, 2, 17, 261, 3, 2, 2, 2, 19, 268, 3, 2, 2, 2, 21, 273, 3, 2, 2, 2, 23, 281, 3, 2, 2, 2, 25, 287, 3, 2, 2, 2, 27, 296, 3, 2, 2, 2, 29, 299, 3, 2, 2, 2, 31, 305, 3, 2, 2, 2, 33, 308, 3, 2, 2, 2, 35, 313, 3, 2, 2, 2, 37, 317, 3, 2, 2, 2, 39, 322, 3, 2, 2, 2, 41, 326, 3, 2, 2, 2, 43, 333, 3, 2, 2, 2, 45, 338, 3, 2, 2, 2, 47, 341, 3, 2, 2, 2, 49, 346, 3, 2, 2, 2, 51, 352, 3, 2, 2, 2, 53, 359, 3, 2, 2, 2, 55, 364, 3, 2, 2, 2, 57, 369, 3, 2, 2, 2, 59, 379, 3, 2, 2, 2, 61, 381, 3, 2, 2, 2, 63, 383, 3, 2, 2, 2, 65, 385, 3, 2, 2, 2, 67, 387, 3, 2, 2, 2, 69, 389, 3, 2, 2, 2, 71, 391, 3, 2, 2, 2, 73, 393, 3, 2, 2, 2, 75, 395, 3, 2, 2, 2, 77, 400, 3, 2, 2, 2, 79, 402, 3, 2, 2, 2, 81, 404, 3, 2, 2, 2, 83, 406, 3, 2, 2, 2, 85, 409, 3, 2, 2, 2, 87, 411, 3, 2, 2, 2, 89, 414, 3, 2, 2, 2, 91, 416, 3, 2, 2, 2, 93, 418, 3, 2, 2, 2, 95, 420, 3, 2, 2, 2, 97, 423, 3, 2, 2, 2, 99, 426, 3, 2, 2, 2, 101, 429, 3, 2, 2, 2, 103, 431, 3, 2, 2, 2, 105, 433, 3, 2, 2, 2, 107, 436, 3, 2, 2, 2, 109, 439, 3, 2, 2, 2, 111, 442, 3, 2, 2, 2, 113, 445, 3, 2, 2, 2, 115, 448, 3, 2, 2, 2, 117, 451, 3, 2, 2, 2, 119, 454, 3, 2, 2, 2, 121, 456, 3, 2, 2, 2, 123, 459, 3, 2, 2, 2, 125, 461, 3, 2, 2, 2, 127, 464, 3, 2, 2, 2, 129, 466, 3, 2, 2, 2, 131, 478, 3, 2, 2, 2, 133, 480, 3, 2, 2, 2, 135, 486, 3, 2, 2, 2, 137, 492, 3, 2, 2, 2, 139, 495, 3, 2, 2, 2, 141, 501, 3, 2, 2, 2, 143, 505, 3, 2, 2, 2, 145, 512, 3, 2, 2, 2, 147, 519, 3, 2, 2, 2, 149, 525, 3, 2, 2, 2, 151, 530, 3, 2, 2, 2, 153, 532, 3, 2, 2, 2, 155, 538, 3, 2, 2, 2, 157, 543, 3, 2, 2, 2, 159, 545, 3, 2, 2, 2, 161, 547, 3, 2, 2, 2, 163, 549, 3, 2, 2, 2, 165, 552, 3, 2, 2, 2, 167, 556, 3, 2, 2, 2, 169, 563, 3, 2, 2, 2, 171, 570, 3, 2, 2, 2, 173, 577, 3, 2, 2, 2, 175, 579, 3, 2, 2, 2, 177, 581, 3, 2, 2, 2, 179, 583, 3, 2, 2, 2, 181, 592, 3, 2, 2, 2, 183, 602, 3, 2, 2, 2, 185, 604, 3, 2, 2, 2, 187, 611, 3, 2, 2, 2, 189, 615, 3, 2, 2, 2, 191, 618, 3, 2, 2, 2, 193, 624, 3, 2, 2, 2, 195, 629, 3, 2, 2, 2, 197, 631, 3, 2, 2, 2, 199, 634, 3, 2, 2, 2, 201, 642, 3, 2, 2, 2, 203, 651, 3, 2, 2, 2, 205, 657, 3, 2, 2, 2, 207, 660, 3, 2, 2, 2, 209, 666, 3, 2, 2, 2, 211, 669, 3, 2, 2, 2, 213, 675, 3, 2, 2, 2, 215, 678, 3, 2, 2, 2, 217, 684, 3, 2, 2, 2, 219, 220, 7, 49, 2, 2, 220, 221, 7, 44, 2, 2, 221, 225, 3, 2, 2, 2, 222, 224, 11, 2, 2, 2, 223, 222, 3, 2, 2, 2, 224, 227, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 226, 228, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 228, 229, 7, 44, 2, 2, 229, 230, 7, 49, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 8, 2, 2, 2, 232, 6, 3, 2, 2, 2, 233, 234, 7, 49, 2, 2, 234, 235, 7, 49, 2, 2, 235, 239, 3, 2, 2, 2, 236, 238, 10, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 242, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 243, 8, 3, 2, 2, 243, 8, 3, 2, 2, 2, 244, 245, 7, 101, 2, 2, 245, 246, 7, 113, 2, 2, 246, 247, 7, 112, 2, 2, 247, 248, 7, 117, 2, 2, 248, 249, 7, 118, 2, 2, 249, 10, 3, 2, 2, 2, 250, 251, 7, 120, 2, 2, 251, 252, 7, 99, 2, 2, 252, 253, 7, 116, 2, 2, 253, 12, 3, 2, 2, 2, 254, 255, 7, 99, 2, 2, 255, 256, 7, 117, 2, 2, 256, 14, 3, 2, 2, 2, 257, 258, 7, 48, 2, 2, 258, 259, 7, 48, 2, 2, 259, 260, 7, 48, 2, 2, 260, 16, 3, 2, 2, 2, 261, 262, 7, 117, 2, 2, 262, 263, 7, 121, 2, 2, 263, 264, 7, 107, 2, 2, 264, 265, 7, 118, 2, 2, 265, 266, 7, 101, 2, 2, 266, 267, 7, 106, 2, 2, 267, 18, 3, 2, 2, 2, 268, 269, 7, 101, 2, 2, 269, 270, 7, 99, 2, 2, 270, 271, 7, 117, 2, 2, 271, 272, 7, 103, 2, 2, 272, 20, 3, 2, 2, 2, 273, 274, 7, 102, 2, 2, 274, 275, 7, 103, 2, 2, 275, 276, 7, 104, 2, 2, 276, 277, 7, 99, 2, 2, 277, 278, 7, 119, 2, 2, 278, 279, 7, 110, 2, 2, 279, 280, 7, 118, 2, 2, 280, 22, 3, 2, 2, 2, 281, 282, 7, 100, 2, 2, 282, 283, 7, 116, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 99, 2, 2, 285, 286, 7, 109, 2, 2, 286, 24, 3, 2, 2, 2, 287, 288, 7, 101, 2, 2, 288, 289, 7, 113, 2, 2, 289, 290, 7, 112, 2, 2, 290, 291, 7, 118, 2, 2, 291, 292, 7, 107, 2, 2, 292, 293, 7, 112, 2, 2, 293, 294, 7, 119, 2, 2, 294, 295, 7, 103, 2, 2, 295, 26, 3, 2, 2, 2, 296, 297, 7, 102, 2, 2, 297, 298, 7, 113, 2, 2, 298, 28, 3, 2, 2, 2, 299, 300, 7, 121, 2, 2, 300, 301, 7, 106, 2, 2, 301, 302, 7, 107, 2, 2, 302, 303, 7, 110, 2, 2, 303, 304, 7, 103, 2, 2, 304, 30, 3, 2, 2, 2, 305, 306, 7, 107, 2, 2, 306, 307, 7, 104, 2, 2, 307, 32, 3, 2, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 110, 2, 2, 310, 311, 7, 117, 2, 2, 311, 312, 7, 103, 2, 2, 312, 34, 3, 2, 2, 2, 313, 314, 7, 104, 2, 2, 314, 315, 7, 113, 2, 2, 315, 316, 7, 116, 2, 2, 316, 36, 3, 2, 2, 2, 317, 318, 7, 103, 2, 2, 318, 319, 7, 112, 2, 2, 319, 320, 7, 119, 2, 2, 320, 321, 7, 111, 2, 2, 321, 38, 3, 2, 2, 2, 322, 323, 7, 102, 2, 2, 323, 324, 7, 103, 2, 2, 324, 325, 7, 104, 2, 2, 325, 40, 3, 2, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 103, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 119, 2, 2, 330, 331, 7, 116, 2, 2, 331, 332, 7, 112, 2, 2, 332, 42, 3, 2, 2, 2, 333, 334, 7, 101, 2, 2, 334, 335, 7, 99, 2, 2, 335, 336, 7, 110, 2, 2, 336, 337, 7, 110, 2, 2, 337, 44, 3, 2, 2, 2, 338, 339, 7, 47, 2, 2, 339, 340, 7, 64, 2, 2, 340, 46, 3, 2, 2, 2, 341, 342, 7, 118, 2, 2, 342, 343, 7, 116, 2, 2, 343, 344, 7, 119, 2, 2, 344, 345, 7, 103, 2, 2, 345, 48, 3, 2, 2, 2, 346, 347, 7, 104, 2, 2, 347, 348, 7, 99, 2, 2, 348, 349, 7, 110, 2, 2, 349, 350, 7, 117, 2, 2, 350, 351, 7, 103, 2, 2, 351, 50, 3, 2, 2, 2, 352, 353, 7, 118, 2, 2, 353, 354, 7, 123, 2, 2, 354, 355, 7, 114, 2, 2, 355, 356, 7, 103, 2, 2, 356, 357, 7, 113, 2, 2, 357, 358, 7, 104, 2, 2, 358, 52, 3, 2, 2, 2, 359, 360, 7, 120, 2, 2, 360, 361, 7, 113, 2, 2, 361, 362, 7, 107, 2, 2, 362, 363, 7, 102, 2, 2, 363, 54, 3, 2, 2, 2, 364, 365, 7, 112, 2, 2, 365, 366, 7, 119, 2, 2, 366, 367, 7, 110, 2, 2, 367, 368, 7, 110, 2, 2, 368, 56, 3, 2, 2, 2, 369, 370, 7, 119, 2, 2, 370, 371, 7, 112, 2, 2, 371, 372, 7, 102, 2, 2, 372, 373, 7, 103, 2, 2, 373, 374, 7, 104, 2, 2, 374, 375, 7, 107, 2, 2, 375, 376, 7, 112, 2, 2, 376, 377, 7, 103, 2, 2, 377, 378, 7, 102, 2, 2, 378, 58, 3, 2, 2, 2, 379, 380, 7, 46, 2, 2, 380, 60, 3, 2, 2, 2, 381, 382, 7, 61, 2, 2, 382, 62, 3, 2, 2, 2, 383, 384, 7, 65, 2, 2, 384, 64, 3, 2, 2, 2, 385, 386, 7, 60, 2, 2, 386, 66, 3, 2, 2, 2, 387, 388, 7, 42, 2, 2, 388, 68, 3, 2, 2, 2, 389, 390, 7, 43, 2, 2, 390, 70, 3, 2, 2, 2, 391, 392, 7, 93, 2, 2, 392, 72, 3, 2, 2, 2, 393, 394, 7, 95, 2, 2, 394, 74, 3, 2, 2, 2, 395, 396, 6, 37, 2, 2, 396, 397, 7, 127, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 8, 37, 3, 2, 399, 76, 3, 2, 2, 2, 400, 401, 7, 125, 2, 2, 401, 78, 3, 2, 2, 2, 402, 403, 7, 127, 2, 2, 403, 80, 3, 2, 2, 2, 404, 405, 7, 45, 2, 2, 405, 82, 3, 2, 2, 2, 406, 407, 7, 45, 2, 2, 407, 408, 7, 45, 2, 2, 408, 84, 3, 2, 2, 2, 409, 410, 7, 47, 2, 2, 410, 86, 3, 2, 2, 2, 411, 412, 7, 47, 2, 2, 412, 413, 7, 47, 2, 2, 413, 88, 3, 2, 2, 2, 414, 415, 7, 44, 2, 2, 415, 90, 3, 2, 2, 2, 416, 417, 7, 49, 2, 2, 417, 92, 3, 2, 2, 2, 418, 419, 7, 39, 2, 2, 419, 94, 3, 2, 2, 2, 420, 421, 7, 44, 2, 2, 421, 422, 7, 44, 2, 2, 422, 96, 3, 2, 2, 2, 423, 424, 7, 40, 2, 2, 424, 425, 7, 40, 2, 2, 425, 98, 3, 2, 2, 2, 426, 427, 7, 126, 2, 2, 427, 428, 7, 126, 2, 2, 428, 100, 3, 2, 2, 2, 429, 430, 7, 35, 2, 2, 430, 102, 3, 2, 2, 2, 431, 432, 7, 63, 2, 2, 432, 104, 3, 2, 2, 2, 433, 434, 7, 45, 2, 2, 434, 435, 7, 63, 2, 2, 435, 106, 3, 2, 2, 2, 436, 437, 7, 47, 2, 2, 437, 438, 7, 63, 2, 2, 438, 108, 3, 2, 2, 2, 439, 440, 7, 44, 2, 2, 440, 441, 7, 63, 2, 2, 441, 110, 3, 2, 2, 2, 442, 443, 7, 49, 2, 2, 443, 444, 7, 63, 2, 2, 444, 112, 3, 2, 2, 2, 445, 446, 7, 39, 2, 2, 446, 447, 7, 63, 2, 2, 447, 114, 3, 2, 2, 2, 448, 449, 7, 63, 2, 2, 449, 450, 7, 63, 2, 2, 450, 116, 3, 2, 2, 2, 451, 452, 7, 35, 2, 2, 452, 453, 7, 63, 2, 2, 453, 118, 3, 2, 2, 2, 454, 455, 7, 62, 2, 2, 455, 120, 3, 2, 2, 2, 456, 457, 7, 62, 2, 2, 457, 458, 7, 63, 2, 2, 458, 122, 3, 2, 2, 2, 459, 460, 7, 64, 2, 2, 460, 124, 3, 2, 2, 2, 461, 462, 7, 64, 2, 2, 462, 463, 7, 63, 2, 2, 463, 126, 3, 2, 2, 2, 464, 465, 7, 48, 2, 2, 465, 128, 3, 2, 2, 2, 466, 471, 5, 159, 79, 2, 467, 470, 5, 159, 79, 2, 468, 470, 5, 163, 81, 2, 469, 467, 3, 2, 2, 2, 469, 468, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 130, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 479, 5, 165, 82, 2, 475, 479, 5, 169, 84, 2, 476, 479, 5, 171, 85, 2, 477, 479, 5, 167, 83, 2, 478, 474, 3, 2, 2, 2, 478, 475, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 478, 477, 3, 2, 2, 2, 479, 132, 3, 2, 2, 2, 480, 482, 7, 41, 2, 2, 481, 483, 5, 211, 105, 2, 482, 481, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 485, 7, 41, 2, 2, 485, 134, 3, 2, 2, 2, 486, 488, 7, 36, 2, 2, 487, 489, 5, 215, 107, 2, 488, 487, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 7, 36, 2, 2, 491, 136, 3, 2, 2, 2, 492, 493, 5, 181, 90, 2, 493, 138, 3, 2, 2, 2, 494, 496, 9, 3, 2, 2, 495, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 8, 69, 4, 2, 500, 140, 3, 2, 2, 2, 501, 502, 9, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 504, 8, 70, 4, 2, 504, 142, 3, 2, 2, 2, 505, 506, 7, 104, 2, 2, 506, 507, 7, 41, 2, 2, 507, 508, 3, 2, 2, 2, 508, 509, 8, 71, 5, 2, 509, 510, 3, 2, 2, 2, 510, 511, 8, 71, 6, 2, 511, 144, 3, 2, 2, 2, 512, 513, 7, 104, 2, 2, 513, 514, 7, 36, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 8, 72, 7, 2, 516, 517, 3, 2, 2, 2, 517, 518, 8, 72, 8, 2, 518, 146, 3, 2, 2, 2, 519, 520, 6, 73, 3, 2, 520, 521, 7, 125, 2, 2, 521, 522, 3, 2, 2, 2, 522, 523, 8, 73, 9, 2, 523, 524, 8, 73, 10, 2, 524, 148, 3, 2, 2, 2, 525, 526, 7, 41, 2, 2, 526, 527, 8, 74, 11, 2, 527, 528, 3, 2, 2, 2, 528, 529, 8, 74, 3, 2, 529, 150, 3, 2, 2, 2, 530, 531, 5, 203, 101, 2, 531, 152, 3, 2, 2, 2, 532, 533, 6, 76, 4, 2, 533, 534, 7, 125, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 8, 76, 9, 2, 536, 537, 8, 76, 10, 2, 537, 154, 3, 2, 2, 2, 538, 539, 7, 36, 2, 2, 539, 540, 8, 77, 12, 2, 540, 541, 3, 2, 2, 2, 541, 542, 8, 77, 3, 2, 542, 156, 3, 2, 2, 2, 543, 544, 5, 207, 103, 2, 544, 158, 3, 2, 2, 2, 545, 546, 5, 161, 80, 2, 546, 160, 3, 2, 2, 2, 547, 548, 9, 4, 2, 2, 548, 162, 3, 2, 2, 2, 549, 550, 9, 5, 2, 2, 550, 164, 3, 2, 2, 2, 551, 553, 5, 163, 81, 2, 552, 551, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 552, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 166, 3, 2, 2, 2, 556, 557, 7, 50, 2, 2, 557, 559, 9, 6, 2, 2, 558, 560, 5, 175, 87, 2, 559, 558, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 168, 3, 2, 2, 2, 563, 564, 7, 50, 2, 2, 564, 566, 9, 7, 2, 2, 565, 567, 5, 177, 88, 2, 566, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 170, 3, 2, 2, 2, 570, 571, 7, 50, 2, 2, 571, 573, 9, 8, 2, 2, 572, 574, 5, 179, 89, 2, 573, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 172, 3, 2, 2, 2, 577, 578, 9, 9, 2, 2, 578, 174, 3, 2, 2, 2, 579, 580, 9, 10, 2, 2, 580, 176, 3, 2, 2, 2, 581, 582, 9, 11, 2, 2, 582, 178, 3, 2, 2, 2, 583, 584, 9, 12, 2, 2, 584, 180, 3, 2, 2, 2, 585, 587, 5, 183, 91, 2, 586, 588, 5, 185, 92, 2, 587, 586, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 593, 3, 2, 2, 2, 589, 590, 5, 187, 93, 2, 590, 591, 5, 185, 92, 2, 591, 593, 3, 2, 2, 2, 592, 585, 3, 2, 2, 2, 592, 589, 3, 2, 2, 2, 593, 182, 3, 2, 2, 2, 594, 596, 5, 187, 93, 2, 595, 594, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 598, 7, 48, 2, 2, 598, 603, 5, 187, 93, 2, 599, 600, 5, 187, 93, 2, 600, 601, 7, 48, 2, 2, 601, 603, 3, 2, 2, 2, 602, 595, 3, 2, 2, 2, 602, 599, 3, 2, 2, 2, 603, 184, 3, 2, 2, 2, 604, 606, 9, 13, 2, 2, 605, 607, 5, 189, 94, 2, 606, 605, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 5, 187, 93, 2, 609, 186, 3, 2, 2, 2, 610, 612, 5, 163, 81, 2, 611, 610, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 611, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 188, 3, 2, 2, 2, 615, 616, 9, 14, 2, 2, 616, 190, 3, 2, 2, 2, 617, 619, 5, 193, 96, 2, 618, 617, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 618, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 192, 3, 2, 2, 2, 622, 625, 10, 15, 2, 2, 623, 625, 5, 195, 97, 2, 624, 622, 3, 2, 2, 2, 624, 623, 3, 2, 2, 2, 625, 194, 3, 2, 2, 2, 626, 630, 5, 197, 98, 2, 627, 630, 5, 199, 99, 2, 628, 630, 5, 201, 100, 2, 629, 626, 3, 2, 2, 2, 629, 627, 3, 2, 2, 2, 629, 628, 3, 2, 2, 2, 630, 196, 3, 2, 2, 2, 631, 632, 7, 94, 2, 2, 632, 633, 9, 16, 2, 2, 633, 198, 3, 2, 2, 2, 634, 635, 7, 94, 2, 2, 635, 637, 5, 177, 88, 2, 636, 638, 5, 177, 88, 2, 637, 636, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 640, 3, 2, 2, 2, 639, 641, 5, 177, 88, 2, 640, 639, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 200, 3, 2, 2, 2, 642, 643, 7, 94, 2, 2, 643, 644, 7, 122, 2, 2, 644, 646, 3, 2, 2, 2, 645, 647, 5, 179, 89, 2, 646, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 202, 3, 2, 2, 2, 650, 652, 5, 205, 102, 2, 651, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 651, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 204, 3, 2, 2, 2, 655, 658, 10, 17, 2, 2, 656, 658, 5, 195, 97, 2, 657, 655, 3, 2, 2, 2, 657, 656, 3, 2, 2, 2, 658, 206, 3, 2, 2, 2, 659, 661, 5, 209, 104, 2, 660, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 208, 3, 2, 2, 2, 664, 667, 10, 18, 2, 2, 665, 667, 5, 195, 97, 2, 666, 664, 3, 2, 2, 2, 666, 665, 3, 2, 2, 2, 667, 210, 3, 2, 2, 2, 668, 670, 5, 213, 106, 2, 669, 668, 3, 2, 2, 2, 670, 671, 3, 2, 2, 2, 671, 669, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 212, 3, 2, 2, 2, 673, 676, 10, 15, 2, 2, 674, 676, 5, 195, 97, 2, 675, 673, 3, 2, 2, 2, 675, 674, 3, 2, 2, 2, 676, 214, 3, 2, 2, 2, 677, 679, 5, 217, 108, 2, 678, 677, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 216, 3, 2, 2, 2, 682, 685, 10, 19, 2, 2, 683, 685, 5, 195, 97, 2, 684, 682, 3, 2, 2, 2, 684, 683, 3, 2, 2, 2, 685, 218, 3, 2, 2, 2, 37, 2, 3, 4, 225, 239, 469, 471, 478, 482, 488, 497, 554, 561, 568, 575, 587, 592, 595, 602, 606, 613, 620, 624, 629, 637, 640, 648, 653, 657, 662, 666, 671, 675, 680, 684, 13, 2, 4, 2, 6, 2, 2, 2, 3, 2, 3, 71, 2, 7, 3, 2, 3, 72, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 74, 4, 3, 77, 5] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 85, 718, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 238, 10, 2, 12, 2, 14, 2, 241, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 252, 10, 3, 12, 3, 14, 3, 255, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 7, 71, 502, 10, 71, 12, 71, 14, 71, 505, 11, 71, 3, 72, 3, 72, 3, 72, 3, 72, 5, 72, 511, 10, 72, 3, 73, 3, 73, 5, 73, 515, 10, 73, 3, 73, 3, 73, 3, 74, 3, 74, 5, 74, 521, 10, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 6, 76, 528, 10, 76, 13, 76, 14, 76, 529, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 6, 89, 585, 10, 89, 13, 89, 14, 89, 586, 3, 90, 3, 90, 3, 90, 6, 90, 592, 10, 90, 13, 90, 14, 90, 593, 3, 91, 3, 91, 3, 91, 6, 91, 599, 10, 91, 13, 91, 14, 91, 600, 3, 92, 3, 92, 3, 92, 6, 92, 606, 10, 92, 13, 92, 14, 92, 607, 3, 93, 3, 93, 3, 94, 3, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 97, 3, 97, 5, 97, 620, 10, 97, 3, 97, 3, 97, 3, 97, 5, 97, 625, 10, 97, 3, 98, 5, 98, 628, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 635, 10, 98, 3, 99, 3, 99, 5, 99, 639, 10, 99, 3, 99, 3, 99, 3, 100, 6, 100, 644, 10, 100, 13, 100, 14, 100, 645, 3, 101, 3, 101, 3, 102, 6, 102, 651, 10, 102, 13, 102, 14, 102, 652, 3, 103, 3, 103, 5, 103, 657, 10, 103, 3, 104, 3, 104, 3, 104, 5, 104, 662, 10, 104, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 5, 106, 670, 10, 106, 3, 106, 5, 106, 673, 10, 106, 3, 107, 3, 107, 3, 107, 3, 107, 6, 107, 679, 10, 107, 13, 107, 14, 107, 680, 3, 108, 6, 108, 684, 10, 108, 13, 108, 14, 108, 685, 3, 109, 3, 109, 5, 109, 690, 10, 109, 3, 110, 6, 110, 693, 10, 110, 13, 110, 14, 110, 694, 3, 111, 3, 111, 5, 111, 699, 10, 111, 3, 112, 6, 112, 702, 10, 112, 13, 112, 14, 112, 703, 3, 113, 3, 113, 5, 113, 708, 10, 113, 3, 114, 6, 114, 711, 10, 114, 13, 114, 14, 114, 712, 3, 115, 3, 115, 5, 115, 717, 10, 115, 3, 239, 2, 2, 116, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 2, 163, 2, 82, 165, 2, 83, 167, 2, 2, 169, 2, 84, 171, 2, 85, 173, 2, 2, 175, 2, 2, 177, 2, 2, 179, 2, 2, 181, 2, 2, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 5, 2, 3, 4, 20, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 720, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 3, 163, 3, 2, 2, 2, 3, 165, 3, 2, 2, 2, 4, 167, 3, 2, 2, 2, 4, 169, 3, 2, 2, 2, 4, 171, 3, 2, 2, 2, 5, 233, 3, 2, 2, 2, 7, 247, 3, 2, 2, 2, 9, 258, 3, 2, 2, 2, 11, 264, 3, 2, 2, 2, 13, 268, 3, 2, 2, 2, 15, 271, 3, 2, 2, 2, 17, 275, 3, 2, 2, 2, 19, 282, 3, 2, 2, 2, 21, 287, 3, 2, 2, 2, 23, 295, 3, 2, 2, 2, 25, 301, 3, 2, 2, 2, 27, 310, 3, 2, 2, 2, 29, 313, 3, 2, 2, 2, 31, 319, 3, 2, 2, 2, 33, 322, 3, 2, 2, 2, 35, 327, 3, 2, 2, 2, 37, 331, 3, 2, 2, 2, 39, 336, 3, 2, 2, 2, 41, 340, 3, 2, 2, 2, 43, 347, 3, 2, 2, 2, 45, 352, 3, 2, 2, 2, 47, 355, 3, 2, 2, 2, 49, 360, 3, 2, 2, 2, 51, 366, 3, 2, 2, 2, 53, 373, 3, 2, 2, 2, 55, 378, 3, 2, 2, 2, 57, 383, 3, 2, 2, 2, 59, 393, 3, 2, 2, 2, 61, 395, 3, 2, 2, 2, 63, 397, 3, 2, 2, 2, 65, 399, 3, 2, 2, 2, 67, 401, 3, 2, 2, 2, 69, 403, 3, 2, 2, 2, 71, 405, 3, 2, 2, 2, 73, 407, 3, 2, 2, 2, 75, 409, 3, 2, 2, 2, 77, 414, 3, 2, 2, 2, 79, 416, 3, 2, 2, 2, 81, 418, 3, 2, 2, 2, 83, 420, 3, 2, 2, 2, 85, 423, 3, 2, 2, 2, 87, 425, 3, 2, 2, 2, 89, 428, 3, 2, 2, 2, 91, 430, 3, 2, 2, 2, 93, 432, 3, 2, 2, 2, 95, 434, 3, 2, 2, 2, 97, 437, 3, 2, 2, 2, 99, 440, 3, 2, 2, 2, 101, 443, 3, 2, 2, 2, 103, 445, 3, 2, 2, 2, 105, 447, 3, 2, 2, 2, 107, 450, 3, 2, 2, 2, 109, 453, 3, 2, 2, 2, 111, 456, 3, 2, 2, 2, 113, 459, 3, 2, 2, 2, 115, 462, 3, 2, 2, 2, 117, 465, 3, 2, 2, 2, 119, 468, 3, 2, 2, 2, 121, 470, 3, 2, 2, 2, 123, 473, 3, 2, 2, 2, 125, 475, 3, 2, 2, 2, 127, 478, 3, 2, 2, 2, 129, 480, 3, 2, 2, 2, 131, 482, 3, 2, 2, 2, 133, 484, 3, 2, 2, 2, 135, 486, 3, 2, 2, 2, 137, 489, 3, 2, 2, 2, 139, 492, 3, 2, 2, 2, 141, 496, 3, 2, 2, 2, 143, 498, 3, 2, 2, 2, 145, 510, 3, 2, 2, 2, 147, 512, 3, 2, 2, 2, 149, 518, 3, 2, 2, 2, 151, 524, 3, 2, 2, 2, 153, 527, 3, 2, 2, 2, 155, 533, 3, 2, 2, 2, 157, 537, 3, 2, 2, 2, 159, 544, 3, 2, 2, 2, 161, 551, 3, 2, 2, 2, 163, 557, 3, 2, 2, 2, 165, 562, 3, 2, 2, 2, 167, 564, 3, 2, 2, 2, 169, 570, 3, 2, 2, 2, 171, 575, 3, 2, 2, 2, 173, 577, 3, 2, 2, 2, 175, 579, 3, 2, 2, 2, 177, 581, 3, 2, 2, 2, 179, 584, 3, 2, 2, 2, 181, 588, 3, 2, 2, 2, 183, 595, 3, 2, 2, 2, 185, 602, 3, 2, 2, 2, 187, 609, 3, 2, 2, 2, 189, 611, 3, 2, 2, 2, 191, 613, 3, 2, 2, 2, 193, 615, 3, 2, 2, 2, 195, 624, 3, 2, 2, 2, 197, 634, 3, 2, 2, 2, 199, 636, 3, 2, 2, 2, 201, 643, 3, 2, 2, 2, 203, 647, 3, 2, 2, 2, 205, 650, 3, 2, 2, 2, 207, 656, 3, 2, 2, 2, 209, 661, 3, 2, 2, 2, 211, 663, 3, 2, 2, 2, 213, 666, 3, 2, 2, 2, 215, 674, 3, 2, 2, 2, 217, 683, 3, 2, 2, 2, 219, 689, 3, 2, 2, 2, 221, 692, 3, 2, 2, 2, 223, 698, 3, 2, 2, 2, 225, 701, 3, 2, 2, 2, 227, 707, 3, 2, 2, 2, 229, 710, 3, 2, 2, 2, 231, 716, 3, 2, 2, 2, 233, 234, 7, 49, 2, 2, 234, 235, 7, 44, 2, 2, 235, 239, 3, 2, 2, 2, 236, 238, 11, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 242, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 243, 7, 44, 2, 2, 243, 244, 7, 49, 2, 2, 244, 245, 3, 2, 2, 2, 245, 246, 8, 2, 2, 2, 246, 6, 3, 2, 2, 2, 247, 248, 7, 49, 2, 2, 248, 249, 7, 49, 2, 2, 249, 253, 3, 2, 2, 2, 250, 252, 10, 2, 2, 2, 251, 250, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 256, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 257, 8, 3, 2, 2, 257, 8, 3, 2, 2, 2, 258, 259, 7, 101, 2, 2, 259, 260, 7, 113, 2, 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 117, 2, 2, 262, 263, 7, 118, 2, 2, 263, 10, 3, 2, 2, 2, 264, 265, 7, 120, 2, 2, 265, 266, 7, 99, 2, 2, 266, 267, 7, 116, 2, 2, 267, 12, 3, 2, 2, 2, 268, 269, 7, 99, 2, 2, 269, 270, 7, 117, 2, 2, 270, 14, 3, 2, 2, 2, 271, 272, 7, 48, 2, 2, 272, 273, 7, 48, 2, 2, 273, 274, 7, 48, 2, 2, 274, 16, 3, 2, 2, 2, 275, 276, 7, 117, 2, 2, 276, 277, 7, 121, 2, 2, 277, 278, 7, 107, 2, 2, 278, 279, 7, 118, 2, 2, 279, 280, 7, 101, 2, 2, 280, 281, 7, 106, 2, 2, 281, 18, 3, 2, 2, 2, 282, 283, 7, 101, 2, 2, 283, 284, 7, 99, 2, 2, 284, 285, 7, 117, 2, 2, 285, 286, 7, 103, 2, 2, 286, 20, 3, 2, 2, 2, 287, 288, 7, 102, 2, 2, 288, 289, 7, 103, 2, 2, 289, 290, 7, 104, 2, 2, 290, 291, 7, 99, 2, 2, 291, 292, 7, 119, 2, 2, 292, 293, 7, 110, 2, 2, 293, 294, 7, 118, 2, 2, 294, 22, 3, 2, 2, 2, 295, 296, 7, 100, 2, 2, 296, 297, 7, 116, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 99, 2, 2, 299, 300, 7, 109, 2, 2, 300, 24, 3, 2, 2, 2, 301, 302, 7, 101, 2, 2, 302, 303, 7, 113, 2, 2, 303, 304, 7, 112, 2, 2, 304, 305, 7, 118, 2, 2, 305, 306, 7, 107, 2, 2, 306, 307, 7, 112, 2, 2, 307, 308, 7, 119, 2, 2, 308, 309, 7, 103, 2, 2, 309, 26, 3, 2, 2, 2, 310, 311, 7, 102, 2, 2, 311, 312, 7, 113, 2, 2, 312, 28, 3, 2, 2, 2, 313, 314, 7, 121, 2, 2, 314, 315, 7, 106, 2, 2, 315, 316, 7, 107, 2, 2, 316, 317, 7, 110, 2, 2, 317, 318, 7, 103, 2, 2, 318, 30, 3, 2, 2, 2, 319, 320, 7, 107, 2, 2, 320, 321, 7, 104, 2, 2, 321, 32, 3, 2, 2, 2, 322, 323, 7, 103, 2, 2, 323, 324, 7, 110, 2, 2, 324, 325, 7, 117, 2, 2, 325, 326, 7, 103, 2, 2, 326, 34, 3, 2, 2, 2, 327, 328, 7, 104, 2, 2, 328, 329, 7, 113, 2, 2, 329, 330, 7, 116, 2, 2, 330, 36, 3, 2, 2, 2, 331, 332, 7, 103, 2, 2, 332, 333, 7, 112, 2, 2, 333, 334, 7, 119, 2, 2, 334, 335, 7, 111, 2, 2, 335, 38, 3, 2, 2, 2, 336, 337, 7, 102, 2, 2, 337, 338, 7, 103, 2, 2, 338, 339, 7, 104, 2, 2, 339, 40, 3, 2, 2, 2, 340, 341, 7, 116, 2, 2, 341, 342, 7, 103, 2, 2, 342, 343, 7, 118, 2, 2, 343, 344, 7, 119, 2, 2, 344, 345, 7, 116, 2, 2, 345, 346, 7, 112, 2, 2, 346, 42, 3, 2, 2, 2, 347, 348, 7, 101, 2, 2, 348, 349, 7, 99, 2, 2, 349, 350, 7, 110, 2, 2, 350, 351, 7, 110, 2, 2, 351, 44, 3, 2, 2, 2, 352, 353, 7, 47, 2, 2, 353, 354, 7, 64, 2, 2, 354, 46, 3, 2, 2, 2, 355, 356, 7, 118, 2, 2, 356, 357, 7, 116, 2, 2, 357, 358, 7, 119, 2, 2, 358, 359, 7, 103, 2, 2, 359, 48, 3, 2, 2, 2, 360, 361, 7, 104, 2, 2, 361, 362, 7, 99, 2, 2, 362, 363, 7, 110, 2, 2, 363, 364, 7, 117, 2, 2, 364, 365, 7, 103, 2, 2, 365, 50, 3, 2, 2, 2, 366, 367, 7, 118, 2, 2, 367, 368, 7, 123, 2, 2, 368, 369, 7, 114, 2, 2, 369, 370, 7, 103, 2, 2, 370, 371, 7, 113, 2, 2, 371, 372, 7, 104, 2, 2, 372, 52, 3, 2, 2, 2, 373, 374, 7, 120, 2, 2, 374, 375, 7, 113, 2, 2, 375, 376, 7, 107, 2, 2, 376, 377, 7, 102, 2, 2, 377, 54, 3, 2, 2, 2, 378, 379, 7, 112, 2, 2, 379, 380, 7, 119, 2, 2, 380, 381, 7, 110, 2, 2, 381, 382, 7, 110, 2, 2, 382, 56, 3, 2, 2, 2, 383, 384, 7, 119, 2, 2, 384, 385, 7, 112, 2, 2, 385, 386, 7, 102, 2, 2, 386, 387, 7, 103, 2, 2, 387, 388, 7, 104, 2, 2, 388, 389, 7, 107, 2, 2, 389, 390, 7, 112, 2, 2, 390, 391, 7, 103, 2, 2, 391, 392, 7, 102, 2, 2, 392, 58, 3, 2, 2, 2, 393, 394, 7, 46, 2, 2, 394, 60, 3, 2, 2, 2, 395, 396, 7, 61, 2, 2, 396, 62, 3, 2, 2, 2, 397, 398, 7, 65, 2, 2, 398, 64, 3, 2, 2, 2, 399, 400, 7, 60, 2, 2, 400, 66, 3, 2, 2, 2, 401, 402, 7, 42, 2, 2, 402, 68, 3, 2, 2, 2, 403, 404, 7, 43, 2, 2, 404, 70, 3, 2, 2, 2, 405, 406, 7, 93, 2, 2, 406, 72, 3, 2, 2, 2, 407, 408, 7, 95, 2, 2, 408, 74, 3, 2, 2, 2, 409, 410, 6, 37, 2, 2, 410, 411, 7, 127, 2, 2, 411, 412, 3, 2, 2, 2, 412, 413, 8, 37, 3, 2, 413, 76, 3, 2, 2, 2, 414, 415, 7, 125, 2, 2, 415, 78, 3, 2, 2, 2, 416, 417, 7, 127, 2, 2, 417, 80, 3, 2, 2, 2, 418, 419, 7, 45, 2, 2, 419, 82, 3, 2, 2, 2, 420, 421, 7, 45, 2, 2, 421, 422, 7, 45, 2, 2, 422, 84, 3, 2, 2, 2, 423, 424, 7, 47, 2, 2, 424, 86, 3, 2, 2, 2, 425, 426, 7, 47, 2, 2, 426, 427, 7, 47, 2, 2, 427, 88, 3, 2, 2, 2, 428, 429, 7, 44, 2, 2, 429, 90, 3, 2, 2, 2, 430, 431, 7, 49, 2, 2, 431, 92, 3, 2, 2, 2, 432, 433, 7, 39, 2, 2, 433, 94, 3, 2, 2, 2, 434, 435, 7, 44, 2, 2, 435, 436, 7, 44, 2, 2, 436, 96, 3, 2, 2, 2, 437, 438, 7, 40, 2, 2, 438, 439, 7, 40, 2, 2, 439, 98, 3, 2, 2, 2, 440, 441, 7, 126, 2, 2, 441, 442, 7, 126, 2, 2, 442, 100, 3, 2, 2, 2, 443, 444, 7, 35, 2, 2, 444, 102, 3, 2, 2, 2, 445, 446, 7, 63, 2, 2, 446, 104, 3, 2, 2, 2, 447, 448, 7, 45, 2, 2, 448, 449, 7, 63, 2, 2, 449, 106, 3, 2, 2, 2, 450, 451, 7, 47, 2, 2, 451, 452, 7, 63, 2, 2, 452, 108, 3, 2, 2, 2, 453, 454, 7, 44, 2, 2, 454, 455, 7, 63, 2, 2, 455, 110, 3, 2, 2, 2, 456, 457, 7, 49, 2, 2, 457, 458, 7, 63, 2, 2, 458, 112, 3, 2, 2, 2, 459, 460, 7, 39, 2, 2, 460, 461, 7, 63, 2, 2, 461, 114, 3, 2, 2, 2, 462, 463, 7, 63, 2, 2, 463, 464, 7, 63, 2, 2, 464, 116, 3, 2, 2, 2, 465, 466, 7, 35, 2, 2, 466, 467, 7, 63, 2, 2, 467, 118, 3, 2, 2, 2, 468, 469, 7, 62, 2, 2, 469, 120, 3, 2, 2, 2, 470, 471, 7, 62, 2, 2, 471, 472, 7, 63, 2, 2, 472, 122, 3, 2, 2, 2, 473, 474, 7, 64, 2, 2, 474, 124, 3, 2, 2, 2, 475, 476, 7, 64, 2, 2, 476, 477, 7, 63, 2, 2, 477, 126, 3, 2, 2, 2, 478, 479, 7, 40, 2, 2, 479, 128, 3, 2, 2, 2, 480, 481, 7, 126, 2, 2, 481, 130, 3, 2, 2, 2, 482, 483, 7, 96, 2, 2, 483, 132, 3, 2, 2, 2, 484, 485, 7, 128, 2, 2, 485, 134, 3, 2, 2, 2, 486, 487, 7, 62, 2, 2, 487, 488, 7, 62, 2, 2, 488, 136, 3, 2, 2, 2, 489, 490, 7, 64, 2, 2, 490, 491, 7, 64, 2, 2, 491, 138, 3, 2, 2, 2, 492, 493, 7, 64, 2, 2, 493, 494, 7, 64, 2, 2, 494, 495, 7, 64, 2, 2, 495, 140, 3, 2, 2, 2, 496, 497, 7, 48, 2, 2, 497, 142, 3, 2, 2, 2, 498, 503, 5, 173, 86, 2, 499, 502, 5, 173, 86, 2, 500, 502, 5, 177, 88, 2, 501, 499, 3, 2, 2, 2, 501, 500, 3, 2, 2, 2, 502, 505, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 144, 3, 2, 2, 2, 505, 503, 3, 2, 2, 2, 506, 511, 5, 179, 89, 2, 507, 511, 5, 183, 91, 2, 508, 511, 5, 185, 92, 2, 509, 511, 5, 181, 90, 2, 510, 506, 3, 2, 2, 2, 510, 507, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 510, 509, 3, 2, 2, 2, 511, 146, 3, 2, 2, 2, 512, 514, 7, 41, 2, 2, 513, 515, 5, 225, 112, 2, 514, 513, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 517, 7, 41, 2, 2, 517, 148, 3, 2, 2, 2, 518, 520, 7, 36, 2, 2, 519, 521, 5, 229, 114, 2, 520, 519, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 523, 7, 36, 2, 2, 523, 150, 3, 2, 2, 2, 524, 525, 5, 195, 97, 2, 525, 152, 3, 2, 2, 2, 526, 528, 9, 3, 2, 2, 527, 526, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 8, 76, 4, 2, 532, 154, 3, 2, 2, 2, 533, 534, 9, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 8, 77, 4, 2, 536, 156, 3, 2, 2, 2, 537, 538, 7, 104, 2, 2, 538, 539, 7, 41, 2, 2, 539, 540, 3, 2, 2, 2, 540, 541, 8, 78, 5, 2, 541, 542, 3, 2, 2, 2, 542, 543, 8, 78, 6, 2, 543, 158, 3, 2, 2, 2, 544, 545, 7, 104, 2, 2, 545, 546, 7, 36, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 8, 79, 7, 2, 548, 549, 3, 2, 2, 2, 549, 550, 8, 79, 8, 2, 550, 160, 3, 2, 2, 2, 551, 552, 6, 80, 3, 2, 552, 553, 7, 125, 2, 2, 553, 554, 3, 2, 2, 2, 554, 555, 8, 80, 9, 2, 555, 556, 8, 80, 10, 2, 556, 162, 3, 2, 2, 2, 557, 558, 7, 41, 2, 2, 558, 559, 8, 81, 11, 2, 559, 560, 3, 2, 2, 2, 560, 561, 8, 81, 3, 2, 561, 164, 3, 2, 2, 2, 562, 563, 5, 217, 108, 2, 563, 166, 3, 2, 2, 2, 564, 565, 6, 83, 4, 2, 565, 566, 7, 125, 2, 2, 566, 567, 3, 2, 2, 2, 567, 568, 8, 83, 9, 2, 568, 569, 8, 83, 10, 2, 569, 168, 3, 2, 2, 2, 570, 571, 7, 36, 2, 2, 571, 572, 8, 84, 12, 2, 572, 573, 3, 2, 2, 2, 573, 574, 8, 84, 3, 2, 574, 170, 3, 2, 2, 2, 575, 576, 5, 221, 110, 2, 576, 172, 3, 2, 2, 2, 577, 578, 5, 175, 87, 2, 578, 174, 3, 2, 2, 2, 579, 580, 9, 4, 2, 2, 580, 176, 3, 2, 2, 2, 581, 582, 9, 5, 2, 2, 582, 178, 3, 2, 2, 2, 583, 585, 5, 177, 88, 2, 584, 583, 3, 2, 2, 2, 585, 586, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 180, 3, 2, 2, 2, 588, 589, 7, 50, 2, 2, 589, 591, 9, 6, 2, 2, 590, 592, 5, 189, 94, 2, 591, 590, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 591, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 182, 3, 2, 2, 2, 595, 596, 7, 50, 2, 2, 596, 598, 9, 7, 2, 2, 597, 599, 5, 191, 95, 2, 598, 597, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 598, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 184, 3, 2, 2, 2, 602, 603, 7, 50, 2, 2, 603, 605, 9, 8, 2, 2, 604, 606, 5, 193, 96, 2, 605, 604, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 186, 3, 2, 2, 2, 609, 610, 9, 9, 2, 2, 610, 188, 3, 2, 2, 2, 611, 612, 9, 10, 2, 2, 612, 190, 3, 2, 2, 2, 613, 614, 9, 11, 2, 2, 614, 192, 3, 2, 2, 2, 615, 616, 9, 12, 2, 2, 616, 194, 3, 2, 2, 2, 617, 619, 5, 197, 98, 2, 618, 620, 5, 199, 99, 2, 619, 618, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 625, 3, 2, 2, 2, 621, 622, 5, 201, 100, 2, 622, 623, 5, 199, 99, 2, 623, 625, 3, 2, 2, 2, 624, 617, 3, 2, 2, 2, 624, 621, 3, 2, 2, 2, 625, 196, 3, 2, 2, 2, 626, 628, 5, 201, 100, 2, 627, 626, 3, 2, 2, 2, 627, 628, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 7, 48, 2, 2, 630, 635, 5, 201, 100, 2, 631, 632, 5, 201, 100, 2, 632, 633, 7, 48, 2, 2, 633, 635, 3, 2, 2, 2, 634, 627, 3, 2, 2, 2, 634, 631, 3, 2, 2, 2, 635, 198, 3, 2, 2, 2, 636, 638, 9, 13, 2, 2, 637, 639, 5, 203, 101, 2, 638, 637, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 641, 5, 201, 100, 2, 641, 200, 3, 2, 2, 2, 642, 644, 5, 177, 88, 2, 643, 642, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 202, 3, 2, 2, 2, 647, 648, 9, 14, 2, 2, 648, 204, 3, 2, 2, 2, 649, 651, 5, 207, 103, 2, 650, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 206, 3, 2, 2, 2, 654, 657, 10, 15, 2, 2, 655, 657, 5, 209, 104, 2, 656, 654, 3, 2, 2, 2, 656, 655, 3, 2, 2, 2, 657, 208, 3, 2, 2, 2, 658, 662, 5, 211, 105, 2, 659, 662, 5, 213, 106, 2, 660, 662, 5, 215, 107, 2, 661, 658, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 661, 660, 3, 2, 2, 2, 662, 210, 3, 2, 2, 2, 663, 664, 7, 94, 2, 2, 664, 665, 9, 16, 2, 2, 665, 212, 3, 2, 2, 2, 666, 667, 7, 94, 2, 2, 667, 669, 5, 191, 95, 2, 668, 670, 5, 191, 95, 2, 669, 668, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 672, 3, 2, 2, 2, 671, 673, 5, 191, 95, 2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 214, 3, 2, 2, 2, 674, 675, 7, 94, 2, 2, 675, 676, 7, 122, 2, 2, 676, 678, 3, 2, 2, 2, 677, 679, 5, 193, 96, 2, 678, 677, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 216, 3, 2, 2, 2, 682, 684, 5, 219, 109, 2, 683, 682, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 683, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 218, 3, 2, 2, 2, 687, 690, 10, 17, 2, 2, 688, 690, 5, 209, 104, 2, 689, 687, 3, 2, 2, 2, 689, 688, 3, 2, 2, 2, 690, 220, 3, 2, 2, 2, 691, 693, 5, 223, 111, 2, 692, 691, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 692, 3, 2, 2, 2, 694, 695, 3, 2, 2, 2, 695, 222, 3, 2, 2, 2, 696, 699, 10, 18, 2, 2, 697, 699, 5, 209, 104, 2, 698, 696, 3, 2, 2, 2, 698, 697, 3, 2, 2, 2, 699, 224, 3, 2, 2, 2, 700, 702, 5, 227, 113, 2, 701, 700, 3, 2, 2, 2, 702, 703, 3, 2, 2, 2, 703, 701, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 226, 3, 2, 2, 2, 705, 708, 10, 15, 2, 2, 706, 708, 5, 209, 104, 2, 707, 705, 3, 2, 2, 2, 707, 706, 3, 2, 2, 2, 708, 228, 3, 2, 2, 2, 709, 711, 5, 231, 115, 2, 710, 709, 3, 2, 2, 2, 711, 712, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 712, 713, 3, 2, 2, 2, 713, 230, 3, 2, 2, 2, 714, 717, 10, 19, 2, 2, 715, 717, 5, 209, 104, 2, 716, 714, 3, 2, 2, 2, 716, 715, 3, 2, 2, 2, 717, 232, 3, 2, 2, 2, 37, 2, 3, 4, 239, 253, 501, 503, 510, 514, 520, 529, 586, 593, 600, 607, 619, 624, 627, 634, 638, 645, 652, 656, 661, 669, 672, 680, 685, 689, 694, 698, 703, 707, 712, 716, 13, 2, 4, 2, 6, 2, 2, 2, 3, 2, 3, 78, 2, 7, 3, 2, 3, 79, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 81, 4, 3, 84, 5] \ No newline at end of file diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens b/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens index a8e8b39b6..4623d5795 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.tokens @@ -60,20 +60,27 @@ Less=59 LessEqual=60 Greater=61 GreaterEqual=62 -Dot=63 -Identifier=64 -IntegerConstant=65 -SingleQuoteStringLiteral=66 -DoubleQuoteStringLiteral=67 -FloatingConstant=68 -Whitespace=69 -Newline=70 -FStringSingleQuoteStart=71 -FStringDoubleQuoteStart=72 -FStringSingleQuoteEnd=73 -FStringSingleQuoteAtom=74 -FStringDoubleQuoteEnd=75 -FStringDoubleQuoteAtom=76 +BitwiseAnd=63 +BitwiseOr=64 +BitwiseXor=65 +BitwiseNot=66 +BitwiseZeroFillLeftShift=67 +BitwiseSignedRightShift=68 +BitwiseZeroFillRightShift=69 +Dot=70 +Identifier=71 +IntegerConstant=72 +SingleQuoteStringLiteral=73 +DoubleQuoteStringLiteral=74 +FloatingConstant=75 +Whitespace=76 +Newline=77 +FStringSingleQuoteStart=78 +FStringDoubleQuoteStart=79 +FStringSingleQuoteEnd=80 +FStringSingleQuoteAtom=81 +FStringDoubleQuoteEnd=82 +FStringDoubleQuoteAtom=83 'const'=4 'var'=5 'as'=6 @@ -132,4 +139,11 @@ FStringDoubleQuoteAtom=76 '<='=60 '>'=61 '>='=62 -'.'=63 +'&'=63 +'|'=64 +'^'=65 +'~'=66 +'<<'=67 +'>>'=68 +'>>>'=69 +'.'=70 diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts index 9c366d450..da3094008 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts @@ -1,6 +1,8 @@ // Generated from ./KipperLexer.g4 by ANTLR 4.9.0-SNAPSHOT -import KipperLexerBase from "./base/KipperLexerBase"; + + import KipperLexerBase from "./base/KipperLexerBase"; + import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; @@ -15,6 +17,7 @@ import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; + export class KipperLexer extends KipperLexerBase { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -78,290 +81,96 @@ export class KipperLexer extends KipperLexerBase { public static readonly LessEqual = 60; public static readonly Greater = 61; public static readonly GreaterEqual = 62; - public static readonly Dot = 63; - public static readonly Identifier = 64; - public static readonly IntegerConstant = 65; - public static readonly SingleQuoteStringLiteral = 66; - public static readonly DoubleQuoteStringLiteral = 67; - public static readonly FloatingConstant = 68; - public static readonly Whitespace = 69; - public static readonly Newline = 70; - public static readonly FStringSingleQuoteStart = 71; - public static readonly FStringDoubleQuoteStart = 72; - public static readonly FStringSingleQuoteEnd = 73; - public static readonly FStringSingleQuoteAtom = 74; - public static readonly FStringDoubleQuoteEnd = 75; - public static readonly FStringDoubleQuoteAtom = 76; + public static readonly BitwiseAnd = 63; + public static readonly BitwiseOr = 64; + public static readonly BitwiseXor = 65; + public static readonly BitwiseNot = 66; + public static readonly BitwiseZeroFillLeftShift = 67; + public static readonly BitwiseSignedRightShift = 68; + public static readonly BitwiseZeroFillRightShift = 69; + public static readonly Dot = 70; + public static readonly Identifier = 71; + public static readonly IntegerConstant = 72; + public static readonly SingleQuoteStringLiteral = 73; + public static readonly DoubleQuoteStringLiteral = 74; + public static readonly FloatingConstant = 75; + public static readonly Whitespace = 76; + public static readonly Newline = 77; + public static readonly FStringSingleQuoteStart = 78; + public static readonly FStringDoubleQuoteStart = 79; + public static readonly FStringSingleQuoteEnd = 80; + public static readonly FStringSingleQuoteAtom = 81; + public static readonly FStringDoubleQuoteEnd = 82; + public static readonly FStringDoubleQuoteAtom = 83; public static readonly COMMENT = 2; public static readonly SINGLE_QUOTE_FSTRING = 1; public static readonly DOUBLE_QUOTE_FSTRING = 2; // tslint:disable:no-trailing-whitespace - public static readonly channelNames: string[] = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT"]; + public static readonly channelNames: string[] = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT", + ]; // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = ["DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING"]; + public static readonly modeNames: string[] = [ + "DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING", + ]; public static readonly ruleNames: string[] = [ - "BlockComment", - "LineComment", - "Const", - "Var", - "As", - "Spread", - "Switch", - "Case", - "Default", - "Break", - "Continue", - "Do", - "While", - "If", - "Else", - "For", - "Enum", - "DefFunc", - "Return", - "CallFunc", - "RetIndicator", - "True", - "False", - "Typeof", - "Void", - "Null", - "Undefined", - "Comma", - "SemiColon", - "QuestionMark", - "Colon", - "LeftParen", - "RightParen", - "LeftBracket", - "RightBracket", - "FStringExpEnd", - "LeftBrace", - "RightBrace", - "Plus", - "PlusPlus", - "Minus", - "MinusMinus", - "Star", - "Div", - "Mod", - "PowerTo", - "AndAnd", - "OrOr", - "Not", - "Assign", - "PlusAssign", - "MinusAssign", - "StarAssign", - "DivAssign", - "ModAssign", - "Equal", - "NotEqual", - "Less", - "LessEqual", - "Greater", - "GreaterEqual", - "Dot", - "Identifier", - "IntegerConstant", - "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", - "FloatingConstant", - "Whitespace", - "Newline", - "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", - "FStringSingleQuoteExpStart", - "FStringSingleQuoteEnd", - "FStringSingleQuoteAtom", - "FStringDoubleQuoteExpStart", - "FStringDoubleQuoteEnd", - "FStringDoubleQuoteAtom", - "IdentifierNondigit", - "Nondigit", - "Digit", - "DecimalConstant", - "BinaryConstant", - "OctalConstant", - "HexadecimalConstant", - "NonzeroDigit", - "BinaryDigit", - "OctalDigit", - "HexadecimalDigit", - "DecimalFloatingConstant", - "FractionalConstant", - "ExponentPart", - "DigitSequence", - "Sign", - "CCharSequence", - "CChar", - "EscapeSequence", - "SimpleEscapeSequence", - "OctalEscapeSequence", - "HexadecimalEscapeSequence", - "SingleQuoteFStringSCharSequence", - "SingleQuoteFStringSChar", - "DoubleQuoteFStringSCharSequence", - "DoubleQuoteFStringSChar", - "SingleQuoteSCharSequence", - "SingleQuoteSChar", - "DoubleQuoteSCharSequence", + "BlockComment", "LineComment", "Const", "Var", "As", "Spread", "Switch", + "Case", "Default", "Break", "Continue", "Do", "While", "If", "Else", "For", + "Enum", "DefFunc", "Return", "CallFunc", "RetIndicator", "True", "False", + "Typeof", "Void", "Null", "Undefined", "Comma", "SemiColon", "QuestionMark", + "Colon", "LeftParen", "RightParen", "LeftBracket", "RightBracket", "FStringExpEnd", + "LeftBrace", "RightBrace", "Plus", "PlusPlus", "Minus", "MinusMinus", + "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", + "MinusAssign", "StarAssign", "DivAssign", "ModAssign", "Equal", "NotEqual", + "Less", "LessEqual", "Greater", "GreaterEqual", "BitwiseAnd", "BitwiseOr", + "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", "FloatingConstant", "Whitespace", "Newline", + "FStringSingleQuoteStart", "FStringDoubleQuoteStart", "FStringSingleQuoteExpStart", + "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", "FStringDoubleQuoteExpStart", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", "IdentifierNondigit", + "Nondigit", "Digit", "DecimalConstant", "BinaryConstant", "OctalConstant", + "HexadecimalConstant", "NonzeroDigit", "BinaryDigit", "OctalDigit", "HexadecimalDigit", + "DecimalFloatingConstant", "FractionalConstant", "ExponentPart", "DigitSequence", + "Sign", "CCharSequence", "CChar", "EscapeSequence", "SimpleEscapeSequence", + "OctalEscapeSequence", "HexadecimalEscapeSequence", "SingleQuoteFStringSCharSequence", + "SingleQuoteFStringSChar", "DoubleQuoteFStringSCharSequence", "DoubleQuoteFStringSChar", + "SingleQuoteSCharSequence", "SingleQuoteSChar", "DoubleQuoteSCharSequence", "DoubleQuoteSChar", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, - undefined, - undefined, - undefined, - "'const'", - "'var'", - "'as'", - "'...'", - "'switch'", - "'case'", - "'default'", - "'break'", - "'continue'", - "'do'", - "'while'", - "'if'", - "'else'", - "'for'", - "'enum'", - "'def'", - "'return'", - "'call'", - "'->'", - "'true'", - "'false'", - "'typeof'", - "'void'", - "'null'", - "'undefined'", - "','", - "';'", - "'?'", - "':'", - "'('", - "')'", - "'['", - "']'", - undefined, - "'{'", - "'}'", - "'+'", - "'++'", - "'-'", - "'--'", - "'*'", - "'/'", - "'%'", - "'**'", - "'&&'", - "'||'", - "'!'", - "'='", - "'+='", - "'-='", - "'*='", - "'/='", - "'%='", - "'=='", - "'!='", - "'<'", - "'<='", - "'>'", - "'>='", - "'.'", + undefined, undefined, undefined, undefined, "'const'", "'var'", "'as'", + "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", "'do'", + "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", "'call'", + "'->'", "'true'", "'false'", "'typeof'", "'void'", "'null'", "'undefined'", + "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", + "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", + "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", + "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", + "'>>'", "'>>>'", "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, - "FStringExpStart", - "BlockComment", - "LineComment", - "Const", - "Var", - "As", - "Spread", - "Switch", - "Case", - "Default", - "Break", - "Continue", - "Do", - "While", - "If", - "Else", - "For", - "Enum", - "DefFunc", - "Return", - "CallFunc", - "RetIndicator", - "True", - "False", - "Typeof", - "Void", - "Null", - "Undefined", - "Comma", - "SemiColon", - "QuestionMark", - "Colon", - "LeftParen", - "RightParen", - "LeftBracket", - "RightBracket", - "FStringExpEnd", - "LeftBrace", - "RightBrace", - "Plus", - "PlusPlus", - "Minus", - "MinusMinus", - "Star", - "Div", - "Mod", - "PowerTo", - "AndAnd", - "OrOr", - "Not", - "Assign", - "PlusAssign", - "MinusAssign", - "StarAssign", - "DivAssign", - "ModAssign", - "Equal", - "NotEqual", - "Less", - "LessEqual", - "Greater", - "GreaterEqual", - "Dot", - "Identifier", - "IntegerConstant", - "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", - "FloatingConstant", - "Whitespace", - "Newline", - "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", - "FStringSingleQuoteEnd", - "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", - "FStringDoubleQuoteAtom", + undefined, "FStringExpStart", "BlockComment", "LineComment", "Const", + "Var", "As", "Spread", "Switch", "Case", "Default", "Break", "Continue", + "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", + "RetIndicator", "True", "False", "Typeof", "Void", "Null", "Undefined", + "Comma", "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", + "LeftBracket", "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", + "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", + "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", + "GreaterEqual", "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", + "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", + "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", + "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( - KipperLexer._LITERAL_NAMES, - KipperLexer._SYMBOLIC_NAMES, - [], - ); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperLexer._LITERAL_NAMES, KipperLexer._SYMBOLIC_NAMES, []); // @Override // @NotNull @@ -370,130 +179,121 @@ export class KipperLexer extends KipperLexerBase { } // tslint:enable:no-trailing-whitespace + constructor(input: CharStream) { super(input); this._interp = new LexerATNSimulator(KipperLexer._ATN, this); } // @Override - public get grammarFileName(): string { - return "KipperLexer.g4"; - } + public get grammarFileName(): string { return "KipperLexer.g4"; } // @Override - public get ruleNames(): string[] { - return KipperLexer.ruleNames; - } + public get ruleNames(): string[] { return KipperLexer.ruleNames; } // @Override - public get serializedATN(): string { - return KipperLexer._serializedATN; - } + public get serializedATN(): string { return KipperLexer._serializedATN; } // @Override - public get channelNames(): string[] { - return KipperLexer.channelNames; - } + public get channelNames(): string[] { return KipperLexer.channelNames; } // @Override - public get modeNames(): string[] { - return KipperLexer.modeNames; - } + public get modeNames(): string[] { return KipperLexer.modeNames; } // @Override public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { switch (ruleIndex) { - case 69: - this.FStringSingleQuoteStart_action(_localctx, actionIndex); - break; + case 76: + this.FStringSingleQuoteStart_action(_localctx, actionIndex); + break; - case 70: - this.FStringDoubleQuoteStart_action(_localctx, actionIndex); - break; + case 77: + this.FStringDoubleQuoteStart_action(_localctx, actionIndex); + break; - case 72: - this.FStringSingleQuoteEnd_action(_localctx, actionIndex); - break; + case 79: + this.FStringSingleQuoteEnd_action(_localctx, actionIndex); + break; - case 75: - this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); - break; + case 82: + this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); + break; } } private FStringSingleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 0: - this.incrementFStringDepth(); - break; + case 0: + this.incrementFStringDepth() + break; } } private FStringDoubleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 1: - this.incrementFStringDepth(); - break; + case 1: + this.incrementFStringDepth() + break; } } private FStringSingleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 2: - this.decrementFStringDepth(); - break; + case 2: + this.decrementFStringDepth() + break; } } private FStringDoubleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 3: - this.decrementFStringDepth(); - break; + case 3: + this.decrementFStringDepth() + break; } } // @Override public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 35: - return this.FStringExpEnd_sempred(_localctx, predIndex); + case 35: + return this.FStringExpEnd_sempred(_localctx, predIndex); - case 71: - return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); + case 78: + return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); - case 74: - return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); + case 81: + return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); } return true; } private FStringExpEnd_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.insideFString(); + case 0: + return this.insideFString(); } return true; } private FStringSingleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 1: - return this.insideFString(); + case 1: + return this.insideFString(); } return true; } private FStringDoubleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 2: - return this.insideFString(); + case 2: + return this.insideFString(); } return true; } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02N\u02AE\b\x01" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02U\u02CE\b\x01" + "\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04" + "\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f" + "\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11" + "\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16" + "\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B" + "\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!" + - "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t" + + "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t" + ")\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x04" + "2\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04" + ";\t;\x04<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04" + @@ -501,316 +301,334 @@ export class KipperLexer extends KipperLexerBase { "M\tM\x04N\tN\x04O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04" + "V\tV\x04W\tW\x04X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t" + "^\x04_\t_\x04`\t`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04" + - "g\tg\x04h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x03\x02\x03\x02\x03\x02\x03" + - "\x02\x07\x02\xE0\n\x02\f\x02\x0E\x02\xE3\v\x02\x03\x02\x03\x02\x03\x02" + - "\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x07\x03\xEE\n\x03\f\x03" + - "\x0E\x03\xF1\v\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03" + - "\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03" + - "\x07\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b" + - "\x03\t\x03\t\x03\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03" + - "\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03" + - "\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03" + - "\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03" + - "\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x18\x03" + - "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03" + - "\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03" + - "\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + - "\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03" + - '\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x03%' + - "\x03%\x03%\x03%\x03%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03)\x03" + - "*\x03*\x03+\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x03" + - "0\x030\x030\x031\x031\x031\x032\x032\x033\x033\x034\x034\x034\x035\x03" + - "5\x035\x036\x036\x036\x037\x037\x037\x038\x038\x038\x039\x039\x039\x03" + - ":\x03:\x03:\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03>\x03>\x03>\x03?\x03" + - "?\x03@\x03@\x03@\x07@\u01D6\n@\f@\x0E@\u01D9\v@\x03A\x03A\x03A\x03A\x05" + - "A\u01DF\nA\x03B\x03B\x05B\u01E3\nB\x03B\x03B\x03C\x03C\x05C\u01E9\nC\x03" + - "C\x03C\x03D\x03D\x03E\x06E\u01F0\nE\rE\x0EE\u01F1\x03E\x03E\x03F\x03F" + - "\x03F\x03F\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03H\x03" + - "H\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x03J\x03J\x03" + - "K\x03K\x03L\x03L\x03L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03M\x03N\x03" + - "N\x03O\x03O\x03P\x03P\x03Q\x03Q\x03R\x06R\u0229\nR\rR\x0ER\u022A\x03S" + - "\x03S\x03S\x06S\u0230\nS\rS\x0ES\u0231\x03T\x03T\x03T\x06T\u0237\nT\r" + - "T\x0ET\u0238\x03U\x03U\x03U\x06U\u023E\nU\rU\x0EU\u023F\x03V\x03V\x03" + - "W\x03W\x03X\x03X\x03Y\x03Y\x03Z\x03Z\x05Z\u024C\nZ\x03Z\x03Z\x03Z\x05" + - "Z\u0251\nZ\x03[\x05[\u0254\n[\x03[\x03[\x03[\x03[\x03[\x05[\u025B\n[\x03" + - "\\\x03\\\x05\\\u025F\n\\\x03\\\x03\\\x03]\x06]\u0264\n]\r]\x0E]\u0265" + - "\x03^\x03^\x03_\x06_\u026B\n_\r_\x0E_\u026C\x03`\x03`\x05`\u0271\n`\x03" + - "a\x03a\x03a\x05a\u0276\na\x03b\x03b\x03b\x03c\x03c\x03c\x05c\u027E\nc" + - "\x03c\x05c\u0281\nc\x03d\x03d\x03d\x03d\x06d\u0287\nd\rd\x0Ed\u0288\x03" + - "e\x06e\u028C\ne\re\x0Ee\u028D\x03f\x03f\x05f\u0292\nf\x03g\x06g\u0295" + - "\ng\rg\x0Eg\u0296\x03h\x03h\x05h\u029B\nh\x03i\x06i\u029E\ni\ri\x0Ei\u029F" + - "\x03j\x03j\x05j\u02A4\nj\x03k\x06k\u02A7\nk\rk\x0Ek\u02A8\x03l\x03l\x05" + - "l\u02AD\nl\x03\xE1\x02\x02m\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07" + + "g\tg\x04h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04" + + "p\tp\x04q\tq\x04r\tr\x04s\ts\x03\x02\x03\x02\x03\x02\x03\x02\x07\x02\xEE" + + "\n\x02\f\x02\x0E\x02\xF1\v\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02" + + "\x03\x03\x03\x03\x03\x03\x03\x03\x07\x03\xFC\n\x03\f\x03\x0E\x03\xFF\v" + + "\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" + + "\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07\x03" + + "\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\t\x03\t\x03" + + "\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03" + + "\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03" + + "\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03" + + "\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03" + + "\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03" + + "\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03" + + "\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03" + + " \x03 \x03!\x03!\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03%\x03%\x03" + + "%\x03&\x03&\x03\'\x03\'\x03(\x03(\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03" + + "+\x03,\x03,\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x030\x030\x030\x031\x03" + + "1\x031\x032\x032\x033\x033\x034\x034\x034\x035\x035\x035\x036\x036\x03" + + "6\x037\x037\x037\x038\x038\x038\x039\x039\x039\x03:\x03:\x03:\x03;\x03" + + ";\x03<\x03<\x03<\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03@\x03@\x03A\x03" + + "A\x03B\x03B\x03C\x03C\x03C\x03D\x03D\x03D\x03E\x03E\x03E\x03E\x03F\x03" + + "F\x03G\x03G\x03G\x07G\u01F6\nG\fG\x0EG\u01F9\vG\x03H\x03H\x03H\x03H\x05" + + "H\u01FF\nH\x03I\x03I\x05I\u0203\nI\x03I\x03I\x03J\x03J\x05J\u0209\nJ\x03" + + "J\x03J\x03K\x03K\x03L\x06L\u0210\nL\rL\x0EL\u0211\x03L\x03L\x03M\x03M" + + "\x03M\x03M\x03N\x03N\x03N\x03N\x03N\x03N\x03N\x03O\x03O\x03O\x03O\x03" + + "O\x03O\x03O\x03P\x03P\x03P\x03P\x03P\x03P\x03Q\x03Q\x03Q\x03Q\x03Q\x03" + + "R\x03R\x03S\x03S\x03S\x03S\x03S\x03S\x03T\x03T\x03T\x03T\x03T\x03U\x03" + + "U\x03V\x03V\x03W\x03W\x03X\x03X\x03Y\x06Y\u0249\nY\rY\x0EY\u024A\x03Z" + + "\x03Z\x03Z\x06Z\u0250\nZ\rZ\x0EZ\u0251\x03[\x03[\x03[\x06[\u0257\n[\r" + + "[\x0E[\u0258\x03\\\x03\\\x03\\\x06\\\u025E\n\\\r\\\x0E\\\u025F\x03]\x03" + + "]\x03^\x03^\x03_\x03_\x03`\x03`\x03a\x03a\x05a\u026C\na\x03a\x03a\x03" + + "a\x05a\u0271\na\x03b\x05b\u0274\nb\x03b\x03b\x03b\x03b\x03b\x05b\u027B" + + "\nb\x03c\x03c\x05c\u027F\nc\x03c\x03c\x03d\x06d\u0284\nd\rd\x0Ed\u0285" + + "\x03e\x03e\x03f\x06f\u028B\nf\rf\x0Ef\u028C\x03g\x03g\x05g\u0291\ng\x03" + + "h\x03h\x03h\x05h\u0296\nh\x03i\x03i\x03i\x03j\x03j\x03j\x05j\u029E\nj" + + "\x03j\x05j\u02A1\nj\x03k\x03k\x03k\x03k\x06k\u02A7\nk\rk\x0Ek\u02A8\x03" + + "l\x06l\u02AC\nl\rl\x0El\u02AD\x03m\x03m\x05m\u02B2\nm\x03n\x06n\u02B5" + + "\nn\rn\x0En\u02B6\x03o\x03o\x05o\u02BB\no\x03p\x06p\u02BE\np\rp\x0Ep\u02BF" + + "\x03q\x03q\x05q\u02C4\nq\x03r\x06r\u02C7\nr\rr\x0Er\u02C8\x03s\x03s\x05" + + "s\u02CD\ns\x03\xEF\x02\x02t\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07" + "\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E" + - "\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14'\x02" + + "\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02" + "\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02" + - '\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02"C\x02#E\x02$G\x02%I\x02&K\x02' + - "'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c" + + "\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02" + + "\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c" + "\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B" + - "\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02\x02\x95\x02K\x97\x02L\x99\x02" + - "\x02\x9B\x02M\x9D\x02N\x9F\x02\x02\xA1\x02\x02\xA3\x02\x02\xA5\x02\x02" + - "\xA7\x02\x02\xA9\x02\x02\xAB\x02\x02\xAD\x02\x02\xAF\x02\x02\xB1\x02\x02" + - "\xB3\x02\x02\xB5\x02\x02\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02" + - "\xBF\x02\x02\xC1\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02" + - "\xCB\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02" + - "\xD7\x02\x02\xD9\x02\x02\x05\x02\x03\x04\x14\x05\x02\f\f\x0F\x0F\u202A" + - '\u202B\x06\x02\v\v\r\x0E""\xA2\xA2\x05\x02C\\aac|\x03\x022;\x04\x02' + - "DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05\x022;C" + - "Hch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$))AA^^cd" + - "hhppttvvxx}}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f\x0F\x0F" + - "$$^^}}\x7F\x7F\x06\x02\f\f\x0F\x0F$$^^\x02\u02B0\x02\x05\x03\x02\x02\x02" + - "\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02" + - "\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02" + - "\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02" + - "\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02" + - "\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03" + - "\x02\x02\x02\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02" + - "\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x02" + - "3\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02" + - "\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02" + - "\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03" + - "\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02" + - "\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02" + - "U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02" + - "\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02" + - "\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03" + - "\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02" + - "\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x02" + - "w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02\x02}\x03\x02" + - "\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02\x02\x83\x03\x02" + - "\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02" + - "\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02" + - "\x02\x02\x02\x91\x03\x02\x02\x02\x03\x93\x03\x02\x02\x02\x03\x95\x03\x02" + - "\x02\x02\x03\x97\x03\x02\x02\x02\x04\x99\x03\x02\x02\x02\x04\x9B\x03\x02" + - "\x02\x02\x04\x9D\x03\x02\x02\x02\x05\xDB\x03\x02\x02\x02\x07\xE9\x03\x02" + - "\x02\x02\t\xF4\x03\x02\x02\x02\v\xFA\x03\x02\x02\x02\r\xFE\x03\x02\x02" + - "\x02\x0F\u0101\x03\x02\x02\x02\x11\u0105\x03\x02\x02\x02\x13\u010C\x03" + - "\x02\x02\x02\x15\u0111\x03\x02\x02\x02\x17\u0119\x03\x02\x02\x02\x19\u011F" + - "\x03\x02\x02\x02\x1B\u0128\x03\x02\x02\x02\x1D\u012B\x03\x02\x02\x02\x1F" + - "\u0131\x03\x02\x02\x02!\u0134\x03\x02\x02\x02#\u0139\x03\x02\x02\x02%" + - "\u013D\x03\x02\x02\x02'\u0142\x03\x02\x02\x02)\u0146\x03\x02\x02\x02" + - "+\u014D\x03\x02\x02\x02-\u0152\x03\x02\x02\x02/\u0155\x03\x02\x02\x02" + - "1\u015A\x03\x02\x02\x023\u0160\x03\x02\x02\x025\u0167\x03\x02\x02\x02" + - "7\u016C\x03\x02\x02\x029\u0171\x03\x02\x02\x02;\u017B\x03\x02\x02\x02" + - "=\u017D\x03\x02\x02\x02?\u017F\x03\x02\x02\x02A\u0181\x03\x02\x02\x02" + - "C\u0183\x03\x02\x02\x02E\u0185\x03\x02\x02\x02G\u0187\x03\x02\x02\x02" + - "I\u0189\x03\x02\x02\x02K\u018B\x03\x02\x02\x02M\u0190\x03\x02\x02\x02" + - "O\u0192\x03\x02\x02\x02Q\u0194\x03\x02\x02\x02S\u0196\x03\x02\x02\x02" + - "U\u0199\x03\x02\x02\x02W\u019B\x03\x02\x02\x02Y\u019E\x03\x02\x02\x02" + - "[\u01A0\x03\x02\x02\x02]\u01A2\x03\x02\x02\x02_\u01A4\x03\x02\x02\x02" + - "a\u01A7\x03\x02\x02\x02c\u01AA\x03\x02\x02\x02e\u01AD\x03\x02\x02\x02" + - "g\u01AF\x03\x02\x02\x02i\u01B1\x03\x02\x02\x02k\u01B4\x03\x02\x02\x02" + - "m\u01B7\x03\x02\x02\x02o\u01BA\x03\x02\x02\x02q\u01BD\x03\x02\x02\x02" + - "s\u01C0\x03\x02\x02\x02u\u01C3\x03\x02\x02\x02w\u01C6\x03\x02\x02\x02" + - "y\u01C8\x03\x02\x02\x02{\u01CB\x03\x02\x02\x02}\u01CD\x03\x02\x02\x02" + - "\x7F\u01D0\x03\x02\x02\x02\x81\u01D2\x03\x02\x02\x02\x83\u01DE\x03\x02" + - "\x02\x02\x85\u01E0\x03\x02\x02\x02\x87\u01E6\x03\x02\x02\x02\x89\u01EC" + - "\x03\x02\x02\x02\x8B\u01EF\x03\x02\x02\x02\x8D\u01F5\x03\x02\x02\x02\x8F" + - "\u01F9\x03\x02\x02\x02\x91\u0200\x03\x02\x02\x02\x93\u0207\x03\x02\x02" + - "\x02\x95\u020D\x03\x02\x02\x02\x97\u0212\x03\x02\x02\x02\x99\u0214\x03" + - "\x02\x02\x02\x9B\u021A\x03\x02\x02\x02\x9D\u021F\x03\x02\x02\x02\x9F\u0221" + - "\x03\x02\x02\x02\xA1\u0223\x03\x02\x02\x02\xA3\u0225\x03\x02\x02\x02\xA5" + - "\u0228\x03\x02\x02\x02\xA7\u022C\x03\x02\x02\x02\xA9\u0233\x03\x02\x02" + - "\x02\xAB\u023A\x03\x02\x02\x02\xAD\u0241\x03\x02\x02\x02\xAF\u0243\x03" + - "\x02\x02\x02\xB1\u0245\x03\x02\x02\x02\xB3\u0247\x03\x02\x02\x02\xB5\u0250" + - "\x03\x02\x02\x02\xB7\u025A\x03\x02\x02\x02\xB9\u025C\x03\x02\x02\x02\xBB" + - "\u0263\x03\x02\x02\x02\xBD\u0267\x03\x02\x02\x02\xBF\u026A\x03\x02\x02" + - "\x02\xC1\u0270\x03\x02\x02\x02\xC3\u0275\x03\x02\x02\x02\xC5\u0277\x03" + - "\x02\x02\x02\xC7\u027A\x03\x02\x02\x02\xC9\u0282\x03\x02\x02\x02\xCB\u028B" + - "\x03\x02\x02\x02\xCD\u0291\x03\x02\x02\x02\xCF\u0294\x03\x02\x02\x02\xD1" + - "\u029A\x03\x02\x02\x02\xD3\u029D\x03\x02\x02\x02\xD5\u02A3\x03\x02\x02" + - "\x02\xD7\u02A6\x03\x02\x02\x02\xD9\u02AC\x03\x02\x02\x02\xDB\xDC\x071" + - "\x02\x02\xDC\xDD\x07,\x02\x02\xDD\xE1\x03\x02\x02\x02\xDE\xE0\v\x02\x02" + - "\x02\xDF\xDE\x03\x02\x02\x02\xE0\xE3\x03\x02\x02\x02\xE1\xE2\x03\x02\x02" + - "\x02\xE1\xDF\x03\x02\x02\x02\xE2\xE4\x03\x02\x02\x02\xE3\xE1\x03\x02\x02" + - "\x02\xE4\xE5\x07,\x02\x02\xE5\xE6\x071\x02\x02\xE6\xE7\x03\x02\x02\x02" + - "\xE7\xE8\b\x02\x02\x02\xE8\x06\x03\x02\x02\x02\xE9\xEA\x071\x02\x02\xEA" + - "\xEB\x071\x02\x02\xEB\xEF\x03\x02\x02\x02\xEC\xEE\n\x02\x02\x02\xED\xEC" + - "\x03\x02\x02\x02\xEE\xF1\x03\x02\x02\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0" + - "\x03\x02\x02\x02\xF0\xF2\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02\xF2\xF3" + - "\b\x03\x02\x02\xF3\b\x03\x02\x02\x02\xF4\xF5\x07e\x02\x02\xF5\xF6\x07" + - "q\x02\x02\xF6\xF7\x07p\x02\x02\xF7\xF8\x07u\x02\x02\xF8\xF9\x07v\x02\x02" + - "\xF9\n\x03\x02\x02\x02\xFA\xFB\x07x\x02\x02\xFB\xFC\x07c\x02\x02\xFC\xFD" + - "\x07t\x02\x02\xFD\f\x03\x02\x02\x02\xFE\xFF\x07c\x02\x02\xFF\u0100\x07" + - "u\x02\x02\u0100\x0E\x03\x02\x02\x02\u0101\u0102\x070\x02\x02\u0102\u0103" + - "\x070\x02\x02\u0103\u0104\x070\x02\x02\u0104\x10\x03\x02\x02\x02\u0105" + - "\u0106\x07u\x02\x02\u0106\u0107\x07y\x02\x02\u0107\u0108\x07k\x02\x02" + - "\u0108\u0109\x07v\x02\x02\u0109\u010A\x07e\x02\x02\u010A\u010B\x07j\x02" + - "\x02\u010B\x12\x03\x02\x02\x02\u010C\u010D\x07e\x02\x02\u010D\u010E\x07" + - "c\x02\x02\u010E\u010F\x07u\x02\x02\u010F\u0110\x07g\x02\x02\u0110\x14" + - "\x03\x02\x02\x02\u0111\u0112\x07f\x02\x02\u0112\u0113\x07g\x02\x02\u0113" + - "\u0114\x07h\x02\x02\u0114\u0115\x07c\x02\x02\u0115\u0116\x07w\x02\x02" + - "\u0116\u0117\x07n\x02\x02\u0117\u0118\x07v\x02\x02\u0118\x16\x03\x02\x02" + - "\x02\u0119\u011A\x07d\x02\x02\u011A\u011B\x07t\x02\x02\u011B\u011C\x07" + - "g\x02\x02\u011C\u011D\x07c\x02\x02\u011D\u011E\x07m\x02\x02\u011E\x18" + - "\x03\x02\x02\x02\u011F\u0120\x07e\x02\x02\u0120\u0121\x07q\x02\x02\u0121" + - "\u0122\x07p\x02\x02\u0122\u0123\x07v\x02\x02\u0123\u0124\x07k\x02\x02" + - "\u0124\u0125\x07p\x02\x02\u0125\u0126\x07w\x02\x02\u0126\u0127\x07g\x02" + - "\x02\u0127\x1A\x03\x02\x02\x02\u0128\u0129\x07f\x02\x02\u0129\u012A\x07" + - "q\x02\x02\u012A\x1C\x03\x02\x02\x02\u012B\u012C\x07y\x02\x02\u012C\u012D" + - "\x07j\x02\x02\u012D\u012E\x07k\x02\x02\u012E\u012F\x07n\x02\x02\u012F" + - "\u0130\x07g\x02\x02\u0130\x1E\x03\x02\x02\x02\u0131\u0132\x07k\x02\x02" + - "\u0132\u0133\x07h\x02\x02\u0133 \x03\x02\x02\x02\u0134\u0135\x07g\x02" + - "\x02\u0135\u0136\x07n\x02\x02\u0136\u0137\x07u\x02\x02\u0137\u0138\x07" + - 'g\x02\x02\u0138"\x03\x02\x02\x02\u0139\u013A\x07h\x02\x02\u013A\u013B' + - "\x07q\x02\x02\u013B\u013C\x07t\x02\x02\u013C$\x03\x02\x02\x02\u013D\u013E" + - "\x07g\x02\x02\u013E\u013F\x07p\x02\x02\u013F\u0140\x07w\x02\x02\u0140" + - "\u0141\x07o\x02\x02\u0141&\x03\x02\x02\x02\u0142\u0143\x07f\x02\x02\u0143" + - "\u0144\x07g\x02\x02\u0144\u0145\x07h\x02\x02\u0145(\x03\x02\x02\x02\u0146" + - "\u0147\x07t\x02\x02\u0147\u0148\x07g\x02\x02\u0148\u0149\x07v\x02\x02" + - "\u0149\u014A\x07w\x02\x02\u014A\u014B\x07t\x02\x02\u014B\u014C\x07p\x02" + - "\x02\u014C*\x03\x02\x02\x02\u014D\u014E\x07e\x02\x02\u014E\u014F\x07c" + - "\x02\x02\u014F\u0150\x07n\x02\x02\u0150\u0151\x07n\x02\x02\u0151,\x03" + - "\x02\x02\x02\u0152\u0153\x07/\x02\x02\u0153\u0154\x07@\x02\x02\u0154." + - "\x03\x02\x02\x02\u0155\u0156\x07v\x02\x02\u0156\u0157\x07t\x02\x02\u0157" + - "\u0158\x07w\x02\x02\u0158\u0159\x07g\x02\x02\u01590\x03\x02\x02\x02\u015A" + - "\u015B\x07h\x02\x02\u015B\u015C\x07c\x02\x02\u015C\u015D\x07n\x02\x02" + - "\u015D\u015E\x07u\x02\x02\u015E\u015F\x07g\x02\x02\u015F2\x03\x02\x02" + - "\x02\u0160\u0161\x07v\x02\x02\u0161\u0162\x07{\x02\x02\u0162\u0163\x07" + - "r\x02\x02\u0163\u0164\x07g\x02\x02\u0164\u0165\x07q\x02\x02\u0165\u0166" + - "\x07h\x02\x02\u01664\x03\x02\x02\x02\u0167\u0168\x07x\x02\x02\u0168\u0169" + - "\x07q\x02\x02\u0169\u016A\x07k\x02\x02\u016A\u016B\x07f\x02\x02\u016B" + - "6\x03\x02\x02\x02\u016C\u016D\x07p\x02\x02\u016D\u016E\x07w\x02\x02\u016E" + - "\u016F\x07n\x02\x02\u016F\u0170\x07n\x02\x02\u01708\x03\x02\x02\x02\u0171" + - "\u0172\x07w\x02\x02\u0172\u0173\x07p\x02\x02\u0173\u0174\x07f\x02\x02" + - "\u0174\u0175\x07g\x02\x02\u0175\u0176\x07h\x02\x02\u0176\u0177\x07k\x02" + - "\x02\u0177\u0178\x07p\x02\x02\u0178\u0179\x07g\x02\x02\u0179\u017A\x07" + - "f\x02\x02\u017A:\x03\x02\x02\x02\u017B\u017C\x07.\x02\x02\u017C<\x03\x02" + - "\x02\x02\u017D\u017E\x07=\x02\x02\u017E>\x03\x02\x02\x02\u017F\u0180\x07" + - "A\x02\x02\u0180@\x03\x02\x02\x02\u0181\u0182\x07<\x02\x02\u0182B\x03\x02" + - "\x02\x02\u0183\u0184\x07*\x02\x02\u0184D\x03\x02\x02\x02\u0185\u0186\x07" + - "+\x02\x02\u0186F\x03\x02\x02\x02\u0187\u0188\x07]\x02\x02\u0188H\x03\x02" + - "\x02\x02\u0189\u018A\x07_\x02\x02\u018AJ\x03\x02\x02\x02\u018B\u018C\x06" + - "%\x02\x02\u018C\u018D\x07\x7F\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E" + - "\u018F\b%\x03\x02\u018FL\x03\x02\x02\x02\u0190\u0191\x07}\x02\x02\u0191" + - "N\x03\x02\x02\x02\u0192\u0193\x07\x7F\x02\x02\u0193P\x03\x02\x02\x02\u0194" + - "\u0195\x07-\x02\x02\u0195R\x03\x02\x02\x02\u0196\u0197\x07-\x02\x02\u0197" + - "\u0198\x07-\x02\x02\u0198T\x03\x02\x02\x02\u0199\u019A\x07/\x02\x02\u019A" + - "V\x03\x02\x02\x02\u019B\u019C\x07/\x02\x02\u019C\u019D\x07/\x02\x02\u019D" + - "X\x03\x02\x02\x02\u019E\u019F\x07,\x02\x02\u019FZ\x03\x02\x02\x02\u01A0" + - "\u01A1\x071\x02\x02\u01A1\\\x03\x02\x02\x02\u01A2\u01A3\x07'\x02\x02" + - "\u01A3^\x03\x02\x02\x02\u01A4\u01A5\x07,\x02\x02\u01A5\u01A6\x07,\x02" + - "\x02\u01A6`\x03\x02\x02\x02\u01A7\u01A8\x07(\x02\x02\u01A8\u01A9\x07(" + - "\x02\x02\u01A9b\x03\x02\x02\x02\u01AA\u01AB\x07~\x02\x02\u01AB\u01AC\x07" + - "~\x02\x02\u01ACd\x03\x02\x02\x02\u01AD\u01AE\x07#\x02\x02\u01AEf\x03\x02" + - "\x02\x02\u01AF\u01B0\x07?\x02\x02\u01B0h\x03\x02\x02\x02\u01B1\u01B2\x07" + - "-\x02\x02\u01B2\u01B3\x07?\x02\x02\u01B3j\x03\x02\x02\x02\u01B4\u01B5" + - "\x07/\x02\x02\u01B5\u01B6\x07?\x02\x02\u01B6l\x03\x02\x02\x02\u01B7\u01B8" + - "\x07,\x02\x02\u01B8\u01B9\x07?\x02\x02\u01B9n\x03\x02\x02\x02\u01BA\u01BB" + - "\x071\x02\x02\u01BB\u01BC\x07?\x02\x02\u01BCp\x03\x02\x02\x02\u01BD\u01BE" + - "\x07'\x02\x02\u01BE\u01BF\x07?\x02\x02\u01BFr\x03\x02\x02\x02\u01C0\u01C1" + - "\x07?\x02\x02\u01C1\u01C2\x07?\x02\x02\u01C2t\x03\x02\x02\x02\u01C3\u01C4" + - "\x07#\x02\x02\u01C4\u01C5\x07?\x02\x02\u01C5v\x03\x02\x02\x02\u01C6\u01C7" + - "\x07>\x02\x02\u01C7x\x03\x02\x02\x02\u01C8\u01C9\x07>\x02\x02\u01C9\u01CA" + - "\x07?\x02\x02\u01CAz\x03\x02\x02\x02\u01CB\u01CC\x07@\x02\x02\u01CC|\x03" + - "\x02\x02\x02\u01CD\u01CE\x07@\x02\x02\u01CE\u01CF\x07?\x02\x02\u01CF~" + - "\x03\x02\x02\x02\u01D0\u01D1\x070\x02\x02\u01D1\x80\x03\x02\x02\x02\u01D2" + - "\u01D7\x05\x9FO\x02\u01D3\u01D6\x05\x9FO\x02\u01D4\u01D6\x05\xA3Q\x02" + - "\u01D5\u01D3\x03\x02\x02\x02\u01D5\u01D4\x03\x02\x02\x02\u01D6\u01D9\x03" + - "\x02\x02\x02\u01D7\u01D5\x03\x02\x02\x02\u01D7\u01D8\x03\x02\x02\x02\u01D8" + - "\x82\x03\x02\x02\x02\u01D9\u01D7\x03\x02\x02\x02\u01DA\u01DF\x05\xA5R" + - "\x02\u01DB\u01DF\x05\xA9T\x02\u01DC\u01DF\x05\xABU\x02\u01DD\u01DF\x05" + - "\xA7S\x02\u01DE\u01DA\x03\x02\x02\x02\u01DE\u01DB\x03\x02\x02\x02\u01DE" + - "\u01DC\x03\x02\x02\x02\u01DE\u01DD\x03\x02\x02\x02\u01DF\x84\x03\x02\x02" + - "\x02\u01E0\u01E2\x07)\x02\x02\u01E1\u01E3\x05\xD3i\x02\u01E2\u01E1\x03" + - "\x02\x02\x02\u01E2\u01E3\x03\x02\x02\x02\u01E3\u01E4\x03\x02\x02\x02\u01E4" + - "\u01E5\x07)\x02\x02\u01E5\x86\x03\x02\x02\x02\u01E6\u01E8\x07$\x02\x02" + - "\u01E7\u01E9\x05\xD7k\x02\u01E8\u01E7\x03\x02\x02\x02\u01E8\u01E9\x03" + - "\x02\x02\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EB\x07$\x02\x02\u01EB" + - "\x88\x03\x02\x02\x02\u01EC\u01ED\x05\xB5Z\x02\u01ED\x8A\x03\x02\x02\x02" + - "\u01EE\u01F0\t\x03\x02\x02\u01EF\u01EE\x03\x02\x02\x02\u01F0\u01F1\x03" + - "\x02\x02\x02\u01F1\u01EF\x03\x02\x02\x02\u01F1\u01F2\x03\x02\x02\x02\u01F2" + - "\u01F3\x03\x02\x02\x02\u01F3\u01F4\bE\x04\x02\u01F4\x8C\x03\x02\x02\x02" + - "\u01F5\u01F6\t\x02\x02\x02\u01F6\u01F7\x03\x02\x02\x02\u01F7\u01F8\bF" + - "\x04\x02\u01F8\x8E\x03\x02\x02\x02\u01F9\u01FA\x07h\x02\x02\u01FA\u01FB" + - "\x07)\x02\x02\u01FB\u01FC\x03\x02\x02\x02\u01FC\u01FD\bG\x05\x02\u01FD" + - "\u01FE\x03\x02\x02\x02\u01FE\u01FF\bG\x06\x02\u01FF\x90\x03\x02\x02\x02" + - "\u0200\u0201\x07h\x02\x02\u0201\u0202\x07$\x02\x02\u0202\u0203\x03\x02" + - "\x02\x02\u0203\u0204\bH\x07\x02\u0204\u0205\x03\x02\x02\x02\u0205\u0206" + - "\bH\b\x02\u0206\x92\x03\x02\x02\x02\u0207\u0208\x06I\x03\x02\u0208\u0209" + - "\x07}\x02\x02\u0209\u020A\x03\x02\x02\x02\u020A\u020B\bI\t\x02\u020B\u020C" + - "\bI\n\x02\u020C\x94\x03\x02\x02\x02\u020D\u020E\x07)\x02\x02\u020E\u020F" + - "\bJ\v\x02\u020F\u0210\x03\x02\x02\x02\u0210\u0211\bJ\x03\x02\u0211\x96" + - "\x03\x02\x02\x02\u0212\u0213\x05\xCBe\x02\u0213\x98\x03\x02\x02\x02\u0214" + - "\u0215\x06L\x04\x02\u0215\u0216\x07}\x02\x02\u0216\u0217\x03\x02\x02\x02" + - "\u0217\u0218\bL\t\x02\u0218\u0219\bL\n\x02\u0219\x9A\x03\x02\x02\x02\u021A" + - "\u021B\x07$\x02\x02\u021B\u021C\b"; + "\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B" + + "\x02O\x9D\x02P\x9F\x02Q\xA1\x02\x02\xA3\x02R\xA5\x02S\xA7\x02\x02\xA9" + + "\x02T\xAB\x02U\xAD\x02\x02\xAF\x02\x02\xB1\x02\x02\xB3\x02\x02\xB5\x02" + + "\x02\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02\xBF\x02\x02\xC1\x02" + + "\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02\xCB\x02\x02\xCD\x02" + + "\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02\xD7\x02\x02\xD9\x02" + + "\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3\x02\x02\xE5\x02" + + "\x02\xE7\x02\x02\x05\x02\x03\x04\x14\x05\x02\f\f\x0F\x0F\u202A\u202B\x06" + + "\x02\v\v\r\x0E\"\"\xA2\xA2\x05\x02C\\aac|\x03\x022;\x04\x02DDdd\x04\x02" + + "QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05\x022;CHch\x04\x02G" + + "Ggg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$))AA^^cdhhppttvvxx}}" + + "\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f\x0F\x0F$$^^}}\x7F\x7F" + + "\x06\x02\f\f\x0F\x0F$$^^\x02\u02D0\x02\x05\x03\x02\x02\x02\x02\x07\x03" + + "\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02" + + "\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02" + + "\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02" + + "\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02" + + "\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02" + + "\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-" + + "\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02" + + "\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02" + + "\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03" + + "\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02" + + "\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02" + + "O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02" + + "\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02" + + "\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03" + + "\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02" + + "\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02" + + "q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x02w\x03\x02" + + "\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02\x02}\x03\x02\x02\x02" + + "\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02\x02\x83\x03\x02\x02\x02" + + "\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02\x02\x02" + + "\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02\x02\x02" + + "\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02\x02\x95\x03\x02\x02\x02" + + "\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02\x02\x9B\x03\x02\x02\x02" + + "\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02\x03\xA1\x03\x02\x02\x02" + + "\x03\xA3\x03\x02\x02\x02\x03\xA5\x03\x02\x02\x02\x04\xA7\x03\x02\x02\x02" + + "\x04\xA9\x03\x02\x02\x02\x04\xAB\x03\x02\x02\x02\x05\xE9\x03\x02\x02\x02" + + "\x07\xF7\x03\x02\x02\x02\t\u0102\x03\x02\x02\x02\v\u0108\x03\x02\x02\x02" + + "\r\u010C\x03\x02\x02\x02\x0F\u010F\x03\x02\x02\x02\x11\u0113\x03\x02\x02" + + "\x02\x13\u011A\x03\x02\x02\x02\x15\u011F\x03\x02\x02\x02\x17\u0127\x03" + + "\x02\x02\x02\x19\u012D\x03\x02\x02\x02\x1B\u0136\x03\x02\x02\x02\x1D\u0139" + + "\x03\x02\x02\x02\x1F\u013F\x03\x02\x02\x02!\u0142\x03\x02\x02\x02#\u0147" + + "\x03\x02\x02\x02%\u014B\x03\x02\x02\x02\'\u0150\x03\x02\x02\x02)\u0154" + + "\x03\x02\x02\x02+\u015B\x03\x02\x02\x02-\u0160\x03\x02\x02\x02/\u0163" + + "\x03\x02\x02\x021\u0168\x03\x02\x02\x023\u016E\x03\x02\x02\x025\u0175" + + "\x03\x02\x02\x027\u017A\x03\x02\x02\x029\u017F\x03\x02\x02\x02;\u0189" + + "\x03\x02\x02\x02=\u018B\x03\x02\x02\x02?\u018D\x03\x02\x02\x02A\u018F" + + "\x03\x02\x02\x02C\u0191\x03\x02\x02\x02E\u0193\x03\x02\x02\x02G\u0195" + + "\x03\x02\x02\x02I\u0197\x03\x02\x02\x02K\u0199\x03\x02\x02\x02M\u019E" + + "\x03\x02\x02\x02O\u01A0\x03\x02\x02\x02Q\u01A2\x03\x02\x02\x02S\u01A4" + + "\x03\x02\x02\x02U\u01A7\x03\x02\x02\x02W\u01A9\x03\x02\x02\x02Y\u01AC" + + "\x03\x02\x02\x02[\u01AE\x03\x02\x02\x02]\u01B0\x03\x02\x02\x02_\u01B2" + + "\x03\x02\x02\x02a\u01B5\x03\x02\x02\x02c\u01B8\x03\x02\x02\x02e\u01BB" + + "\x03\x02\x02\x02g\u01BD\x03\x02\x02\x02i\u01BF\x03\x02\x02\x02k\u01C2" + + "\x03\x02\x02\x02m\u01C5\x03\x02\x02\x02o\u01C8\x03\x02\x02\x02q\u01CB" + + "\x03\x02\x02\x02s\u01CE\x03\x02\x02\x02u\u01D1\x03\x02\x02\x02w\u01D4" + + "\x03\x02\x02\x02y\u01D6\x03\x02\x02\x02{\u01D9\x03\x02\x02\x02}\u01DB" + + "\x03\x02\x02\x02\x7F\u01DE\x03\x02\x02\x02\x81\u01E0\x03\x02\x02\x02\x83" + + "\u01E2\x03\x02\x02\x02\x85\u01E4\x03\x02\x02\x02\x87\u01E6\x03\x02\x02" + + "\x02\x89\u01E9\x03\x02\x02\x02\x8B\u01EC\x03\x02\x02\x02\x8D\u01F0\x03" + + "\x02\x02\x02\x8F\u01F2\x03\x02\x02\x02\x91\u01FE\x03\x02\x02\x02\x93\u0200" + + "\x03\x02\x02\x02\x95\u0206\x03\x02\x02\x02\x97\u020C\x03\x02\x02\x02\x99" + + "\u020F\x03\x02\x02\x02\x9B\u0215\x03\x02\x02\x02\x9D\u0219\x03\x02\x02" + + "\x02\x9F\u0220\x03\x02\x02\x02\xA1\u0227\x03\x02\x02\x02\xA3\u022D\x03" + + "\x02\x02\x02\xA5\u0232\x03\x02\x02\x02\xA7\u0234\x03\x02\x02\x02\xA9\u023A" + + "\x03\x02\x02\x02\xAB\u023F\x03\x02\x02\x02\xAD\u0241\x03\x02\x02\x02\xAF" + + "\u0243\x03\x02\x02\x02\xB1\u0245\x03\x02\x02\x02\xB3\u0248\x03\x02\x02" + + "\x02\xB5\u024C\x03\x02\x02\x02\xB7\u0253\x03\x02\x02\x02\xB9\u025A\x03" + + "\x02\x02\x02\xBB\u0261\x03\x02\x02\x02\xBD\u0263\x03\x02\x02\x02\xBF\u0265" + + "\x03\x02\x02\x02\xC1\u0267\x03\x02\x02\x02\xC3\u0270\x03\x02\x02\x02\xC5" + + "\u027A\x03\x02\x02\x02\xC7\u027C\x03\x02\x02\x02\xC9\u0283\x03\x02\x02" + + "\x02\xCB\u0287\x03\x02\x02\x02\xCD\u028A\x03\x02\x02\x02\xCF\u0290\x03" + + "\x02\x02\x02\xD1\u0295\x03\x02\x02\x02\xD3\u0297\x03\x02\x02\x02\xD5\u029A" + + "\x03\x02\x02\x02\xD7\u02A2\x03\x02\x02\x02\xD9\u02AB\x03\x02\x02\x02\xDB" + + "\u02B1\x03\x02\x02\x02\xDD\u02B4\x03\x02\x02\x02\xDF\u02BA\x03\x02\x02" + + "\x02\xE1\u02BD\x03\x02\x02\x02\xE3\u02C3\x03\x02\x02\x02\xE5\u02C6\x03" + + "\x02\x02\x02\xE7\u02CC\x03\x02\x02\x02\xE9\xEA\x071\x02\x02\xEA\xEB\x07" + + ",\x02\x02\xEB\xEF\x03\x02\x02\x02\xEC\xEE\v\x02\x02\x02\xED\xEC\x03\x02" + + "\x02\x02\xEE\xF1\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xEF\xED\x03\x02" + + "\x02\x02\xF0\xF2\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02\xF2\xF3\x07," + + "\x02\x02\xF3\xF4\x071\x02\x02\xF4\xF5\x03\x02\x02\x02\xF5\xF6\b\x02\x02" + + "\x02\xF6\x06\x03\x02\x02\x02\xF7\xF8\x071\x02\x02\xF8\xF9\x071\x02\x02" + + "\xF9\xFD\x03\x02\x02\x02\xFA\xFC\n\x02\x02\x02\xFB\xFA\x03\x02\x02\x02" + + "\xFC\xFF\x03\x02\x02\x02\xFD\xFB\x03\x02\x02\x02\xFD\xFE\x03\x02\x02\x02" + + "\xFE\u0100\x03\x02\x02\x02\xFF\xFD\x03\x02\x02\x02\u0100\u0101\b\x03\x02" + + "\x02\u0101\b\x03\x02\x02\x02\u0102\u0103\x07e\x02\x02\u0103\u0104\x07" + + "q\x02\x02\u0104\u0105\x07p\x02\x02\u0105\u0106\x07u\x02\x02\u0106\u0107" + + "\x07v\x02\x02\u0107\n\x03\x02\x02\x02\u0108\u0109\x07x\x02\x02\u0109\u010A" + + "\x07c\x02\x02\u010A\u010B\x07t\x02\x02\u010B\f\x03\x02\x02\x02\u010C\u010D" + + "\x07c\x02\x02\u010D\u010E\x07u\x02\x02\u010E\x0E\x03\x02\x02\x02\u010F" + + "\u0110\x070\x02\x02\u0110\u0111\x070\x02\x02\u0111\u0112\x070\x02\x02" + + "\u0112\x10\x03\x02\x02\x02\u0113\u0114\x07u\x02\x02\u0114\u0115\x07y\x02" + + "\x02\u0115\u0116\x07k\x02\x02\u0116\u0117\x07v\x02\x02\u0117\u0118\x07" + + "e\x02\x02\u0118\u0119\x07j\x02\x02\u0119\x12\x03\x02\x02\x02\u011A\u011B" + + "\x07e\x02\x02\u011B\u011C\x07c\x02\x02\u011C\u011D\x07u\x02\x02\u011D" + + "\u011E\x07g\x02\x02\u011E\x14\x03\x02\x02\x02\u011F\u0120\x07f\x02\x02" + + "\u0120\u0121\x07g\x02\x02\u0121\u0122\x07h\x02\x02\u0122\u0123\x07c\x02" + + "\x02\u0123\u0124\x07w\x02\x02\u0124\u0125\x07n\x02\x02\u0125\u0126\x07" + + "v\x02\x02\u0126\x16\x03\x02\x02\x02\u0127\u0128\x07d\x02\x02\u0128\u0129" + + "\x07t\x02\x02\u0129\u012A\x07g\x02\x02\u012A\u012B\x07c\x02\x02\u012B" + + "\u012C\x07m\x02\x02\u012C\x18\x03\x02\x02\x02\u012D\u012E\x07e\x02\x02" + + "\u012E\u012F\x07q\x02\x02\u012F\u0130\x07p\x02\x02\u0130\u0131\x07v\x02" + + "\x02\u0131\u0132\x07k\x02\x02\u0132\u0133\x07p\x02\x02\u0133\u0134\x07" + + "w\x02\x02\u0134\u0135\x07g\x02\x02\u0135\x1A\x03\x02\x02\x02\u0136\u0137" + + "\x07f\x02\x02\u0137\u0138\x07q\x02\x02\u0138\x1C\x03\x02\x02\x02\u0139" + + "\u013A\x07y\x02\x02\u013A\u013B\x07j\x02\x02\u013B\u013C\x07k\x02\x02" + + "\u013C\u013D\x07n\x02\x02\u013D\u013E\x07g\x02\x02\u013E\x1E\x03\x02\x02" + + "\x02\u013F\u0140\x07k\x02\x02\u0140\u0141\x07h\x02\x02\u0141 \x03\x02" + + "\x02\x02\u0142\u0143\x07g\x02\x02\u0143\u0144\x07n\x02\x02\u0144\u0145" + + "\x07u\x02\x02\u0145\u0146\x07g\x02\x02\u0146\"\x03\x02\x02\x02\u0147\u0148" + + "\x07h\x02\x02\u0148\u0149\x07q\x02\x02\u0149\u014A\x07t\x02\x02\u014A" + + "$\x03\x02\x02\x02\u014B\u014C\x07g\x02\x02\u014C\u014D\x07p\x02\x02\u014D" + + "\u014E\x07w\x02\x02\u014E\u014F\x07o\x02\x02\u014F&\x03\x02\x02\x02\u0150" + + "\u0151\x07f\x02\x02\u0151\u0152\x07g\x02\x02\u0152\u0153\x07h\x02\x02" + + "\u0153(\x03\x02\x02\x02\u0154\u0155\x07t\x02\x02\u0155\u0156\x07g\x02" + + "\x02\u0156\u0157\x07v\x02\x02\u0157\u0158\x07w\x02\x02\u0158\u0159\x07" + + "t\x02\x02\u0159\u015A\x07p\x02\x02\u015A*\x03\x02\x02\x02\u015B\u015C" + + "\x07e\x02\x02\u015C\u015D\x07c\x02\x02\u015D\u015E\x07n\x02\x02\u015E" + + "\u015F\x07n\x02\x02\u015F,\x03\x02\x02\x02\u0160\u0161\x07/\x02\x02\u0161" + + "\u0162\x07@\x02\x02\u0162.\x03\x02\x02\x02\u0163\u0164\x07v\x02\x02\u0164" + + "\u0165\x07t\x02\x02\u0165\u0166\x07w\x02\x02\u0166\u0167\x07g\x02\x02" + + "\u01670\x03\x02\x02\x02\u0168\u0169\x07h\x02\x02\u0169\u016A\x07c\x02" + + "\x02\u016A\u016B\x07n\x02\x02\u016B\u016C\x07u\x02\x02\u016C\u016D\x07" + + "g\x02\x02\u016D2\x03\x02\x02\x02\u016E\u016F\x07v\x02\x02\u016F\u0170" + + "\x07{\x02\x02\u0170\u0171\x07r\x02\x02\u0171\u0172\x07g\x02\x02\u0172" + + "\u0173\x07q\x02\x02\u0173\u0174\x07h\x02\x02\u01744\x03\x02\x02\x02\u0175" + + "\u0176\x07x\x02\x02\u0176\u0177\x07q\x02\x02\u0177\u0178\x07k\x02\x02" + + "\u0178\u0179\x07f\x02\x02\u01796\x03\x02\x02\x02\u017A\u017B\x07p\x02" + + "\x02\u017B\u017C\x07w\x02\x02\u017C\u017D\x07n\x02\x02\u017D\u017E\x07" + + "n\x02\x02\u017E8\x03\x02\x02\x02\u017F\u0180\x07w\x02\x02\u0180\u0181" + + "\x07p\x02\x02\u0181\u0182\x07f\x02\x02\u0182\u0183\x07g\x02\x02\u0183" + + "\u0184\x07h\x02\x02\u0184\u0185\x07k\x02\x02\u0185\u0186\x07p\x02\x02" + + "\u0186\u0187\x07g\x02\x02\u0187\u0188\x07f\x02\x02\u0188:\x03\x02\x02" + + "\x02\u0189\u018A\x07.\x02\x02\u018A<\x03\x02\x02\x02\u018B\u018C\x07=" + + "\x02\x02\u018C>\x03\x02\x02\x02\u018D\u018E\x07A\x02\x02\u018E@\x03\x02" + + "\x02\x02\u018F\u0190\x07<\x02\x02\u0190B\x03\x02\x02\x02\u0191\u0192\x07" + + "*\x02\x02\u0192D\x03\x02\x02\x02\u0193\u0194\x07+\x02\x02\u0194F\x03\x02" + + "\x02\x02\u0195\u0196\x07]\x02\x02\u0196H\x03\x02\x02\x02\u0197\u0198\x07" + + "_\x02\x02\u0198J\x03\x02\x02\x02\u0199\u019A\x06%\x02\x02\u019A\u019B" + + "\x07\x7F\x02\x02\u019B\u019C\x03\x02\x02\x02\u019C\u019D\b%\x03\x02\u019D" + + "L\x03\x02\x02\x02\u019E\u019F\x07}\x02\x02\u019FN\x03\x02\x02\x02\u01A0" + + "\u01A1\x07\x7F\x02\x02\u01A1P\x03\x02\x02\x02\u01A2\u01A3\x07-\x02\x02" + + "\u01A3R\x03\x02\x02\x02\u01A4\u01A5\x07-\x02\x02\u01A5\u01A6\x07-\x02" + + "\x02\u01A6T\x03\x02\x02\x02\u01A7\u01A8\x07/\x02\x02\u01A8V\x03\x02\x02" + + "\x02\u01A9\u01AA\x07/\x02\x02\u01AA\u01AB\x07/\x02\x02\u01ABX\x03\x02" + + "\x02\x02\u01AC\u01AD\x07,\x02\x02\u01ADZ\x03\x02\x02\x02\u01AE\u01AF\x07" + + "1\x02\x02\u01AF\\\x03\x02\x02\x02\u01B0\u01B1\x07\'\x02\x02\u01B1^\x03" + + "\x02\x02\x02\u01B2\u01B3\x07,\x02\x02\u01B3\u01B4\x07,\x02\x02\u01B4`" + + "\x03\x02\x02\x02\u01B5\u01B6\x07(\x02\x02\u01B6\u01B7\x07(\x02\x02\u01B7" + + "b\x03\x02\x02\x02\u01B8\u01B9\x07~\x02\x02\u01B9\u01BA\x07~\x02\x02\u01BA" + + "d\x03\x02\x02\x02\u01BB\u01BC\x07#\x02\x02\u01BCf\x03\x02\x02\x02\u01BD" + + "\u01BE\x07?\x02\x02\u01BEh\x03\x02\x02\x02\u01BF\u01C0\x07-\x02\x02\u01C0" + + "\u01C1\x07?\x02\x02\u01C1j\x03\x02\x02\x02\u01C2\u01C3\x07/\x02\x02\u01C3" + + "\u01C4\x07?\x02\x02\u01C4l\x03\x02\x02\x02\u01C5\u01C6\x07,\x02\x02\u01C6" + + "\u01C7\x07?\x02\x02\u01C7n\x03\x02\x02\x02\u01C8\u01C9\x071\x02\x02\u01C9" + + "\u01CA\x07?\x02\x02\u01CAp\x03\x02\x02\x02\u01CB\u01CC\x07\'\x02\x02\u01CC" + + "\u01CD\x07?\x02\x02\u01CDr\x03\x02\x02\x02\u01CE\u01CF\x07?\x02\x02\u01CF" + + "\u01D0\x07?\x02\x02\u01D0t\x03\x02\x02\x02\u01D1\u01D2\x07#\x02\x02\u01D2" + + "\u01D3\x07?\x02\x02\u01D3v\x03\x02\x02\x02\u01D4\u01D5\x07>\x02\x02\u01D5" + + "x\x03\x02\x02\x02\u01D6\u01D7\x07>\x02\x02\u01D7\u01D8\x07?\x02\x02\u01D8" + + "z\x03\x02\x02\x02\u01D9\u01DA\x07@\x02\x02\u01DA|\x03\x02\x02\x02\u01DB" + + "\u01DC\x07@\x02\x02\u01DC\u01DD\x07?\x02\x02\u01DD~\x03\x02\x02\x02\u01DE" + + "\u01DF\x07(\x02\x02\u01DF\x80\x03\x02\x02\x02\u01E0\u01E1\x07~\x02\x02" + + "\u01E1\x82\x03\x02\x02\x02\u01E2\u01E3\x07`\x02\x02\u01E3\x84\x03\x02" + + "\x02\x02\u01E4\u01E5\x07\x80\x02\x02\u01E5\x86\x03\x02\x02\x02\u01E6\u01E7" + + "\x07>\x02\x02\u01E7\u01E8\x07>\x02\x02\u01E8\x88\x03\x02\x02\x02\u01E9" + + "\u01EA\x07@\x02\x02\u01EA\u01EB\x07@\x02\x02\u01EB\x8A\x03\x02\x02\x02" + + "\u01EC\u01ED\x07@\x02\x02\u01ED\u01EE\x07@\x02\x02\u01EE\u01EF\x07@\x02" + + "\x02\u01EF\x8C\x03\x02\x02\x02\u01F0\u01F1\x070\x02\x02\u01F1\x8E\x03" + + "\x02\x02\x02\u01F2\u01F7\x05\xADV\x02\u01F3\u01F6\x05\xADV\x02\u01F4\u01F6" + + "\x05\xB1X\x02\u01F5\u01F3\x03\x02\x02\x02\u01F5\u01F4\x03\x02\x02\x02" + + "\u01F6\u01F9\x03\x02\x02\x02\u01F7\u01F5\x03\x02\x02\x02\u01F7\u01F8\x03" + + "\x02\x02\x02\u01F8\x90\x03\x02\x02\x02\u01F9\u01F7\x03\x02\x02\x02\u01FA" + + "\u01FF\x05\xB3Y\x02\u01FB\u01FF\x05\xB7[\x02\u01FC\u01FF\x05\xB9\\\x02" + + "\u01FD\u01FF\x05\xB5Z\x02\u01FE\u01FA\x03\x02\x02\x02\u01FE\u01FB\x03" + + "\x02\x02\x02\u01FE\u01FC\x03\x02\x02\x02\u01FE\u01FD\x03\x02\x02\x02\u01FF" + + "\x92\x03\x02\x02\x02\u0200\u0202\x07)\x02\x02\u0201\u0203\x05\xE1p\x02" + + "\u0202\u0201\x03\x02\x02\x02\u0202\u0203\x03\x02\x02\x02\u0203\u0204\x03" + + "\x02\x02\x02\u0204\u0205\x07)\x02\x02\u0205\x94\x03\x02\x02\x02\u0206" + + "\u0208\x07$\x02\x02\u0207\u0209\x05\xE5r\x02\u0208\u0207\x03\x02\x02\x02" + + "\u0208\u0209\x03\x02\x02\x02\u0209\u020A\x03\x02\x02\x02\u020A\u020B\x07" + + "$\x02\x02\u020B\x96\x03\x02\x02\x02\u020C\u020D\x05\xC3a\x02\u020D\x98" + + "\x03\x02\x02\x02\u020E\u0210"; private static readonly _serializedATNSegment1: string = - "M\f\x02\u021C\u021D\x03\x02\x02\x02\u021D\u021E\bM\x03\x02\u021E\x9C\x03" + - "\x02\x02\x02\u021F\u0220\x05\xCFg\x02\u0220\x9E\x03\x02\x02\x02\u0221" + - "\u0222\x05\xA1P\x02\u0222\xA0\x03\x02\x02\x02\u0223\u0224\t\x04\x02\x02" + - "\u0224\xA2\x03\x02\x02\x02\u0225\u0226\t\x05\x02\x02\u0226\xA4\x03\x02" + - "\x02\x02\u0227\u0229\x05\xA3Q\x02\u0228\u0227\x03\x02\x02\x02\u0229\u022A" + - "\x03\x02\x02\x02\u022A\u0228\x03\x02\x02\x02\u022A\u022B\x03\x02\x02\x02" + - "\u022B\xA6\x03\x02\x02\x02\u022C\u022D\x072\x02\x02\u022D\u022F\t\x06" + - "\x02\x02\u022E\u0230\x05\xAFW\x02\u022F\u022E\x03\x02\x02\x02\u0230\u0231" + - "\x03\x02\x02\x02\u0231\u022F\x03\x02\x02\x02\u0231\u0232\x03\x02\x02\x02" + - "\u0232\xA8\x03\x02\x02\x02\u0233\u0234\x072\x02\x02\u0234\u0236\t\x07" + - "\x02\x02\u0235\u0237\x05\xB1X\x02\u0236\u0235\x03\x02\x02\x02\u0237\u0238" + - "\x03\x02\x02\x02\u0238\u0236\x03\x02\x02\x02\u0238\u0239\x03\x02\x02\x02" + - "\u0239\xAA\x03\x02\x02\x02\u023A\u023B\x072\x02\x02\u023B\u023D\t\b\x02" + - "\x02\u023C\u023E\x05\xB3Y\x02\u023D\u023C\x03\x02\x02\x02\u023E\u023F" + - "\x03\x02\x02\x02\u023F\u023D\x03\x02\x02\x02\u023F\u0240\x03\x02\x02\x02" + - "\u0240\xAC\x03\x02\x02\x02\u0241\u0242\t\t\x02\x02\u0242\xAE\x03\x02\x02" + - "\x02\u0243\u0244\t\n\x02\x02\u0244\xB0\x03\x02\x02\x02\u0245\u0246\t\v" + - "\x02\x02\u0246\xB2\x03\x02\x02\x02\u0247\u0248\t\f\x02\x02\u0248\xB4\x03" + - "\x02\x02\x02\u0249\u024B\x05\xB7[\x02\u024A\u024C\x05\xB9\\\x02\u024B" + - "\u024A\x03\x02\x02\x02\u024B\u024C\x03\x02\x02\x02\u024C\u0251\x03\x02" + - "\x02\x02\u024D\u024E\x05\xBB]\x02\u024E\u024F\x05\xB9\\\x02\u024F\u0251" + - "\x03\x02\x02\x02\u0250\u0249\x03\x02\x02\x02\u0250\u024D\x03\x02\x02\x02" + - "\u0251\xB6\x03\x02\x02\x02\u0252\u0254\x05\xBB]\x02\u0253\u0252\x03\x02" + - "\x02\x02\u0253\u0254\x03\x02\x02\x02\u0254\u0255\x03\x02\x02\x02\u0255" + - "\u0256\x070\x02\x02\u0256\u025B\x05\xBB]\x02\u0257\u0258\x05\xBB]\x02" + - "\u0258\u0259\x070\x02\x02\u0259\u025B\x03\x02\x02\x02\u025A\u0253\x03" + - "\x02\x02\x02\u025A\u0257\x03\x02\x02\x02\u025B\xB8\x03\x02\x02\x02\u025C" + - "\u025E\t\r\x02\x02\u025D\u025F\x05\xBD^\x02\u025E\u025D\x03\x02\x02\x02" + - "\u025E\u025F\x03\x02\x02\x02\u025F\u0260\x03\x02\x02\x02\u0260\u0261\x05" + - "\xBB]\x02\u0261\xBA\x03\x02\x02\x02\u0262\u0264\x05\xA3Q\x02\u0263\u0262" + - "\x03\x02\x02\x02\u0264\u0265\x03\x02\x02\x02\u0265\u0263\x03\x02\x02\x02" + - "\u0265\u0266\x03\x02\x02\x02\u0266\xBC\x03\x02\x02\x02\u0267\u0268\t\x0E" + - "\x02\x02\u0268\xBE\x03\x02\x02\x02\u0269\u026B\x05\xC1`\x02\u026A\u0269" + - "\x03\x02\x02\x02\u026B\u026C\x03\x02\x02\x02\u026C\u026A\x03\x02\x02\x02" + - "\u026C\u026D\x03\x02\x02\x02\u026D\xC0\x03\x02\x02\x02\u026E\u0271\n\x0F" + - "\x02\x02\u026F\u0271\x05\xC3a\x02\u0270\u026E\x03\x02\x02\x02\u0270\u026F" + - "\x03\x02\x02\x02\u0271\xC2\x03\x02\x02\x02\u0272\u0276\x05\xC5b\x02\u0273" + - "\u0276\x05\xC7c\x02\u0274\u0276\x05\xC9d\x02\u0275\u0272\x03\x02\x02\x02" + - "\u0275\u0273\x03\x02\x02\x02\u0275\u0274\x03\x02\x02\x02\u0276\xC4\x03" + - "\x02\x02\x02\u0277\u0278\x07^\x02\x02\u0278\u0279\t\x10\x02\x02\u0279" + - "\xC6\x03\x02\x02\x02\u027A\u027B\x07^\x02\x02\u027B\u027D\x05\xB1X\x02" + - "\u027C\u027E\x05\xB1X\x02\u027D\u027C\x03\x02\x02\x02\u027D\u027E\x03" + - "\x02\x02\x02\u027E\u0280\x03\x02\x02\x02\u027F\u0281\x05\xB1X\x02\u0280" + - "\u027F\x03\x02\x02\x02\u0280\u0281\x03\x02\x02\x02\u0281\xC8\x03\x02\x02" + - "\x02\u0282\u0283\x07^\x02\x02\u0283\u0284\x07z\x02\x02\u0284\u0286\x03" + - "\x02\x02\x02\u0285\u0287\x05\xB3Y\x02\u0286\u0285\x03\x02\x02\x02\u0287" + - "\u0288\x03\x02\x02\x02\u0288\u0286\x03\x02\x02\x02\u0288\u0289\x03\x02" + - "\x02\x02\u0289\xCA\x03\x02\x02\x02\u028A\u028C\x05\xCDf\x02\u028B\u028A" + - "\x03\x02\x02\x02\u028C\u028D\x03\x02\x02\x02\u028D\u028B\x03\x02\x02\x02" + - "\u028D\u028E\x03\x02\x02\x02\u028E\xCC\x03\x02\x02\x02\u028F\u0292\n\x11" + - "\x02\x02\u0290\u0292\x05\xC3a\x02\u0291\u028F\x03\x02\x02\x02\u0291\u0290" + - "\x03\x02\x02\x02\u0292\xCE\x03\x02\x02\x02\u0293\u0295\x05\xD1h\x02\u0294" + - "\u0293\x03\x02\x02\x02\u0295\u0296\x03\x02\x02\x02\u0296\u0294\x03\x02" + - "\x02\x02\u0296\u0297\x03\x02\x02\x02\u0297\xD0\x03\x02\x02\x02\u0298\u029B" + - "\n\x12\x02\x02\u0299\u029B\x05\xC3a\x02\u029A\u0298\x03\x02\x02\x02\u029A" + - "\u0299\x03\x02\x02\x02\u029B\xD2\x03\x02\x02\x02\u029C\u029E\x05\xD5j" + - "\x02\u029D\u029C\x03\x02\x02\x02\u029E\u029F\x03\x02\x02\x02\u029F\u029D" + - "\x03\x02\x02\x02\u029F\u02A0\x03\x02\x02\x02\u02A0\xD4\x03\x02\x02\x02" + - "\u02A1\u02A4\n\x0F\x02\x02\u02A2\u02A4\x05\xC3a\x02\u02A3\u02A1\x03\x02" + - "\x02\x02\u02A3\u02A2\x03\x02\x02\x02\u02A4\xD6\x03\x02\x02\x02\u02A5\u02A7" + - "\x05\xD9l\x02\u02A6\u02A5\x03\x02\x02\x02\u02A7\u02A8\x03\x02\x02\x02" + - "\u02A8\u02A6\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02\u02A9\xD8\x03" + - "\x02\x02\x02\u02AA\u02AD\n\x13\x02\x02\u02AB\u02AD\x05\xC3a\x02\u02AC" + - "\u02AA\x03\x02\x02\x02\u02AC\u02AB\x03\x02\x02\x02\u02AD\xDA\x03\x02\x02" + - "\x02%\x02\x03\x04\xE1\xEF\u01D5\u01D7\u01DE\u01E2\u01E8\u01F1\u022A\u0231" + - "\u0238\u023F\u024B\u0250\u0253\u025A\u025E\u0265\u026C\u0270\u0275\u027D" + - "\u0280\u0288\u028D\u0291\u0296\u029A\u029F\u02A3\u02A8\u02AC\r\x02\x04" + - "\x02\x06\x02\x02\x02\x03\x02\x03G\x02\x07\x03\x02\x03H\x03\x07\x04\x02" + - "\t\x03\x02\x07\x02\x02\x03J\x04\x03M\x05"; + "\t\x03\x02\x02\u020F\u020E\x03\x02\x02\x02\u0210\u0211\x03\x02\x02\x02" + + "\u0211\u020F\x03\x02\x02\x02\u0211\u0212\x03\x02\x02\x02\u0212\u0213\x03" + + "\x02\x02\x02\u0213\u0214\bL\x04\x02\u0214\x9A\x03\x02\x02\x02\u0215\u0216" + + "\t\x02\x02\x02\u0216\u0217\x03\x02\x02\x02\u0217\u0218\bM\x04\x02\u0218" + + "\x9C\x03\x02\x02\x02\u0219\u021A\x07h\x02\x02\u021A\u021B\x07)\x02\x02" + + "\u021B\u021C\x03\x02\x02\x02\u021C\u021D\bN\x05\x02\u021D\u021E\x03\x02" + + "\x02\x02\u021E\u021F\bN\x06\x02\u021F\x9E\x03\x02\x02\x02\u0220\u0221" + + "\x07h\x02\x02\u0221\u0222\x07$\x02\x02\u0222\u0223\x03\x02\x02\x02\u0223" + + "\u0224\bO\x07\x02\u0224\u0225\x03\x02\x02\x02\u0225\u0226\bO\b\x02\u0226" + + "\xA0\x03\x02\x02\x02\u0227\u0228\x06P\x03\x02\u0228\u0229\x07}\x02\x02" + + "\u0229\u022A\x03\x02\x02\x02\u022A\u022B\bP\t\x02\u022B\u022C\bP\n\x02" + + "\u022C\xA2\x03\x02\x02\x02\u022D\u022E\x07)\x02\x02\u022E\u022F\bQ\v\x02" + + "\u022F\u0230\x03\x02\x02\x02\u0230\u0231\bQ\x03\x02\u0231\xA4\x03\x02" + + "\x02\x02\u0232\u0233\x05\xD9l\x02\u0233\xA6\x03\x02\x02\x02\u0234\u0235" + + "\x06S\x04\x02\u0235\u0236\x07}\x02\x02\u0236\u0237\x03\x02\x02\x02\u0237" + + "\u0238\bS\t\x02\u0238\u0239\bS\n\x02\u0239\xA8\x03\x02\x02\x02\u023A\u023B" + + "\x07$\x02\x02\u023B\u023C\bT\f\x02\u023C\u023D\x03\x02\x02\x02\u023D\u023E" + + "\bT\x03\x02\u023E\xAA\x03\x02\x02\x02\u023F\u0240\x05\xDDn\x02\u0240\xAC" + + "\x03\x02\x02\x02\u0241\u0242\x05\xAFW\x02\u0242\xAE\x03\x02\x02\x02\u0243" + + "\u0244\t\x04\x02\x02\u0244\xB0\x03\x02\x02\x02\u0245\u0246\t\x05\x02\x02" + + "\u0246\xB2\x03\x02\x02\x02\u0247\u0249\x05\xB1X\x02\u0248\u0247\x03\x02" + + "\x02\x02\u0249\u024A\x03\x02\x02\x02\u024A\u0248\x03\x02\x02\x02\u024A" + + "\u024B\x03\x02\x02\x02\u024B\xB4\x03\x02\x02\x02\u024C\u024D\x072\x02" + + "\x02\u024D\u024F\t\x06\x02\x02\u024E\u0250\x05\xBD^\x02\u024F\u024E\x03" + + "\x02\x02\x02\u0250\u0251\x03\x02\x02\x02\u0251\u024F\x03\x02\x02\x02\u0251" + + "\u0252\x03\x02\x02\x02\u0252\xB6\x03\x02\x02\x02\u0253\u0254\x072\x02" + + "\x02\u0254\u0256\t\x07\x02\x02\u0255\u0257\x05\xBF_\x02\u0256\u0255\x03" + + "\x02\x02\x02\u0257\u0258\x03\x02\x02\x02\u0258\u0256\x03\x02\x02\x02\u0258" + + "\u0259\x03\x02\x02\x02\u0259\xB8\x03\x02\x02\x02\u025A\u025B\x072\x02" + + "\x02\u025B\u025D\t\b\x02\x02\u025C\u025E\x05\xC1`\x02\u025D\u025C\x03" + + "\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025F\u025D\x03\x02\x02\x02\u025F" + + "\u0260\x03\x02\x02\x02\u0260\xBA\x03\x02\x02\x02\u0261\u0262\t\t\x02\x02" + + "\u0262\xBC\x03\x02\x02\x02\u0263\u0264\t\n\x02\x02\u0264\xBE\x03\x02\x02" + + "\x02\u0265\u0266\t\v\x02\x02\u0266\xC0\x03\x02\x02\x02\u0267\u0268\t\f" + + "\x02\x02\u0268\xC2\x03\x02\x02\x02\u0269\u026B\x05\xC5b\x02\u026A\u026C" + + "\x05\xC7c\x02\u026B\u026A\x03\x02\x02\x02\u026B\u026C\x03\x02\x02\x02" + + "\u026C\u0271\x03\x02\x02\x02\u026D\u026E\x05\xC9d\x02\u026E\u026F\x05" + + "\xC7c\x02\u026F\u0271\x03\x02\x02\x02\u0270\u0269\x03\x02\x02\x02\u0270" + + "\u026D\x03\x02\x02\x02\u0271\xC4\x03\x02\x02\x02\u0272\u0274\x05\xC9d" + + "\x02\u0273\u0272\x03\x02\x02\x02\u0273\u0274\x03\x02\x02\x02\u0274\u0275" + + "\x03\x02\x02\x02\u0275\u0276\x070\x02\x02\u0276\u027B\x05\xC9d\x02\u0277" + + "\u0278\x05\xC9d\x02\u0278\u0279\x070\x02\x02\u0279\u027B\x03\x02\x02\x02" + + "\u027A\u0273\x03\x02\x02\x02\u027A\u0277\x03\x02\x02\x02\u027B\xC6\x03" + + "\x02\x02\x02\u027C\u027E\t\r\x02\x02\u027D\u027F\x05\xCBe\x02\u027E\u027D" + + "\x03\x02\x02\x02\u027E\u027F\x03\x02\x02\x02\u027F\u0280\x03\x02\x02\x02" + + "\u0280\u0281\x05\xC9d\x02\u0281\xC8\x03\x02\x02\x02\u0282\u0284\x05\xB1" + + "X\x02\u0283\u0282\x03\x02\x02\x02\u0284\u0285\x03\x02\x02\x02\u0285\u0283" + + "\x03\x02\x02\x02\u0285\u0286\x03\x02\x02\x02\u0286\xCA\x03\x02\x02\x02" + + "\u0287\u0288\t\x0E\x02\x02\u0288\xCC\x03\x02\x02\x02\u0289\u028B\x05\xCF" + + "g\x02\u028A\u0289\x03\x02\x02\x02\u028B\u028C\x03\x02\x02\x02\u028C\u028A" + + "\x03\x02\x02\x02\u028C\u028D\x03\x02\x02\x02\u028D\xCE\x03\x02\x02\x02" + + "\u028E\u0291\n\x0F\x02\x02\u028F\u0291\x05\xD1h\x02\u0290\u028E\x03\x02" + + "\x02\x02\u0290\u028F\x03\x02\x02\x02\u0291\xD0\x03\x02\x02\x02\u0292\u0296" + + "\x05\xD3i\x02\u0293\u0296\x05\xD5j\x02\u0294\u0296\x05\xD7k\x02\u0295" + + "\u0292\x03\x02\x02\x02\u0295\u0293\x03\x02\x02\x02\u0295\u0294\x03\x02" + + "\x02\x02\u0296\xD2\x03\x02\x02\x02\u0297\u0298\x07^\x02\x02\u0298\u0299" + + "\t\x10\x02\x02\u0299\xD4\x03\x02\x02\x02\u029A\u029B\x07^\x02\x02\u029B" + + "\u029D\x05\xBF_\x02\u029C\u029E\x05\xBF_\x02\u029D\u029C\x03\x02\x02\x02" + + "\u029D\u029E\x03\x02\x02\x02\u029E\u02A0\x03\x02\x02\x02\u029F\u02A1\x05" + + "\xBF_\x02\u02A0\u029F\x03\x02\x02\x02\u02A0\u02A1\x03\x02\x02\x02\u02A1" + + "\xD6\x03\x02\x02\x02\u02A2\u02A3\x07^\x02\x02\u02A3\u02A4\x07z\x02\x02" + + "\u02A4\u02A6\x03\x02\x02\x02\u02A5\u02A7\x05\xC1`\x02\u02A6\u02A5\x03" + + "\x02\x02\x02\u02A7\u02A8\x03\x02\x02\x02\u02A8\u02A6\x03\x02\x02\x02\u02A8" + + "\u02A9\x03\x02\x02\x02\u02A9\xD8\x03\x02\x02\x02\u02AA\u02AC\x05\xDBm" + + "\x02\u02AB\u02AA\x03\x02\x02\x02\u02AC\u02AD\x03\x02\x02\x02\u02AD\u02AB" + + "\x03\x02\x02\x02\u02AD\u02AE\x03\x02\x02\x02\u02AE\xDA\x03\x02\x02\x02" + + "\u02AF\u02B2\n\x11\x02\x02\u02B0\u02B2\x05\xD1h\x02\u02B1\u02AF\x03\x02" + + "\x02\x02\u02B1\u02B0\x03\x02\x02\x02\u02B2\xDC\x03\x02\x02\x02\u02B3\u02B5" + + "\x05\xDFo\x02\u02B4\u02B3\x03\x02\x02\x02\u02B5\u02B6\x03\x02\x02\x02" + + "\u02B6\u02B4\x03\x02\x02\x02\u02B6\u02B7\x03\x02\x02\x02\u02B7\xDE\x03" + + "\x02\x02\x02\u02B8\u02BB\n\x12\x02\x02\u02B9\u02BB\x05\xD1h\x02\u02BA" + + "\u02B8\x03\x02\x02\x02\u02BA\u02B9\x03\x02\x02\x02\u02BB\xE0\x03\x02\x02" + + "\x02\u02BC\u02BE\x05\xE3q\x02\u02BD\u02BC\x03\x02\x02\x02\u02BE\u02BF" + + "\x03\x02\x02\x02\u02BF\u02BD\x03\x02\x02\x02\u02BF\u02C0\x03\x02\x02\x02" + + "\u02C0\xE2\x03\x02\x02\x02\u02C1\u02C4\n\x0F\x02\x02\u02C2\u02C4\x05\xD1" + + "h\x02\u02C3\u02C1\x03\x02\x02\x02\u02C3\u02C2\x03\x02\x02\x02\u02C4\xE4" + + "\x03\x02\x02\x02\u02C5\u02C7\x05\xE7s\x02\u02C6\u02C5\x03\x02\x02\x02" + + "\u02C7\u02C8\x03\x02\x02\x02\u02C8\u02C6\x03\x02\x02\x02\u02C8\u02C9\x03" + + "\x02\x02\x02\u02C9\xE6\x03\x02\x02\x02\u02CA\u02CD\n\x13\x02\x02\u02CB" + + "\u02CD\x05\xD1h\x02\u02CC\u02CA\x03\x02\x02\x02\u02CC\u02CB\x03\x02\x02" + + "\x02\u02CD\xE8\x03\x02\x02\x02%\x02\x03\x04\xEF\xFD\u01F5\u01F7\u01FE" + + "\u0202\u0208\u0211\u024A\u0251\u0258\u025F\u026B\u0270\u0273\u027A\u027E" + + "\u0285\u028C\u0290\u0295\u029D\u02A0\u02A8\u02AD\u02B1\u02B6\u02BA\u02BF" + + "\u02C3\u02C8\u02CC\r\x02\x04\x02\x06\x02\x02\x02\x03\x02\x03N\x02\x07" + + "\x03\x02\x03O\x03\x07\x04\x02\t\x03\x02\x07\x02\x02\x03Q\x04\x03T\x05"; public static readonly _serializedATN: string = Utils.join( - [KipperLexer._serializedATNSegment0, KipperLexer._serializedATNSegment1], + [ + KipperLexer._serializedATNSegment0, + KipperLexer._serializedATNSegment1, + ], "", ); public static __ATN: ATN; @@ -821,4 +639,6 @@ export class KipperLexer extends KipperLexerBase { return KipperLexer.__ATN; } + } + diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.interp b/kipper/core/src/compiler/parser/antlr/KipperParser.interp index 4940e6f5a..594fb0126 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.interp @@ -62,6 +62,13 @@ null '<=' '>' '>=' +'&' +'|' +'^' +'~' +'<<' +'>>' +'>>>' '.' null null @@ -141,6 +148,13 @@ Less LessEqual Greater GreaterEqual +BitwiseAnd +BitwiseOr +BitwiseXor +BitwiseNot +BitwiseZeroFillLeftShift +BitwiseSignedRightShift +BitwiseZeroFillRightShift Dot Identifier IntegerConstant @@ -212,8 +226,13 @@ unaryOperator castOrConvertExpression multiplicativeExpression additiveExpression +bitwiseShiftExpression +bitwiseShiftOperators relationalExpression equalityExpression +bitwiseAndExpression +bitwiseXorExpression +bitwiseOrExpression logicalAndExpression logicalOrExpression conditionalExpression @@ -228,4 +247,4 @@ typeSpecifierIdentifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 78, 597, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 3, 2, 5, 2, 140, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 145, 10, 3, 13, 3, 14, 3, 146, 3, 4, 3, 4, 3, 5, 6, 5, 152, 10, 5, 13, 5, 14, 5, 153, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 166, 10, 7, 5, 7, 168, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 174, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 180, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 196, 10, 13, 3, 14, 3, 14, 3, 14, 7, 14, 201, 10, 14, 12, 14, 14, 14, 204, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 218, 10, 17, 3, 18, 3, 18, 5, 18, 222, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 231, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 240, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 248, 10, 22, 12, 22, 14, 22, 251, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 263, 10, 23, 3, 24, 3, 24, 3, 24, 5, 24, 268, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 274, 10, 25, 3, 25, 3, 25, 5, 25, 278, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 284, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 290, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 314, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 326, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 7, 36, 342, 10, 36, 12, 36, 14, 36, 345, 11, 36, 3, 36, 3, 36, 3, 36, 7, 36, 350, 10, 36, 12, 36, 14, 36, 353, 11, 36, 3, 36, 5, 36, 356, 10, 36, 3, 37, 3, 37, 3, 37, 5, 37, 361, 10, 37, 3, 37, 5, 37, 364, 10, 37, 3, 38, 3, 38, 3, 38, 5, 38, 369, 10, 38, 3, 38, 5, 38, 372, 10, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 380, 10, 40, 12, 40, 14, 40, 383, 11, 40, 5, 40, 385, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 397, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 402, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 407, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 423, 10, 42, 12, 42, 14, 42, 426, 11, 42, 3, 43, 3, 43, 3, 43, 7, 43, 431, 10, 43, 12, 43, 14, 43, 434, 11, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 447, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 453, 10, 46, 3, 46, 3, 46, 3, 47, 3, 47, 5, 47, 459, 10, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 5, 49, 467, 10, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 484, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 492, 10, 55, 12, 55, 14, 55, 495, 11, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 7, 56, 503, 10, 56, 12, 56, 14, 56, 506, 11, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 514, 10, 57, 12, 57, 14, 57, 517, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 525, 10, 58, 12, 58, 14, 58, 528, 11, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 536, 10, 59, 12, 59, 14, 59, 539, 11, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 547, 10, 60, 12, 60, 14, 60, 550, 11, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 559, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 566, 10, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 7, 64, 573, 10, 64, 12, 64, 14, 64, 576, 11, 64, 3, 65, 3, 65, 3, 65, 5, 65, 581, 10, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 2, 2, 9, 82, 108, 110, 112, 114, 116, 118, 70, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 2, 16, 3, 2, 6, 7, 3, 2, 13, 14, 3, 2, 25, 26, 3, 2, 68, 69, 4, 2, 67, 67, 70, 70, 3, 2, 28, 30, 4, 2, 43, 43, 45, 45, 5, 2, 42, 42, 44, 44, 52, 52, 3, 2, 46, 49, 4, 2, 42, 42, 44, 44, 3, 2, 61, 64, 3, 2, 59, 60, 3, 2, 53, 58, 4, 2, 28, 30, 66, 66, 2, 597, 2, 139, 3, 2, 2, 2, 4, 144, 3, 2, 2, 2, 6, 148, 3, 2, 2, 2, 8, 151, 3, 2, 2, 2, 10, 158, 3, 2, 2, 2, 12, 167, 3, 2, 2, 2, 14, 169, 3, 2, 2, 2, 16, 181, 3, 2, 2, 2, 18, 184, 3, 2, 2, 2, 20, 186, 3, 2, 2, 2, 22, 188, 3, 2, 2, 2, 24, 190, 3, 2, 2, 2, 26, 197, 3, 2, 2, 2, 28, 205, 3, 2, 2, 2, 30, 209, 3, 2, 2, 2, 32, 217, 3, 2, 2, 2, 34, 219, 3, 2, 2, 2, 36, 225, 3, 2, 2, 2, 38, 230, 3, 2, 2, 2, 40, 232, 3, 2, 2, 2, 42, 241, 3, 2, 2, 2, 44, 262, 3, 2, 2, 2, 46, 267, 3, 2, 2, 2, 48, 269, 3, 2, 2, 2, 50, 294, 3, 2, 2, 2, 52, 300, 3, 2, 2, 2, 54, 308, 3, 2, 2, 2, 56, 311, 3, 2, 2, 2, 58, 325, 3, 2, 2, 2, 60, 327, 3, 2, 2, 2, 62, 331, 3, 2, 2, 2, 64, 333, 3, 2, 2, 2, 66, 335, 3, 2, 2, 2, 68, 337, 3, 2, 2, 2, 70, 355, 3, 2, 2, 2, 72, 363, 3, 2, 2, 2, 74, 371, 3, 2, 2, 2, 76, 373, 3, 2, 2, 2, 78, 375, 3, 2, 2, 2, 80, 388, 3, 2, 2, 2, 82, 401, 3, 2, 2, 2, 84, 427, 3, 2, 2, 2, 86, 435, 3, 2, 2, 2, 88, 438, 3, 2, 2, 2, 90, 442, 3, 2, 2, 2, 92, 458, 3, 2, 2, 2, 94, 460, 3, 2, 2, 2, 96, 466, 3, 2, 2, 2, 98, 468, 3, 2, 2, 2, 100, 471, 3, 2, 2, 2, 102, 474, 3, 2, 2, 2, 104, 476, 3, 2, 2, 2, 106, 483, 3, 2, 2, 2, 108, 485, 3, 2, 2, 2, 110, 496, 3, 2, 2, 2, 112, 507, 3, 2, 2, 2, 114, 518, 3, 2, 2, 2, 116, 529, 3, 2, 2, 2, 118, 540, 3, 2, 2, 2, 120, 558, 3, 2, 2, 2, 122, 565, 3, 2, 2, 2, 124, 567, 3, 2, 2, 2, 126, 569, 3, 2, 2, 2, 128, 580, 3, 2, 2, 2, 130, 582, 3, 2, 2, 2, 132, 584, 3, 2, 2, 2, 134, 589, 3, 2, 2, 2, 136, 594, 3, 2, 2, 2, 138, 140, 5, 4, 3, 2, 139, 138, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 141, 3, 2, 2, 2, 141, 142, 7, 2, 2, 3, 142, 3, 3, 2, 2, 2, 143, 145, 5, 6, 4, 2, 144, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 5, 3, 2, 2, 2, 148, 149, 5, 8, 5, 2, 149, 7, 3, 2, 2, 2, 150, 152, 5, 10, 6, 2, 151, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 151, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 9, 3, 2, 2, 2, 155, 159, 5, 32, 17, 2, 156, 159, 5, 12, 7, 2, 157, 159, 7, 32, 2, 2, 158, 155, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 157, 3, 2, 2, 2, 159, 11, 3, 2, 2, 2, 160, 161, 5, 16, 9, 2, 161, 162, 7, 32, 2, 2, 162, 168, 3, 2, 2, 2, 163, 165, 5, 14, 8, 2, 164, 166, 7, 32, 2, 2, 165, 164, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 168, 3, 2, 2, 2, 167, 160, 3, 2, 2, 2, 167, 163, 3, 2, 2, 2, 168, 13, 3, 2, 2, 2, 169, 170, 7, 21, 2, 2, 170, 171, 5, 20, 11, 2, 171, 173, 7, 35, 2, 2, 172, 174, 5, 26, 14, 2, 173, 172, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 176, 7, 36, 2, 2, 176, 177, 7, 24, 2, 2, 177, 179, 5, 128, 65, 2, 178, 180, 5, 34, 18, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 15, 3, 2, 2, 2, 181, 182, 5, 18, 10, 2, 182, 183, 5, 24, 13, 2, 183, 17, 3, 2, 2, 2, 184, 185, 9, 2, 2, 2, 185, 19, 3, 2, 2, 2, 186, 187, 5, 22, 12, 2, 187, 21, 3, 2, 2, 2, 188, 189, 7, 66, 2, 2, 189, 23, 3, 2, 2, 2, 190, 191, 5, 20, 11, 2, 191, 192, 7, 34, 2, 2, 192, 195, 5, 128, 65, 2, 193, 194, 7, 53, 2, 2, 194, 196, 5, 30, 16, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 25, 3, 2, 2, 2, 197, 202, 5, 28, 15, 2, 198, 199, 7, 31, 2, 2, 199, 201, 5, 28, 15, 2, 200, 198, 3, 2, 2, 2, 201, 204, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 27, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 205, 206, 5, 20, 11, 2, 206, 207, 7, 34, 2, 2, 207, 208, 5, 128, 65, 2, 208, 29, 3, 2, 2, 2, 209, 210, 5, 122, 62, 2, 210, 31, 3, 2, 2, 2, 211, 218, 5, 34, 18, 2, 212, 218, 5, 36, 19, 2, 213, 218, 5, 38, 20, 2, 214, 218, 5, 46, 24, 2, 215, 218, 5, 54, 28, 2, 216, 218, 5, 56, 29, 2, 217, 211, 3, 2, 2, 2, 217, 212, 3, 2, 2, 2, 217, 213, 3, 2, 2, 2, 217, 214, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 217, 216, 3, 2, 2, 2, 218, 33, 3, 2, 2, 2, 219, 221, 7, 40, 2, 2, 220, 222, 5, 8, 5, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 7, 41, 2, 2, 224, 35, 3, 2, 2, 2, 225, 226, 5, 126, 64, 2, 226, 227, 7, 32, 2, 2, 227, 37, 3, 2, 2, 2, 228, 231, 5, 40, 21, 2, 229, 231, 5, 42, 22, 2, 230, 228, 3, 2, 2, 2, 230, 229, 3, 2, 2, 2, 231, 39, 3, 2, 2, 2, 232, 233, 7, 17, 2, 2, 233, 234, 7, 35, 2, 2, 234, 235, 5, 126, 64, 2, 235, 236, 7, 36, 2, 2, 236, 239, 5, 32, 17, 2, 237, 238, 7, 18, 2, 2, 238, 240, 5, 32, 17, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 41, 3, 2, 2, 2, 241, 242, 7, 10, 2, 2, 242, 243, 7, 35, 2, 2, 243, 244, 5, 126, 64, 2, 244, 245, 7, 36, 2, 2, 245, 249, 7, 40, 2, 2, 246, 248, 5, 44, 23, 2, 247, 246, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 252, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 253, 7, 41, 2, 2, 253, 43, 3, 2, 2, 2, 254, 255, 7, 11, 2, 2, 255, 256, 5, 126, 64, 2, 256, 257, 7, 34, 2, 2, 257, 258, 5, 32, 17, 2, 258, 263, 3, 2, 2, 2, 259, 260, 7, 12, 2, 2, 260, 261, 7, 34, 2, 2, 261, 263, 5, 32, 17, 2, 262, 254, 3, 2, 2, 2, 262, 259, 3, 2, 2, 2, 263, 45, 3, 2, 2, 2, 264, 268, 5, 48, 25, 2, 265, 268, 5, 50, 26, 2, 266, 268, 5, 52, 27, 2, 267, 264, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 47, 3, 2, 2, 2, 269, 270, 7, 19, 2, 2, 270, 277, 7, 35, 2, 2, 271, 274, 5, 16, 9, 2, 272, 274, 5, 126, 64, 2, 273, 271, 3, 2, 2, 2, 273, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 8, 25, 1, 2, 276, 278, 3, 2, 2, 2, 277, 273, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 283, 7, 32, 2, 2, 280, 281, 5, 126, 64, 2, 281, 282, 8, 25, 1, 2, 282, 284, 3, 2, 2, 2, 283, 280, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 289, 7, 32, 2, 2, 286, 287, 5, 126, 64, 2, 287, 288, 8, 25, 1, 2, 288, 290, 3, 2, 2, 2, 289, 286, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 292, 7, 36, 2, 2, 292, 293, 5, 32, 17, 2, 293, 49, 3, 2, 2, 2, 294, 295, 7, 16, 2, 2, 295, 296, 7, 35, 2, 2, 296, 297, 5, 126, 64, 2, 297, 298, 7, 36, 2, 2, 298, 299, 5, 32, 17, 2, 299, 51, 3, 2, 2, 2, 300, 301, 7, 15, 2, 2, 301, 302, 5, 32, 17, 2, 302, 303, 7, 16, 2, 2, 303, 304, 7, 35, 2, 2, 304, 305, 5, 126, 64, 2, 305, 306, 7, 36, 2, 2, 306, 307, 7, 32, 2, 2, 307, 53, 3, 2, 2, 2, 308, 309, 9, 3, 2, 2, 309, 310, 7, 32, 2, 2, 310, 55, 3, 2, 2, 2, 311, 313, 7, 22, 2, 2, 312, 314, 5, 126, 64, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 7, 32, 2, 2, 316, 57, 3, 2, 2, 2, 317, 326, 5, 60, 31, 2, 318, 326, 5, 62, 32, 2, 319, 326, 5, 64, 33, 2, 320, 326, 5, 68, 35, 2, 321, 326, 5, 70, 36, 2, 322, 326, 5, 76, 39, 2, 323, 326, 5, 78, 40, 2, 324, 326, 5, 80, 41, 2, 325, 317, 3, 2, 2, 2, 325, 318, 3, 2, 2, 2, 325, 319, 3, 2, 2, 2, 325, 320, 3, 2, 2, 2, 325, 321, 3, 2, 2, 2, 325, 322, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 324, 3, 2, 2, 2, 326, 59, 3, 2, 2, 2, 327, 328, 7, 35, 2, 2, 328, 329, 5, 126, 64, 2, 329, 330, 7, 36, 2, 2, 330, 61, 3, 2, 2, 2, 331, 332, 9, 4, 2, 2, 332, 63, 3, 2, 2, 2, 333, 334, 5, 66, 34, 2, 334, 65, 3, 2, 2, 2, 335, 336, 7, 66, 2, 2, 336, 67, 3, 2, 2, 2, 337, 338, 9, 5, 2, 2, 338, 69, 3, 2, 2, 2, 339, 343, 7, 73, 2, 2, 340, 342, 5, 72, 37, 2, 341, 340, 3, 2, 2, 2, 342, 345, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 346, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 346, 356, 7, 75, 2, 2, 347, 351, 7, 74, 2, 2, 348, 350, 5, 74, 38, 2, 349, 348, 3, 2, 2, 2, 350, 353, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 354, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 354, 356, 7, 77, 2, 2, 355, 339, 3, 2, 2, 2, 355, 347, 3, 2, 2, 2, 356, 71, 3, 2, 2, 2, 357, 364, 7, 76, 2, 2, 358, 360, 7, 3, 2, 2, 359, 361, 5, 126, 64, 2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 7, 39, 2, 2, 363, 357, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 364, 73, 3, 2, 2, 2, 365, 372, 7, 78, 2, 2, 366, 368, 7, 3, 2, 2, 367, 369, 5, 126, 64, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 372, 7, 39, 2, 2, 371, 365, 3, 2, 2, 2, 371, 366, 3, 2, 2, 2, 372, 75, 3, 2, 2, 2, 373, 374, 9, 6, 2, 2, 374, 77, 3, 2, 2, 2, 375, 384, 7, 37, 2, 2, 376, 381, 5, 126, 64, 2, 377, 378, 7, 31, 2, 2, 378, 380, 5, 126, 64, 2, 379, 377, 3, 2, 2, 2, 380, 383, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 385, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 376, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 7, 38, 2, 2, 387, 79, 3, 2, 2, 2, 388, 389, 9, 7, 2, 2, 389, 81, 3, 2, 2, 2, 390, 391, 8, 42, 1, 2, 391, 402, 5, 58, 30, 2, 392, 393, 7, 23, 2, 2, 393, 394, 5, 82, 42, 2, 394, 396, 7, 35, 2, 2, 395, 397, 5, 84, 43, 2, 396, 395, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 7, 36, 2, 2, 399, 400, 8, 42, 1, 2, 400, 402, 3, 2, 2, 2, 401, 390, 3, 2, 2, 2, 401, 392, 3, 2, 2, 2, 402, 424, 3, 2, 2, 2, 403, 404, 12, 7, 2, 2, 404, 406, 7, 35, 2, 2, 405, 407, 5, 84, 43, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 36, 2, 2, 409, 423, 8, 42, 1, 2, 410, 411, 12, 5, 2, 2, 411, 412, 5, 86, 44, 2, 412, 413, 8, 42, 1, 2, 413, 423, 3, 2, 2, 2, 414, 415, 12, 4, 2, 2, 415, 416, 5, 88, 45, 2, 416, 417, 8, 42, 1, 2, 417, 423, 3, 2, 2, 2, 418, 419, 12, 3, 2, 2, 419, 420, 5, 90, 46, 2, 420, 421, 8, 42, 1, 2, 421, 423, 3, 2, 2, 2, 422, 403, 3, 2, 2, 2, 422, 410, 3, 2, 2, 2, 422, 414, 3, 2, 2, 2, 422, 418, 3, 2, 2, 2, 423, 426, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 83, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 427, 432, 5, 122, 62, 2, 428, 429, 7, 31, 2, 2, 429, 431, 5, 122, 62, 2, 430, 428, 3, 2, 2, 2, 431, 434, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 85, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 435, 436, 7, 65, 2, 2, 436, 437, 5, 66, 34, 2, 437, 87, 3, 2, 2, 2, 438, 439, 7, 37, 2, 2, 439, 440, 5, 126, 64, 2, 440, 441, 7, 38, 2, 2, 441, 89, 3, 2, 2, 2, 442, 446, 7, 37, 2, 2, 443, 444, 5, 126, 64, 2, 444, 445, 8, 46, 1, 2, 445, 447, 3, 2, 2, 2, 446, 443, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 452, 7, 34, 2, 2, 449, 450, 5, 126, 64, 2, 450, 451, 8, 46, 1, 2, 451, 453, 3, 2, 2, 2, 452, 449, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 455, 7, 38, 2, 2, 455, 91, 3, 2, 2, 2, 456, 459, 5, 82, 42, 2, 457, 459, 5, 94, 48, 2, 458, 456, 3, 2, 2, 2, 458, 457, 3, 2, 2, 2, 459, 93, 3, 2, 2, 2, 460, 461, 5, 82, 42, 2, 461, 462, 5, 102, 52, 2, 462, 95, 3, 2, 2, 2, 463, 467, 5, 92, 47, 2, 464, 467, 5, 98, 50, 2, 465, 467, 5, 100, 51, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 465, 3, 2, 2, 2, 467, 97, 3, 2, 2, 2, 468, 469, 5, 102, 52, 2, 469, 470, 5, 92, 47, 2, 470, 99, 3, 2, 2, 2, 471, 472, 5, 104, 53, 2, 472, 473, 5, 92, 47, 2, 473, 101, 3, 2, 2, 2, 474, 475, 9, 8, 2, 2, 475, 103, 3, 2, 2, 2, 476, 477, 9, 9, 2, 2, 477, 105, 3, 2, 2, 2, 478, 484, 5, 96, 49, 2, 479, 480, 5, 96, 49, 2, 480, 481, 7, 8, 2, 2, 481, 482, 5, 128, 65, 2, 482, 484, 3, 2, 2, 2, 483, 478, 3, 2, 2, 2, 483, 479, 3, 2, 2, 2, 484, 107, 3, 2, 2, 2, 485, 486, 8, 55, 1, 2, 486, 487, 5, 106, 54, 2, 487, 493, 3, 2, 2, 2, 488, 489, 12, 3, 2, 2, 489, 490, 9, 10, 2, 2, 490, 492, 5, 106, 54, 2, 491, 488, 3, 2, 2, 2, 492, 495, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 109, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 496, 497, 8, 56, 1, 2, 497, 498, 5, 108, 55, 2, 498, 504, 3, 2, 2, 2, 499, 500, 12, 3, 2, 2, 500, 501, 9, 11, 2, 2, 501, 503, 5, 108, 55, 2, 502, 499, 3, 2, 2, 2, 503, 506, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 111, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 507, 508, 8, 57, 1, 2, 508, 509, 5, 110, 56, 2, 509, 515, 3, 2, 2, 2, 510, 511, 12, 3, 2, 2, 511, 512, 9, 12, 2, 2, 512, 514, 5, 110, 56, 2, 513, 510, 3, 2, 2, 2, 514, 517, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 113, 3, 2, 2, 2, 517, 515, 3, 2, 2, 2, 518, 519, 8, 58, 1, 2, 519, 520, 5, 112, 57, 2, 520, 526, 3, 2, 2, 2, 521, 522, 12, 3, 2, 2, 522, 523, 9, 13, 2, 2, 523, 525, 5, 112, 57, 2, 524, 521, 3, 2, 2, 2, 525, 528, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 115, 3, 2, 2, 2, 528, 526, 3, 2, 2, 2, 529, 530, 8, 59, 1, 2, 530, 531, 5, 114, 58, 2, 531, 537, 3, 2, 2, 2, 532, 533, 12, 3, 2, 2, 533, 534, 7, 50, 2, 2, 534, 536, 5, 114, 58, 2, 535, 532, 3, 2, 2, 2, 536, 539, 3, 2, 2, 2, 537, 535, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 117, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 540, 541, 8, 60, 1, 2, 541, 542, 5, 116, 59, 2, 542, 548, 3, 2, 2, 2, 543, 544, 12, 3, 2, 2, 544, 545, 7, 51, 2, 2, 545, 547, 5, 116, 59, 2, 546, 543, 3, 2, 2, 2, 547, 550, 3, 2, 2, 2, 548, 546, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 119, 3, 2, 2, 2, 550, 548, 3, 2, 2, 2, 551, 559, 5, 118, 60, 2, 552, 553, 5, 118, 60, 2, 553, 554, 7, 33, 2, 2, 554, 555, 5, 120, 61, 2, 555, 556, 7, 34, 2, 2, 556, 557, 5, 120, 61, 2, 557, 559, 3, 2, 2, 2, 558, 551, 3, 2, 2, 2, 558, 552, 3, 2, 2, 2, 559, 121, 3, 2, 2, 2, 560, 566, 5, 120, 61, 2, 561, 562, 5, 82, 42, 2, 562, 563, 5, 124, 63, 2, 563, 564, 5, 122, 62, 2, 564, 566, 3, 2, 2, 2, 565, 560, 3, 2, 2, 2, 565, 561, 3, 2, 2, 2, 566, 123, 3, 2, 2, 2, 567, 568, 9, 14, 2, 2, 568, 125, 3, 2, 2, 2, 569, 574, 5, 122, 62, 2, 570, 571, 7, 31, 2, 2, 571, 573, 5, 122, 62, 2, 572, 570, 3, 2, 2, 2, 573, 576, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 127, 3, 2, 2, 2, 576, 574, 3, 2, 2, 2, 577, 581, 5, 130, 66, 2, 578, 581, 5, 132, 67, 2, 579, 581, 5, 134, 68, 2, 580, 577, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581, 129, 3, 2, 2, 2, 582, 583, 5, 136, 69, 2, 583, 131, 3, 2, 2, 2, 584, 585, 5, 136, 69, 2, 585, 586, 7, 61, 2, 2, 586, 587, 5, 136, 69, 2, 587, 588, 7, 63, 2, 2, 588, 133, 3, 2, 2, 2, 589, 590, 7, 27, 2, 2, 590, 591, 7, 35, 2, 2, 591, 592, 5, 136, 69, 2, 592, 593, 7, 36, 2, 2, 593, 135, 3, 2, 2, 2, 594, 595, 9, 15, 2, 2, 595, 137, 3, 2, 2, 2, 55, 139, 146, 153, 158, 165, 167, 173, 179, 195, 202, 217, 221, 230, 239, 249, 262, 267, 273, 277, 283, 289, 313, 325, 343, 351, 355, 360, 363, 368, 371, 381, 384, 396, 401, 406, 422, 424, 432, 446, 452, 458, 466, 483, 493, 504, 515, 526, 537, 548, 558, 565, 574, 580] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 85, 654, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 3, 2, 5, 2, 150, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 155, 10, 3, 13, 3, 14, 3, 156, 3, 4, 3, 4, 3, 5, 6, 5, 162, 10, 5, 13, 5, 14, 5, 163, 3, 6, 3, 6, 3, 6, 5, 6, 169, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 176, 10, 7, 5, 7, 178, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 184, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 190, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 206, 10, 13, 3, 14, 3, 14, 3, 14, 7, 14, 211, 10, 14, 12, 14, 14, 14, 214, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 228, 10, 17, 3, 18, 3, 18, 5, 18, 232, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 241, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 250, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 258, 10, 22, 12, 22, 14, 22, 261, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 273, 10, 23, 3, 24, 3, 24, 3, 24, 5, 24, 278, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 284, 10, 25, 3, 25, 3, 25, 5, 25, 288, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 294, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 300, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 324, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 336, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 7, 36, 352, 10, 36, 12, 36, 14, 36, 355, 11, 36, 3, 36, 3, 36, 3, 36, 7, 36, 360, 10, 36, 12, 36, 14, 36, 363, 11, 36, 3, 36, 5, 36, 366, 10, 36, 3, 37, 3, 37, 3, 37, 5, 37, 371, 10, 37, 3, 37, 5, 37, 374, 10, 37, 3, 38, 3, 38, 3, 38, 5, 38, 379, 10, 38, 3, 38, 5, 38, 382, 10, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 390, 10, 40, 12, 40, 14, 40, 393, 11, 40, 5, 40, 395, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 407, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 412, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 417, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 433, 10, 42, 12, 42, 14, 42, 436, 11, 42, 3, 43, 3, 43, 3, 43, 7, 43, 441, 10, 43, 12, 43, 14, 43, 444, 11, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 457, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 463, 10, 46, 3, 46, 3, 46, 3, 47, 3, 47, 5, 47, 469, 10, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 5, 49, 477, 10, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 494, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 502, 10, 55, 12, 55, 14, 55, 505, 11, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 7, 56, 513, 10, 56, 12, 56, 14, 56, 516, 11, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 525, 10, 57, 12, 57, 14, 57, 528, 11, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 538, 10, 59, 12, 59, 14, 59, 541, 11, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 549, 10, 60, 12, 60, 14, 60, 552, 11, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 7, 61, 560, 10, 61, 12, 61, 14, 61, 563, 11, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 571, 10, 62, 12, 62, 14, 62, 574, 11, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 582, 10, 63, 12, 63, 14, 63, 585, 11, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 593, 10, 64, 12, 64, 14, 64, 596, 11, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 604, 10, 65, 12, 65, 14, 65, 607, 11, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 616, 10, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 623, 10, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 7, 69, 630, 10, 69, 12, 69, 14, 69, 633, 11, 69, 3, 70, 3, 70, 3, 70, 5, 70, 638, 10, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 2, 2, 13, 82, 108, 110, 112, 116, 118, 120, 122, 124, 126, 128, 75, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 2, 17, 3, 2, 6, 7, 3, 2, 13, 14, 3, 2, 25, 26, 3, 2, 75, 76, 4, 2, 74, 74, 77, 77, 3, 2, 28, 30, 4, 2, 43, 43, 45, 45, 5, 2, 42, 42, 44, 44, 52, 52, 3, 2, 46, 49, 4, 2, 42, 42, 44, 44, 3, 2, 69, 71, 3, 2, 61, 64, 3, 2, 59, 60, 3, 2, 53, 58, 4, 2, 28, 30, 73, 73, 2, 653, 2, 149, 3, 2, 2, 2, 4, 154, 3, 2, 2, 2, 6, 158, 3, 2, 2, 2, 8, 161, 3, 2, 2, 2, 10, 168, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 179, 3, 2, 2, 2, 16, 191, 3, 2, 2, 2, 18, 194, 3, 2, 2, 2, 20, 196, 3, 2, 2, 2, 22, 198, 3, 2, 2, 2, 24, 200, 3, 2, 2, 2, 26, 207, 3, 2, 2, 2, 28, 215, 3, 2, 2, 2, 30, 219, 3, 2, 2, 2, 32, 227, 3, 2, 2, 2, 34, 229, 3, 2, 2, 2, 36, 235, 3, 2, 2, 2, 38, 240, 3, 2, 2, 2, 40, 242, 3, 2, 2, 2, 42, 251, 3, 2, 2, 2, 44, 272, 3, 2, 2, 2, 46, 277, 3, 2, 2, 2, 48, 279, 3, 2, 2, 2, 50, 304, 3, 2, 2, 2, 52, 310, 3, 2, 2, 2, 54, 318, 3, 2, 2, 2, 56, 321, 3, 2, 2, 2, 58, 335, 3, 2, 2, 2, 60, 337, 3, 2, 2, 2, 62, 341, 3, 2, 2, 2, 64, 343, 3, 2, 2, 2, 66, 345, 3, 2, 2, 2, 68, 347, 3, 2, 2, 2, 70, 365, 3, 2, 2, 2, 72, 373, 3, 2, 2, 2, 74, 381, 3, 2, 2, 2, 76, 383, 3, 2, 2, 2, 78, 385, 3, 2, 2, 2, 80, 398, 3, 2, 2, 2, 82, 411, 3, 2, 2, 2, 84, 437, 3, 2, 2, 2, 86, 445, 3, 2, 2, 2, 88, 448, 3, 2, 2, 2, 90, 452, 3, 2, 2, 2, 92, 468, 3, 2, 2, 2, 94, 470, 3, 2, 2, 2, 96, 476, 3, 2, 2, 2, 98, 478, 3, 2, 2, 2, 100, 481, 3, 2, 2, 2, 102, 484, 3, 2, 2, 2, 104, 486, 3, 2, 2, 2, 106, 493, 3, 2, 2, 2, 108, 495, 3, 2, 2, 2, 110, 506, 3, 2, 2, 2, 112, 517, 3, 2, 2, 2, 114, 529, 3, 2, 2, 2, 116, 531, 3, 2, 2, 2, 118, 542, 3, 2, 2, 2, 120, 553, 3, 2, 2, 2, 122, 564, 3, 2, 2, 2, 124, 575, 3, 2, 2, 2, 126, 586, 3, 2, 2, 2, 128, 597, 3, 2, 2, 2, 130, 615, 3, 2, 2, 2, 132, 622, 3, 2, 2, 2, 134, 624, 3, 2, 2, 2, 136, 626, 3, 2, 2, 2, 138, 637, 3, 2, 2, 2, 140, 639, 3, 2, 2, 2, 142, 641, 3, 2, 2, 2, 144, 646, 3, 2, 2, 2, 146, 651, 3, 2, 2, 2, 148, 150, 5, 4, 3, 2, 149, 148, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 152, 7, 2, 2, 3, 152, 3, 3, 2, 2, 2, 153, 155, 5, 6, 4, 2, 154, 153, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 5, 3, 2, 2, 2, 158, 159, 5, 8, 5, 2, 159, 7, 3, 2, 2, 2, 160, 162, 5, 10, 6, 2, 161, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 163, 164, 3, 2, 2, 2, 164, 9, 3, 2, 2, 2, 165, 169, 5, 32, 17, 2, 166, 169, 5, 12, 7, 2, 167, 169, 7, 32, 2, 2, 168, 165, 3, 2, 2, 2, 168, 166, 3, 2, 2, 2, 168, 167, 3, 2, 2, 2, 169, 11, 3, 2, 2, 2, 170, 171, 5, 16, 9, 2, 171, 172, 7, 32, 2, 2, 172, 178, 3, 2, 2, 2, 173, 175, 5, 14, 8, 2, 174, 176, 7, 32, 2, 2, 175, 174, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 178, 3, 2, 2, 2, 177, 170, 3, 2, 2, 2, 177, 173, 3, 2, 2, 2, 178, 13, 3, 2, 2, 2, 179, 180, 7, 21, 2, 2, 180, 181, 5, 20, 11, 2, 181, 183, 7, 35, 2, 2, 182, 184, 5, 26, 14, 2, 183, 182, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 186, 7, 36, 2, 2, 186, 187, 7, 24, 2, 2, 187, 189, 5, 138, 70, 2, 188, 190, 5, 34, 18, 2, 189, 188, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 15, 3, 2, 2, 2, 191, 192, 5, 18, 10, 2, 192, 193, 5, 24, 13, 2, 193, 17, 3, 2, 2, 2, 194, 195, 9, 2, 2, 2, 195, 19, 3, 2, 2, 2, 196, 197, 5, 22, 12, 2, 197, 21, 3, 2, 2, 2, 198, 199, 7, 73, 2, 2, 199, 23, 3, 2, 2, 2, 200, 201, 5, 20, 11, 2, 201, 202, 7, 34, 2, 2, 202, 205, 5, 138, 70, 2, 203, 204, 7, 53, 2, 2, 204, 206, 5, 30, 16, 2, 205, 203, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 25, 3, 2, 2, 2, 207, 212, 5, 28, 15, 2, 208, 209, 7, 31, 2, 2, 209, 211, 5, 28, 15, 2, 210, 208, 3, 2, 2, 2, 211, 214, 3, 2, 2, 2, 212, 210, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 27, 3, 2, 2, 2, 214, 212, 3, 2, 2, 2, 215, 216, 5, 20, 11, 2, 216, 217, 7, 34, 2, 2, 217, 218, 5, 138, 70, 2, 218, 29, 3, 2, 2, 2, 219, 220, 5, 132, 67, 2, 220, 31, 3, 2, 2, 2, 221, 228, 5, 34, 18, 2, 222, 228, 5, 36, 19, 2, 223, 228, 5, 38, 20, 2, 224, 228, 5, 46, 24, 2, 225, 228, 5, 54, 28, 2, 226, 228, 5, 56, 29, 2, 227, 221, 3, 2, 2, 2, 227, 222, 3, 2, 2, 2, 227, 223, 3, 2, 2, 2, 227, 224, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 227, 226, 3, 2, 2, 2, 228, 33, 3, 2, 2, 2, 229, 231, 7, 40, 2, 2, 230, 232, 5, 8, 5, 2, 231, 230, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 234, 7, 41, 2, 2, 234, 35, 3, 2, 2, 2, 235, 236, 5, 136, 69, 2, 236, 237, 7, 32, 2, 2, 237, 37, 3, 2, 2, 2, 238, 241, 5, 40, 21, 2, 239, 241, 5, 42, 22, 2, 240, 238, 3, 2, 2, 2, 240, 239, 3, 2, 2, 2, 241, 39, 3, 2, 2, 2, 242, 243, 7, 17, 2, 2, 243, 244, 7, 35, 2, 2, 244, 245, 5, 136, 69, 2, 245, 246, 7, 36, 2, 2, 246, 249, 5, 32, 17, 2, 247, 248, 7, 18, 2, 2, 248, 250, 5, 32, 17, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 41, 3, 2, 2, 2, 251, 252, 7, 10, 2, 2, 252, 253, 7, 35, 2, 2, 253, 254, 5, 136, 69, 2, 254, 255, 7, 36, 2, 2, 255, 259, 7, 40, 2, 2, 256, 258, 5, 44, 23, 2, 257, 256, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 262, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 262, 263, 7, 41, 2, 2, 263, 43, 3, 2, 2, 2, 264, 265, 7, 11, 2, 2, 265, 266, 5, 136, 69, 2, 266, 267, 7, 34, 2, 2, 267, 268, 5, 32, 17, 2, 268, 273, 3, 2, 2, 2, 269, 270, 7, 12, 2, 2, 270, 271, 7, 34, 2, 2, 271, 273, 5, 32, 17, 2, 272, 264, 3, 2, 2, 2, 272, 269, 3, 2, 2, 2, 273, 45, 3, 2, 2, 2, 274, 278, 5, 48, 25, 2, 275, 278, 5, 50, 26, 2, 276, 278, 5, 52, 27, 2, 277, 274, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 276, 3, 2, 2, 2, 278, 47, 3, 2, 2, 2, 279, 280, 7, 19, 2, 2, 280, 287, 7, 35, 2, 2, 281, 284, 5, 16, 9, 2, 282, 284, 5, 136, 69, 2, 283, 281, 3, 2, 2, 2, 283, 282, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 286, 8, 25, 1, 2, 286, 288, 3, 2, 2, 2, 287, 283, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 293, 7, 32, 2, 2, 290, 291, 5, 136, 69, 2, 291, 292, 8, 25, 1, 2, 292, 294, 3, 2, 2, 2, 293, 290, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 299, 7, 32, 2, 2, 296, 297, 5, 136, 69, 2, 297, 298, 8, 25, 1, 2, 298, 300, 3, 2, 2, 2, 299, 296, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 7, 36, 2, 2, 302, 303, 5, 32, 17, 2, 303, 49, 3, 2, 2, 2, 304, 305, 7, 16, 2, 2, 305, 306, 7, 35, 2, 2, 306, 307, 5, 136, 69, 2, 307, 308, 7, 36, 2, 2, 308, 309, 5, 32, 17, 2, 309, 51, 3, 2, 2, 2, 310, 311, 7, 15, 2, 2, 311, 312, 5, 32, 17, 2, 312, 313, 7, 16, 2, 2, 313, 314, 7, 35, 2, 2, 314, 315, 5, 136, 69, 2, 315, 316, 7, 36, 2, 2, 316, 317, 7, 32, 2, 2, 317, 53, 3, 2, 2, 2, 318, 319, 9, 3, 2, 2, 319, 320, 7, 32, 2, 2, 320, 55, 3, 2, 2, 2, 321, 323, 7, 22, 2, 2, 322, 324, 5, 136, 69, 2, 323, 322, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 326, 7, 32, 2, 2, 326, 57, 3, 2, 2, 2, 327, 336, 5, 60, 31, 2, 328, 336, 5, 62, 32, 2, 329, 336, 5, 64, 33, 2, 330, 336, 5, 68, 35, 2, 331, 336, 5, 70, 36, 2, 332, 336, 5, 76, 39, 2, 333, 336, 5, 78, 40, 2, 334, 336, 5, 80, 41, 2, 335, 327, 3, 2, 2, 2, 335, 328, 3, 2, 2, 2, 335, 329, 3, 2, 2, 2, 335, 330, 3, 2, 2, 2, 335, 331, 3, 2, 2, 2, 335, 332, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 335, 334, 3, 2, 2, 2, 336, 59, 3, 2, 2, 2, 337, 338, 7, 35, 2, 2, 338, 339, 5, 136, 69, 2, 339, 340, 7, 36, 2, 2, 340, 61, 3, 2, 2, 2, 341, 342, 9, 4, 2, 2, 342, 63, 3, 2, 2, 2, 343, 344, 5, 66, 34, 2, 344, 65, 3, 2, 2, 2, 345, 346, 7, 73, 2, 2, 346, 67, 3, 2, 2, 2, 347, 348, 9, 5, 2, 2, 348, 69, 3, 2, 2, 2, 349, 353, 7, 80, 2, 2, 350, 352, 5, 72, 37, 2, 351, 350, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 356, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 366, 7, 82, 2, 2, 357, 361, 7, 81, 2, 2, 358, 360, 5, 74, 38, 2, 359, 358, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 366, 7, 84, 2, 2, 365, 349, 3, 2, 2, 2, 365, 357, 3, 2, 2, 2, 366, 71, 3, 2, 2, 2, 367, 374, 7, 83, 2, 2, 368, 370, 7, 3, 2, 2, 369, 371, 5, 136, 69, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 374, 7, 39, 2, 2, 373, 367, 3, 2, 2, 2, 373, 368, 3, 2, 2, 2, 374, 73, 3, 2, 2, 2, 375, 382, 7, 85, 2, 2, 376, 378, 7, 3, 2, 2, 377, 379, 5, 136, 69, 2, 378, 377, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 7, 39, 2, 2, 381, 375, 3, 2, 2, 2, 381, 376, 3, 2, 2, 2, 382, 75, 3, 2, 2, 2, 383, 384, 9, 6, 2, 2, 384, 77, 3, 2, 2, 2, 385, 394, 7, 37, 2, 2, 386, 391, 5, 136, 69, 2, 387, 388, 7, 31, 2, 2, 388, 390, 5, 136, 69, 2, 389, 387, 3, 2, 2, 2, 390, 393, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 395, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 394, 386, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 7, 38, 2, 2, 397, 79, 3, 2, 2, 2, 398, 399, 9, 7, 2, 2, 399, 81, 3, 2, 2, 2, 400, 401, 8, 42, 1, 2, 401, 412, 5, 58, 30, 2, 402, 403, 7, 23, 2, 2, 403, 404, 5, 82, 42, 2, 404, 406, 7, 35, 2, 2, 405, 407, 5, 84, 43, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 36, 2, 2, 409, 410, 8, 42, 1, 2, 410, 412, 3, 2, 2, 2, 411, 400, 3, 2, 2, 2, 411, 402, 3, 2, 2, 2, 412, 434, 3, 2, 2, 2, 413, 414, 12, 7, 2, 2, 414, 416, 7, 35, 2, 2, 415, 417, 5, 84, 43, 2, 416, 415, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 7, 36, 2, 2, 419, 433, 8, 42, 1, 2, 420, 421, 12, 5, 2, 2, 421, 422, 5, 86, 44, 2, 422, 423, 8, 42, 1, 2, 423, 433, 3, 2, 2, 2, 424, 425, 12, 4, 2, 2, 425, 426, 5, 88, 45, 2, 426, 427, 8, 42, 1, 2, 427, 433, 3, 2, 2, 2, 428, 429, 12, 3, 2, 2, 429, 430, 5, 90, 46, 2, 430, 431, 8, 42, 1, 2, 431, 433, 3, 2, 2, 2, 432, 413, 3, 2, 2, 2, 432, 420, 3, 2, 2, 2, 432, 424, 3, 2, 2, 2, 432, 428, 3, 2, 2, 2, 433, 436, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 83, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 442, 5, 132, 67, 2, 438, 439, 7, 31, 2, 2, 439, 441, 5, 132, 67, 2, 440, 438, 3, 2, 2, 2, 441, 444, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 85, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 446, 7, 72, 2, 2, 446, 447, 5, 66, 34, 2, 447, 87, 3, 2, 2, 2, 448, 449, 7, 37, 2, 2, 449, 450, 5, 136, 69, 2, 450, 451, 7, 38, 2, 2, 451, 89, 3, 2, 2, 2, 452, 456, 7, 37, 2, 2, 453, 454, 5, 136, 69, 2, 454, 455, 8, 46, 1, 2, 455, 457, 3, 2, 2, 2, 456, 453, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 462, 7, 34, 2, 2, 459, 460, 5, 136, 69, 2, 460, 461, 8, 46, 1, 2, 461, 463, 3, 2, 2, 2, 462, 459, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 465, 7, 38, 2, 2, 465, 91, 3, 2, 2, 2, 466, 469, 5, 82, 42, 2, 467, 469, 5, 94, 48, 2, 468, 466, 3, 2, 2, 2, 468, 467, 3, 2, 2, 2, 469, 93, 3, 2, 2, 2, 470, 471, 5, 82, 42, 2, 471, 472, 5, 102, 52, 2, 472, 95, 3, 2, 2, 2, 473, 477, 5, 92, 47, 2, 474, 477, 5, 98, 50, 2, 475, 477, 5, 100, 51, 2, 476, 473, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 475, 3, 2, 2, 2, 477, 97, 3, 2, 2, 2, 478, 479, 5, 102, 52, 2, 479, 480, 5, 92, 47, 2, 480, 99, 3, 2, 2, 2, 481, 482, 5, 104, 53, 2, 482, 483, 5, 92, 47, 2, 483, 101, 3, 2, 2, 2, 484, 485, 9, 8, 2, 2, 485, 103, 3, 2, 2, 2, 486, 487, 9, 9, 2, 2, 487, 105, 3, 2, 2, 2, 488, 494, 5, 96, 49, 2, 489, 490, 5, 96, 49, 2, 490, 491, 7, 8, 2, 2, 491, 492, 5, 138, 70, 2, 492, 494, 3, 2, 2, 2, 493, 488, 3, 2, 2, 2, 493, 489, 3, 2, 2, 2, 494, 107, 3, 2, 2, 2, 495, 496, 8, 55, 1, 2, 496, 497, 5, 106, 54, 2, 497, 503, 3, 2, 2, 2, 498, 499, 12, 3, 2, 2, 499, 500, 9, 10, 2, 2, 500, 502, 5, 106, 54, 2, 501, 498, 3, 2, 2, 2, 502, 505, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 109, 3, 2, 2, 2, 505, 503, 3, 2, 2, 2, 506, 507, 8, 56, 1, 2, 507, 508, 5, 108, 55, 2, 508, 514, 3, 2, 2, 2, 509, 510, 12, 3, 2, 2, 510, 511, 9, 11, 2, 2, 511, 513, 5, 108, 55, 2, 512, 509, 3, 2, 2, 2, 513, 516, 3, 2, 2, 2, 514, 512, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 111, 3, 2, 2, 2, 516, 514, 3, 2, 2, 2, 517, 518, 8, 57, 1, 2, 518, 519, 5, 110, 56, 2, 519, 526, 3, 2, 2, 2, 520, 521, 12, 3, 2, 2, 521, 522, 5, 114, 58, 2, 522, 523, 5, 120, 61, 2, 523, 525, 3, 2, 2, 2, 524, 520, 3, 2, 2, 2, 525, 528, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 113, 3, 2, 2, 2, 528, 526, 3, 2, 2, 2, 529, 530, 9, 12, 2, 2, 530, 115, 3, 2, 2, 2, 531, 532, 8, 59, 1, 2, 532, 533, 5, 112, 57, 2, 533, 539, 3, 2, 2, 2, 534, 535, 12, 3, 2, 2, 535, 536, 9, 13, 2, 2, 536, 538, 5, 112, 57, 2, 537, 534, 3, 2, 2, 2, 538, 541, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 117, 3, 2, 2, 2, 541, 539, 3, 2, 2, 2, 542, 543, 8, 60, 1, 2, 543, 544, 5, 116, 59, 2, 544, 550, 3, 2, 2, 2, 545, 546, 12, 3, 2, 2, 546, 547, 9, 14, 2, 2, 547, 549, 5, 116, 59, 2, 548, 545, 3, 2, 2, 2, 549, 552, 3, 2, 2, 2, 550, 548, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 119, 3, 2, 2, 2, 552, 550, 3, 2, 2, 2, 553, 554, 8, 61, 1, 2, 554, 555, 5, 118, 60, 2, 555, 561, 3, 2, 2, 2, 556, 557, 12, 3, 2, 2, 557, 558, 7, 65, 2, 2, 558, 560, 5, 118, 60, 2, 559, 556, 3, 2, 2, 2, 560, 563, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 121, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 564, 565, 8, 62, 1, 2, 565, 566, 5, 120, 61, 2, 566, 572, 3, 2, 2, 2, 567, 568, 12, 3, 2, 2, 568, 569, 7, 67, 2, 2, 569, 571, 5, 120, 61, 2, 570, 567, 3, 2, 2, 2, 571, 574, 3, 2, 2, 2, 572, 570, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 123, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 575, 576, 8, 63, 1, 2, 576, 577, 5, 122, 62, 2, 577, 583, 3, 2, 2, 2, 578, 579, 12, 3, 2, 2, 579, 580, 7, 66, 2, 2, 580, 582, 5, 122, 62, 2, 581, 578, 3, 2, 2, 2, 582, 585, 3, 2, 2, 2, 583, 581, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 125, 3, 2, 2, 2, 585, 583, 3, 2, 2, 2, 586, 587, 8, 64, 1, 2, 587, 588, 5, 124, 63, 2, 588, 594, 3, 2, 2, 2, 589, 590, 12, 3, 2, 2, 590, 591, 7, 50, 2, 2, 591, 593, 5, 124, 63, 2, 592, 589, 3, 2, 2, 2, 593, 596, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 127, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 597, 598, 8, 65, 1, 2, 598, 599, 5, 126, 64, 2, 599, 605, 3, 2, 2, 2, 600, 601, 12, 3, 2, 2, 601, 602, 7, 51, 2, 2, 602, 604, 5, 126, 64, 2, 603, 600, 3, 2, 2, 2, 604, 607, 3, 2, 2, 2, 605, 603, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 129, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 608, 616, 5, 128, 65, 2, 609, 610, 5, 128, 65, 2, 610, 611, 7, 33, 2, 2, 611, 612, 5, 130, 66, 2, 612, 613, 7, 34, 2, 2, 613, 614, 5, 130, 66, 2, 614, 616, 3, 2, 2, 2, 615, 608, 3, 2, 2, 2, 615, 609, 3, 2, 2, 2, 616, 131, 3, 2, 2, 2, 617, 623, 5, 130, 66, 2, 618, 619, 5, 82, 42, 2, 619, 620, 5, 134, 68, 2, 620, 621, 5, 132, 67, 2, 621, 623, 3, 2, 2, 2, 622, 617, 3, 2, 2, 2, 622, 618, 3, 2, 2, 2, 623, 133, 3, 2, 2, 2, 624, 625, 9, 15, 2, 2, 625, 135, 3, 2, 2, 2, 626, 631, 5, 132, 67, 2, 627, 628, 7, 31, 2, 2, 628, 630, 5, 132, 67, 2, 629, 627, 3, 2, 2, 2, 630, 633, 3, 2, 2, 2, 631, 629, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 137, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, 634, 638, 5, 140, 71, 2, 635, 638, 5, 142, 72, 2, 636, 638, 5, 144, 73, 2, 637, 634, 3, 2, 2, 2, 637, 635, 3, 2, 2, 2, 637, 636, 3, 2, 2, 2, 638, 139, 3, 2, 2, 2, 639, 640, 5, 146, 74, 2, 640, 141, 3, 2, 2, 2, 641, 642, 5, 146, 74, 2, 642, 643, 7, 61, 2, 2, 643, 644, 5, 146, 74, 2, 644, 645, 7, 63, 2, 2, 645, 143, 3, 2, 2, 2, 646, 647, 7, 27, 2, 2, 647, 648, 7, 35, 2, 2, 648, 649, 5, 146, 74, 2, 649, 650, 7, 36, 2, 2, 650, 145, 3, 2, 2, 2, 651, 652, 9, 16, 2, 2, 652, 147, 3, 2, 2, 2, 59, 149, 156, 163, 168, 175, 177, 183, 189, 205, 212, 227, 231, 240, 249, 259, 272, 277, 283, 287, 293, 299, 323, 335, 353, 361, 365, 370, 373, 378, 381, 391, 394, 406, 411, 416, 432, 434, 442, 456, 462, 468, 476, 493, 503, 514, 526, 539, 550, 561, 572, 583, 594, 605, 615, 622, 631, 637] \ No newline at end of file diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.tokens b/kipper/core/src/compiler/parser/antlr/KipperParser.tokens index a8e8b39b6..4623d5795 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.tokens +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.tokens @@ -60,20 +60,27 @@ Less=59 LessEqual=60 Greater=61 GreaterEqual=62 -Dot=63 -Identifier=64 -IntegerConstant=65 -SingleQuoteStringLiteral=66 -DoubleQuoteStringLiteral=67 -FloatingConstant=68 -Whitespace=69 -Newline=70 -FStringSingleQuoteStart=71 -FStringDoubleQuoteStart=72 -FStringSingleQuoteEnd=73 -FStringSingleQuoteAtom=74 -FStringDoubleQuoteEnd=75 -FStringDoubleQuoteAtom=76 +BitwiseAnd=63 +BitwiseOr=64 +BitwiseXor=65 +BitwiseNot=66 +BitwiseZeroFillLeftShift=67 +BitwiseSignedRightShift=68 +BitwiseZeroFillRightShift=69 +Dot=70 +Identifier=71 +IntegerConstant=72 +SingleQuoteStringLiteral=73 +DoubleQuoteStringLiteral=74 +FloatingConstant=75 +Whitespace=76 +Newline=77 +FStringSingleQuoteStart=78 +FStringDoubleQuoteStart=79 +FStringSingleQuoteEnd=80 +FStringSingleQuoteAtom=81 +FStringDoubleQuoteEnd=82 +FStringDoubleQuoteAtom=83 'const'=4 'var'=5 'as'=6 @@ -132,4 +139,11 @@ FStringDoubleQuoteAtom=76 '<='=60 '>'=61 '>='=62 -'.'=63 +'&'=63 +'|'=64 +'^'=65 +'~'=66 +'<<'=67 +'>>'=68 +'>>>'=69 +'.'=70 diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.ts b/kipper/core/src/compiler/parser/antlr/KipperParser.ts index c09d9ebde..875eac453 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.ts @@ -1,8 +1,10 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT -// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax -// kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + + // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax + // kind values. + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; @@ -29,6 +31,7 @@ import * as Utils from "antlr4ts/misc/Utils"; import { KipperParserListener } from "./KipperParserListener"; import { KipperParserVisitor } from "./KipperParserVisitor"; + export class KipperParser extends Parser { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -92,20 +95,27 @@ export class KipperParser extends Parser { public static readonly LessEqual = 60; public static readonly Greater = 61; public static readonly GreaterEqual = 62; - public static readonly Dot = 63; - public static readonly Identifier = 64; - public static readonly IntegerConstant = 65; - public static readonly SingleQuoteStringLiteral = 66; - public static readonly DoubleQuoteStringLiteral = 67; - public static readonly FloatingConstant = 68; - public static readonly Whitespace = 69; - public static readonly Newline = 70; - public static readonly FStringSingleQuoteStart = 71; - public static readonly FStringDoubleQuoteStart = 72; - public static readonly FStringSingleQuoteEnd = 73; - public static readonly FStringSingleQuoteAtom = 74; - public static readonly FStringDoubleQuoteEnd = 75; - public static readonly FStringDoubleQuoteAtom = 76; + public static readonly BitwiseAnd = 63; + public static readonly BitwiseOr = 64; + public static readonly BitwiseXor = 65; + public static readonly BitwiseNot = 66; + public static readonly BitwiseZeroFillLeftShift = 67; + public static readonly BitwiseSignedRightShift = 68; + public static readonly BitwiseZeroFillRightShift = 69; + public static readonly Dot = 70; + public static readonly Identifier = 71; + public static readonly IntegerConstant = 72; + public static readonly SingleQuoteStringLiteral = 73; + public static readonly DoubleQuoteStringLiteral = 74; + public static readonly FloatingConstant = 75; + public static readonly Whitespace = 76; + public static readonly Newline = 77; + public static readonly FStringSingleQuoteStart = 78; + public static readonly FStringDoubleQuoteStart = 79; + public static readonly FStringSingleQuoteEnd = 80; + public static readonly FStringSingleQuoteAtom = 81; + public static readonly FStringDoubleQuoteEnd = 82; + public static readonly FStringDoubleQuoteAtom = 83; public static readonly RULE_compilationUnit = 0; public static readonly RULE_translationUnit = 1; public static readonly RULE_externalItem = 2; @@ -161,241 +171,79 @@ export class KipperParser extends Parser { public static readonly RULE_castOrConvertExpression = 52; public static readonly RULE_multiplicativeExpression = 53; public static readonly RULE_additiveExpression = 54; - public static readonly RULE_relationalExpression = 55; - public static readonly RULE_equalityExpression = 56; - public static readonly RULE_logicalAndExpression = 57; - public static readonly RULE_logicalOrExpression = 58; - public static readonly RULE_conditionalExpression = 59; - public static readonly RULE_assignmentExpression = 60; - public static readonly RULE_assignmentOperator = 61; - public static readonly RULE_expression = 62; - public static readonly RULE_typeSpecifierExpression = 63; - public static readonly RULE_identifierTypeSpecifierExpression = 64; - public static readonly RULE_genericTypeSpecifierExpression = 65; - public static readonly RULE_typeofTypeSpecifierExpression = 66; - public static readonly RULE_typeSpecifierIdentifier = 67; + public static readonly RULE_bitwiseShiftExpression = 55; + public static readonly RULE_bitwiseShiftOperators = 56; + public static readonly RULE_relationalExpression = 57; + public static readonly RULE_equalityExpression = 58; + public static readonly RULE_bitwiseAndExpression = 59; + public static readonly RULE_bitwiseXorExpression = 60; + public static readonly RULE_bitwiseOrExpression = 61; + public static readonly RULE_logicalAndExpression = 62; + public static readonly RULE_logicalOrExpression = 63; + public static readonly RULE_conditionalExpression = 64; + public static readonly RULE_assignmentExpression = 65; + public static readonly RULE_assignmentOperator = 66; + public static readonly RULE_expression = 67; + public static readonly RULE_typeSpecifierExpression = 68; + public static readonly RULE_identifierTypeSpecifierExpression = 69; + public static readonly RULE_genericTypeSpecifierExpression = 70; + public static readonly RULE_typeofTypeSpecifierExpression = 71; + public static readonly RULE_typeSpecifierIdentifier = 72; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ - "compilationUnit", - "translationUnit", - "externalItem", - "blockItemList", - "blockItem", - "declaration", - "functionDeclaration", - "variableDeclaration", - "storageTypeSpecifier", - "declarator", - "directDeclarator", - "initDeclarator", - "parameterList", - "parameterDeclaration", - "initializer", - "statement", - "compoundStatement", - "expressionStatement", - "selectionStatement", - "ifStatement", - "switchStatement", - "switchLabeledStatement", - "iterationStatement", - "forLoopIterationStatement", - "whileLoopIterationStatement", - "doWhileLoopIterationStatement", - "jumpStatement", - "returnStatement", - "primaryExpression", - "tangledPrimaryExpression", - "boolPrimaryExpression", - "identifierPrimaryExpression", - "identifier", - "stringPrimaryExpression", - "fStringPrimaryExpression", - "fStringSingleQuoteAtom", - "fStringDoubleQuoteAtom", - "numberPrimaryExpression", - "arrayPrimaryExpression", - "voidOrNullOrUndefinedPrimaryExpression", - "computedPrimaryExpression", - "argumentExpressionList", - "dotNotation", - "bracketNotation", - "sliceNotation", - "postfixExpression", - "incrementOrDecrementPostfixExpression", - "unaryExpression", - "incrementOrDecrementUnaryExpression", - "operatorModifiedUnaryExpression", - "incrementOrDecrementOperator", - "unaryOperator", - "castOrConvertExpression", - "multiplicativeExpression", - "additiveExpression", - "relationalExpression", - "equalityExpression", - "logicalAndExpression", - "logicalOrExpression", - "conditionalExpression", - "assignmentExpression", - "assignmentOperator", - "expression", - "typeSpecifierExpression", - "identifierTypeSpecifierExpression", - "genericTypeSpecifierExpression", - "typeofTypeSpecifierExpression", - "typeSpecifierIdentifier", + "compilationUnit", "translationUnit", "externalItem", "blockItemList", + "blockItem", "declaration", "functionDeclaration", "variableDeclaration", + "storageTypeSpecifier", "declarator", "directDeclarator", "initDeclarator", + "parameterList", "parameterDeclaration", "initializer", "statement", "compoundStatement", + "expressionStatement", "selectionStatement", "ifStatement", "switchStatement", + "switchLabeledStatement", "iterationStatement", "forLoopIterationStatement", + "whileLoopIterationStatement", "doWhileLoopIterationStatement", "jumpStatement", + "returnStatement", "primaryExpression", "tangledPrimaryExpression", "boolPrimaryExpression", + "identifierPrimaryExpression", "identifier", "stringPrimaryExpression", + "fStringPrimaryExpression", "fStringSingleQuoteAtom", "fStringDoubleQuoteAtom", + "numberPrimaryExpression", "arrayPrimaryExpression", "voidOrNullOrUndefinedPrimaryExpression", + "computedPrimaryExpression", "argumentExpressionList", "dotNotation", + "bracketNotation", "sliceNotation", "postfixExpression", "incrementOrDecrementPostfixExpression", + "unaryExpression", "incrementOrDecrementUnaryExpression", "operatorModifiedUnaryExpression", + "incrementOrDecrementOperator", "unaryOperator", "castOrConvertExpression", + "multiplicativeExpression", "additiveExpression", "bitwiseShiftExpression", + "bitwiseShiftOperators", "relationalExpression", "equalityExpression", + "bitwiseAndExpression", "bitwiseXorExpression", "bitwiseOrExpression", + "logicalAndExpression", "logicalOrExpression", "conditionalExpression", + "assignmentExpression", "assignmentOperator", "expression", "typeSpecifierExpression", + "identifierTypeSpecifierExpression", "genericTypeSpecifierExpression", + "typeofTypeSpecifierExpression", "typeSpecifierIdentifier", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, - undefined, - undefined, - undefined, - "'const'", - "'var'", - "'as'", - "'...'", - "'switch'", - "'case'", - "'default'", - "'break'", - "'continue'", - "'do'", - "'while'", - "'if'", - "'else'", - "'for'", - "'enum'", - "'def'", - "'return'", - "'call'", - "'->'", - "'true'", - "'false'", - "'typeof'", - "'void'", - "'null'", - "'undefined'", - "','", - "';'", - "'?'", - "':'", - "'('", - "')'", - "'['", - "']'", - undefined, - "'{'", - "'}'", - "'+'", - "'++'", - "'-'", - "'--'", - "'*'", - "'/'", - "'%'", - "'**'", - "'&&'", - "'||'", - "'!'", - "'='", - "'+='", - "'-='", - "'*='", - "'/='", - "'%='", - "'=='", - "'!='", - "'<'", - "'<='", - "'>'", - "'>='", - "'.'", + undefined, undefined, undefined, undefined, "'const'", "'var'", "'as'", + "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", "'do'", + "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", "'call'", + "'->'", "'true'", "'false'", "'typeof'", "'void'", "'null'", "'undefined'", + "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", + "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", + "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", + "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", + "'>>'", "'>>>'", "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, - "FStringExpStart", - "BlockComment", - "LineComment", - "Const", - "Var", - "As", - "Spread", - "Switch", - "Case", - "Default", - "Break", - "Continue", - "Do", - "While", - "If", - "Else", - "For", - "Enum", - "DefFunc", - "Return", - "CallFunc", - "RetIndicator", - "True", - "False", - "Typeof", - "Void", - "Null", - "Undefined", - "Comma", - "SemiColon", - "QuestionMark", - "Colon", - "LeftParen", - "RightParen", - "LeftBracket", - "RightBracket", - "FStringExpEnd", - "LeftBrace", - "RightBrace", - "Plus", - "PlusPlus", - "Minus", - "MinusMinus", - "Star", - "Div", - "Mod", - "PowerTo", - "AndAnd", - "OrOr", - "Not", - "Assign", - "PlusAssign", - "MinusAssign", - "StarAssign", - "DivAssign", - "ModAssign", - "Equal", - "NotEqual", - "Less", - "LessEqual", - "Greater", - "GreaterEqual", - "Dot", - "Identifier", - "IntegerConstant", - "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", - "FloatingConstant", - "Whitespace", - "Newline", - "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", - "FStringSingleQuoteEnd", - "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", - "FStringDoubleQuoteAtom", + undefined, "FStringExpStart", "BlockComment", "LineComment", "Const", + "Var", "As", "Spread", "Switch", "Case", "Default", "Break", "Continue", + "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", + "RetIndicator", "True", "False", "Typeof", "Void", "Null", "Undefined", + "Comma", "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", + "LeftBracket", "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", + "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", + "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", + "DivAssign", "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", + "GreaterEqual", "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", + "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", + "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", + "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( - KipperParser._LITERAL_NAMES, - KipperParser._SYMBOLIC_NAMES, - [], - ); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperParser._LITERAL_NAMES, KipperParser._SYMBOLIC_NAMES, []); // @Override // @NotNull @@ -405,19 +253,13 @@ export class KipperParser extends Parser { // tslint:enable:no-trailing-whitespace // @Override - public get grammarFileName(): string { - return "KipperParser.g4"; - } + public get grammarFileName(): string { return "KipperParser.g4"; } // @Override - public get ruleNames(): string[] { - return KipperParser.ruleNames; - } + public get ruleNames(): string[] { return KipperParser.ruleNames; } // @Override - public get serializedATN(): string { - return KipperParser._serializedATN; - } + public get serializedATN(): string { return KipperParser._serializedATN; } protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { return new FailedPredicateException(this, predicate, message); @@ -435,63 +277,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 137; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.Switch) | - (1 << KipperParser.Break) | - (1 << KipperParser.Continue) | - (1 << KipperParser.Do) | - (1 << KipperParser.While) | - (1 << KipperParser.If) | - (1 << KipperParser.For) | - (1 << KipperParser.DefFunc) | - (1 << KipperParser.Return) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null) | - (1 << KipperParser.Undefined) | - (1 << KipperParser.SemiColon))) !== - 0) || - (((_la - 33) & ~0x1f) === 0 && - ((1 << (_la - 33)) & - ((1 << (KipperParser.LeftParen - 33)) | - (1 << (KipperParser.LeftBracket - 33)) | - (1 << (KipperParser.LeftBrace - 33)) | - (1 << (KipperParser.Plus - 33)) | - (1 << (KipperParser.PlusPlus - 33)) | - (1 << (KipperParser.Minus - 33)) | - (1 << (KipperParser.MinusMinus - 33)) | - (1 << (KipperParser.Not - 33)) | - (1 << (KipperParser.Identifier - 33)))) !== - 0) || - (((_la - 65) & ~0x1f) === 0 && - ((1 << (_la - 65)) & - ((1 << (KipperParser.IntegerConstant - 65)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | - (1 << (KipperParser.FloatingConstant - 65)) | - (1 << (KipperParser.FStringSingleQuoteStart - 65)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== - 0) - ) { - { - this.state = 136; - this.translationUnit(); - } + this.state = 147; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.Switch) | (1 << KipperParser.Break) | (1 << KipperParser.Continue) | (1 << KipperParser.Do) | (1 << KipperParser.While) | (1 << KipperParser.If) | (1 << KipperParser.For) | (1 << KipperParser.DefFunc) | (1 << KipperParser.Return) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.LeftBrace - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 146; + this.translationUnit(); } + } - this.state = 139; - this.match(KipperParser.EOF); + this.state = 149; + this.match(KipperParser.EOF); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -499,7 +299,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -512,65 +313,23 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 142; + this.state = 152; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 151; + this.externalItem(); + } + } + this.state = 154; this._errHandler.sync(this); _la = this._input.LA(1); - do { - { - { - this.state = 141; - this.externalItem(); - } - } - this.state = 144; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.Switch) | - (1 << KipperParser.Break) | - (1 << KipperParser.Continue) | - (1 << KipperParser.Do) | - (1 << KipperParser.While) | - (1 << KipperParser.If) | - (1 << KipperParser.For) | - (1 << KipperParser.DefFunc) | - (1 << KipperParser.Return) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null) | - (1 << KipperParser.Undefined) | - (1 << KipperParser.SemiColon))) !== - 0) || - (((_la - 33) & ~0x1f) === 0 && - ((1 << (_la - 33)) & - ((1 << (KipperParser.LeftParen - 33)) | - (1 << (KipperParser.LeftBracket - 33)) | - (1 << (KipperParser.LeftBrace - 33)) | - (1 << (KipperParser.Plus - 33)) | - (1 << (KipperParser.PlusPlus - 33)) | - (1 << (KipperParser.Minus - 33)) | - (1 << (KipperParser.MinusMinus - 33)) | - (1 << (KipperParser.Not - 33)) | - (1 << (KipperParser.Identifier - 33)))) !== - 0) || - (((_la - 65) & ~0x1f) === 0 && - ((1 << (_la - 65)) & - ((1 << (KipperParser.IntegerConstant - 65)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | - (1 << (KipperParser.FloatingConstant - 65)) | - (1 << (KipperParser.FStringSingleQuoteStart - 65)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== - 0) - ); - } - } catch (re) { + } while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.Switch) | (1 << KipperParser.Break) | (1 << KipperParser.Continue) | (1 << KipperParser.Do) | (1 << KipperParser.While) | (1 << KipperParser.If) | (1 << KipperParser.For) | (1 << KipperParser.DefFunc) | (1 << KipperParser.Return) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.LeftBrace - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -578,7 +337,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -591,10 +351,11 @@ export class KipperParser extends Parser { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 146; - this.blockItemList(); + this.state = 156; + this.blockItemList(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -602,7 +363,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -615,28 +377,29 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 149; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 148; - this.blockItem(); - } - } - break; - default: - throw new NoViableAltException(this); + this.state = 159; + this._errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 158; + this.blockItem(); } - this.state = 151; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 161; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -644,7 +407,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -656,62 +420,63 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 156; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Switch: - case KipperParser.Break: - case KipperParser.Continue: - case KipperParser.Do: - case KipperParser.While: - case KipperParser.If: - case KipperParser.For: - case KipperParser.Return: - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - { - this.state = 153; - this.statement(); - } - break; - case KipperParser.Const: - case KipperParser.Var: - case KipperParser.DefFunc: - { - this.state = 154; - this.declaration(); - } - break; - case KipperParser.SemiColon: - { - this.state = 155; - this.match(KipperParser.SemiColon); - } - break; - default: - throw new NoViableAltException(this); + this.state = 166; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.Switch: + case KipperParser.Break: + case KipperParser.Continue: + case KipperParser.Do: + case KipperParser.While: + case KipperParser.If: + case KipperParser.For: + case KipperParser.Return: + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + { + this.state = 163; + this.statement(); + } + break; + case KipperParser.Const: + case KipperParser.Var: + case KipperParser.DefFunc: + { + this.state = 164; + this.declaration(); } + break; + case KipperParser.SemiColon: + { + this.state = 165; + this.match(KipperParser.SemiColon); + } + break; + default: + throw new NoViableAltException(this); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -719,7 +484,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -729,40 +495,41 @@ export class KipperParser extends Parser { let _localctx: DeclarationContext = new DeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 10, KipperParser.RULE_declaration); try { - this.state = 165; + this.state = 175; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - this.enterOuterAlt(_localctx, 1); - { - this.state = 158; - this.variableDeclaration(); - this.state = 159; - this.match(KipperParser.SemiColon); - } - break; - case KipperParser.DefFunc: - this.enterOuterAlt(_localctx, 2); + case KipperParser.Const: + case KipperParser.Var: + this.enterOuterAlt(_localctx, 1); + { + this.state = 168; + this.variableDeclaration(); + this.state = 169; + this.match(KipperParser.SemiColon); + } + break; + case KipperParser.DefFunc: + this.enterOuterAlt(_localctx, 2); + { + this.state = 171; + this.functionDeclaration(); + this.state = 173; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { + case 1: { - this.state = 161; - this.functionDeclaration(); - this.state = 163; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 4, this._ctx)) { - case 1: - { - this.state = 162; - this.match(KipperParser.SemiColon); - } - break; - } + this.state = 172; + this.match(KipperParser.SemiColon); } break; - default: - throw new NoViableAltException(this); + } + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -770,7 +537,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -783,40 +551,41 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 167; - this.match(KipperParser.DefFunc); - this.state = 168; - this.declarator(); - this.state = 169; - this.match(KipperParser.LeftParen); - this.state = 171; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 170; - this.parameterList(); - } + this.state = 177; + this.match(KipperParser.DefFunc); + this.state = 178; + this.declarator(); + this.state = 179; + this.match(KipperParser.LeftParen); + this.state = 181; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 180; + this.parameterList(); } + } - this.state = 173; - this.match(KipperParser.RightParen); - this.state = 174; - this.match(KipperParser.RetIndicator); - this.state = 175; - this.typeSpecifierExpression(); - this.state = 177; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { - case 1: - { - this.state = 176; - this.compoundStatement(); - } - break; + this.state = 183; + this.match(KipperParser.RightParen); + this.state = 184; + this.match(KipperParser.RetIndicator); + this.state = 185; + this.typeSpecifierExpression(); + this.state = 187; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { + case 1: + { + this.state = 186; + this.compoundStatement(); } + break; + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -824,7 +593,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -836,12 +606,13 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 179; - this.storageTypeSpecifier(); - this.state = 180; - this.initDeclarator(); + this.state = 189; + this.storageTypeSpecifier(); + this.state = 190; + this.initDeclarator(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -849,7 +620,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -862,20 +634,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 182; - _la = this._input.LA(1); - if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 192; + _la = this._input.LA(1); + if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -883,7 +656,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -895,10 +669,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 184; - this.directDeclarator(); + this.state = 194; + this.directDeclarator(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -906,7 +681,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -918,10 +694,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 186; - this.match(KipperParser.Identifier); + this.state = 196; + this.match(KipperParser.Identifier); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -929,7 +706,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -942,25 +720,27 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 188; - this.declarator(); - this.state = 189; - this.match(KipperParser.Colon); - this.state = 190; - this.typeSpecifierExpression(); - this.state = 193; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Assign) { - { - this.state = 191; - this.match(KipperParser.Assign); - this.state = 192; - this.initializer(); - } + this.state = 198; + this.declarator(); + this.state = 199; + this.match(KipperParser.Colon); + this.state = 200; + this.typeSpecifierExpression(); + this.state = 203; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Assign) { + { + this.state = 201; + this.match(KipperParser.Assign); + this.state = 202; + this.initializer(); } } - } catch (re) { + + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -968,7 +748,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -981,26 +762,27 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 195; + this.state = 205; + this.parameterDeclaration(); + this.state = 210; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 206; + this.match(KipperParser.Comma); + this.state = 207; this.parameterDeclaration(); - this.state = 200; + } + } + this.state = 212; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 196; - this.match(KipperParser.Comma); - this.state = 197; - this.parameterDeclaration(); - } - } - this.state = 202; - this._errHandler.sync(this); - _la = this._input.LA(1); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1008,7 +790,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1020,14 +803,15 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 203; - this.declarator(); - this.state = 204; - this.match(KipperParser.Colon); - this.state = 205; - this.typeSpecifierExpression(); + this.state = 213; + this.declarator(); + this.state = 214; + this.match(KipperParser.Colon); + this.state = 215; + this.typeSpecifierExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1035,7 +819,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1047,10 +832,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 207; - this.assignmentExpression(); + this.state = 217; + this.assignmentExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1058,7 +844,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1068,78 +855,79 @@ export class KipperParser extends Parser { let _localctx: StatementContext = new StatementContext(this._ctx, this.state); this.enterRule(_localctx, 30, KipperParser.RULE_statement); try { - this.state = 215; + this.state = 225; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.LeftBrace: - this.enterOuterAlt(_localctx, 1); - { - this.state = 209; - this.compoundStatement(); - } - break; - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 210; - this.expressionStatement(); - } - break; - case KipperParser.Switch: - case KipperParser.If: - this.enterOuterAlt(_localctx, 3); - { - this.state = 211; - this.selectionStatement(); - } - break; - case KipperParser.Do: - case KipperParser.While: - case KipperParser.For: - this.enterOuterAlt(_localctx, 4); - { - this.state = 212; - this.iterationStatement(); - } - break; - case KipperParser.Break: - case KipperParser.Continue: - this.enterOuterAlt(_localctx, 5); - { - this.state = 213; - this.jumpStatement(); - } - break; - case KipperParser.Return: - this.enterOuterAlt(_localctx, 6); - { - this.state = 214; - this.returnStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.LeftBrace: + this.enterOuterAlt(_localctx, 1); + { + this.state = 219; + this.compoundStatement(); + } + break; + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 220; + this.expressionStatement(); + } + break; + case KipperParser.Switch: + case KipperParser.If: + this.enterOuterAlt(_localctx, 3); + { + this.state = 221; + this.selectionStatement(); + } + break; + case KipperParser.Do: + case KipperParser.While: + case KipperParser.For: + this.enterOuterAlt(_localctx, 4); + { + this.state = 222; + this.iterationStatement(); + } + break; + case KipperParser.Break: + case KipperParser.Continue: + this.enterOuterAlt(_localctx, 5); + { + this.state = 223; + this.jumpStatement(); + } + break; + case KipperParser.Return: + this.enterOuterAlt(_localctx, 6); + { + this.state = 224; + this.returnStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1147,7 +935,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1160,65 +949,23 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 217; - this.match(KipperParser.LeftBrace); - this.state = 219; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.Switch) | - (1 << KipperParser.Break) | - (1 << KipperParser.Continue) | - (1 << KipperParser.Do) | - (1 << KipperParser.While) | - (1 << KipperParser.If) | - (1 << KipperParser.For) | - (1 << KipperParser.DefFunc) | - (1 << KipperParser.Return) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null) | - (1 << KipperParser.Undefined) | - (1 << KipperParser.SemiColon))) !== - 0) || - (((_la - 33) & ~0x1f) === 0 && - ((1 << (_la - 33)) & - ((1 << (KipperParser.LeftParen - 33)) | - (1 << (KipperParser.LeftBracket - 33)) | - (1 << (KipperParser.LeftBrace - 33)) | - (1 << (KipperParser.Plus - 33)) | - (1 << (KipperParser.PlusPlus - 33)) | - (1 << (KipperParser.Minus - 33)) | - (1 << (KipperParser.MinusMinus - 33)) | - (1 << (KipperParser.Not - 33)) | - (1 << (KipperParser.Identifier - 33)))) !== - 0) || - (((_la - 65) & ~0x1f) === 0 && - ((1 << (_la - 65)) & - ((1 << (KipperParser.IntegerConstant - 65)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | - (1 << (KipperParser.FloatingConstant - 65)) | - (1 << (KipperParser.FStringSingleQuoteStart - 65)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== - 0) - ) { - { - this.state = 218; - this.blockItemList(); - } + this.state = 227; + this.match(KipperParser.LeftBrace); + this.state = 229; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.Switch) | (1 << KipperParser.Break) | (1 << KipperParser.Continue) | (1 << KipperParser.Do) | (1 << KipperParser.While) | (1 << KipperParser.If) | (1 << KipperParser.For) | (1 << KipperParser.DefFunc) | (1 << KipperParser.Return) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.LeftBrace - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 228; + this.blockItemList(); } + } - this.state = 221; - this.match(KipperParser.RightBrace); + this.state = 231; + this.match(KipperParser.RightBrace); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1226,7 +973,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1238,12 +986,13 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 223; - this.expression(); - this.state = 224; - this.match(KipperParser.SemiColon); + this.state = 233; + this.expression(); + this.state = 234; + this.match(KipperParser.SemiColon); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1251,7 +1000,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1261,27 +1011,28 @@ export class KipperParser extends Parser { let _localctx: SelectionStatementContext = new SelectionStatementContext(this._ctx, this.state); this.enterRule(_localctx, 36, KipperParser.RULE_selectionStatement); try { - this.state = 228; + this.state = 238; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.If: - this.enterOuterAlt(_localctx, 1); - { - this.state = 226; - this.ifStatement(); - } - break; - case KipperParser.Switch: - this.enterOuterAlt(_localctx, 2); - { - this.state = 227; - this.switchStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.If: + this.enterOuterAlt(_localctx, 1); + { + this.state = 236; + this.ifStatement(); + } + break; + case KipperParser.Switch: + this.enterOuterAlt(_localctx, 2); + { + this.state = 237; + this.switchStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1289,7 +1040,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1301,30 +1053,31 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 230; - this.match(KipperParser.If); - this.state = 231; - this.match(KipperParser.LeftParen); - this.state = 232; - this.expression(); - this.state = 233; - this.match(KipperParser.RightParen); - this.state = 234; + this.state = 240; + this.match(KipperParser.If); + this.state = 241; + this.match(KipperParser.LeftParen); + this.state = 242; + this.expression(); + this.state = 243; + this.match(KipperParser.RightParen); + this.state = 244; + this.statement(); + this.state = 247; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 13, this._ctx) ) { + case 1: + { + this.state = 245; + this.match(KipperParser.Else); + this.state = 246; this.statement(); - this.state = 237; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 13, this._ctx)) { - case 1: - { - this.state = 235; - this.match(KipperParser.Else); - this.state = 236; - this.statement(); - } - break; } + break; + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1332,7 +1085,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1345,34 +1099,35 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 239; - this.match(KipperParser.Switch); - this.state = 240; - this.match(KipperParser.LeftParen); - this.state = 241; - this.expression(); - this.state = 242; - this.match(KipperParser.RightParen); - this.state = 243; - this.match(KipperParser.LeftBrace); - this.state = 247; + this.state = 249; + this.match(KipperParser.Switch); + this.state = 250; + this.match(KipperParser.LeftParen); + this.state = 251; + this.expression(); + this.state = 252; + this.match(KipperParser.RightParen); + this.state = 253; + this.match(KipperParser.LeftBrace); + this.state = 257; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Case || _la === KipperParser.Default) { + { + { + this.state = 254; + this.switchLabeledStatement(); + } + } + this.state = 259; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Case || _la === KipperParser.Default) { - { - { - this.state = 244; - this.switchLabeledStatement(); - } - } - this.state = 249; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 250; - this.match(KipperParser.RightBrace); } - } catch (re) { + this.state = 260; + this.match(KipperParser.RightBrace); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1380,7 +1135,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1390,37 +1146,38 @@ export class KipperParser extends Parser { let _localctx: SwitchLabeledStatementContext = new SwitchLabeledStatementContext(this._ctx, this.state); this.enterRule(_localctx, 42, KipperParser.RULE_switchLabeledStatement); try { - this.state = 260; + this.state = 270; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Case: - this.enterOuterAlt(_localctx, 1); - { - this.state = 252; - this.match(KipperParser.Case); - this.state = 253; - this.expression(); - this.state = 254; - this.match(KipperParser.Colon); - this.state = 255; - this.statement(); - } - break; - case KipperParser.Default: - this.enterOuterAlt(_localctx, 2); - { - this.state = 257; - this.match(KipperParser.Default); - this.state = 258; - this.match(KipperParser.Colon); - this.state = 259; - this.statement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Case: + this.enterOuterAlt(_localctx, 1); + { + this.state = 262; + this.match(KipperParser.Case); + this.state = 263; + this.expression(); + this.state = 264; + this.match(KipperParser.Colon); + this.state = 265; + this.statement(); + } + break; + case KipperParser.Default: + this.enterOuterAlt(_localctx, 2); + { + this.state = 267; + this.match(KipperParser.Default); + this.state = 268; + this.match(KipperParser.Colon); + this.state = 269; + this.statement(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1428,7 +1185,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1438,34 +1196,35 @@ export class KipperParser extends Parser { let _localctx: IterationStatementContext = new IterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 44, KipperParser.RULE_iterationStatement); try { - this.state = 265; + this.state = 275; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.For: - this.enterOuterAlt(_localctx, 1); - { - this.state = 262; - this.forLoopIterationStatement(); - } - break; - case KipperParser.While: - this.enterOuterAlt(_localctx, 2); - { - this.state = 263; - this.whileLoopIterationStatement(); - } - break; - case KipperParser.Do: - this.enterOuterAlt(_localctx, 3); - { - this.state = 264; - this.doWhileLoopIterationStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.For: + this.enterOuterAlt(_localctx, 1); + { + this.state = 272; + this.forLoopIterationStatement(); + } + break; + case KipperParser.While: + this.enterOuterAlt(_localctx, 2); + { + this.state = 273; + this.whileLoopIterationStatement(); + } + break; + case KipperParser.Do: + this.enterOuterAlt(_localctx, 3); + { + this.state = 274; + this.doWhileLoopIterationStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1473,7 +1232,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1486,175 +1246,90 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 267; - this.match(KipperParser.For); - this.state = 268; - this.match(KipperParser.LeftParen); - this.state = 275; + this.state = 277; + this.match(KipperParser.For); + this.state = 278; + this.match(KipperParser.LeftParen); + this.state = 285; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 281; this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null) | - (1 << KipperParser.Undefined))) !== - 0) || - (((_la - 33) & ~0x1f) === 0 && - ((1 << (_la - 33)) & - ((1 << (KipperParser.LeftParen - 33)) | - (1 << (KipperParser.LeftBracket - 33)) | - (1 << (KipperParser.Plus - 33)) | - (1 << (KipperParser.PlusPlus - 33)) | - (1 << (KipperParser.Minus - 33)) | - (1 << (KipperParser.MinusMinus - 33)) | - (1 << (KipperParser.Not - 33)) | - (1 << (KipperParser.Identifier - 33)))) !== - 0) || - (((_la - 65) & ~0x1f) === 0 && - ((1 << (_la - 65)) & - ((1 << (KipperParser.IntegerConstant - 65)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 65)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 65)) | - (1 << (KipperParser.FloatingConstant - 65)) | - (1 << (KipperParser.FStringSingleQuoteStart - 65)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 65)))) !== - 0) - ) { + switch (this._input.LA(1)) { + case KipperParser.Const: + case KipperParser.Var: { - this.state = 271; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - { - this.state = 269; - this.variableDeclaration(); - } - break; - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - { - this.state = 270; - this.expression(); - } - break; - default: - throw new NoViableAltException(this); - } - _localctx._forDeclaration = true; + this.state = 279; + this.variableDeclaration(); } - } - - this.state = 277; - this.match(KipperParser.SemiColon); - this.state = 281; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { + break; + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: { - this.state = 278; - this.expression(); - _localctx._forCondition = true; + this.state = 280; + this.expression(); } + break; + default: + throw new NoViableAltException(this); } + _localctx._forDeclaration = true + } + } - this.state = 283; - this.match(KipperParser.SemiColon); - this.state = 287; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 284; - this.expression(); - _localctx._forIterationExp = true; - } + this.state = 287; + this.match(KipperParser.SemiColon); + this.state = 291; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 288; + this.expression(); + _localctx._forCondition = true } + } - this.state = 289; - this.match(KipperParser.RightParen); - this.state = 290; - this.statement(); + this.state = 293; + this.match(KipperParser.SemiColon); + this.state = 297; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 294; + this.expression(); + _localctx._forIterationExp = true + } + } + + this.state = 299; + this.match(KipperParser.RightParen); + this.state = 300; + this.statement(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1662,7 +1337,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1674,18 +1350,19 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 292; - this.match(KipperParser.While); - this.state = 293; - this.match(KipperParser.LeftParen); - this.state = 294; - this.expression(); - this.state = 295; - this.match(KipperParser.RightParen); - this.state = 296; - this.statement(); - } - } catch (re) { + this.state = 302; + this.match(KipperParser.While); + this.state = 303; + this.match(KipperParser.LeftParen); + this.state = 304; + this.expression(); + this.state = 305; + this.match(KipperParser.RightParen); + this.state = 306; + this.statement(); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1693,37 +1370,36 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public doWhileLoopIterationStatement(): DoWhileLoopIterationStatementContext { - let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext( - this._ctx, - this.state, - ); + let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 50, KipperParser.RULE_doWhileLoopIterationStatement); try { this.enterOuterAlt(_localctx, 1); { - this.state = 298; - this.match(KipperParser.Do); - this.state = 299; - this.statement(); - this.state = 300; - this.match(KipperParser.While); - this.state = 301; - this.match(KipperParser.LeftParen); - this.state = 302; - this.expression(); - this.state = 303; - this.match(KipperParser.RightParen); - this.state = 304; - this.match(KipperParser.SemiColon); - } - } catch (re) { + this.state = 308; + this.match(KipperParser.Do); + this.state = 309; + this.statement(); + this.state = 310; + this.match(KipperParser.While); + this.state = 311; + this.match(KipperParser.LeftParen); + this.state = 312; + this.expression(); + this.state = 313; + this.match(KipperParser.RightParen); + this.state = 314; + this.match(KipperParser.SemiColon); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1731,7 +1407,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1744,22 +1421,23 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 306; - _la = this._input.LA(1); - if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 316; + _la = this._input.LA(1); + if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - this.state = 307; - this.match(KipperParser.SemiColon); + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 317; + this.match(KipperParser.SemiColon); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1767,7 +1445,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1780,49 +1459,23 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 309; - this.match(KipperParser.Return); - this.state = 311; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 310; - this.expression(); - } + this.state = 319; + this.match(KipperParser.Return); + this.state = 321; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 320; + this.expression(); } + } - this.state = 313; - this.match(KipperParser.SemiColon); + this.state = 323; + this.match(KipperParser.SemiColon); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1830,7 +1483,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1840,75 +1494,76 @@ export class KipperParser extends Parser { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 56, KipperParser.RULE_primaryExpression); try { - this.state = 323; + this.state = 333; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.LeftParen: - this.enterOuterAlt(_localctx, 1); - { - this.state = 315; - this.tangledPrimaryExpression(); - } - break; - case KipperParser.True: - case KipperParser.False: - this.enterOuterAlt(_localctx, 2); - { - this.state = 316; - this.boolPrimaryExpression(); - } - break; - case KipperParser.Identifier: - this.enterOuterAlt(_localctx, 3); - { - this.state = 317; - this.identifierPrimaryExpression(); - } - break; - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - this.enterOuterAlt(_localctx, 4); - { - this.state = 318; - this.stringPrimaryExpression(); - } - break; - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 5); - { - this.state = 319; - this.fStringPrimaryExpression(); - } - break; - case KipperParser.IntegerConstant: - case KipperParser.FloatingConstant: - this.enterOuterAlt(_localctx, 6); - { - this.state = 320; - this.numberPrimaryExpression(); - } - break; - case KipperParser.LeftBracket: - this.enterOuterAlt(_localctx, 7); - { - this.state = 321; - this.arrayPrimaryExpression(); - } - break; - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - this.enterOuterAlt(_localctx, 8); - { - this.state = 322; - this.voidOrNullOrUndefinedPrimaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.LeftParen: + this.enterOuterAlt(_localctx, 1); + { + this.state = 325; + this.tangledPrimaryExpression(); + } + break; + case KipperParser.True: + case KipperParser.False: + this.enterOuterAlt(_localctx, 2); + { + this.state = 326; + this.boolPrimaryExpression(); + } + break; + case KipperParser.Identifier: + this.enterOuterAlt(_localctx, 3); + { + this.state = 327; + this.identifierPrimaryExpression(); + } + break; + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + this.enterOuterAlt(_localctx, 4); + { + this.state = 328; + this.stringPrimaryExpression(); + } + break; + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 5); + { + this.state = 329; + this.fStringPrimaryExpression(); + } + break; + case KipperParser.IntegerConstant: + case KipperParser.FloatingConstant: + this.enterOuterAlt(_localctx, 6); + { + this.state = 330; + this.numberPrimaryExpression(); + } + break; + case KipperParser.LeftBracket: + this.enterOuterAlt(_localctx, 7); + { + this.state = 331; + this.arrayPrimaryExpression(); + } + break; + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + this.enterOuterAlt(_localctx, 8); + { + this.state = 332; + this.voidOrNullOrUndefinedPrimaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1916,7 +1571,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1928,14 +1584,15 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 325; - this.match(KipperParser.LeftParen); - this.state = 326; - this.expression(); - this.state = 327; - this.match(KipperParser.RightParen); + this.state = 335; + this.match(KipperParser.LeftParen); + this.state = 336; + this.expression(); + this.state = 337; + this.match(KipperParser.RightParen); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1943,7 +1600,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1956,20 +1614,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 329; - _la = this._input.LA(1); - if (!(_la === KipperParser.True || _la === KipperParser.False)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 339; + _la = this._input.LA(1); + if (!(_la === KipperParser.True || _la === KipperParser.False)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1977,7 +1636,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1989,10 +1649,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 331; - this.identifier(); + this.state = 341; + this.identifier(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2000,7 +1661,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2012,10 +1674,11 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 333; - this.match(KipperParser.Identifier); + this.state = 343; + this.match(KipperParser.Identifier); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2023,7 +1686,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2036,20 +1700,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 335; - _la = this._input.LA(1); - if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 345; + _la = this._input.LA(1); + if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2057,7 +1722,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2068,59 +1734,60 @@ export class KipperParser extends Parser { this.enterRule(_localctx, 68, KipperParser.RULE_fStringPrimaryExpression); let _la: number; try { - this.state = 353; + this.state = 363; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteStart: - this.enterOuterAlt(_localctx, 1); + case KipperParser.FStringSingleQuoteStart: + this.enterOuterAlt(_localctx, 1); + { + this.state = 347; + this.match(KipperParser.FStringSingleQuoteStart); + this.state = 351; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { { - this.state = 337; - this.match(KipperParser.FStringSingleQuoteStart); - this.state = 341; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { - { - { - this.state = 338; - this.fStringSingleQuoteAtom(); - } - } - this.state = 343; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 344; - this.match(KipperParser.FStringSingleQuoteEnd); + { + this.state = 348; + this.fStringSingleQuoteAtom(); } - break; - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 2); + } + this.state = 353; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 354; + this.match(KipperParser.FStringSingleQuoteEnd); + } + break; + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 355; + this.match(KipperParser.FStringDoubleQuoteStart); + this.state = 359; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { { - this.state = 345; - this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 349; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { - { - { - this.state = 346; - this.fStringDoubleQuoteAtom(); - } - } - this.state = 351; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 352; - this.match(KipperParser.FStringDoubleQuoteEnd); + { + this.state = 356; + this.fStringDoubleQuoteAtom(); } - break; - default: - throw new NoViableAltException(this); + } + this.state = 361; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 362; + this.match(KipperParser.FStringDoubleQuoteEnd); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2128,7 +1795,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2139,66 +1807,40 @@ export class KipperParser extends Parser { this.enterRule(_localctx, 70, KipperParser.RULE_fStringSingleQuoteAtom); let _la: number; try { - this.state = 361; + this.state = 371; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteAtom: - this.enterOuterAlt(_localctx, 1); + case KipperParser.FStringSingleQuoteAtom: + this.enterOuterAlt(_localctx, 1); + { + this.state = 365; + this.match(KipperParser.FStringSingleQuoteAtom); + } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 366; + this.match(KipperParser.FStringExpStart); + this.state = 368; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { { - this.state = 355; - this.match(KipperParser.FStringSingleQuoteAtom); + this.state = 367; + this.expression(); } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 356; - this.match(KipperParser.FStringExpStart); - this.state = 358; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 357; - this.expression(); - } - } + } - this.state = 360; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 370; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2206,7 +1848,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2217,66 +1860,40 @@ export class KipperParser extends Parser { this.enterRule(_localctx, 72, KipperParser.RULE_fStringDoubleQuoteAtom); let _la: number; try { - this.state = 369; + this.state = 379; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringDoubleQuoteAtom: - this.enterOuterAlt(_localctx, 1); + case KipperParser.FStringDoubleQuoteAtom: + this.enterOuterAlt(_localctx, 1); + { + this.state = 373; + this.match(KipperParser.FStringDoubleQuoteAtom); + } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 374; + this.match(KipperParser.FStringExpStart); + this.state = 376; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { { - this.state = 363; - this.match(KipperParser.FStringDoubleQuoteAtom); + this.state = 375; + this.expression(); } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 364; - this.match(KipperParser.FStringExpStart); - this.state = 366; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 365; - this.expression(); - } - } + } - this.state = 368; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 378; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2284,7 +1901,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2297,20 +1915,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 371; - _la = this._input.LA(1); - if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 381; + _la = this._input.LA(1); + if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2318,7 +1937,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2331,65 +1951,39 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 373; - this.match(KipperParser.LeftBracket); - this.state = 382; + this.state = 383; + this.match(KipperParser.LeftBracket); + this.state = 392; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 384; + this.expression(); + this.state = 389; this._errHandler.sync(this); _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { + while (_la === KipperParser.Comma) { { - this.state = 374; - this.expression(); - this.state = 379; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 375; - this.match(KipperParser.Comma); - this.state = 376; - this.expression(); - } - } - this.state = 381; - this._errHandler.sync(this); - _la = this._input.LA(1); - } + { + this.state = 385; + this.match(KipperParser.Comma); + this.state = 386; + this.expression(); } + } + this.state = 391; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } + } - this.state = 384; - this.match(KipperParser.RightBracket); + this.state = 394; + this.match(KipperParser.RightBracket); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2397,41 +1991,35 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public voidOrNullOrUndefinedPrimaryExpression(): VoidOrNullOrUndefinedPrimaryExpressionContext { - let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext( - this._ctx, - this.state, - ); + let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 78, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 386; - _la = this._input.LA(1); - if ( - !( - (_la & ~0x1f) === 0 && - ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 396; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2439,7 +2027,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2464,213 +2053,152 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { + this.state = 409; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + { + _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 399; + this.primaryExpression(); + } + break; + case KipperParser.CallFunc: + { + _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 400; + this.match(KipperParser.CallFunc); + this.state = 401; + this.computedPrimaryExpression(0); + this.state = 402; + this.match(KipperParser.LeftParen); + this.state = 404; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 403; + this.argumentExpressionList(); + } + } + + this.state = 406; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression + } + break; + default: + throw new NoViableAltException(this); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 432; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + this.state = 430; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 35, this._ctx) ) { + case 1: { - _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + _localctx = new FunctionCallExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 411; + if (!(this.precpred(this._ctx, 5))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 412; + this.match(KipperParser.LeftParen); + this.state = 414; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 413; + this.argumentExpressionList(); + } + } - this.state = 389; - this.primaryExpression(); + this.state = 416; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } break; - case KipperParser.CallFunc: - { - _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 390; - this.match(KipperParser.CallFunc); - this.state = 391; - this.computedPrimaryExpression(0); - this.state = 392; - this.match(KipperParser.LeftParen); - this.state = 394; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 393; - this.argumentExpressionList(); - } - } - this.state = 396; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; + case 2: + { + _localctx = new DotNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 418; + if (!(this.precpred(this._ctx, 3))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 419; + this.dotNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } break; - default: - throw new NoViableAltException(this); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 422; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); + + case 3: + { + _localctx = new BracketNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 422; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 423; + this.bracketNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } - _prevctx = _localctx; + break; + + case 4: { - this.state = 420; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 35, this._ctx)) { - case 1: - { - _localctx = new FunctionCallExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 401; - if (!this.precpred(this._ctx, 5)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); - } - this.state = 402; - this.match(KipperParser.LeftParen); - this.state = 404; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 403; - this.argumentExpressionList(); - } - } - - this.state = 406; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; - } - break; - - case 2: - { - _localctx = new DotNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 408; - if (!this.precpred(this._ctx, 3)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); - } - this.state = 409; - this.dotNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - - case 3: - { - _localctx = new BracketNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 412; - if (!this.precpred(this._ctx, 2)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); - } - this.state = 413; - this.bracketNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - - case 4: - { - _localctx = new SliceNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 416; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 417; - this.sliceNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - } + _localctx = new SliceNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 426; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 427; + this.sliceNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } + break; + } } - this.state = 424; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); } + this.state = 434; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2678,7 +2206,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -2691,26 +2220,27 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 425; + this.state = 435; + this.assignmentExpression(); + this.state = 440; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 436; + this.match(KipperParser.Comma); + this.state = 437; this.assignmentExpression(); - this.state = 430; + } + } + this.state = 442; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 426; - this.match(KipperParser.Comma); - this.state = 427; - this.assignmentExpression(); - } - } - this.state = 432; - this._errHandler.sync(this); - _la = this._input.LA(1); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2718,7 +2248,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2730,12 +2261,13 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 433; - this.match(KipperParser.Dot); - this.state = 434; - this.identifier(); + this.state = 443; + this.match(KipperParser.Dot); + this.state = 444; + this.identifier(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2743,7 +2275,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2755,14 +2288,15 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 436; - this.match(KipperParser.LeftBracket); - this.state = 437; - this.expression(); - this.state = 438; - this.match(KipperParser.RightBracket); + this.state = 446; + this.match(KipperParser.LeftBracket); + this.state = 447; + this.expression(); + this.state = 448; + this.match(KipperParser.RightBracket); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2770,7 +2304,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2783,90 +2318,37 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 440; - this.match(KipperParser.LeftBracket); - this.state = 444; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 441; - this.expression(); - _localctx.sliceStart = true; - } + this.state = 450; + this.match(KipperParser.LeftBracket); + this.state = 454; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 451; + this.expression(); + _localctx.sliceStart = true } + } - this.state = 446; - this.match(KipperParser.Colon); - this.state = 450; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 21) & ~0x1f) === 0 && - ((1 << (_la - 21)) & - ((1 << (KipperParser.CallFunc - 21)) | - (1 << (KipperParser.True - 21)) | - (1 << (KipperParser.False - 21)) | - (1 << (KipperParser.Void - 21)) | - (1 << (KipperParser.Null - 21)) | - (1 << (KipperParser.Undefined - 21)) | - (1 << (KipperParser.LeftParen - 21)) | - (1 << (KipperParser.LeftBracket - 21)) | - (1 << (KipperParser.Plus - 21)) | - (1 << (KipperParser.PlusPlus - 21)) | - (1 << (KipperParser.Minus - 21)) | - (1 << (KipperParser.MinusMinus - 21)) | - (1 << (KipperParser.Not - 21)))) !== - 0) || - (((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Identifier - 64)) | - (1 << (KipperParser.IntegerConstant - 64)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 64)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 64)) | - (1 << (KipperParser.FloatingConstant - 64)) | - (1 << (KipperParser.FStringSingleQuoteStart - 64)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 64)))) !== - 0) - ) { - { - this.state = 447; - this.expression(); - _localctx.sliceEnd = true; - } + this.state = 456; + this.match(KipperParser.Colon); + this.state = 460; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + { + this.state = 457; + this.expression(); + _localctx.sliceEnd = true } + } - this.state = 452; - this.match(KipperParser.RightBracket); + this.state = 462; + this.match(KipperParser.RightBracket); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2874,7 +2356,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2884,26 +2367,27 @@ export class KipperParser extends Parser { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 90, KipperParser.RULE_postfixExpression); try { - this.state = 456; + this.state = 466; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 40, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 454; - this.computedPrimaryExpression(0); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 40, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 464; + this.computedPrimaryExpression(0); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 455; - this.incrementOrDecrementPostfixExpression(); - } - break; - } - } catch (re) { + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 465; + this.incrementOrDecrementPostfixExpression(); + } + break; + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2911,27 +2395,26 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementPostfixExpression(): IncrementOrDecrementPostfixExpressionContext { - let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext( - this._ctx, - this.state, - ); + let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 92, KipperParser.RULE_incrementOrDecrementPostfixExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 458; - this.computedPrimaryExpression(0); - this.state = 459; - this.incrementOrDecrementOperator(); + this.state = 468; + this.computedPrimaryExpression(0); + this.state = 469; + this.incrementOrDecrementOperator(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2939,7 +2422,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2949,51 +2433,52 @@ export class KipperParser extends Parser { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 94, KipperParser.RULE_unaryExpression); try { - this.state = 464; + this.state = 474; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 1); - { - this.state = 461; - this.postfixExpression(); - } - break; - case KipperParser.PlusPlus: - case KipperParser.MinusMinus: - this.enterOuterAlt(_localctx, 2); - { - this.state = 462; - this.incrementOrDecrementUnaryExpression(); - } - break; - case KipperParser.Plus: - case KipperParser.Minus: - case KipperParser.Not: - this.enterOuterAlt(_localctx, 3); - { - this.state = 463; - this.operatorModifiedUnaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 1); + { + this.state = 471; + this.postfixExpression(); + } + break; + case KipperParser.PlusPlus: + case KipperParser.MinusMinus: + this.enterOuterAlt(_localctx, 2); + { + this.state = 472; + this.incrementOrDecrementUnaryExpression(); + } + break; + case KipperParser.Plus: + case KipperParser.Minus: + case KipperParser.Not: + this.enterOuterAlt(_localctx, 3); + { + this.state = 473; + this.operatorModifiedUnaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3001,27 +2486,26 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementUnaryExpression(): IncrementOrDecrementUnaryExpressionContext { - let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext( - this._ctx, - this.state, - ); + let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 96, KipperParser.RULE_incrementOrDecrementUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 466; - this.incrementOrDecrementOperator(); - this.state = 467; - this.postfixExpression(); + this.state = 476; + this.incrementOrDecrementOperator(); + this.state = 477; + this.postfixExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3029,27 +2513,26 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public operatorModifiedUnaryExpression(): OperatorModifiedUnaryExpressionContext { - let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext( - this._ctx, - this.state, - ); + let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 98, KipperParser.RULE_operatorModifiedUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 469; - this.unaryOperator(); - this.state = 470; - this.postfixExpression(); + this.state = 479; + this.unaryOperator(); + this.state = 480; + this.postfixExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3057,7 +2540,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3070,20 +2554,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 472; - _la = this._input.LA(1); - if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 482; + _la = this._input.LA(1); + if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3091,7 +2576,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3104,27 +2590,21 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 474; - _la = this._input.LA(1); - if ( - !( - ((_la - 40) & ~0x1f) === 0 && - ((1 << (_la - 40)) & - ((1 << (KipperParser.Plus - 40)) | (1 << (KipperParser.Minus - 40)) | (1 << (KipperParser.Not - 40)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 484; + _la = this._input.LA(1); + if (!(((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & ((1 << (KipperParser.Plus - 40)) | (1 << (KipperParser.Minus - 40)) | (1 << (KipperParser.Not - 40)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3132,7 +2612,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3142,32 +2623,33 @@ export class KipperParser extends Parser { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 104, KipperParser.RULE_castOrConvertExpression); try { - this.state = 481; + this.state = 491; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 42, this._ctx)) { - case 1: - _localctx = new PassOnCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 476; - this.unaryExpression(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 42, this._ctx) ) { + case 1: + _localctx = new PassOnCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 486; + this.unaryExpression(); + } + break; - case 2: - _localctx = new ActualCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 477; - this.unaryExpression(); - this.state = 478; - this.match(KipperParser.As); - this.state = 479; - this.typeSpecifierExpression(); - } - break; + case 2: + _localctx = new ActualCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 487; + this.unaryExpression(); + this.state = 488; + this.match(KipperParser.As); + this.state = 489; + this.typeSpecifierExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3175,7 +2657,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3200,67 +2683,56 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnMultiplicativeExpressionContext(_localctx); - this._ctx = _localctx; + { + _localctx = new PassOnMultiplicativeExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 494; + this.castOrConvertExpression(); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 501; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } _prevctx = _localctx; + { + { + _localctx = new ActualMultiplicativeExpressionContext(new MultiplicativeExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); + this.state = 496; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 497; + _la = this._input.LA(1); + if (!(((((_la - 44)) & ~0x1F) === 0 && ((1 << (_la - 44)) & ((1 << (KipperParser.Star - 44)) | (1 << (KipperParser.Div - 44)) | (1 << (KipperParser.Mod - 44)) | (1 << (KipperParser.PowerTo - 44)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this.state = 484; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 498; this.castOrConvertExpression(); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 491; + this.state = 503; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualMultiplicativeExpressionContext( - new MultiplicativeExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 486; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 487; - _la = this._input.LA(1); - if ( - !( - ((_la - 44) & ~0x1f) === 0 && - ((1 << (_la - 44)) & - ((1 << (KipperParser.Star - 44)) | - (1 << (KipperParser.Div - 44)) | - (1 << (KipperParser.Mod - 44)) | - (1 << (KipperParser.PowerTo - 44)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 488; - this.castOrConvertExpression(); - } - } - } - this.state = 493; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3268,7 +2740,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3293,57 +2766,56 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnAdditiveExpressionContext(_localctx); - this._ctx = _localctx; + { + _localctx = new PassOnAdditiveExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 505; + this.multiplicativeExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 512; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } _prevctx = _localctx; + { + { + _localctx = new ActualAdditiveExpressionContext(new AdditiveExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); + this.state = 507; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 508; + _la = this._input.LA(1); + if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this.state = 495; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 509; this.multiplicativeExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 502; + this.state = 514; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualAdditiveExpressionContext( - new AdditiveExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 497; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 498; - _la = this._input.LA(1); - if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 499; - this.multiplicativeExpression(0); - } - } - } - this.state = 504; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3351,92 +2823,71 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; } - public relationalExpression(): RelationalExpressionContext; - public relationalExpression(_p: number): RelationalExpressionContext; + public bitwiseShiftExpression(): BitwiseShiftExpressionContext; + public bitwiseShiftExpression(_p: number): BitwiseShiftExpressionContext; // @RuleVersion(0) - public relationalExpression(_p?: number): RelationalExpressionContext { + public bitwiseShiftExpression(_p?: number): BitwiseShiftExpressionContext { if (_p === undefined) { _p = 0; } let _parentctx: ParserRuleContext = this._ctx; let _parentState: number = this.state; - let _localctx: RelationalExpressionContext = new RelationalExpressionContext(this._ctx, _parentState); - let _prevctx: RelationalExpressionContext = _localctx; + let _localctx: BitwiseShiftExpressionContext = new BitwiseShiftExpressionContext(this._ctx, _parentState); + let _prevctx: BitwiseShiftExpressionContext = _localctx; let _startState: number = 110; - this.enterRecursionRule(_localctx, 110, KipperParser.RULE_relationalExpression, _p); - let _la: number; + this.enterRecursionRule(_localctx, 110, KipperParser.RULE_bitwiseShiftExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnRelationalExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnBitwiseShiftExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 506; - this.additiveExpression(0); + this.state = 516; + this.additiveExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 524; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseShiftExpressionContext(new BitwiseShiftExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); + this.state = 518; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 519; + this.bitwiseShiftOperators(); + this.state = 520; + this.bitwiseAndExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 513; + this.state = 526; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualRelationalExpressionContext( - new RelationalExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 508; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 509; - _la = this._input.LA(1); - if ( - !( - ((_la - 59) & ~0x1f) === 0 && - ((1 << (_la - 59)) & - ((1 << (KipperParser.Less - 59)) | - (1 << (KipperParser.LessEqual - 59)) | - (1 << (KipperParser.Greater - 59)) | - (1 << (KipperParser.GreaterEqual - 59)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 510; - this.additiveExpression(0); - } - } - } - this.state = 515; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3444,82 +2895,35 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; } - - public equalityExpression(): EqualityExpressionContext; - public equalityExpression(_p: number): EqualityExpressionContext; // @RuleVersion(0) - public equalityExpression(_p?: number): EqualityExpressionContext { - if (_p === undefined) { - _p = 0; - } - - let _parentctx: ParserRuleContext = this._ctx; - let _parentState: number = this.state; - let _localctx: EqualityExpressionContext = new EqualityExpressionContext(this._ctx, _parentState); - let _prevctx: EqualityExpressionContext = _localctx; - let _startState: number = 112; - this.enterRecursionRule(_localctx, 112, KipperParser.RULE_equalityExpression, _p); + public bitwiseShiftOperators(): BitwiseShiftOperatorsContext { + let _localctx: BitwiseShiftOperatorsContext = new BitwiseShiftOperatorsContext(this._ctx, this.state); + this.enterRule(_localctx, 112, KipperParser.RULE_bitwiseShiftOperators); let _la: number; try { - let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnEqualityExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 517; - this.relationalExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 524; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualEqualityExpressionContext( - new EqualityExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 519; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 520; - _la = this._input.LA(1); - if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 521; - this.relationalExpression(0); - } - } - } - this.state = 526; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); + this.state = 527; + _la = this._input.LA(1); + if (!(((((_la - 67)) & ~0x1F) === 0 && ((1 << (_la - 67)) & ((1 << (KipperParser.BitwiseZeroFillLeftShift - 67)) | (1 << (KipperParser.BitwiseSignedRightShift - 67)) | (1 << (KipperParser.BitwiseZeroFillRightShift - 67)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3527,71 +2931,82 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { - this.unrollRecursionContexts(_parentctx); + } + finally { + this.exitRule(); } return _localctx; } - public logicalAndExpression(): LogicalAndExpressionContext; - public logicalAndExpression(_p: number): LogicalAndExpressionContext; + public relationalExpression(): RelationalExpressionContext; + public relationalExpression(_p: number): RelationalExpressionContext; // @RuleVersion(0) - public logicalAndExpression(_p?: number): LogicalAndExpressionContext { + public relationalExpression(_p?: number): RelationalExpressionContext { if (_p === undefined) { _p = 0; } let _parentctx: ParserRuleContext = this._ctx; let _parentState: number = this.state; - let _localctx: LogicalAndExpressionContext = new LogicalAndExpressionContext(this._ctx, _parentState); - let _prevctx: LogicalAndExpressionContext = _localctx; + let _localctx: RelationalExpressionContext = new RelationalExpressionContext(this._ctx, _parentState); + let _prevctx: RelationalExpressionContext = _localctx; let _startState: number = 114; - this.enterRecursionRule(_localctx, 114, KipperParser.RULE_logicalAndExpression, _p); + this.enterRecursionRule(_localctx, 114, KipperParser.RULE_relationalExpression, _p); + let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalAndExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnRelationalExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 528; - this.equalityExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 535; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualLogicalAndExpressionContext( - new LogicalAndExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 530; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 531; - this.match(KipperParser.AndAnd); - this.state = 532; - this.equalityExpression(0); - } + this.state = 530; + this.bitwiseShiftExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 537; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualRelationalExpressionContext(new RelationalExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); + this.state = 532; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 533; + _la = this._input.LA(1); + if (!(((((_la - 59)) & ~0x1F) === 0 && ((1 << (_la - 59)) & ((1 << (KipperParser.Less - 59)) | (1 << (KipperParser.LessEqual - 59)) | (1 << (KipperParser.Greater - 59)) | (1 << (KipperParser.GreaterEqual - 59)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 534; + this.bitwiseShiftExpression(0); + } } - this.state = 537; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); } + this.state = 539; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3599,71 +3014,154 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; } - public logicalOrExpression(): LogicalOrExpressionContext; - public logicalOrExpression(_p: number): LogicalOrExpressionContext; + public equalityExpression(): EqualityExpressionContext; + public equalityExpression(_p: number): EqualityExpressionContext; // @RuleVersion(0) - public logicalOrExpression(_p?: number): LogicalOrExpressionContext { + public equalityExpression(_p?: number): EqualityExpressionContext { if (_p === undefined) { _p = 0; } let _parentctx: ParserRuleContext = this._ctx; let _parentState: number = this.state; - let _localctx: LogicalOrExpressionContext = new LogicalOrExpressionContext(this._ctx, _parentState); - let _prevctx: LogicalOrExpressionContext = _localctx; + let _localctx: EqualityExpressionContext = new EqualityExpressionContext(this._ctx, _parentState); + let _prevctx: EqualityExpressionContext = _localctx; let _startState: number = 116; - this.enterRecursionRule(_localctx, 116, KipperParser.RULE_logicalOrExpression, _p); + this.enterRecursionRule(_localctx, 116, KipperParser.RULE_equalityExpression, _p); + let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalOrExpressionContext(_localctx); - this._ctx = _localctx; + { + _localctx = new PassOnEqualityExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 541; + this.relationalExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 548; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } _prevctx = _localctx; + { + { + _localctx = new ActualEqualityExpressionContext(new EqualityExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); + this.state = 543; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 544; + _la = this._input.LA(1); + if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this.state = 539; - this.logicalAndExpression(0); + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 545; + this.relationalExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 546; + this.state = 550; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualLogicalOrExpressionContext( - new LogicalOrExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 541; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 542; - this.match(KipperParser.OrOr); - this.state = 543; - this.logicalAndExpression(0); - } - } + _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public bitwiseAndExpression(): BitwiseAndExpressionContext; + public bitwiseAndExpression(_p: number): BitwiseAndExpressionContext; + // @RuleVersion(0) + public bitwiseAndExpression(_p?: number): BitwiseAndExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: BitwiseAndExpressionContext = new BitwiseAndExpressionContext(this._ctx, _parentState); + let _prevctx: BitwiseAndExpressionContext = _localctx; + let _startState: number = 118; + this.enterRecursionRule(_localctx, 118, KipperParser.RULE_bitwiseAndExpression, _p); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnBitwiseAndExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 552; + this.equalityExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 559; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseAndExpressionContext(new BitwiseAndExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); + this.state = 554; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 555; + this.match(KipperParser.BitwiseAnd); + this.state = 556; + this.equalityExpression(0); + } } - this.state = 548; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); } + this.state = 561; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3671,46 +3169,143 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; } + + public bitwiseXorExpression(): BitwiseXorExpressionContext; + public bitwiseXorExpression(_p: number): BitwiseXorExpressionContext; // @RuleVersion(0) - public conditionalExpression(): ConditionalExpressionContext { - let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 118, KipperParser.RULE_conditionalExpression); + public bitwiseXorExpression(_p?: number): BitwiseXorExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: BitwiseXorExpressionContext = new BitwiseXorExpressionContext(this._ctx, _parentState); + let _prevctx: BitwiseXorExpressionContext = _localctx; + let _startState: number = 120; + this.enterRecursionRule(_localctx, 120, KipperParser.RULE_bitwiseXorExpression, _p); try { - this.state = 556; + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnBitwiseXorExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 563; + this.bitwiseAndExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 570; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 49, this._ctx)) { - case 1: - _localctx = new PassOnConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); + _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { { - this.state = 549; - this.logicalOrExpression(0); + _localctx = new ActualBitwiseXorExpressionContext(new BitwiseXorExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); + this.state = 565; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - break; + this.state = 566; + this.match(KipperParser.BitwiseXor); + this.state = 567; + this.bitwiseAndExpression(0); + } + } + } + this.state = 572; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } - case 2: - _localctx = new ActualConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); + public bitwiseOrExpression(): BitwiseOrExpressionContext; + public bitwiseOrExpression(_p: number): BitwiseOrExpressionContext; + // @RuleVersion(0) + public bitwiseOrExpression(_p?: number): BitwiseOrExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: BitwiseOrExpressionContext = new BitwiseOrExpressionContext(this._ctx, _parentState); + let _prevctx: BitwiseOrExpressionContext = _localctx; + let _startState: number = 122; + this.enterRecursionRule(_localctx, 122, KipperParser.RULE_bitwiseOrExpression, _p); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnBitwiseOrExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 574; + this.bitwiseXorExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 581; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; { - this.state = 550; - this.logicalOrExpression(0); - this.state = 551; - this.match(KipperParser.QuestionMark); - this.state = 552; - this.conditionalExpression(); - this.state = 553; - this.match(KipperParser.Colon); - this.state = 554; - this.conditionalExpression(); + { + _localctx = new ActualBitwiseOrExpressionContext(new BitwiseOrExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); + this.state = 576; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - break; + this.state = 577; + this.match(KipperParser.BitwiseOr); + this.state = 578; + this.bitwiseXorExpression(0); + } + } + } + this.state = 583; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3718,42 +3313,192 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { - this.exitRule(); + } + finally { + this.unrollRecursionContexts(_parentctx); } return _localctx; } + + public logicalAndExpression(): LogicalAndExpressionContext; + public logicalAndExpression(_p: number): LogicalAndExpressionContext; // @RuleVersion(0) - public assignmentExpression(): AssignmentExpressionContext { - let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 120, KipperParser.RULE_assignmentExpression); + public logicalAndExpression(_p?: number): LogicalAndExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: LogicalAndExpressionContext = new LogicalAndExpressionContext(this._ctx, _parentState); + let _prevctx: LogicalAndExpressionContext = _localctx; + let _startState: number = 124; + this.enterRecursionRule(_localctx, 124, KipperParser.RULE_logicalAndExpression, _p); try { - this.state = 563; + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnLogicalAndExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 585; + this.bitwiseOrExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 592; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 50, this._ctx)) { - case 1: - _localctx = new PassOnAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); + _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { { - this.state = 558; - this.conditionalExpression(); + _localctx = new ActualLogicalAndExpressionContext(new LogicalAndExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); + this.state = 587; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - break; + this.state = 588; + this.match(KipperParser.AndAnd); + this.state = 589; + this.bitwiseOrExpression(0); + } + } + } + this.state = 594; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public logicalOrExpression(): LogicalOrExpressionContext; + public logicalOrExpression(_p: number): LogicalOrExpressionContext; + // @RuleVersion(0) + public logicalOrExpression(_p?: number): LogicalOrExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: LogicalOrExpressionContext = new LogicalOrExpressionContext(this._ctx, _parentState); + let _prevctx: LogicalOrExpressionContext = _localctx; + let _startState: number = 126; + this.enterRecursionRule(_localctx, 126, KipperParser.RULE_logicalOrExpression, _p); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnLogicalOrExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - case 2: - _localctx = new ActualAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); + this.state = 596; + this.logicalAndExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 603; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { { - this.state = 559; - this.computedPrimaryExpression(0); - this.state = 560; - this.assignmentOperator(); - this.state = 561; - this.assignmentExpression(); + _localctx = new ActualLogicalOrExpressionContext(new LogicalOrExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); + this.state = 598; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - break; + this.state = 599; + this.match(KipperParser.OrOr); + this.state = 600; + this.logicalAndExpression(0); + } + } + } + this.state = 605; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + // @RuleVersion(0) + public conditionalExpression(): ConditionalExpressionContext { + let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 128, KipperParser.RULE_conditionalExpression); + try { + this.state = 613; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 53, this._ctx) ) { + case 1: + _localctx = new PassOnConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 606; + this.logicalOrExpression(0); + } + break; + + case 2: + _localctx = new ActualConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 607; + this.logicalOrExpression(0); + this.state = 608; + this.match(KipperParser.QuestionMark); + this.state = 609; + this.conditionalExpression(); + this.state = 610; + this.match(KipperParser.Colon); + this.state = 611; + this.conditionalExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3761,7 +3506,53 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public assignmentExpression(): AssignmentExpressionContext { + let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 130, KipperParser.RULE_assignmentExpression); + try { + this.state = 620; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 54, this._ctx) ) { + case 1: + _localctx = new PassOnAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 615; + this.conditionalExpression(); + } + break; + + case 2: + _localctx = new ActualAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 616; + this.computedPrimaryExpression(0); + this.state = 617; + this.assignmentOperator(); + this.state = 618; + this.assignmentExpression(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { this.exitRule(); } return _localctx; @@ -3769,37 +3560,26 @@ export class KipperParser extends Parser { // @RuleVersion(0) public assignmentOperator(): AssignmentOperatorContext { let _localctx: AssignmentOperatorContext = new AssignmentOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 122, KipperParser.RULE_assignmentOperator); + this.enterRule(_localctx, 132, KipperParser.RULE_assignmentOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 565; - _la = this._input.LA(1); - if ( - !( - ((_la - 51) & ~0x1f) === 0 && - ((1 << (_la - 51)) & - ((1 << (KipperParser.Assign - 51)) | - (1 << (KipperParser.PlusAssign - 51)) | - (1 << (KipperParser.MinusAssign - 51)) | - (1 << (KipperParser.StarAssign - 51)) | - (1 << (KipperParser.DivAssign - 51)) | - (1 << (KipperParser.ModAssign - 51)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 622; + _la = this._input.LA(1); + if (!(((((_la - 51)) & ~0x1F) === 0 && ((1 << (_la - 51)) & ((1 << (KipperParser.Assign - 51)) | (1 << (KipperParser.PlusAssign - 51)) | (1 << (KipperParser.MinusAssign - 51)) | (1 << (KipperParser.StarAssign - 51)) | (1 << (KipperParser.DivAssign - 51)) | (1 << (KipperParser.ModAssign - 51)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3807,7 +3587,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3815,33 +3596,34 @@ export class KipperParser extends Parser { // @RuleVersion(0) public expression(): ExpressionContext { let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 124, KipperParser.RULE_expression); + this.enterRule(_localctx, 134, KipperParser.RULE_expression); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 567; - this.assignmentExpression(); - this.state = 572; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 568; - this.match(KipperParser.Comma); - this.state = 569; - this.assignmentExpression(); - } - } + this.state = 624; + this.assignmentExpression(); + this.state = 629; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 55, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 625; + this.match(KipperParser.Comma); + this.state = 626; + this.assignmentExpression(); + } } - this.state = 574; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); } + this.state = 631; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 55, this._ctx); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3849,7 +3631,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3857,36 +3640,37 @@ export class KipperParser extends Parser { // @RuleVersion(0) public typeSpecifierExpression(): TypeSpecifierExpressionContext { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 126, KipperParser.RULE_typeSpecifierExpression); + this.enterRule(_localctx, 136, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 578; + this.state = 635; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 52, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 575; - this.identifierTypeSpecifierExpression(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 56, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 632; + this.identifierTypeSpecifierExpression(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 576; - this.genericTypeSpecifierExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 633; + this.genericTypeSpecifierExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 577; - this.typeofTypeSpecifierExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 634; + this.typeofTypeSpecifierExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3894,25 +3678,24 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext { - let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext( - this._ctx, - this.state, - ); - this.enterRule(_localctx, 128, KipperParser.RULE_identifierTypeSpecifierExpression); + let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 138, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 580; - this.typeSpecifierIdentifier(); + this.state = 637; + this.typeSpecifierIdentifier(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3920,31 +3703,30 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public genericTypeSpecifierExpression(): GenericTypeSpecifierExpressionContext { - let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext( - this._ctx, - this.state, - ); - this.enterRule(_localctx, 130, KipperParser.RULE_genericTypeSpecifierExpression); + let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 140, KipperParser.RULE_genericTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 582; - this.typeSpecifierIdentifier(); - this.state = 583; - this.match(KipperParser.Less); - this.state = 584; - this.typeSpecifierIdentifier(); - this.state = 585; - this.match(KipperParser.Greater); + this.state = 639; + this.typeSpecifierIdentifier(); + this.state = 640; + this.match(KipperParser.Less); + this.state = 641; + this.typeSpecifierIdentifier(); + this.state = 642; + this.match(KipperParser.Greater); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3952,31 +3734,30 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public typeofTypeSpecifierExpression(): TypeofTypeSpecifierExpressionContext { - let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext( - this._ctx, - this.state, - ); - this.enterRule(_localctx, 132, KipperParser.RULE_typeofTypeSpecifierExpression); + let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 142, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 587; - this.match(KipperParser.Typeof); - this.state = 588; - this.match(KipperParser.LeftParen); - this.state = 589; - this.typeSpecifierIdentifier(); - this.state = 590; - this.match(KipperParser.RightParen); + this.state = 644; + this.match(KipperParser.Typeof); + this.state = 645; + this.match(KipperParser.LeftParen); + this.state = 646; + this.typeSpecifierIdentifier(); + this.state = 647; + this.match(KipperParser.RightParen); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3984,7 +3765,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3992,32 +3774,26 @@ export class KipperParser extends Parser { // @RuleVersion(0) public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { let _localctx: TypeSpecifierIdentifierContext = new TypeSpecifierIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 134, KipperParser.RULE_typeSpecifierIdentifier); + this.enterRule(_localctx, 144, KipperParser.RULE_typeSpecifierIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 592; - _la = this._input.LA(1); - if ( - !( - ((_la & ~0x1f) === 0 && - ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== - 0) || - _la === KipperParser.Identifier - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 649; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0) || _la === KipperParser.Identifier)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4025,7 +3801,8 @@ export class KipperParser extends Parser { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -4033,367 +3810,437 @@ export class KipperParser extends Parser { public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 40: - return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); + case 40: + return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); + + case 53: + return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); - case 53: - return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); + case 54: + return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); - case 54: - return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); + case 55: + return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); - case 55: - return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); + case 57: + return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); - case 56: - return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); + case 58: + return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); - case 57: - return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + case 59: + return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); - case 58: - return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); + case 60: + return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); + + case 61: + return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); + + case 62: + return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + + case 63: + return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; } private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.precpred(this._ctx, 5); + case 0: + return this.precpred(this._ctx, 5); - case 1: - return this.precpred(this._ctx, 3); + case 1: + return this.precpred(this._ctx, 3); - case 2: - return this.precpred(this._ctx, 2); + case 2: + return this.precpred(this._ctx, 2); - case 3: - return this.precpred(this._ctx, 1); + case 3: + return this.precpred(this._ctx, 1); } return true; } private multiplicativeExpression_sempred(_localctx: MultiplicativeExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 4: - return this.precpred(this._ctx, 1); + case 4: + return this.precpred(this._ctx, 1); } return true; } private additiveExpression_sempred(_localctx: AdditiveExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 5: - return this.precpred(this._ctx, 1); + case 5: + return this.precpred(this._ctx, 1); + } + return true; + } + private bitwiseShiftExpression_sempred(_localctx: BitwiseShiftExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 6: + return this.precpred(this._ctx, 1); } return true; } private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 6: - return this.precpred(this._ctx, 1); + case 7: + return this.precpred(this._ctx, 1); } return true; } private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 7: - return this.precpred(this._ctx, 1); + case 8: + return this.precpred(this._ctx, 1); + } + return true; + } + private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 9: + return this.precpred(this._ctx, 1); + } + return true; + } + private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 10: + return this.precpred(this._ctx, 1); + } + return true; + } + private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 11: + return this.precpred(this._ctx, 1); } return true; } private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 8: - return this.precpred(this._ctx, 1); + case 12: + return this.precpred(this._ctx, 1); } return true; } private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 9: - return this.precpred(this._ctx, 1); + case 13: + return this.precpred(this._ctx, 1); } return true; } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03N\u0255\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03U\u028E\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + "\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C\x04" + - '\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04"\t"\x04#' + - "\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + + "\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04#" + + "\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + "\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x044" + "\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + - "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x03" + - "\x02\x05\x02\x8C\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\x91\n\x03\r\x03" + - "\x0E\x03\x92\x03\x04\x03\x04\x03\x05\x06\x05\x98\n\x05\r\x05\x0E\x05\x99" + - "\x03\x06\x03\x06\x03\x06\x05\x06\x9F\n\x06\x03\x07\x03\x07\x03\x07\x03" + - "\x07\x03\x07\x05\x07\xA6\n\x07\x05\x07\xA8\n\x07\x03\b\x03\b\x03\b\x03" + - "\b\x05\b\xAE\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\xB4\n\b\x03\t\x03\t\x03" + - "\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05" + - "\r\xC4\n\r\x03\x0E\x03\x0E\x03\x0E\x07\x0E\xC9\n\x0E\f\x0E\x0E\x0E\xCC" + - "\v\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11" + - "\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\xDA\n\x11\x03\x12\x03\x12\x05" + - "\x12\xDE\n\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14" + - "\x05\x14\xE7\n\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x05\x15\xF0\n\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + - "\x07\x16\xF8\n\x16\f\x16\x0E\x16\xFB\v\x16\x03\x16\x03\x16\x03\x17\x03" + - "\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x05\x17\u0107\n\x17" + - "\x03\x18\x03\x18\x03\x18\x05\x18\u010C\n\x18\x03\x19\x03\x19\x03\x19\x03" + - "\x19\x05\x19\u0112\n\x19\x03\x19\x03\x19\x05\x19\u0116\n\x19\x03\x19\x03" + - "\x19\x03\x19\x03\x19\x05\x19\u011C\n\x19\x03\x19\x03\x19\x03\x19\x03\x19" + - "\x05\x19\u0122\n\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03" + - "\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03" + - "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D\u013A\n\x1D" + - "\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + - "\x03\x1E\x05\x1E\u0146\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03" + - ' \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x07$\u0156\n$\f$\x0E$\u0159' + - "\v$\x03$\x03$\x03$\x07$\u015E\n$\f$\x0E$\u0161\v$\x03$\x05$\u0164\n$\x03" + - "%\x03%\x03%\x05%\u0169\n%\x03%\x05%\u016C\n%\x03&\x03&\x03&\x05&\u0171" + - "\n&\x03&\x05&\u0174\n&\x03'\x03'\x03(\x03(\x03(\x03(\x07(\u017C\n(\f" + - "(\x0E(\u017F\v(\x05(\u0181\n(\x03(\x03(\x03)\x03)\x03*\x03*\x03*\x03*" + - "\x03*\x03*\x05*\u018D\n*\x03*\x03*\x03*\x05*\u0192\n*\x03*\x03*\x03*\x05" + - "*\u0197\n*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + - "*\x03*\x03*\x07*\u01A7\n*\f*\x0E*\u01AA\v*\x03+\x03+\x03+\x07+\u01AF\n" + - "+\f+\x0E+\u01B2\v+\x03,\x03,\x03,\x03-\x03-\x03-\x03-\x03.\x03.\x03.\x03" + - ".\x05.\u01BF\n.\x03.\x03.\x03.\x03.\x05.\u01C5\n.\x03.\x03.\x03/\x03/" + - "\x05/\u01CB\n/\x030\x030\x030\x031\x031\x031\x051\u01D3\n1\x032\x032\x03" + - "2\x033\x033\x033\x034\x034\x035\x035\x036\x036\x036\x036\x036\x056\u01E4" + - "\n6\x037\x037\x037\x037\x037\x037\x077\u01EC\n7\f7\x0E7\u01EF\v7\x038" + - "\x038\x038\x038\x038\x038\x078\u01F7\n8\f8\x0E8\u01FA\v8\x039\x039\x03" + - "9\x039\x039\x039\x079\u0202\n9\f9\x0E9\u0205\v9\x03:\x03:\x03:\x03:\x03" + - ":\x03:\x07:\u020D\n:\f:\x0E:\u0210\v:\x03;\x03;\x03;\x03;\x03;\x03;\x07" + - ";\u0218\n;\f;\x0E;\u021B\v;\x03<\x03<\x03<\x03<\x03<\x03<\x07<\u0223\n" + - "<\f<\x0E<\u0226\v<\x03=\x03=\x03=\x03=\x03=\x03=\x03=\x05=\u022F\n=\x03" + - ">\x03>\x03>\x03>\x03>\x05>\u0236\n>\x03?\x03?\x03@\x03@\x03@\x07@\u023D" + - "\n@\f@\x0E@\u0240\v@\x03A\x03A\x03A\x05A\u0245\nA\x03B\x03B\x03C\x03C" + - "\x03C\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x03E\x03E\x03E\x02\x02\tRlnp" + - "rtvF\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + - '\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02' + - "(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02" + - "D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02" + - "`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02z\x02" + - "|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x02\x10\x03\x02\x06" + - "\x07\x03\x02\r\x0E\x03\x02\x19\x1A\x03\x02DE\x04\x02CCFF\x03\x02\x1C\x1E" + - "\x04\x02++--\x05\x02**,,44\x03\x02.1\x04\x02**,,\x03\x02=@\x03\x02;<\x03" + - "\x025:\x04\x02\x1C\x1EBB\x02\u0255\x02\x8B\x03\x02\x02\x02\x04\x90\x03" + - "\x02\x02\x02\x06\x94\x03\x02\x02\x02\b\x97\x03\x02\x02\x02\n\x9E\x03\x02" + - "\x02\x02\f\xA7\x03\x02\x02\x02\x0E\xA9\x03\x02\x02\x02\x10\xB5\x03\x02" + - "\x02\x02\x12\xB8\x03\x02\x02\x02\x14\xBA\x03\x02\x02\x02\x16\xBC\x03\x02" + - "\x02\x02\x18\xBE\x03\x02\x02\x02\x1A\xC5\x03\x02\x02\x02\x1C\xCD\x03\x02" + - '\x02\x02\x1E\xD1\x03\x02\x02\x02 \xD9\x03\x02\x02\x02"\xDB\x03\x02\x02' + - "\x02$\xE1\x03\x02\x02\x02&\xE6\x03\x02\x02\x02(\xE8\x03\x02\x02\x02*\xF1" + - "\x03\x02\x02\x02,\u0106\x03\x02\x02\x02.\u010B\x03\x02\x02\x020\u010D" + - "\x03\x02\x02\x022\u0126\x03\x02\x02\x024\u012C\x03\x02\x02\x026\u0134" + - "\x03\x02\x02\x028\u0137\x03\x02\x02\x02:\u0145\x03\x02\x02\x02<\u0147" + - "\x03\x02\x02\x02>\u014B\x03\x02\x02\x02@\u014D\x03\x02\x02\x02B\u014F" + - "\x03\x02\x02\x02D\u0151\x03\x02\x02\x02F\u0163\x03\x02\x02\x02H\u016B" + - "\x03\x02\x02\x02J\u0173\x03\x02\x02\x02L\u0175\x03\x02\x02\x02N\u0177" + - "\x03\x02\x02\x02P\u0184\x03\x02\x02\x02R\u0191\x03\x02\x02\x02T\u01AB" + - "\x03\x02\x02\x02V\u01B3\x03\x02\x02\x02X\u01B6\x03\x02\x02\x02Z\u01BA" + - "\x03\x02\x02\x02\\\u01CA\x03\x02\x02\x02^\u01CC\x03\x02\x02\x02`\u01D2" + - "\x03\x02\x02\x02b\u01D4\x03\x02\x02\x02d\u01D7\x03\x02\x02\x02f\u01DA" + - "\x03\x02\x02\x02h\u01DC\x03\x02\x02\x02j\u01E3\x03\x02\x02\x02l\u01E5" + - "\x03\x02\x02\x02n\u01F0\x03\x02\x02\x02p\u01FB\x03\x02\x02\x02r\u0206" + - "\x03\x02\x02\x02t\u0211\x03\x02\x02\x02v\u021C\x03\x02\x02\x02x\u022E" + - "\x03\x02\x02\x02z\u0235\x03\x02\x02\x02|\u0237\x03\x02\x02\x02~\u0239" + - "\x03\x02\x02\x02\x80\u0244\x03\x02\x02\x02\x82\u0246\x03\x02\x02\x02\x84" + - "\u0248\x03\x02\x02\x02\x86\u024D\x03\x02\x02\x02\x88\u0252\x03\x02\x02" + - "\x02\x8A\x8C\x05\x04\x03\x02\x8B\x8A\x03\x02\x02\x02\x8B\x8C\x03\x02\x02" + - "\x02\x8C\x8D\x03\x02\x02\x02\x8D\x8E\x07\x02\x02\x03\x8E\x03\x03\x02\x02" + - "\x02\x8F\x91\x05\x06\x04\x02\x90\x8F\x03\x02\x02\x02\x91\x92\x03\x02\x02" + - "\x02\x92\x90\x03\x02\x02\x02\x92\x93\x03\x02\x02\x02\x93\x05\x03\x02\x02" + - "\x02\x94\x95\x05\b\x05\x02\x95\x07\x03\x02\x02\x02\x96\x98\x05\n\x06\x02" + - "\x97\x96\x03\x02\x02\x02\x98\x99\x03\x02\x02\x02\x99\x97\x03\x02\x02\x02" + - "\x99\x9A\x03\x02\x02\x02\x9A\t\x03\x02\x02\x02\x9B\x9F\x05 \x11\x02\x9C" + - "\x9F\x05\f\x07\x02\x9D\x9F\x07 \x02\x02\x9E\x9B\x03\x02\x02\x02\x9E\x9C" + - "\x03\x02\x02\x02\x9E\x9D\x03\x02\x02\x02\x9F\v\x03\x02\x02\x02\xA0\xA1" + - "\x05\x10\t\x02\xA1\xA2\x07 \x02\x02\xA2\xA8\x03\x02\x02\x02\xA3\xA5\x05" + - "\x0E\b\x02\xA4\xA6\x07 \x02\x02\xA5\xA4\x03\x02\x02\x02\xA5\xA6\x03\x02" + - "\x02\x02\xA6\xA8\x03\x02\x02\x02\xA7\xA0\x03\x02\x02\x02\xA7\xA3\x03\x02" + - "\x02\x02\xA8\r\x03\x02\x02\x02\xA9\xAA\x07\x15\x02\x02\xAA\xAB\x05\x14" + - "\v\x02\xAB\xAD\x07#\x02\x02\xAC\xAE\x05\x1A\x0E\x02\xAD\xAC\x03\x02\x02" + - "\x02\xAD\xAE\x03\x02\x02\x02\xAE\xAF\x03\x02\x02\x02\xAF\xB0\x07$\x02" + - '\x02\xB0\xB1\x07\x18\x02\x02\xB1\xB3\x05\x80A\x02\xB2\xB4\x05"\x12\x02' + - "\xB3\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4\x0F\x03\x02\x02\x02" + - "\xB5\xB6\x05\x12\n\x02\xB6\xB7\x05\x18\r\x02\xB7\x11\x03\x02\x02\x02\xB8" + - "\xB9\t\x02\x02\x02\xB9\x13\x03\x02\x02\x02\xBA\xBB\x05\x16\f\x02\xBB\x15" + - "\x03\x02\x02\x02\xBC\xBD\x07B\x02\x02\xBD\x17\x03\x02\x02\x02\xBE\xBF" + - '\x05\x14\v\x02\xBF\xC0\x07"\x02\x02\xC0\xC3\x05\x80A\x02\xC1\xC2\x07' + - "5\x02\x02\xC2\xC4\x05\x1E\x10\x02\xC3\xC1\x03\x02\x02\x02\xC3\xC4\x03" + - "\x02\x02\x02\xC4\x19\x03\x02\x02\x02\xC5\xCA\x05\x1C\x0F\x02\xC6\xC7\x07" + - "\x1F\x02\x02\xC7\xC9\x05\x1C\x0F\x02\xC8\xC6\x03\x02\x02\x02\xC9\xCC\x03" + - "\x02\x02\x02\xCA\xC8\x03\x02\x02\x02\xCA\xCB\x03\x02\x02\x02\xCB\x1B\x03" + - "\x02\x02\x02\xCC\xCA\x03\x02\x02\x02\xCD\xCE\x05\x14\v\x02\xCE\xCF\x07" + - '"\x02\x02\xCF\xD0\x05\x80A\x02\xD0\x1D\x03\x02\x02\x02\xD1\xD2\x05z>' + - '\x02\xD2\x1F\x03\x02\x02\x02\xD3\xDA\x05"\x12\x02\xD4\xDA\x05$\x13\x02' + - "\xD5\xDA\x05&\x14\x02\xD6\xDA\x05.\x18\x02\xD7\xDA\x056\x1C\x02\xD8\xDA" + - "\x058\x1D\x02\xD9\xD3\x03\x02\x02\x02\xD9\xD4\x03\x02\x02\x02\xD9\xD5" + - "\x03\x02\x02\x02\xD9\xD6\x03\x02\x02\x02\xD9\xD7\x03\x02\x02\x02\xD9\xD8" + - "\x03\x02\x02\x02\xDA!\x03\x02\x02\x02\xDB\xDD\x07(\x02\x02\xDC\xDE\x05" + - "\b\x05\x02\xDD\xDC\x03\x02\x02\x02\xDD\xDE\x03\x02\x02\x02\xDE\xDF\x03" + - "\x02\x02\x02\xDF\xE0\x07)\x02\x02\xE0#\x03\x02\x02\x02\xE1\xE2\x05~@\x02" + - "\xE2\xE3\x07 \x02\x02\xE3%\x03\x02\x02\x02\xE4\xE7\x05(\x15\x02\xE5\xE7" + - "\x05*\x16\x02\xE6\xE4\x03\x02\x02\x02\xE6\xE5\x03\x02\x02\x02\xE7'\x03" + - "\x02\x02\x02\xE8\xE9\x07\x11\x02\x02\xE9\xEA\x07#\x02\x02\xEA\xEB\x05" + - "~@\x02\xEB\xEC\x07$\x02\x02\xEC\xEF\x05 \x11\x02\xED\xEE\x07\x12\x02\x02" + - "\xEE\xF0\x05 \x11\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02" + - "\xF0)\x03\x02\x02\x02\xF1\xF2\x07\n\x02\x02\xF2\xF3\x07#\x02\x02\xF3\xF4" + - "\x05~@\x02\xF4\xF5\x07$\x02\x02\xF5\xF9\x07(\x02\x02\xF6\xF8\x05,\x17" + - "\x02\xF7\xF6\x03\x02\x02\x02\xF8\xFB\x03\x02\x02\x02\xF9\xF7\x03\x02\x02" + - "\x02\xF9\xFA\x03\x02\x02\x02\xFA\xFC\x03\x02\x02\x02\xFB\xF9\x03\x02\x02" + - "\x02\xFC\xFD\x07)\x02\x02\xFD+\x03\x02\x02\x02\xFE\xFF\x07\v\x02\x02\xFF" + - '\u0100\x05~@\x02\u0100\u0101\x07"\x02\x02\u0101\u0102\x05 \x11\x02\u0102' + - '\u0107\x03\x02\x02\x02\u0103\u0104\x07\f\x02\x02\u0104\u0105\x07"\x02' + - "\x02\u0105\u0107\x05 \x11\x02\u0106\xFE\x03\x02\x02\x02\u0106\u0103\x03" + - "\x02\x02\x02\u0107-\x03\x02\x02\x02\u0108\u010C\x050\x19\x02\u0109\u010C" + - "\x052\x1A\x02\u010A\u010C\x054\x1B\x02\u010B\u0108\x03\x02\x02\x02\u010B" + - "\u0109\x03\x02\x02\x02\u010B\u010A\x03\x02\x02\x02\u010C/\x03\x02\x02" + - "\x02\u010D\u010E\x07\x13\x02\x02\u010E\u0115\x07#\x02\x02\u010F\u0112" + - "\x05\x10\t\x02\u0110\u0112\x05~@\x02\u0111\u010F\x03\x02\x02\x02\u0111" + - "\u0110\x03\x02\x02\x02\u0112\u0113\x03\x02\x02\x02\u0113\u0114\b\x19\x01" + - "\x02\u0114\u0116\x03\x02\x02\x02\u0115\u0111\x03\x02\x02\x02\u0115\u0116" + - "\x03\x02\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117\u011B\x07 \x02\x02" + - "\u0118\u0119\x05~@\x02\u0119\u011A\b\x19\x01\x02\u011A\u011C\x03\x02\x02" + - "\x02\u011B\u0118\x03\x02\x02\x02\u011B\u011C\x03\x02\x02\x02\u011C\u011D" + - "\x03\x02\x02\x02\u011D\u0121\x07 \x02\x02\u011E\u011F\x05~@\x02\u011F" + - "\u0120\b\x19\x01\x02\u0120\u0122\x03\x02\x02\x02\u0121\u011E\x03\x02\x02" + - "\x02\u0121\u0122\x03\x02\x02\x02\u0122\u0123\x03\x02\x02\x02\u0123\u0124" + - "\x07$\x02\x02\u0124\u0125\x05 \x11\x02\u01251\x03\x02\x02\x02\u0126\u0127" + - "\x07\x10\x02\x02\u0127\u0128\x07#\x02\x02\u0128\u0129\x05~@\x02\u0129" + - "\u012A\x07$\x02\x02\u012A\u012B\x05 \x11\x02\u012B3\x03\x02\x02\x02\u012C" + - "\u012D\x07\x0F\x02\x02\u012D\u012E\x05 \x11\x02\u012E\u012F\x07\x10\x02" + - "\x02\u012F\u0130\x07#\x02\x02\u0130\u0131\x05~@\x02\u0131\u0132\x07$\x02" + - "\x02\u0132\u0133\x07 \x02\x02\u01335\x03\x02\x02\x02\u0134\u0135\t\x03" + - "\x02\x02\u0135\u0136\x07 \x02\x02\u01367\x03\x02\x02\x02\u0137\u0139\x07" + - "\x16\x02\x02\u0138\u013A\x05~@\x02\u0139\u0138\x03\x02\x02\x02\u0139\u013A" + - "\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02\u013B\u013C\x07 \x02\x02" + - "\u013C9\x03\x02\x02\x02\u013D\u0146\x05<\x1F\x02\u013E\u0146\x05> \x02" + - "\u013F\u0146\x05@!\x02\u0140\u0146\x05D#\x02\u0141\u0146\x05F$\x02\u0142" + - "\u0146\x05L'\x02\u0143\u0146\x05N(\x02\u0144\u0146\x05P)\x02\u0145\u013D" + - "\x03\x02\x02\x02\u0145\u013E\x03\x02\x02\x02\u0145\u013F\x03\x02\x02\x02" + - "\u0145\u0140\x03\x02\x02\x02\u0145\u0141\x03\x02\x02\x02\u0145\u0142\x03" + - "\x02\x02\x02\u0145\u0143\x03\x02\x02\x02\u0145\u0144\x03\x02\x02\x02\u0146" + - ";\x03\x02\x02\x02\u0147\u0148\x07#\x02\x02\u0148\u0149\x05~@\x02\u0149" + - "\u014A\x07$\x02\x02\u014A=\x03\x02\x02\x02\u014B\u014C\t\x04\x02\x02\u014C" + - '?\x03\x02\x02\x02\u014D\u014E\x05B"\x02\u014EA\x03\x02\x02\x02\u014F' + - "\u0150\x07B\x02\x02\u0150C\x03\x02\x02\x02\u0151\u0152\t\x05\x02\x02\u0152" + - "E\x03\x02\x02\x02\u0153\u0157\x07I\x02\x02\u0154\u0156\x05H%\x02\u0155" + - "\u0154\x03\x02\x02\x02\u0156\u0159\x03\x02\x02\x02\u0157\u0155\x03\x02" + - "\x02\x02\u0157\u0158\x03\x02\x02\x02\u0158\u015A\x03\x02\x02\x02\u0159" + - "\u0157\x03\x02\x02\x02\u015A\u0164\x07K\x02\x02\u015B\u015F\x07J\x02\x02" + - "\u015C\u015E\x05J&\x02\u015D\u015C\x03\x02\x02\x02\u015E\u0161\x03\x02" + - "\x02\x02\u015F\u015D\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02\u0160" + - "\u0162\x03\x02\x02\x02\u0161\u015F\x03\x02\x02\x02\u0162\u0164\x07M\x02" + - "\x02\u0163\u0153\x03\x02\x02\x02\u0163\u015B\x03\x02\x02\x02\u0164G\x03" + - "\x02\x02\x02\u0165\u016C\x07L\x02\x02\u0166\u0168\x07\x03\x02\x02\u0167" + - "\u0169\x05~@\x02\u0168\u0167\x03\x02\x02\x02\u0168\u0169\x03\x02\x02\x02" + - "\u0169\u016A\x03\x02\x02\x02\u016A\u016C\x07'\x02\x02\u016B\u0165\x03" + - "\x02\x02\x02\u016B\u0166\x03\x02\x02\x02\u016CI\x03\x02\x02\x02\u016D" + - "\u0174\x07N\x02\x02\u016E\u0170\x07\x03\x02\x02\u016F\u0171\x05~@\x02" + - "\u0170\u016F\x03\x02\x02\x02\u0170\u0171\x03\x02\x02\x02\u0171\u0172\x03" + - "\x02\x02\x02\u0172\u0174\x07'\x02\x02\u0173\u016D\x03\x02\x02\x02\u0173" + - "\u016E\x03\x02\x02\x02\u0174K\x03\x02\x02\x02\u0175\u0176\t\x06\x02\x02" + - "\u0176M\x03\x02\x02\x02\u0177\u0180\x07%\x02\x02\u0178\u017D\x05~@\x02" + - "\u0179\u017A\x07\x1F\x02\x02\u017A\u017C\x05~@\x02\u017B\u0179\x03\x02" + - "\x02\x02\u017C\u017F\x03\x02\x02\x02\u017D\u017B\x03\x02\x02\x02\u017D" + - "\u017E\x03\x02\x02\x02\u017E\u0181\x03\x02\x02\x02\u017F\u017D\x03\x02" + - "\x02\x02\u0180\u0178\x03\x02\x02\x02\u0180\u0181\x03\x02\x02\x02\u0181" + - "\u0182\x03\x02\x02\x02\u0182\u0183\x07&\x02\x02\u0183O\x03\x02\x02\x02" + - "\u0184\u0185\t\x07\x02\x02\u0185Q\x03\x02\x02\x02\u0186\u0187\b*\x01\x02" + - "\u0187\u0192\x05:\x1E\x02\u0188\u0189\x07\x17\x02\x02\u0189\u018A\x05" + - "R*\x02\u018A\u018C\x07#\x02\x02\u018B\u018D\x05T+\x02\u018C\u018B\x03" + - "\x02\x02\x02\u018C\u018D\x03\x02\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E" + - "\u018F\x07$\x02\x02\u018F\u0190\b*\x01\x02\u0190\u0192\x03\x02\x02\x02" + - "\u0191\u0186\x03\x02\x02\x02\u0191\u0188\x03\x02\x02\x02\u0192\u01A8\x03" + - "\x02\x02\x02\u0193\u0194\f\x07\x02\x02\u0194\u0196\x07#\x02\x02\u0195" + - "\u0197\x05T+\x02\u0196\u0195\x03\x02\x02\x02\u0196\u0197\x03\x02\x02\x02" + - "\u0197\u0198\x03\x02\x02\x02\u0198\u0199\x07$\x02\x02\u0199\u01A7\b*\x01" + - "\x02\u019A\u019B\f\x05\x02\x02\u019B\u019C\x05V,\x02\u019C\u019D\b*\x01" + - "\x02\u019D\u01A7\x03\x02\x02\x02\u019E\u019F\f\x04\x02\x02\u019F\u01A0" + - "\x05X-\x02\u01A0\u01A1\b*\x01\x02\u01A1\u01A7\x03\x02\x02\x02\u01A2\u01A3" + - "\f\x03\x02\x02\u01A3\u01A4\x05Z.\x02\u01A4\u01A5\b*\x01\x02\u01A5\u01A7" + - "\x03\x02\x02\x02\u01A6\u0193\x03\x02\x02\x02\u01A6\u019A\x03\x02\x02\x02" + - "\u01A6\u019E\x03\x02\x02\x02\u01A6\u01A2\x03\x02\x02\x02\u01A7\u01AA\x03" + - "\x02\x02\x02\u01A8\u01A6\x03\x02\x02\x02\u01A8\u01A9\x03\x02\x02\x02\u01A9" + - "S\x03\x02\x02\x02\u01AA\u01A8\x03\x02\x02\x02\u01AB\u01B0\x05z>\x02\u01AC" + - "\u01AD\x07\x1F\x02\x02\u01AD\u01AF\x05z>\x02\u01AE\u01AC\x03\x02\x02\x02" + - "\u01AF\u01B2\x03\x02\x02\x02\u01B0\u01AE\x03\x02\x02\x02\u01B0\u01B1\x03" + - "\x02\x02\x02\u01B1U\x03\x02\x02\x02\u01B2\u01B0\x03\x02\x02\x02\u01B3" + - '\u01B4\x07A\x02\x02\u01B4\u01B5\x05B"\x02\u01B5W\x03\x02\x02\x02\u01B6' + - "\u01B7\x07%\x02\x02\u01B7\u01B8\x05~@\x02\u01B8\u01B9\x07&\x02\x02\u01B9" + - "Y\x03\x02\x02\x02\u01BA\u01BE\x07%\x02\x02\u01BB\u01BC\x05~@\x02\u01BC" + - "\u01BD\b.\x01\x02\u01BD\u01BF\x03\x02\x02\x02\u01BE\u01BB\x03\x02\x02" + - "\x02\u01BE\u01BF\x03\x02\x02\x02\u01BF\u01C0\x03\x02\x02\x02\u01C0\u01C4" + - '\x07"\x02\x02\u01C1\u01C2\x05~@\x02\u01C2\u01C3\b.\x01\x02\u01C3\u01C5' + - "\x03\x02\x02\x02\u01C4\u01C1\x03\x02\x02\x02\u01C4\u01C5\x03\x02\x02\x02" + - "\u01C5\u01C6\x03\x02\x02\x02\u01C6\u01C7\x07&\x02\x02\u01C7[\x03\x02\x02" + - "\x02\u01C8\u01CB\x05R*\x02\u01C9\u01CB\x05^0\x02\u01CA\u01C8\x03\x02\x02" + - "\x02\u01CA\u01C9\x03\x02\x02\x02\u01CB]\x03\x02\x02\x02\u01CC\u01CD\x05" + - "R*\x02\u01CD\u01CE\x05f4\x02\u01CE_\x03\x02\x02\x02\u01CF\u01D3\x05\\" + - "/\x02\u01D0\u01D3\x05b2\x02\u01D1\u01D3\x05d3\x02\u01D2\u01CF\x03\x02" + - "\x02\x02\u01D2\u01D0\x03\x02\x02\x02\u01D2\u01D1\x03\x02\x02\x02\u01D3" + - "a\x03\x02\x02\x02\u01D4\u01D5\x05f4\x02\u01D5\u01D6\x05\\/\x02\u01D6c" + - "\x03\x02\x02\x02\u01D7\u01D8\x05h5\x02\u01D8\u01D9\x05\\/\x02\u01D9e\x03" + - "\x02\x02\x02\u01DA\u01DB\t\b\x02\x02\u01DBg\x03\x02\x02\x02\u01DC\u01DD" + - "\t\t\x02\x02\u01DDi\x03\x02\x02\x02\u01DE\u01E4\x05`1\x02\u01DF\u01E0" + - "\x05`1\x02\u01E0\u01E1\x07\b\x02\x02\u01E1\u01E2\x05\x80A\x02\u01E2\u01E4" + - "\x03\x02\x02\x02\u01E3\u01DE\x03\x02\x02\x02\u01E3\u01DF\x03\x02\x02\x02" + - "\u01E4k\x03\x02\x02\x02\u01E5\u01E6\b7\x01\x02\u01E6\u01E7\x05j6\x02\u01E7" + - "\u01ED\x03\x02\x02\x02\u01E8\u01E9\f\x03\x02\x02\u01E9\u01EA\t\n\x02\x02" + - "\u01EA\u01EC\x05j6\x02\u01EB\u01E8\x03\x02\x02\x02\u01EC\u01EF\x03\x02" + - "\x02\x02\u01ED\u01EB\x03\x02\x02\x02\u01ED\u01EE\x03\x02\x02\x02\u01EE" + - "m\x03\x02\x02\x02\u01EF\u01ED\x03\x02\x02\x02\u01F0\u01F1\b8\x01\x02\u01F1" + - "\u01F2\x05l7\x02\u01F2\u01F8\x03\x02\x02\x02\u01F3\u01F4\f\x03\x02\x02" + - "\u01F4\u01F5\t\v\x02\x02\u01F5\u01F7\x05l7\x02\u01F6\u01F3\x03\x02\x02" + - "\x02\u01F7\u01FA\x03\x02\x02\x02\u01F8\u01F6\x03\x02\x02\x02\u01F8\u01F9" + - "\x03\x02\x02\x02\u01F9o\x03\x02\x02\x02\u01FA\u01F8\x03\x02\x02\x02\u01FB" + - "\u01FC\b9\x01\x02\u01FC\u01FD\x05n8\x02\u01FD\u0203\x03\x02\x02\x02\u01FE" + - "\u01FF\f\x03\x02\x02\u01FF\u0200\t\f\x02\x02\u0200\u0202\x05n8\x02\u0201" + - "\u01FE\x03\x02\x02\x02\u0202\u0205\x03\x02\x02\x02\u0203\u0201\x03\x02" + - "\x02\x02\u0203\u0204\x03\x02\x02\x02\u0204q\x03\x02\x02\x02\u0205\u0203" + - "\x03\x02\x02\x02\u0206\u0207\b:\x01\x02\u0207\u0208\x05p9\x02\u0208\u020E" + - "\x03\x02\x02\x02\u0209\u020A\f\x03\x02\x02\u020A\u020B\t\r\x02\x02\u020B" + - "\u020D\x05p9\x02\u020C\u0209\x03\x02\x02\x02\u020D\u0210\x03\x02\x02\x02" + - "\u020E\u020C\x03\x02\x02\x02\u020E\u020F\x03\x02\x02\x02\u020Fs\x03\x02" + - "\x02\x02\u0210\u020E\x03\x02\x02\x02\u0211\u0212\b;\x01\x02\u0212\u0213" + - "\x05r:\x02\u0213\u0219\x03\x02\x02\x02\u0214\u0215\f\x03\x02\x02\u0215" + - "\u0216\x072\x02\x02\u0216\u0218\x05r:\x02\u0217\u0214\x03\x02\x02\x02" + - "\u0218\u021B\x03\x02\x02\x02\u0219\u0217\x03\x02\x02\x02\u0219\u021A\x03" + - "\x02\x02\x02\u021Au\x03\x02\x02\x02\u021B\u0219\x03\x02\x02\x02\u021C" + - "\u021D\b<\x01\x02\u021D\u021E\x05t;\x02\u021E\u0224\x03\x02\x02\x02\u021F" + - "\u0220\f\x03\x02\x02\u0220\u0221\x073\x02\x02\u0221\u0223\x05t;\x02\u0222" + - "\u021F\x03\x02\x02\x02\u0223\u0226\x03\x02\x02\x02\u0224\u0222\x03\x02" + - "\x02\x02\u0224\u0225\x03\x02\x02\x02\u0225w\x03\x02\x02\x02\u0226\u0224" + - "\x03\x02\x02\x02\u0227\u022F\x05v<\x02\u0228\u0229\x05v<\x02\u0229\u022A" + - '\x07!\x02\x02\u022A\u022B\x05x=\x02\u022B\u022C\x07"\x02\x02\u022C\u022D' + - "\x05x=\x02\u022D\u022F\x03\x02\x02\x02\u022E\u0227\x03\x02\x02\x02\u022E" + - "\u0228\x03\x02\x02\x02\u022Fy\x03\x02\x02\x02\u0230\u0236\x05x=\x02\u0231" + - "\u0232\x05R*\x02\u0232\u0233\x05|?\x02\u0233\u0234\x05z>\x02\u0234\u0236" + - "\x03\x02\x02\x02\u0235\u0230\x03\x02\x02\x02\u0235\u0231\x03\x02\x02\x02" + - "\u0236{\x03\x02\x02\x02\u0237\u0238\t\x0E\x02\x02\u0238}\x03\x02\x02\x02" + - "\u0239\u023E\x05z>\x02\u023A\u023B\x07\x1F\x02\x02\u023B\u023D\x05z>\x02" + - "\u023C\u023A\x03\x02\x02\x02\u023D\u0240\x03\x02\x02\x02\u023E\u023C\x03" + - "\x02\x02\x02\u023E\u023F\x03\x02\x02\x02\u023F\x7F\x03\x02\x02\x02\u0240" + - "\u023E\x03\x02\x02\x02\u0241\u0245\x05\x82B\x02\u0242\u0245\x05\x84C\x02" + - "\u0243\u0245\x05\x86D\x02\u0244\u0241\x03\x02\x02\x02\u0244\u0242\x03" + - "\x02\x02\x02\u0244\u0243\x03\x02\x02\x02\u0245\x81\x03\x02\x02\x02\u0246" + - "\u0247\x05\x88E\x02\u0247\x83\x03\x02\x02\x02\u0248\u0249\x05\x88E\x02" + - "\u0249\u024A\x07=\x02\x02\u024A"; + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + + "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x03\x02\x05\x02\x96\n\x02\x03\x02" + + "\x03\x02\x03\x03\x06\x03\x9B\n\x03\r\x03\x0E\x03\x9C\x03\x04\x03\x04\x03" + + "\x05\x06\x05\xA2\n\x05\r\x05\x0E\x05\xA3\x03\x06\x03\x06\x03\x06\x05\x06" + + "\xA9\n\x06\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\xB0\n\x07\x05" + + "\x07\xB2\n\x07\x03\b\x03\b\x03\b\x03\b\x05\b\xB8\n\b\x03\b\x03\b\x03\b" + + "\x03\b\x05\b\xBE\n\b\x03\t\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03" + + "\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r\xCE\n\r\x03\x0E\x03\x0E\x03\x0E" + + "\x07\x0E\xD3\n\x0E\f\x0E\x0E\x0E\xD6\v\x0E\x03\x0F\x03\x0F\x03\x0F\x03" + + "\x0F\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x05" + + "\x11\xE4\n\x11\x03\x12\x03\x12\x05\x12\xE8\n\x12\x03\x12\x03\x12\x03\x13" + + "\x03\x13\x03\x13\x03\x14\x03\x14\x05\x14\xF1\n\x14\x03\x15\x03\x15\x03" + + "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15\xFA\n\x15\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u0102\n\x16\f\x16\x0E\x16\u0105" + + "\v\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17" + + "\x03\x17\x03\x17\x05\x17\u0111\n\x17\x03\x18\x03\x18\x03\x18\x05\x18\u0116" + + "\n\x18\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u011C\n\x19\x03\x19\x03" + + "\x19\x05\x19\u0120\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u0126" + + "\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u012C\n\x19\x03\x19\x03" + + "\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1D\x03\x1D\x05\x1D\u0144\n\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E" + + "\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u0150\n\x1E\x03" + + "\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03\"\x03\"\x03#\x03" + + "#\x03$\x03$\x07$\u0160\n$\f$\x0E$\u0163\v$\x03$\x03$\x03$\x07$\u0168\n" + + "$\f$\x0E$\u016B\v$\x03$\x05$\u016E\n$\x03%\x03%\x03%\x05%\u0173\n%\x03" + + "%\x05%\u0176\n%\x03&\x03&\x03&\x05&\u017B\n&\x03&\x05&\u017E\n&\x03\'" + + "\x03\'\x03(\x03(\x03(\x03(\x07(\u0186\n(\f(\x0E(\u0189\v(\x05(\u018B\n" + + "(\x03(\x03(\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x05*\u0197\n*\x03" + + "*\x03*\x03*\x05*\u019C\n*\x03*\x03*\x03*\x05*\u01A1\n*\x03*\x03*\x03*" + + "\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x07*\u01B1\n*" + + "\f*\x0E*\u01B4\v*\x03+\x03+\x03+\x07+\u01B9\n+\f+\x0E+\u01BC\v+\x03,\x03" + + ",\x03,\x03-\x03-\x03-\x03-\x03.\x03.\x03.\x03.\x05.\u01C9\n.\x03.\x03" + + ".\x03.\x03.\x05.\u01CF\n.\x03.\x03.\x03/\x03/\x05/\u01D5\n/\x030\x030" + + "\x030\x031\x031\x031\x051\u01DD\n1\x032\x032\x032\x033\x033\x033\x034" + + "\x034\x035\x035\x036\x036\x036\x036\x036\x056\u01EE\n6\x037\x037\x037" + + "\x037\x037\x037\x077\u01F6\n7\f7\x0E7\u01F9\v7\x038\x038\x038\x038\x03" + + "8\x038\x078\u0201\n8\f8\x0E8\u0204\v8\x039\x039\x039\x039\x039\x039\x03" + + "9\x079\u020D\n9\f9\x0E9\u0210\v9\x03:\x03:\x03;\x03;\x03;\x03;\x03;\x03" + + ";\x07;\u021A\n;\f;\x0E;\u021D\v;\x03<\x03<\x03<\x03<\x03<\x03<\x07<\u0225" + + "\n<\f<\x0E<\u0228\v<\x03=\x03=\x03=\x03=\x03=\x03=\x07=\u0230\n=\f=\x0E" + + "=\u0233\v=\x03>\x03>\x03>\x03>\x03>\x03>\x07>\u023B\n>\f>\x0E>\u023E\v" + + ">\x03?\x03?\x03?\x03?\x03?\x03?\x07?\u0246\n?\f?\x0E?\u0249\v?\x03@\x03" + + "@\x03@\x03@\x03@\x03@\x07@\u0251\n@\f@\x0E@\u0254\v@\x03A\x03A\x03A\x03" + + "A\x03A\x03A\x07A\u025C\nA\fA\x0EA\u025F\vA\x03B\x03B\x03B\x03B\x03B\x03" + + "B\x03B\x05B\u0268\nB\x03C\x03C\x03C\x03C\x03C\x05C\u026F\nC\x03D\x03D" + + "\x03E\x03E\x03E\x07E\u0276\nE\fE\x0EE\u0279\vE\x03F\x03F\x03F\x05F\u027E" + + "\nF\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03J\x03" + + "J\x03J\x02\x02\rRlnptvxz|~\x80K\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f" + + "\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E" + + "\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02" + + ":\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02" + + "V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02" + + "r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88" + + "\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x02\x11\x03\x02\x06\x07\x03" + + "\x02\r\x0E\x03\x02\x19\x1A\x03\x02KL\x04\x02JJMM\x03\x02\x1C\x1E\x04\x02" + + "++--\x05\x02**,,44\x03\x02.1\x04\x02**,,\x03\x02EG\x03\x02=@\x03\x02;" + + "<\x03\x025:\x04\x02\x1C\x1EII\x02\u028D\x02\x95\x03\x02\x02\x02\x04\x9A" + + "\x03\x02\x02\x02\x06\x9E\x03\x02\x02\x02\b\xA1\x03\x02\x02\x02\n\xA8\x03" + + "\x02\x02\x02\f\xB1\x03\x02\x02\x02\x0E\xB3\x03\x02\x02\x02\x10\xBF\x03" + + "\x02\x02\x02\x12\xC2\x03\x02\x02\x02\x14\xC4\x03\x02\x02\x02\x16\xC6\x03" + + "\x02\x02\x02\x18\xC8\x03\x02\x02\x02\x1A\xCF\x03\x02\x02\x02\x1C\xD7\x03" + + "\x02\x02\x02\x1E\xDB\x03\x02\x02\x02 \xE3\x03\x02\x02\x02\"\xE5\x03\x02" + + "\x02\x02$\xEB\x03\x02\x02\x02&\xF0\x03\x02\x02\x02(\xF2\x03\x02\x02\x02" + + "*\xFB\x03\x02\x02\x02,\u0110\x03\x02\x02\x02.\u0115\x03\x02\x02\x020\u0117" + + "\x03\x02\x02\x022\u0130\x03\x02\x02\x024\u0136\x03\x02\x02\x026\u013E" + + "\x03\x02\x02\x028\u0141\x03\x02\x02\x02:\u014F\x03\x02\x02\x02<\u0151" + + "\x03\x02\x02\x02>\u0155\x03\x02\x02\x02@\u0157\x03\x02\x02\x02B\u0159" + + "\x03\x02\x02\x02D\u015B\x03\x02\x02\x02F\u016D\x03\x02\x02\x02H\u0175" + + "\x03\x02\x02\x02J\u017D\x03\x02\x02\x02L\u017F\x03\x02\x02\x02N\u0181" + + "\x03\x02\x02\x02P\u018E\x03\x02\x02\x02R\u019B\x03\x02\x02\x02T\u01B5" + + "\x03\x02\x02\x02V\u01BD\x03\x02\x02\x02X\u01C0\x03\x02\x02\x02Z\u01C4" + + "\x03\x02\x02\x02\\\u01D4\x03\x02\x02\x02^\u01D6\x03\x02\x02\x02`\u01DC" + + "\x03\x02\x02\x02b\u01DE\x03\x02\x02\x02d\u01E1\x03\x02\x02\x02f\u01E4" + + "\x03\x02\x02\x02h\u01E6\x03\x02\x02\x02j\u01ED\x03\x02\x02\x02l\u01EF" + + "\x03\x02\x02\x02n\u01FA\x03\x02\x02\x02p\u0205\x03\x02\x02\x02r\u0211" + + "\x03\x02\x02\x02t\u0213\x03\x02\x02\x02v\u021E\x03\x02\x02\x02x\u0229" + + "\x03\x02\x02\x02z\u0234\x03\x02\x02\x02|\u023F\x03\x02\x02\x02~\u024A" + + "\x03\x02\x02\x02\x80\u0255\x03\x02\x02\x02\x82\u0267\x03\x02\x02\x02\x84" + + "\u026E\x03\x02\x02\x02\x86\u0270\x03\x02\x02\x02\x88\u0272\x03\x02\x02" + + "\x02\x8A\u027D\x03\x02\x02\x02\x8C\u027F\x03\x02\x02\x02\x8E\u0281\x03" + + "\x02\x02\x02\x90\u0286\x03\x02\x02\x02\x92\u028B\x03\x02\x02\x02\x94\x96" + + "\x05\x04\x03\x02\x95\x94\x03\x02\x02\x02\x95\x96\x03\x02\x02\x02\x96\x97" + + "\x03\x02\x02\x02\x97\x98\x07\x02\x02\x03\x98\x03\x03\x02\x02\x02\x99\x9B" + + "\x05\x06\x04\x02\x9A\x99\x03\x02\x02\x02\x9B\x9C\x03\x02\x02\x02\x9C\x9A" + + "\x03\x02\x02\x02\x9C\x9D\x03\x02\x02\x02\x9D\x05\x03\x02\x02\x02\x9E\x9F" + + "\x05\b\x05\x02\x9F\x07\x03\x02\x02\x02\xA0\xA2\x05\n\x06\x02\xA1\xA0\x03" + + "\x02\x02\x02\xA2\xA3\x03\x02\x02\x02\xA3\xA1\x03\x02\x02\x02\xA3\xA4\x03" + + "\x02\x02\x02\xA4\t\x03\x02\x02\x02\xA5\xA9\x05 \x11\x02\xA6\xA9\x05\f" + + "\x07\x02\xA7\xA9\x07 \x02\x02\xA8\xA5\x03\x02\x02\x02\xA8\xA6\x03\x02" + + "\x02\x02\xA8\xA7\x03\x02\x02\x02\xA9\v\x03\x02\x02\x02\xAA\xAB\x05\x10" + + "\t\x02\xAB\xAC\x07 \x02\x02\xAC\xB2\x03\x02\x02\x02\xAD\xAF\x05\x0E\b" + + "\x02\xAE\xB0\x07 \x02\x02\xAF\xAE\x03\x02\x02\x02\xAF\xB0\x03\x02\x02" + + "\x02\xB0\xB2\x03\x02\x02\x02\xB1\xAA\x03\x02\x02\x02\xB1\xAD\x03\x02\x02" + + "\x02\xB2\r\x03\x02\x02\x02\xB3\xB4\x07\x15\x02\x02\xB4\xB5\x05\x14\v\x02" + + "\xB5\xB7\x07#\x02\x02\xB6\xB8\x05\x1A\x0E\x02\xB7\xB6\x03\x02\x02\x02" + + "\xB7\xB8\x03\x02\x02\x02\xB8\xB9\x03\x02\x02\x02\xB9\xBA\x07$\x02\x02" + + "\xBA\xBB\x07\x18\x02\x02\xBB\xBD\x05\x8AF\x02\xBC\xBE\x05\"\x12\x02\xBD" + + "\xBC\x03\x02\x02\x02\xBD\xBE\x03\x02\x02\x02\xBE\x0F\x03\x02\x02\x02\xBF" + + "\xC0\x05\x12\n\x02\xC0\xC1\x05\x18\r\x02\xC1\x11\x03\x02\x02\x02\xC2\xC3" + + "\t\x02\x02\x02\xC3\x13\x03\x02\x02\x02\xC4\xC5\x05\x16\f\x02\xC5\x15\x03" + + "\x02\x02\x02\xC6\xC7\x07I\x02\x02\xC7\x17\x03\x02\x02\x02\xC8\xC9\x05" + + "\x14\v\x02\xC9\xCA\x07\"\x02\x02\xCA\xCD\x05\x8AF\x02\xCB\xCC\x075\x02" + + "\x02\xCC\xCE\x05\x1E\x10\x02\xCD\xCB\x03\x02\x02\x02\xCD\xCE\x03\x02\x02" + + "\x02\xCE\x19\x03\x02\x02\x02\xCF\xD4\x05\x1C\x0F\x02\xD0\xD1\x07\x1F\x02" + + "\x02\xD1\xD3\x05\x1C\x0F\x02\xD2\xD0\x03\x02\x02\x02\xD3\xD6\x03\x02\x02" + + "\x02\xD4\xD2\x03\x02\x02\x02\xD4\xD5\x03\x02\x02\x02\xD5\x1B\x03\x02\x02" + + "\x02\xD6\xD4\x03\x02\x02\x02\xD7\xD8\x05\x14\v\x02\xD8\xD9\x07\"\x02\x02" + + "\xD9\xDA\x05\x8AF\x02\xDA\x1D\x03\x02\x02\x02\xDB\xDC\x05\x84C\x02\xDC" + + "\x1F\x03\x02\x02\x02\xDD\xE4\x05\"\x12\x02\xDE\xE4\x05$\x13\x02\xDF\xE4" + + "\x05&\x14\x02\xE0\xE4\x05.\x18\x02\xE1\xE4\x056\x1C\x02\xE2\xE4\x058\x1D" + + "\x02\xE3\xDD\x03\x02\x02\x02\xE3\xDE\x03\x02\x02\x02\xE3\xDF\x03\x02\x02" + + "\x02\xE3\xE0\x03\x02\x02\x02\xE3\xE1\x03\x02\x02\x02\xE3\xE2\x03\x02\x02" + + "\x02\xE4!\x03\x02\x02\x02\xE5\xE7\x07(\x02\x02\xE6\xE8\x05\b\x05\x02\xE7" + + "\xE6\x03\x02\x02\x02\xE7\xE8\x03\x02\x02\x02\xE8\xE9\x03\x02\x02\x02\xE9" + + "\xEA\x07)\x02\x02\xEA#\x03\x02\x02\x02\xEB\xEC\x05\x88E\x02\xEC\xED\x07" + + " \x02\x02\xED%\x03\x02\x02\x02\xEE\xF1\x05(\x15\x02\xEF\xF1\x05*\x16\x02" + + "\xF0\xEE\x03\x02\x02\x02\xF0\xEF\x03\x02\x02\x02\xF1\'\x03\x02\x02\x02" + + "\xF2\xF3\x07\x11\x02\x02\xF3\xF4\x07#\x02\x02\xF4\xF5\x05\x88E\x02\xF5" + + "\xF6\x07$\x02\x02\xF6\xF9\x05 \x11\x02\xF7\xF8\x07\x12\x02\x02\xF8\xFA" + + "\x05 \x11\x02\xF9\xF7\x03\x02\x02\x02\xF9\xFA\x03\x02\x02\x02\xFA)\x03" + + "\x02\x02\x02\xFB\xFC\x07\n\x02\x02\xFC\xFD\x07#\x02\x02\xFD\xFE\x05\x88" + + "E\x02\xFE\xFF\x07$\x02\x02\xFF\u0103\x07(\x02\x02\u0100\u0102\x05,\x17" + + "\x02\u0101\u0100\x03\x02\x02\x02\u0102\u0105\x03\x02\x02\x02\u0103\u0101" + + "\x03\x02\x02\x02\u0103\u0104\x03\x02\x02\x02\u0104\u0106\x03\x02\x02\x02" + + "\u0105\u0103\x03\x02\x02\x02\u0106\u0107\x07)\x02\x02\u0107+\x03\x02\x02" + + "\x02\u0108\u0109\x07\v\x02\x02\u0109\u010A\x05\x88E\x02\u010A\u010B\x07" + + "\"\x02\x02\u010B\u010C\x05 \x11\x02\u010C\u0111\x03\x02\x02\x02\u010D" + + "\u010E\x07\f\x02\x02\u010E\u010F\x07\"\x02\x02\u010F\u0111\x05 \x11\x02" + + "\u0110\u0108\x03\x02\x02\x02\u0110\u010D\x03\x02\x02\x02\u0111-\x03\x02" + + "\x02\x02\u0112\u0116\x050\x19\x02\u0113\u0116\x052\x1A\x02\u0114\u0116" + + "\x054\x1B\x02\u0115\u0112\x03\x02\x02\x02\u0115\u0113\x03\x02\x02\x02" + + "\u0115\u0114\x03\x02\x02\x02\u0116/\x03\x02\x02\x02\u0117\u0118\x07\x13" + + "\x02\x02\u0118\u011F\x07#\x02\x02\u0119\u011C\x05\x10\t\x02\u011A\u011C" + + "\x05\x88E\x02\u011B\u0119\x03\x02\x02\x02\u011B\u011A\x03\x02\x02\x02" + + "\u011C\u011D\x03\x02\x02\x02\u011D\u011E\b\x19\x01\x02\u011E\u0120\x03" + + "\x02\x02\x02\u011F\u011B\x03\x02\x02\x02\u011F\u0120\x03\x02\x02\x02\u0120" + + "\u0121\x03\x02\x02\x02\u0121\u0125\x07 \x02\x02\u0122\u0123\x05\x88E\x02" + + "\u0123\u0124\b\x19\x01\x02\u0124\u0126\x03\x02\x02\x02\u0125\u0122\x03" + + "\x02\x02\x02\u0125\u0126\x03\x02\x02\x02\u0126\u0127\x03\x02\x02\x02\u0127" + + "\u012B\x07 \x02\x02\u0128\u0129\x05\x88E\x02\u0129\u012A\b\x19\x01\x02" + + "\u012A\u012C\x03\x02\x02\x02\u012B\u0128\x03\x02\x02\x02\u012B\u012C\x03" + + "\x02\x02\x02\u012C\u012D\x03\x02\x02\x02\u012D\u012E\x07$\x02\x02\u012E" + + "\u012F\x05 \x11\x02\u012F1\x03\x02\x02\x02\u0130\u0131\x07\x10\x02\x02" + + "\u0131\u0132\x07#\x02\x02\u0132\u0133\x05\x88E\x02\u0133\u0134\x07$\x02" + + "\x02\u0134\u0135\x05 \x11\x02\u01353\x03\x02\x02\x02\u0136\u0137\x07\x0F" + + "\x02\x02\u0137\u0138\x05 \x11\x02\u0138\u0139\x07\x10\x02\x02\u0139\u013A" + + "\x07#\x02\x02\u013A\u013B\x05\x88E\x02\u013B\u013C\x07$\x02\x02\u013C" + + "\u013D\x07 \x02\x02\u013D5\x03\x02\x02\x02\u013E\u013F\t\x03\x02\x02\u013F" + + "\u0140\x07 \x02\x02\u01407\x03\x02\x02\x02\u0141\u0143\x07\x16\x02\x02" + + "\u0142\u0144\x05\x88E\x02\u0143\u0142\x03\x02\x02\x02\u0143\u0144\x03" + + "\x02\x02\x02\u0144\u0145\x03\x02\x02\x02\u0145\u0146\x07 \x02\x02\u0146" + + "9\x03\x02\x02\x02\u0147\u0150\x05<\x1F\x02\u0148\u0150\x05> \x02\u0149" + + "\u0150\x05@!\x02\u014A\u0150\x05D#\x02\u014B\u0150\x05F$\x02\u014C\u0150" + + "\x05L\'\x02\u014D\u0150\x05N(\x02\u014E\u0150\x05P)\x02\u014F\u0147\x03" + + "\x02\x02\x02\u014F\u0148\x03\x02\x02\x02\u014F\u0149\x03\x02\x02\x02\u014F" + + "\u014A\x03\x02\x02\x02\u014F\u014B\x03\x02\x02\x02\u014F\u014C\x03\x02" + + "\x02\x02\u014F\u014D\x03\x02\x02\x02\u014F\u014E\x03\x02\x02\x02\u0150" + + ";\x03\x02\x02\x02\u0151\u0152\x07#\x02\x02\u0152\u0153\x05\x88E\x02\u0153" + + "\u0154\x07$\x02\x02\u0154=\x03\x02\x02\x02\u0155\u0156\t\x04\x02\x02\u0156" + + "?\x03\x02\x02\x02\u0157\u0158\x05B\"\x02\u0158A\x03\x02\x02\x02\u0159" + + "\u015A\x07I\x02\x02\u015AC\x03\x02\x02\x02\u015B\u015C\t\x05\x02\x02\u015C" + + "E\x03\x02\x02\x02\u015D\u0161\x07P\x02\x02\u015E\u0160\x05H%\x02\u015F" + + "\u015E\x03\x02\x02\x02\u0160\u0163\x03\x02\x02\x02\u0161\u015F\x03\x02" + + "\x02\x02\u0161\u0162\x03\x02\x02\x02\u0162\u0164\x03\x02\x02\x02\u0163" + + "\u0161\x03\x02\x02\x02\u0164\u016E\x07R\x02\x02\u0165\u0169\x07Q\x02\x02" + + "\u0166\u0168\x05J&\x02\u0167\u0166\x03\x02\x02\x02\u0168\u016B\x03\x02" + + "\x02\x02\u0169\u0167\x03\x02\x02\x02\u0169\u016A\x03\x02\x02\x02\u016A" + + "\u016C\x03\x02\x02\x02\u016B\u0169\x03\x02\x02\x02\u016C\u016E\x07T\x02" + + "\x02\u016D\u015D\x03\x02\x02\x02\u016D\u0165\x03\x02\x02\x02\u016EG\x03" + + "\x02\x02\x02\u016F\u0176\x07S\x02\x02\u0170\u0172\x07\x03\x02\x02\u0171" + + "\u0173\x05\x88E\x02\u0172\u0171\x03\x02\x02\x02\u0172\u0173\x03\x02\x02" + + "\x02\u0173\u0174\x03\x02\x02\x02\u0174\u0176\x07\'\x02\x02\u0175\u016F" + + "\x03\x02\x02\x02\u0175\u0170\x03\x02\x02\x02\u0176I\x03\x02\x02\x02\u0177" + + "\u017E\x07U\x02\x02\u0178\u017A\x07\x03\x02\x02\u0179\u017B\x05\x88E\x02" + + "\u017A\u0179\x03\x02\x02\x02\u017A\u017B\x03\x02\x02\x02\u017B\u017C\x03" + + "\x02\x02\x02\u017C\u017E\x07\'\x02\x02\u017D\u0177\x03\x02\x02\x02\u017D" + + "\u0178\x03\x02\x02\x02\u017EK\x03\x02\x02\x02\u017F\u0180\t\x06\x02\x02" + + "\u0180M\x03\x02\x02\x02\u0181\u018A\x07%\x02\x02\u0182\u0187\x05\x88E" + + "\x02\u0183\u0184\x07\x1F\x02\x02\u0184\u0186\x05\x88E\x02\u0185\u0183" + + "\x03\x02\x02\x02\u0186\u0189\x03\x02\x02\x02\u0187\u0185\x03\x02\x02\x02" + + "\u0187\u0188\x03\x02\x02\x02\u0188\u018B\x03\x02\x02\x02\u0189\u0187\x03" + + "\x02\x02\x02\u018A\u0182\x03\x02\x02\x02\u018A\u018B\x03\x02\x02\x02\u018B" + + "\u018C\x03\x02\x02\x02\u018C\u018D\x07&\x02\x02\u018DO\x03\x02\x02\x02" + + "\u018E\u018F\t\x07\x02\x02\u018FQ\x03\x02\x02\x02\u0190\u0191\b*\x01\x02" + + "\u0191\u019C\x05:\x1E\x02\u0192\u0193\x07\x17\x02\x02\u0193\u0194\x05" + + "R*\x02\u0194\u0196\x07#\x02\x02\u0195\u0197\x05T+\x02\u0196\u0195\x03" + + "\x02\x02\x02\u0196\u0197\x03\x02\x02\x02\u0197\u0198\x03\x02\x02\x02\u0198" + + "\u0199\x07$\x02\x02\u0199\u019A\b*\x01\x02\u019A\u019C\x03\x02\x02\x02" + + "\u019B\u0190\x03\x02\x02\x02\u019B\u0192\x03\x02\x02\x02\u019C\u01B2\x03" + + "\x02\x02\x02\u019D\u019E\f\x07\x02\x02\u019E\u01A0\x07#\x02\x02\u019F" + + "\u01A1\x05T+\x02\u01A0\u019F\x03\x02\x02\x02\u01A0\u01A1\x03\x02\x02\x02" + + "\u01A1\u01A2\x03\x02\x02\x02\u01A2\u01A3\x07$\x02\x02\u01A3\u01B1\b*\x01" + + "\x02\u01A4\u01A5\f\x05\x02\x02\u01A5\u01A6\x05V,\x02\u01A6\u01A7\b*\x01" + + "\x02\u01A7\u01B1\x03\x02\x02\x02\u01A8\u01A9\f\x04\x02\x02\u01A9\u01AA" + + "\x05X-\x02\u01AA\u01AB\b*\x01\x02\u01AB\u01B1\x03\x02\x02\x02\u01AC\u01AD" + + "\f\x03\x02\x02\u01AD\u01AE\x05Z.\x02\u01AE\u01AF\b*\x01\x02\u01AF\u01B1" + + "\x03\x02\x02\x02\u01B0\u019D\x03\x02\x02\x02\u01B0\u01A4\x03\x02\x02\x02" + + "\u01B0\u01A8\x03\x02\x02\x02\u01B0\u01AC\x03\x02\x02\x02\u01B1\u01B4\x03" + + "\x02\x02\x02\u01B2\u01B0\x03\x02\x02\x02\u01B2\u01B3\x03\x02\x02\x02\u01B3" + + "S\x03\x02\x02\x02\u01B4\u01B2\x03\x02\x02\x02\u01B5\u01BA\x05\x84C\x02" + + "\u01B6\u01B7\x07\x1F\x02\x02\u01B7\u01B9\x05\x84C\x02\u01B8\u01B6\x03" + + "\x02\x02\x02\u01B9\u01BC\x03\x02\x02\x02\u01BA\u01B8\x03\x02\x02\x02\u01BA" + + "\u01BB\x03\x02\x02\x02\u01BBU\x03\x02\x02\x02\u01BC\u01BA\x03\x02\x02" + + "\x02\u01BD\u01BE\x07H\x02\x02\u01BE\u01BF\x05B\"\x02\u01BFW\x03\x02\x02" + + "\x02\u01C0\u01C1\x07%\x02\x02\u01C1\u01C2\x05\x88E\x02\u01C2\u01C3\x07" + + "&\x02\x02\u01C3Y\x03\x02\x02\x02\u01C4\u01C8\x07%\x02\x02\u01C5\u01C6" + + "\x05\x88E\x02\u01C6\u01C7\b.\x01\x02\u01C7\u01C9\x03\x02\x02\x02\u01C8" + + "\u01C5\x03\x02\x02\x02\u01C8\u01C9\x03\x02\x02\x02\u01C9\u01CA\x03\x02" + + "\x02\x02\u01CA\u01CE\x07\"\x02\x02\u01CB\u01CC\x05\x88E\x02\u01CC\u01CD" + + "\b.\x01\x02\u01CD\u01CF\x03\x02\x02\x02\u01CE\u01CB\x03\x02\x02\x02\u01CE" + + "\u01CF\x03\x02\x02\x02\u01CF\u01D0\x03\x02\x02\x02\u01D0\u01D1\x07&\x02" + + "\x02\u01D1[\x03\x02\x02\x02\u01D2\u01D5\x05R*\x02\u01D3\u01D5\x05^0\x02" + + "\u01D4\u01D2\x03\x02\x02\x02\u01D4\u01D3\x03\x02\x02\x02\u01D5]\x03\x02" + + "\x02\x02\u01D6\u01D7\x05R*\x02\u01D7\u01D8\x05f4\x02\u01D8_\x03\x02\x02" + + "\x02\u01D9\u01DD\x05\\/\x02\u01DA\u01DD\x05b2\x02\u01DB\u01DD\x05d3\x02" + + "\u01DC\u01D9\x03\x02\x02\x02\u01DC\u01DA\x03\x02\x02\x02\u01DC\u01DB\x03" + + "\x02\x02\x02\u01DDa\x03\x02\x02\x02\u01DE\u01DF\x05f4\x02\u01DF\u01E0" + + "\x05\\/\x02\u01E0c\x03\x02\x02\x02\u01E1\u01E2\x05h5\x02\u01E2\u01E3\x05" + + "\\/\x02\u01E3e\x03\x02\x02\x02\u01E4\u01E5\t\b\x02\x02\u01E5g\x03\x02" + + "\x02\x02\u01E6\u01E7\t\t\x02\x02\u01E7i\x03\x02\x02\x02\u01E8\u01EE\x05" + + "`1\x02\u01E9\u01EA\x05`1\x02\u01EA\u01EB\x07\b\x02\x02\u01EB\u01EC\x05" + + "\x8AF\x02\u01EC\u01EE\x03\x02\x02\x02\u01ED\u01E8\x03\x02\x02\x02\u01ED" + + "\u01E9\x03\x02\x02\x02\u01EEk\x03\x02\x02\x02\u01EF\u01F0\b7\x01\x02\u01F0" + + "\u01F1\x05j6\x02\u01F1\u01F7\x03\x02\x02\x02\u01F2\u01F3\f\x03\x02\x02" + + "\u01F3\u01F4\t\n\x02\x02\u01F4\u01F6\x05j6\x02\u01F5\u01F2\x03\x02\x02" + + "\x02\u01F6\u01F9\x03\x02\x02\x02\u01F7\u01F5\x03\x02\x02\x02\u01F7\u01F8" + + "\x03\x02\x02\x02\u01F8m\x03\x02\x02\x02\u01F9\u01F7\x03\x02\x02\x02\u01FA" + + "\u01FB\b8\x01\x02\u01FB\u01FC\x05l7\x02\u01FC\u0202\x03\x02\x02\x02\u01FD" + + "\u01FE\f\x03\x02\x02\u01FE\u01FF\t\v\x02\x02\u01FF\u0201\x05l7\x02\u0200" + + "\u01FD\x03\x02\x02\x02\u0201\u0204\x03\x02\x02\x02\u0202\u0200\x03\x02" + + "\x02\x02\u0202\u0203\x03\x02\x02\x02\u0203o\x03\x02\x02\x02\u0204\u0202" + + "\x03\x02\x02\x02\u0205\u0206\b9\x01\x02\u0206\u0207\x05n8\x02\u0207\u020E" + + "\x03\x02\x02\x02\u0208\u0209\f\x03\x02\x02\u0209\u020A\x05r:\x02\u020A" + + "\u020B\x05x=\x02\u020B\u020D\x03\x02\x02\x02\u020C\u0208\x03\x02\x02\x02" + + "\u020D\u0210\x03\x02\x02\x02\u020E\u020C\x03\x02\x02\x02\u020E\u020F\x03" + + "\x02\x02\x02\u020Fq\x03\x02\x02\x02\u0210\u020E\x03\x02\x02\x02\u0211" + + "\u0212\t\f\x02\x02\u0212s\x03\x02\x02\x02\u0213\u0214\b;\x01\x02\u0214" + + "\u0215\x05p9\x02\u0215\u021B\x03\x02\x02\x02\u0216\u0217\f\x03\x02\x02" + + "\u0217\u0218\t\r\x02\x02\u0218\u021A\x05p9\x02\u0219\u0216\x03\x02\x02" + + "\x02\u021A\u021D\x03\x02\x02\x02\u021B\u0219\x03\x02\x02\x02\u021B\u021C" + + "\x03\x02\x02\x02\u021Cu\x03\x02\x02\x02\u021D\u021B\x03\x02\x02\x02\u021E" + + "\u021F\b<\x01\x02\u021F\u0220\x05t;\x02\u0220\u0226\x03\x02\x02\x02\u0221" + + "\u0222\f\x03\x02\x02\u0222\u0223\t\x0E\x02\x02\u0223\u0225\x05t;\x02\u0224" + + "\u0221\x03\x02\x02\x02\u0225\u0228\x03\x02\x02\x02\u0226\u0224\x03\x02" + + "\x02\x02\u0226\u0227\x03\x02\x02\x02\u0227w\x03\x02\x02\x02\u0228\u0226" + + "\x03\x02\x02\x02\u0229\u022A\b=\x01\x02\u022A\u022B\x05v<\x02\u022B\u0231" + + "\x03\x02\x02\x02\u022C\u022D\f\x03\x02\x02\u022D\u022E\x07A\x02\x02\u022E" + + "\u0230\x05v<\x02\u022F\u022C\x03\x02\x02\x02\u0230\u0233\x03\x02\x02\x02" + + "\u0231\u022F\x03\x02\x02\x02\u0231\u0232\x03\x02\x02\x02\u0232y\x03\x02" + + "\x02\x02\u0233\u0231\x03\x02\x02\x02\u0234\u0235\b>\x01\x02\u0235\u0236" + + "\x05x=\x02\u0236\u023C\x03\x02\x02\x02\u0237\u0238\f\x03\x02\x02\u0238" + + "\u0239\x07C\x02\x02\u0239\u023B\x05x=\x02\u023A\u0237\x03\x02\x02\x02" + + "\u023B\u023E\x03\x02\x02\x02\u023C\u023A\x03\x02\x02"; private static readonly _serializedATNSegment1: string = - "\u024B\x05\x88E\x02\u024B\u024C\x07?\x02\x02\u024C\x85\x03\x02\x02\x02" + - "\u024D\u024E\x07\x1B\x02\x02\u024E\u024F\x07#\x02\x02\u024F\u0250\x05" + - "\x88E\x02\u0250\u0251\x07$\x02\x02\u0251\x87\x03\x02\x02\x02\u0252\u0253" + - "\t\x0F\x02\x02\u0253\x89\x03\x02\x02\x027\x8B\x92\x99\x9E\xA5\xA7\xAD" + - "\xB3\xC3\xCA\xD9\xDD\xE6\xEF\xF9\u0106\u010B\u0111\u0115\u011B\u0121\u0139" + - "\u0145\u0157\u015F\u0163\u0168\u016B\u0170\u0173\u017D\u0180\u018C\u0191" + - "\u0196\u01A6\u01A8\u01B0\u01BE\u01C4\u01CA\u01D2\u01E3\u01ED\u01F8\u0203" + - "\u020E\u0219\u0224\u022E\u0235\u023E\u0244"; + "\x02\u023C\u023D\x03\x02\x02\x02\u023D{\x03\x02\x02\x02\u023E\u023C\x03" + + "\x02\x02\x02\u023F\u0240\b?\x01\x02\u0240\u0241\x05z>\x02\u0241\u0247" + + "\x03\x02\x02\x02\u0242\u0243\f\x03\x02\x02\u0243\u0244\x07B\x02\x02\u0244" + + "\u0246\x05z>\x02\u0245\u0242\x03\x02\x02\x02\u0246\u0249\x03\x02\x02\x02" + + "\u0247\u0245\x03\x02\x02\x02\u0247\u0248\x03\x02\x02\x02\u0248}\x03\x02" + + "\x02\x02\u0249\u0247\x03\x02\x02\x02\u024A\u024B\b@\x01\x02\u024B\u024C" + + "\x05|?\x02\u024C\u0252\x03\x02\x02\x02\u024D\u024E\f\x03\x02\x02\u024E" + + "\u024F\x072\x02\x02\u024F\u0251\x05|?\x02\u0250\u024D\x03\x02\x02\x02" + + "\u0251\u0254\x03\x02\x02\x02\u0252\u0250\x03\x02\x02\x02\u0252\u0253\x03" + + "\x02\x02\x02\u0253\x7F\x03\x02\x02\x02\u0254\u0252\x03\x02\x02\x02\u0255" + + "\u0256\bA\x01\x02\u0256\u0257\x05~@\x02\u0257\u025D\x03\x02\x02\x02\u0258" + + "\u0259\f\x03\x02\x02\u0259\u025A\x073\x02\x02\u025A\u025C\x05~@\x02\u025B" + + "\u0258\x03\x02\x02\x02\u025C\u025F\x03\x02\x02\x02\u025D\u025B\x03\x02" + + "\x02\x02\u025D\u025E\x03\x02\x02\x02\u025E\x81\x03\x02\x02\x02\u025F\u025D" + + "\x03\x02\x02\x02\u0260\u0268\x05\x80A\x02\u0261\u0262\x05\x80A\x02\u0262" + + "\u0263\x07!\x02\x02\u0263\u0264\x05\x82B\x02\u0264\u0265\x07\"\x02\x02" + + "\u0265\u0266\x05\x82B\x02\u0266\u0268\x03\x02\x02\x02\u0267\u0260\x03" + + "\x02\x02\x02\u0267\u0261\x03\x02\x02\x02\u0268\x83\x03\x02\x02\x02\u0269" + + "\u026F\x05\x82B\x02\u026A\u026B\x05R*\x02\u026B\u026C\x05\x86D\x02\u026C" + + "\u026D\x05\x84C\x02\u026D\u026F\x03\x02\x02\x02\u026E\u0269\x03\x02\x02" + + "\x02\u026E\u026A\x03\x02\x02\x02\u026F\x85\x03\x02\x02\x02\u0270\u0271" + + "\t\x0F\x02\x02\u0271\x87\x03\x02\x02\x02\u0272\u0277\x05\x84C\x02\u0273" + + "\u0274\x07\x1F\x02\x02\u0274\u0276\x05\x84C\x02\u0275\u0273\x03\x02\x02" + + "\x02\u0276\u0279\x03\x02\x02\x02\u0277\u0275\x03\x02\x02\x02\u0277\u0278" + + "\x03\x02\x02\x02\u0278\x89\x03\x02\x02\x02\u0279\u0277\x03\x02\x02\x02" + + "\u027A\u027E\x05\x8CG\x02\u027B\u027E\x05\x8EH\x02\u027C\u027E\x05\x90" + + "I\x02\u027D\u027A\x03\x02\x02\x02\u027D\u027B\x03\x02\x02\x02\u027D\u027C" + + "\x03\x02\x02\x02\u027E\x8B\x03\x02\x02\x02\u027F\u0280\x05\x92J\x02\u0280" + + "\x8D\x03\x02\x02\x02\u0281\u0282\x05\x92J\x02\u0282\u0283\x07=\x02\x02" + + "\u0283\u0284\x05\x92J\x02\u0284\u0285\x07?\x02\x02\u0285\x8F\x03\x02\x02" + + "\x02\u0286\u0287\x07\x1B\x02\x02\u0287\u0288\x07#\x02\x02\u0288\u0289" + + "\x05\x92J\x02\u0289\u028A\x07$\x02\x02\u028A\x91\x03\x02\x02\x02\u028B" + + "\u028C\t\x10\x02\x02\u028C\x93\x03\x02\x02\x02;\x95\x9C\xA3\xA8\xAF\xB1" + + "\xB7\xBD\xCD\xD4\xE3\xE7\xF0\xF9\u0103\u0110\u0115\u011B\u011F\u0125\u012B" + + "\u0143\u014F\u0161\u0169\u016D\u0172\u0175\u017A\u017D\u0187\u018A\u0196" + + "\u019B\u01A0\u01B0\u01B2\u01BA\u01C8\u01CE\u01D4\u01DC\u01ED\u01F7\u0202" + + "\u020E\u021B\u0226\u0231\u023C\u0247\u0252\u025D\u0267\u026E\u0277\u027D"; public static readonly _serializedATN: string = Utils.join( - [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], + [ + KipperParser._serializedATNSegment0, + KipperParser._serializedATNSegment1, + ], "", ); public static __ATN: ATN; @@ -4404,12 +4251,11 @@ export class KipperParser extends Parser { return KipperParser.__ATN; } + } export class CompilationUnitContext extends KipperParserRuleContext { - public EOF(): TerminalNode { - return this.getToken(KipperParser.EOF, 0); - } + public EOF(): TerminalNode { return this.getToken(KipperParser.EOF, 0); } public translationUnit(): TranslationUnitContext | undefined { return this.tryGetRuleContext(0, TranslationUnitContext); } @@ -4417,9 +4263,7 @@ export class CompilationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_compilationUnit; - } + public get ruleIndex(): number { return KipperParser.RULE_compilationUnit; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompilationUnit) { @@ -4442,6 +4286,7 @@ export class CompilationUnitContext extends KipperParserRuleContext { } } + export class TranslationUnitContext extends KipperParserRuleContext { public externalItem(): ExternalItemContext[]; public externalItem(i: number): ExternalItemContext; @@ -4456,9 +4301,7 @@ export class TranslationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_translationUnit; - } + public get ruleIndex(): number { return KipperParser.RULE_translationUnit; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTranslationUnit) { @@ -4481,14 +4324,13 @@ export class TranslationUnitContext extends KipperParserRuleContext { } } + export class ExternalItemContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_externalItem; - } + public get ruleIndex(): number { return KipperParser.RULE_externalItem; } public copyFrom(ctx: ExternalItemContext): void { super.copyFrom(ctx); } @@ -4523,6 +4365,7 @@ export class ExternalBlockItemContext extends ExternalItemContext { } } + export class BlockItemListContext extends KipperParserRuleContext { public blockItem(): BlockItemContext[]; public blockItem(i: number): BlockItemContext; @@ -4537,9 +4380,7 @@ export class BlockItemListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_blockItemList; - } + public get ruleIndex(): number { return KipperParser.RULE_blockItemList; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItemList) { @@ -4562,6 +4403,7 @@ export class BlockItemListContext extends KipperParserRuleContext { } } + export class BlockItemContext extends KipperParserRuleContext { public statement(): StatementContext | undefined { return this.tryGetRuleContext(0, StatementContext); @@ -4569,16 +4411,12 @@ export class BlockItemContext extends KipperParserRuleContext { public declaration(): DeclarationContext | undefined { return this.tryGetRuleContext(0, DeclarationContext); } - public SemiColon(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_blockItem; - } + public get ruleIndex(): number { return KipperParser.RULE_blockItem; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItem) { @@ -4601,13 +4439,12 @@ export class BlockItemContext extends KipperParserRuleContext { } } + export class DeclarationContext extends KipperParserRuleContext { public variableDeclaration(): VariableDeclarationContext | undefined { return this.tryGetRuleContext(0, VariableDeclarationContext); } - public SemiColon(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } public functionDeclaration(): FunctionDeclarationContext | undefined { return this.tryGetRuleContext(0, FunctionDeclarationContext); } @@ -4615,9 +4452,7 @@ export class DeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_declaration; - } + public get ruleIndex(): number { return KipperParser.RULE_declaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclaration) { @@ -4640,22 +4475,15 @@ export class DeclarationContext extends KipperParserRuleContext { } } + export class FunctionDeclarationContext extends KipperParserRuleContext { - public DefFunc(): TerminalNode { - return this.getToken(KipperParser.DefFunc, 0); - } + public DefFunc(): TerminalNode { return this.getToken(KipperParser.DefFunc, 0); } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public RetIndicator(): TerminalNode { - return this.getToken(KipperParser.RetIndicator, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RetIndicator(): TerminalNode { return this.getToken(KipperParser.RetIndicator, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -4669,9 +4497,7 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_functionDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_functionDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFunctionDeclaration) { @@ -4694,6 +4520,7 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { } } + export class VariableDeclarationContext extends KipperParserRuleContext { public storageTypeSpecifier(): StorageTypeSpecifierContext { return this.getRuleContext(0, StorageTypeSpecifierContext); @@ -4705,9 +4532,7 @@ export class VariableDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_variableDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_variableDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterVariableDeclaration) { @@ -4730,20 +4555,15 @@ export class VariableDeclarationContext extends KipperParserRuleContext { } } + export class StorageTypeSpecifierContext extends KipperParserRuleContext { - public Var(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Var, 0); - } - public Const(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Const, 0); - } + public Var(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Var, 0); } + public Const(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Const, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_storageTypeSpecifier; - } + public get ruleIndex(): number { return KipperParser.RULE_storageTypeSpecifier; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStorageTypeSpecifier) { @@ -4766,6 +4586,7 @@ export class StorageTypeSpecifierContext extends KipperParserRuleContext { } } + export class DeclaratorContext extends KipperParserRuleContext { public directDeclarator(): DirectDeclaratorContext { return this.getRuleContext(0, DirectDeclaratorContext); @@ -4774,9 +4595,7 @@ export class DeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_declarator; - } + public get ruleIndex(): number { return KipperParser.RULE_declarator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclarator) { @@ -4799,17 +4618,14 @@ export class DeclaratorContext extends KipperParserRuleContext { } } + export class DirectDeclaratorContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { - return this.getToken(KipperParser.Identifier, 0); - } + public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_directDeclarator; - } + public get ruleIndex(): number { return KipperParser.RULE_directDeclarator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDirectDeclarator) { @@ -4832,19 +4648,16 @@ export class DirectDeclaratorContext extends KipperParserRuleContext { } } + export class InitDeclaratorContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public Assign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Assign, 0); - } + public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } public initializer(): InitializerContext | undefined { return this.tryGetRuleContext(0, InitializerContext); } @@ -4852,9 +4665,7 @@ export class InitDeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_initDeclarator; - } + public get ruleIndex(): number { return KipperParser.RULE_initDeclarator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitDeclarator) { @@ -4877,6 +4688,7 @@ export class InitDeclaratorContext extends KipperParserRuleContext { } } + export class ParameterListContext extends KipperParserRuleContext { public parameterDeclaration(): ParameterDeclarationContext[]; public parameterDeclaration(i: number): ParameterDeclarationContext; @@ -4900,9 +4712,7 @@ export class ParameterListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_parameterList; - } + public get ruleIndex(): number { return KipperParser.RULE_parameterList; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterList) { @@ -4925,13 +4735,12 @@ export class ParameterListContext extends KipperParserRuleContext { } } + export class ParameterDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -4939,9 +4748,7 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_parameterDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_parameterDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterDeclaration) { @@ -4964,6 +4771,7 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { } } + export class InitializerContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext { return this.getRuleContext(0, AssignmentExpressionContext); @@ -4972,9 +4780,7 @@ export class InitializerContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_initializer; - } + public get ruleIndex(): number { return KipperParser.RULE_initializer; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitializer) { @@ -4997,6 +4803,7 @@ export class InitializerContext extends KipperParserRuleContext { } } + export class StatementContext extends KipperParserRuleContext { public compoundStatement(): CompoundStatementContext | undefined { return this.tryGetRuleContext(0, CompoundStatementContext); @@ -5020,9 +4827,7 @@ export class StatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_statement; - } + public get ruleIndex(): number { return KipperParser.RULE_statement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStatement) { @@ -5045,13 +4850,10 @@ export class StatementContext extends KipperParserRuleContext { } } + export class CompoundStatementContext extends KipperParserRuleContext { - public LeftBrace(): TerminalNode { - return this.getToken(KipperParser.LeftBrace, 0); - } - public RightBrace(): TerminalNode { - return this.getToken(KipperParser.RightBrace, 0); - } + public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } + public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } public blockItemList(): BlockItemListContext | undefined { return this.tryGetRuleContext(0, BlockItemListContext); } @@ -5059,9 +4861,7 @@ export class CompoundStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_compoundStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_compoundStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompoundStatement) { @@ -5084,20 +4884,17 @@ export class CompoundStatementContext extends KipperParserRuleContext { } } + export class ExpressionStatementContext extends KipperParserRuleContext { public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_expressionStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_expressionStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpressionStatement) { @@ -5120,6 +4917,7 @@ export class ExpressionStatementContext extends KipperParserRuleContext { } } + export class SelectionStatementContext extends KipperParserRuleContext { public ifStatement(): IfStatementContext | undefined { return this.tryGetRuleContext(0, IfStatementContext); @@ -5131,9 +4929,7 @@ export class SelectionStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_selectionStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_selectionStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSelectionStatement) { @@ -5156,19 +4952,14 @@ export class SelectionStatementContext extends KipperParserRuleContext { } } + export class IfStatementContext extends KipperParserRuleContext { - public If(): TerminalNode { - return this.getToken(KipperParser.If, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public If(): TerminalNode { return this.getToken(KipperParser.If, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public statement(): StatementContext[]; public statement(i: number): StatementContext; public statement(i?: number): StatementContext | StatementContext[] { @@ -5178,16 +4969,12 @@ export class IfStatementContext extends KipperParserRuleContext { return this.getRuleContext(i, StatementContext); } } - public Else(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Else, 0); - } + public Else(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Else, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_ifStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_ifStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIfStatement) { @@ -5210,25 +4997,16 @@ export class IfStatementContext extends KipperParserRuleContext { } } + export class SwitchStatementContext extends KipperParserRuleContext { - public Switch(): TerminalNode { - return this.getToken(KipperParser.Switch, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public Switch(): TerminalNode { return this.getToken(KipperParser.Switch, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public LeftBrace(): TerminalNode { - return this.getToken(KipperParser.LeftBrace, 0); - } - public RightBrace(): TerminalNode { - return this.getToken(KipperParser.RightBrace, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } + public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } public switchLabeledStatement(): SwitchLabeledStatementContext[]; public switchLabeledStatement(i: number): SwitchLabeledStatementContext; public switchLabeledStatement(i?: number): SwitchLabeledStatementContext | SwitchLabeledStatementContext[] { @@ -5242,9 +5020,7 @@ export class SwitchStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_switchStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_switchStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchStatement) { @@ -5267,29 +5043,22 @@ export class SwitchStatementContext extends KipperParserRuleContext { } } + export class SwitchLabeledStatementContext extends KipperParserRuleContext { - public Case(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Case, 0); - } + public Case(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Case, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public Default(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Default, 0); - } + public Default(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Default, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_switchLabeledStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_switchLabeledStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchLabeledStatement) { @@ -5312,6 +5081,7 @@ export class SwitchLabeledStatementContext extends KipperParserRuleContext { } } + export class IterationStatementContext extends KipperParserRuleContext { public forLoopIterationStatement(): ForLoopIterationStatementContext | undefined { return this.tryGetRuleContext(0, ForLoopIterationStatementContext); @@ -5326,9 +5096,7 @@ export class IterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_iterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_iterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIterationStatement) { @@ -5351,16 +5119,13 @@ export class IterationStatementContext extends KipperParserRuleContext { } } + export class ForLoopIterationStatementContext extends KipperParserRuleContext { public _forDeclaration: boolean = false; public _forCondition: boolean = false; public _forIterationExp: boolean = false; - public For(): TerminalNode { - return this.getToken(KipperParser.For, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public For(): TerminalNode { return this.getToken(KipperParser.For, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public SemiColon(): TerminalNode[]; public SemiColon(i: number): TerminalNode; public SemiColon(i?: number): TerminalNode | TerminalNode[] { @@ -5370,9 +5135,7 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { return this.getToken(KipperParser.SemiColon, i); } } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -5392,9 +5155,7 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_forLoopIterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_forLoopIterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterForLoopIterationStatement) { @@ -5417,19 +5178,14 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { } } + export class WhileLoopIterationStatementContext extends KipperParserRuleContext { - public While(): TerminalNode { - return this.getToken(KipperParser.While, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -5437,9 +5193,7 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_whileLoopIterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_whileLoopIterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterWhileLoopIterationStatement) { @@ -5462,35 +5216,24 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext } } + export class DoWhileLoopIterationStatementContext extends KipperParserRuleContext { - public Do(): TerminalNode { - return this.getToken(KipperParser.Do, 0); - } + public Do(): TerminalNode { return this.getToken(KipperParser.Do, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public While(): TerminalNode { - return this.getToken(KipperParser.While, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_doWhileLoopIterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_doWhileLoopIterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDoWhileLoopIterationStatement) { @@ -5513,23 +5256,16 @@ export class DoWhileLoopIterationStatementContext extends KipperParserRuleContex } } + export class JumpStatementContext extends KipperParserRuleContext { - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } - public Continue(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Continue, 0); - } - public Break(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Break, 0); - } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public Continue(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Continue, 0); } + public Break(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Break, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_jumpStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_jumpStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterJumpStatement) { @@ -5552,13 +5288,10 @@ export class JumpStatementContext extends KipperParserRuleContext { } } + export class ReturnStatementContext extends KipperParserRuleContext { - public Return(): TerminalNode { - return this.getToken(KipperParser.Return, 0); - } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public Return(): TerminalNode { return this.getToken(KipperParser.Return, 0); } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -5566,9 +5299,7 @@ export class ReturnStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_returnStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_returnStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterReturnStatement) { @@ -5591,6 +5322,7 @@ export class ReturnStatementContext extends KipperParserRuleContext { } } + export class PrimaryExpressionContext extends KipperParserRuleContext { public tangledPrimaryExpression(): TangledPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, TangledPrimaryExpressionContext); @@ -5620,9 +5352,7 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_primaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_primaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterPrimaryExpression) { @@ -5645,23 +5375,18 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { } } + export class TangledPrimaryExpressionContext extends KipperParserRuleContext { - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_tangledPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_tangledPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTangledPrimaryExpression) { @@ -5684,20 +5409,15 @@ export class TangledPrimaryExpressionContext extends KipperParserRuleContext { } } + export class BoolPrimaryExpressionContext extends KipperParserRuleContext { - public True(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.True, 0); - } - public False(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.False, 0); - } + public True(): TerminalNode | undefined { return this.tryGetToken(KipperParser.True, 0); } + public False(): TerminalNode | undefined { return this.tryGetToken(KipperParser.False, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_boolPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_boolPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBoolPrimaryExpression) { @@ -5720,6 +5440,7 @@ export class BoolPrimaryExpressionContext extends KipperParserRuleContext { } } + export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext { public identifier(): IdentifierContext { return this.getRuleContext(0, IdentifierContext); @@ -5728,294 +5449,540 @@ export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_identifierPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_identifierPrimaryExpression; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterIdentifierPrimaryExpression) { + listener.enterIdentifierPrimaryExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitIdentifierPrimaryExpression) { + listener.exitIdentifierPrimaryExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitIdentifierPrimaryExpression) { + return visitor.visitIdentifierPrimaryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IdentifierContext extends KipperParserRuleContext { + public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_identifier; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterIdentifier) { + listener.enterIdentifier(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitIdentifier) { + listener.exitIdentifier(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitIdentifier) { + return visitor.visitIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StringPrimaryExpressionContext extends KipperParserRuleContext { + public SingleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); } + public DoubleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_stringPrimaryExpression; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterStringPrimaryExpression) { + listener.enterStringPrimaryExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitStringPrimaryExpression) { + listener.exitStringPrimaryExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitStringPrimaryExpression) { + return visitor.visitStringPrimaryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FStringPrimaryExpressionContext extends KipperParserRuleContext { + public FStringSingleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); } + public FStringSingleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); } + public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext[]; + public fStringSingleQuoteAtom(i: number): FStringSingleQuoteAtomContext; + public fStringSingleQuoteAtom(i?: number): FStringSingleQuoteAtomContext | FStringSingleQuoteAtomContext[] { + if (i === undefined) { + return this.getRuleContexts(FStringSingleQuoteAtomContext); + } else { + return this.getRuleContext(i, FStringSingleQuoteAtomContext); + } + } + public FStringDoubleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); } + public FStringDoubleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); } + public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext[]; + public fStringDoubleQuoteAtom(i: number): FStringDoubleQuoteAtomContext; + public fStringDoubleQuoteAtom(i?: number): FStringDoubleQuoteAtomContext | FStringDoubleQuoteAtomContext[] { + if (i === undefined) { + return this.getRuleContexts(FStringDoubleQuoteAtomContext); + } else { + return this.getRuleContext(i, FStringDoubleQuoteAtomContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_fStringPrimaryExpression; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterFStringPrimaryExpression) { + listener.enterFStringPrimaryExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitFStringPrimaryExpression) { + listener.exitFStringPrimaryExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitFStringPrimaryExpression) { + return visitor.visitFStringPrimaryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { + public FStringSingleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); } + public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } + public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_fStringSingleQuoteAtom; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterFStringSingleQuoteAtom) { + listener.enterFStringSingleQuoteAtom(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitFStringSingleQuoteAtom) { + listener.exitFStringSingleQuoteAtom(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitFStringSingleQuoteAtom) { + return visitor.visitFStringSingleQuoteAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { + public FStringDoubleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); } + public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } + public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_fStringDoubleQuoteAtom; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterFStringDoubleQuoteAtom) { + listener.enterFStringDoubleQuoteAtom(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitFStringDoubleQuoteAtom) { + listener.exitFStringDoubleQuoteAtom(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitFStringDoubleQuoteAtom) { + return visitor.visitFStringDoubleQuoteAtom(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NumberPrimaryExpressionContext extends KipperParserRuleContext { + public IntegerConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.IntegerConstant, 0); } + public FloatingConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FloatingConstant, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_numberPrimaryExpression; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterNumberPrimaryExpression) { + listener.enterNumberPrimaryExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitNumberPrimaryExpression) { + listener.exitNumberPrimaryExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitNumberPrimaryExpression) { + return visitor.visitNumberPrimaryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { + public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } + public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } + public Comma(): TerminalNode[]; + public Comma(i: number): TerminalNode; + public Comma(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(KipperParser.Comma); + } else { + return this.getToken(KipperParser.Comma, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_arrayPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterIdentifierPrimaryExpression) { - listener.enterIdentifierPrimaryExpression(this); + if (listener.enterArrayPrimaryExpression) { + listener.enterArrayPrimaryExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitIdentifierPrimaryExpression) { - listener.exitIdentifierPrimaryExpression(this); + if (listener.exitArrayPrimaryExpression) { + listener.exitArrayPrimaryExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitIdentifierPrimaryExpression) { - return visitor.visitIdentifierPrimaryExpression(this); + if (visitor.visitArrayPrimaryExpression) { + return visitor.visitArrayPrimaryExpression(this); } else { return visitor.visitChildren(this); } } } -export class IdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { - return this.getToken(KipperParser.Identifier, 0); - } + +export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserRuleContext { + public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } + public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } + public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_identifier; - } + public get ruleIndex(): number { return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterIdentifier) { - listener.enterIdentifier(this); + if (listener.enterVoidOrNullOrUndefinedPrimaryExpression) { + listener.enterVoidOrNullOrUndefinedPrimaryExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitIdentifier) { - listener.exitIdentifier(this); + if (listener.exitVoidOrNullOrUndefinedPrimaryExpression) { + listener.exitVoidOrNullOrUndefinedPrimaryExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitIdentifier) { - return visitor.visitIdentifier(this); + if (visitor.visitVoidOrNullOrUndefinedPrimaryExpression) { + return visitor.visitVoidOrNullOrUndefinedPrimaryExpression(this); } else { return visitor.visitChildren(this); } } } -export class StringPrimaryExpressionContext extends KipperParserRuleContext { - public SingleQuoteStringLiteral(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); - } - public DoubleQuoteStringLiteral(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); - } + +export class ComputedPrimaryExpressionContext extends KipperParserRuleContext { + public _labelASTKind: ASTKind | undefined; constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_stringPrimaryExpression; + public get ruleIndex(): number { return KipperParser.RULE_computedPrimaryExpression; } + public copyFrom(ctx: ComputedPrimaryExpressionContext): void { + super.copyFrom(ctx); + this._labelASTKind = ctx._labelASTKind; + } +} +export class PassOncomputedPrimaryExpressionContext extends ComputedPrimaryExpressionContext { + public primaryExpression(): PrimaryExpressionContext { + return this.getRuleContext(0, PrimaryExpressionContext); + } + constructor(ctx: ComputedPrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterStringPrimaryExpression) { - listener.enterStringPrimaryExpression(this); + if (listener.enterPassOncomputedPrimaryExpression) { + listener.enterPassOncomputedPrimaryExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitStringPrimaryExpression) { - listener.exitStringPrimaryExpression(this); + if (listener.exitPassOncomputedPrimaryExpression) { + listener.exitPassOncomputedPrimaryExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitStringPrimaryExpression) { - return visitor.visitStringPrimaryExpression(this); + if (visitor.visitPassOncomputedPrimaryExpression) { + return visitor.visitPassOncomputedPrimaryExpression(this); } else { return visitor.visitChildren(this); } } } - -export class FStringPrimaryExpressionContext extends KipperParserRuleContext { - public FStringSingleQuoteStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); +export class FunctionCallExpressionContext extends ComputedPrimaryExpressionContext { + public computedPrimaryExpression(): ComputedPrimaryExpressionContext { + return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public FStringSingleQuoteEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public argumentExpressionList(): ArgumentExpressionListContext | undefined { + return this.tryGetRuleContext(0, ArgumentExpressionListContext); } - public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext[]; - public fStringSingleQuoteAtom(i: number): FStringSingleQuoteAtomContext; - public fStringSingleQuoteAtom(i?: number): FStringSingleQuoteAtomContext | FStringSingleQuoteAtomContext[] { - if (i === undefined) { - return this.getRuleContexts(FStringSingleQuoteAtomContext); - } else { - return this.getRuleContext(i, FStringSingleQuoteAtomContext); - } + constructor(ctx: ComputedPrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } - public FStringDoubleQuoteStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterFunctionCallExpression) { + listener.enterFunctionCallExpression(this); + } } - public FStringDoubleQuoteEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitFunctionCallExpression) { + listener.exitFunctionCallExpression(this); + } } - public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext[]; - public fStringDoubleQuoteAtom(i: number): FStringDoubleQuoteAtomContext; - public fStringDoubleQuoteAtom(i?: number): FStringDoubleQuoteAtomContext | FStringDoubleQuoteAtomContext[] { - if (i === undefined) { - return this.getRuleContexts(FStringDoubleQuoteAtomContext); + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitFunctionCallExpression) { + return visitor.visitFunctionCallExpression(this); } else { - return this.getRuleContext(i, FStringDoubleQuoteAtomContext); + return visitor.visitChildren(this); } } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); +} +export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { + public CallFunc(): TerminalNode { return this.getToken(KipperParser.CallFunc, 0); } + public computedPrimaryExpression(): ComputedPrimaryExpressionContext { + return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_fStringPrimaryExpression; + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public argumentExpressionList(): ArgumentExpressionListContext | undefined { + return this.tryGetRuleContext(0, ArgumentExpressionListContext); + } + constructor(ctx: ComputedPrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterFStringPrimaryExpression) { - listener.enterFStringPrimaryExpression(this); + if (listener.enterExplicitCallFunctionCallExpression) { + listener.enterExplicitCallFunctionCallExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitFStringPrimaryExpression) { - listener.exitFStringPrimaryExpression(this); + if (listener.exitExplicitCallFunctionCallExpression) { + listener.exitExplicitCallFunctionCallExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitFStringPrimaryExpression) { - return visitor.visitFStringPrimaryExpression(this); + if (visitor.visitExplicitCallFunctionCallExpression) { + return visitor.visitExplicitCallFunctionCallExpression(this); } else { return visitor.visitChildren(this); } } } - -export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { - public FStringSingleQuoteAtom(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); - } - public FStringExpStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpStart, 0); - } - public FStringExpEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpEnd, 0); - } - public expression(): ExpressionContext | undefined { - return this.tryGetRuleContext(0, ExpressionContext); +export class DotNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { + public computedPrimaryExpression(): ComputedPrimaryExpressionContext { + return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public dotNotation(): DotNotationContext { + return this.getRuleContext(0, DotNotationContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_fStringSingleQuoteAtom; + constructor(ctx: ComputedPrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterFStringSingleQuoteAtom) { - listener.enterFStringSingleQuoteAtom(this); + if (listener.enterDotNotationMemberAccessExpression) { + listener.enterDotNotationMemberAccessExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitFStringSingleQuoteAtom) { - listener.exitFStringSingleQuoteAtom(this); + if (listener.exitDotNotationMemberAccessExpression) { + listener.exitDotNotationMemberAccessExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitFStringSingleQuoteAtom) { - return visitor.visitFStringSingleQuoteAtom(this); + if (visitor.visitDotNotationMemberAccessExpression) { + return visitor.visitDotNotationMemberAccessExpression(this); } else { return visitor.visitChildren(this); } } } - -export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { - public FStringDoubleQuoteAtom(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); - } - public FStringExpStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpStart, 0); - } - public FStringExpEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpEnd, 0); - } - public expression(): ExpressionContext | undefined { - return this.tryGetRuleContext(0, ExpressionContext); +export class BracketNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { + public computedPrimaryExpression(): ComputedPrimaryExpressionContext { + return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public bracketNotation(): BracketNotationContext { + return this.getRuleContext(0, BracketNotationContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_fStringDoubleQuoteAtom; + constructor(ctx: ComputedPrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterFStringDoubleQuoteAtom) { - listener.enterFStringDoubleQuoteAtom(this); + if (listener.enterBracketNotationMemberAccessExpression) { + listener.enterBracketNotationMemberAccessExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitFStringDoubleQuoteAtom) { - listener.exitFStringDoubleQuoteAtom(this); + if (listener.exitBracketNotationMemberAccessExpression) { + listener.exitBracketNotationMemberAccessExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitFStringDoubleQuoteAtom) { - return visitor.visitFStringDoubleQuoteAtom(this); + if (visitor.visitBracketNotationMemberAccessExpression) { + return visitor.visitBracketNotationMemberAccessExpression(this); } else { return visitor.visitChildren(this); } } } - -export class NumberPrimaryExpressionContext extends KipperParserRuleContext { - public IntegerConstant(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.IntegerConstant, 0); - } - public FloatingConstant(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FloatingConstant, 0); +export class SliceNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { + public computedPrimaryExpression(): ComputedPrimaryExpressionContext { + return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public sliceNotation(): SliceNotationContext { + return this.getRuleContext(0, SliceNotationContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_numberPrimaryExpression; + constructor(ctx: ComputedPrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterNumberPrimaryExpression) { - listener.enterNumberPrimaryExpression(this); + if (listener.enterSliceNotationMemberAccessExpression) { + listener.enterSliceNotationMemberAccessExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitNumberPrimaryExpression) { - listener.exitNumberPrimaryExpression(this); + if (listener.exitSliceNotationMemberAccessExpression) { + listener.exitSliceNotationMemberAccessExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitNumberPrimaryExpression) { - return visitor.visitNumberPrimaryExpression(this); + if (visitor.visitSliceNotationMemberAccessExpression) { + return visitor.visitSliceNotationMemberAccessExpression(this); } else { return visitor.visitChildren(this); } } } -export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { - return this.getToken(KipperParser.LeftBracket, 0); - } - public RightBracket(): TerminalNode { - return this.getToken(KipperParser.RightBracket, 0); - } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { + +export class ArgumentExpressionListContext extends KipperParserRuleContext { + public assignmentExpression(): AssignmentExpressionContext[]; + public assignmentExpression(i: number): AssignmentExpressionContext; + public assignmentExpression(i?: number): AssignmentExpressionContext | AssignmentExpressionContext[] { if (i === undefined) { - return this.getRuleContexts(ExpressionContext); + return this.getRuleContexts(AssignmentExpressionContext); } else { - return this.getRuleContext(i, ExpressionContext); + return this.getRuleContext(i, AssignmentExpressionContext); } } public Comma(): TerminalNode[]; @@ -6031,1144 +5998,1102 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_arrayPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_argumentExpressionList; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterArgumentExpressionList) { + listener.enterArgumentExpressionList(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitArgumentExpressionList) { + listener.exitArgumentExpressionList(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitArgumentExpressionList) { + return visitor.visitArgumentExpressionList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DotNotationContext extends KipperParserRuleContext { + public Dot(): TerminalNode { return this.getToken(KipperParser.Dot, 0); } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_dotNotation; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterArrayPrimaryExpression) { - listener.enterArrayPrimaryExpression(this); + if (listener.enterDotNotation) { + listener.enterDotNotation(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitArrayPrimaryExpression) { - listener.exitArrayPrimaryExpression(this); + if (listener.exitDotNotation) { + listener.exitDotNotation(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitArrayPrimaryExpression) { - return visitor.visitArrayPrimaryExpression(this); + if (visitor.visitDotNotation) { + return visitor.visitDotNotation(this); } else { return visitor.visitChildren(this); } } } -export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserRuleContext { - public Void(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Void, 0); - } - public Null(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Null, 0); - } - public Undefined(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Undefined, 0); + +export class BracketNotationContext extends KipperParserRuleContext { + public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); } + public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_bracketNotation; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterVoidOrNullOrUndefinedPrimaryExpression) { - listener.enterVoidOrNullOrUndefinedPrimaryExpression(this); + if (listener.enterBracketNotation) { + listener.enterBracketNotation(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitVoidOrNullOrUndefinedPrimaryExpression) { - listener.exitVoidOrNullOrUndefinedPrimaryExpression(this); + if (listener.exitBracketNotation) { + listener.exitBracketNotation(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitVoidOrNullOrUndefinedPrimaryExpression) { - return visitor.visitVoidOrNullOrUndefinedPrimaryExpression(this); + if (visitor.visitBracketNotation) { + return visitor.visitBracketNotation(this); } else { return visitor.visitChildren(this); } } } -export class ComputedPrimaryExpressionContext extends KipperParserRuleContext { - public _labelASTKind: ASTKind | undefined; + +export class SliceNotationContext extends KipperParserRuleContext { + public sliceStart: boolean = false; + public sliceEnd: boolean = false; + public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_computedPrimaryExpression; - } - public copyFrom(ctx: ComputedPrimaryExpressionContext): void { - super.copyFrom(ctx); - this._labelASTKind = ctx._labelASTKind; - } -} -export class PassOncomputedPrimaryExpressionContext extends ComputedPrimaryExpressionContext { - public primaryExpression(): PrimaryExpressionContext { - return this.getRuleContext(0, PrimaryExpressionContext); - } - constructor(ctx: ComputedPrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return KipperParser.RULE_sliceNotation; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterPassOncomputedPrimaryExpression) { - listener.enterPassOncomputedPrimaryExpression(this); + if (listener.enterSliceNotation) { + listener.enterSliceNotation(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitPassOncomputedPrimaryExpression) { - listener.exitPassOncomputedPrimaryExpression(this); + if (listener.exitSliceNotation) { + listener.exitSliceNotation(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitPassOncomputedPrimaryExpression) { - return visitor.visitPassOncomputedPrimaryExpression(this); + if (visitor.visitSliceNotation) { + return visitor.visitSliceNotation(this); } else { return visitor.visitChildren(this); } } } -export class FunctionCallExpressionContext extends ComputedPrimaryExpressionContext { - public computedPrimaryExpression(): ComputedPrimaryExpressionContext { - return this.getRuleContext(0, ComputedPrimaryExpressionContext); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); + + +export class PostfixExpressionContext extends KipperParserRuleContext { + public computedPrimaryExpression(): ComputedPrimaryExpressionContext | undefined { + return this.tryGetRuleContext(0, ComputedPrimaryExpressionContext); } - public argumentExpressionList(): ArgumentExpressionListContext | undefined { - return this.tryGetRuleContext(0, ArgumentExpressionListContext); + public incrementOrDecrementPostfixExpression(): IncrementOrDecrementPostfixExpressionContext | undefined { + return this.tryGetRuleContext(0, IncrementOrDecrementPostfixExpressionContext); } - constructor(ctx: ComputedPrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override + public get ruleIndex(): number { return KipperParser.RULE_postfixExpression; } + // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterFunctionCallExpression) { - listener.enterFunctionCallExpression(this); + if (listener.enterPostfixExpression) { + listener.enterPostfixExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitFunctionCallExpression) { - listener.exitFunctionCallExpression(this); + if (listener.exitPostfixExpression) { + listener.exitPostfixExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitFunctionCallExpression) { - return visitor.visitFunctionCallExpression(this); + if (visitor.visitPostfixExpression) { + return visitor.visitPostfixExpression(this); } else { return visitor.visitChildren(this); } } } -export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { - public CallFunc(): TerminalNode { - return this.getToken(KipperParser.CallFunc, 0); - } + + +export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRuleContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public argumentExpressionList(): ArgumentExpressionListContext | undefined { - return this.tryGetRuleContext(0, ArgumentExpressionListContext); + public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { + return this.getRuleContext(0, IncrementOrDecrementOperatorContext); } - constructor(ctx: ComputedPrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override + public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementPostfixExpression; } + // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterExplicitCallFunctionCallExpression) { - listener.enterExplicitCallFunctionCallExpression(this); + if (listener.enterIncrementOrDecrementPostfixExpression) { + listener.enterIncrementOrDecrementPostfixExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitExplicitCallFunctionCallExpression) { - listener.exitExplicitCallFunctionCallExpression(this); + if (listener.exitIncrementOrDecrementPostfixExpression) { + listener.exitIncrementOrDecrementPostfixExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitExplicitCallFunctionCallExpression) { - return visitor.visitExplicitCallFunctionCallExpression(this); + if (visitor.visitIncrementOrDecrementPostfixExpression) { + return visitor.visitIncrementOrDecrementPostfixExpression(this); } else { return visitor.visitChildren(this); } } } -export class DotNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { - public computedPrimaryExpression(): ComputedPrimaryExpressionContext { - return this.getRuleContext(0, ComputedPrimaryExpressionContext); + + +export class UnaryExpressionContext extends KipperParserRuleContext { + public postfixExpression(): PostfixExpressionContext | undefined { + return this.tryGetRuleContext(0, PostfixExpressionContext); } - public dotNotation(): DotNotationContext { - return this.getRuleContext(0, DotNotationContext); + public incrementOrDecrementUnaryExpression(): IncrementOrDecrementUnaryExpressionContext | undefined { + return this.tryGetRuleContext(0, IncrementOrDecrementUnaryExpressionContext); } - constructor(ctx: ComputedPrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public operatorModifiedUnaryExpression(): OperatorModifiedUnaryExpressionContext | undefined { + return this.tryGetRuleContext(0, OperatorModifiedUnaryExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override + public get ruleIndex(): number { return KipperParser.RULE_unaryExpression; } + // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterDotNotationMemberAccessExpression) { - listener.enterDotNotationMemberAccessExpression(this); + if (listener.enterUnaryExpression) { + listener.enterUnaryExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitDotNotationMemberAccessExpression) { - listener.exitDotNotationMemberAccessExpression(this); + if (listener.exitUnaryExpression) { + listener.exitUnaryExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitDotNotationMemberAccessExpression) { - return visitor.visitDotNotationMemberAccessExpression(this); + if (visitor.visitUnaryExpression) { + return visitor.visitUnaryExpression(this); } else { return visitor.visitChildren(this); } } } -export class BracketNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { - public computedPrimaryExpression(): ComputedPrimaryExpressionContext { - return this.getRuleContext(0, ComputedPrimaryExpressionContext); + + +export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRuleContext { + public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { + return this.getRuleContext(0, IncrementOrDecrementOperatorContext); } - public bracketNotation(): BracketNotationContext { - return this.getRuleContext(0, BracketNotationContext); + public postfixExpression(): PostfixExpressionContext { + return this.getRuleContext(0, PostfixExpressionContext); } - constructor(ctx: ComputedPrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override + public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementUnaryExpression; } + // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterBracketNotationMemberAccessExpression) { - listener.enterBracketNotationMemberAccessExpression(this); + if (listener.enterIncrementOrDecrementUnaryExpression) { + listener.enterIncrementOrDecrementUnaryExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitBracketNotationMemberAccessExpression) { - listener.exitBracketNotationMemberAccessExpression(this); + if (listener.exitIncrementOrDecrementUnaryExpression) { + listener.exitIncrementOrDecrementUnaryExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitBracketNotationMemberAccessExpression) { - return visitor.visitBracketNotationMemberAccessExpression(this); + if (visitor.visitIncrementOrDecrementUnaryExpression) { + return visitor.visitIncrementOrDecrementUnaryExpression(this); } else { return visitor.visitChildren(this); } } } -export class SliceNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { - public computedPrimaryExpression(): ComputedPrimaryExpressionContext { - return this.getRuleContext(0, ComputedPrimaryExpressionContext); + + +export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleContext { + public unaryOperator(): UnaryOperatorContext { + return this.getRuleContext(0, UnaryOperatorContext); } - public sliceNotation(): SliceNotationContext { - return this.getRuleContext(0, SliceNotationContext); + public postfixExpression(): PostfixExpressionContext { + return this.getRuleContext(0, PostfixExpressionContext); } - constructor(ctx: ComputedPrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override + public get ruleIndex(): number { return KipperParser.RULE_operatorModifiedUnaryExpression; } + // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterSliceNotationMemberAccessExpression) { - listener.enterSliceNotationMemberAccessExpression(this); + if (listener.enterOperatorModifiedUnaryExpression) { + listener.enterOperatorModifiedUnaryExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitSliceNotationMemberAccessExpression) { - listener.exitSliceNotationMemberAccessExpression(this); + if (listener.exitOperatorModifiedUnaryExpression) { + listener.exitOperatorModifiedUnaryExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitSliceNotationMemberAccessExpression) { - return visitor.visitSliceNotationMemberAccessExpression(this); + if (visitor.visitOperatorModifiedUnaryExpression) { + return visitor.visitOperatorModifiedUnaryExpression(this); } else { return visitor.visitChildren(this); } } } -export class ArgumentExpressionListContext extends KipperParserRuleContext { - public assignmentExpression(): AssignmentExpressionContext[]; - public assignmentExpression(i: number): AssignmentExpressionContext; - public assignmentExpression(i?: number): AssignmentExpressionContext | AssignmentExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(AssignmentExpressionContext); - } else { - return this.getRuleContext(i, AssignmentExpressionContext); - } - } - public Comma(): TerminalNode[]; - public Comma(i: number): TerminalNode; - public Comma(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(KipperParser.Comma); - } else { - return this.getToken(KipperParser.Comma, i); - } - } + +export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext { + public PlusPlus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusPlus, 0); } + public MinusMinus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusMinus, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_argumentExpressionList; - } + public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementOperator; } // @Override - public enterRule(listener: KipperParserListener): void { - if (listener.enterArgumentExpressionList) { - listener.enterArgumentExpressionList(this); + public enterRule(listener: KipperParserListener): void { + if (listener.enterIncrementOrDecrementOperator) { + listener.enterIncrementOrDecrementOperator(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitArgumentExpressionList) { - listener.exitArgumentExpressionList(this); + if (listener.exitIncrementOrDecrementOperator) { + listener.exitIncrementOrDecrementOperator(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitArgumentExpressionList) { - return visitor.visitArgumentExpressionList(this); + if (visitor.visitIncrementOrDecrementOperator) { + return visitor.visitIncrementOrDecrementOperator(this); } else { return visitor.visitChildren(this); } } } -export class DotNotationContext extends KipperParserRuleContext { - public Dot(): TerminalNode { - return this.getToken(KipperParser.Dot, 0); - } - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); - } + +export class UnaryOperatorContext extends KipperParserRuleContext { + public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } + public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } + public Not(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Not, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_dotNotation; - } + public get ruleIndex(): number { return KipperParser.RULE_unaryOperator; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterDotNotation) { - listener.enterDotNotation(this); + if (listener.enterUnaryOperator) { + listener.enterUnaryOperator(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitDotNotation) { - listener.exitDotNotation(this); + if (listener.exitUnaryOperator) { + listener.exitUnaryOperator(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitDotNotation) { - return visitor.visitDotNotation(this); + if (visitor.visitUnaryOperator) { + return visitor.visitUnaryOperator(this); } else { return visitor.visitChildren(this); } } } -export class BracketNotationContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { - return this.getToken(KipperParser.LeftBracket, 0); - } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - public RightBracket(): TerminalNode { - return this.getToken(KipperParser.RightBracket, 0); - } + +export class CastOrConvertExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_bracketNotation; + public get ruleIndex(): number { return KipperParser.RULE_castOrConvertExpression; } + public copyFrom(ctx: CastOrConvertExpressionContext): void { + super.copyFrom(ctx); + } +} +export class PassOnCastOrConvertExpressionContext extends CastOrConvertExpressionContext { + public unaryExpression(): UnaryExpressionContext { + return this.getRuleContext(0, UnaryExpressionContext); + } + constructor(ctx: CastOrConvertExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterBracketNotation) { - listener.enterBracketNotation(this); + if (listener.enterPassOnCastOrConvertExpression) { + listener.enterPassOnCastOrConvertExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitBracketNotation) { - listener.exitBracketNotation(this); + if (listener.exitPassOnCastOrConvertExpression) { + listener.exitPassOnCastOrConvertExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitBracketNotation) { - return visitor.visitBracketNotation(this); + if (visitor.visitPassOnCastOrConvertExpression) { + return visitor.visitPassOnCastOrConvertExpression(this); } else { return visitor.visitChildren(this); } } } - -export class SliceNotationContext extends KipperParserRuleContext { - public sliceStart: boolean = false; - public sliceEnd: boolean = false; - public LeftBracket(): TerminalNode { - return this.getToken(KipperParser.LeftBracket, 0); - } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } - public RightBracket(): TerminalNode { - return this.getToken(KipperParser.RightBracket, 0); - } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } +export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressionContext { + public unaryExpression(): UnaryExpressionContext { + return this.getRuleContext(0, UnaryExpressionContext); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public As(): TerminalNode { return this.getToken(KipperParser.As, 0); } + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_sliceNotation; + constructor(ctx: CastOrConvertExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterSliceNotation) { - listener.enterSliceNotation(this); + if (listener.enterActualCastOrConvertExpression) { + listener.enterActualCastOrConvertExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitSliceNotation) { - listener.exitSliceNotation(this); + if (listener.exitActualCastOrConvertExpression) { + listener.exitActualCastOrConvertExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitSliceNotation) { - return visitor.visitSliceNotation(this); + if (visitor.visitActualCastOrConvertExpression) { + return visitor.visitActualCastOrConvertExpression(this); } else { return visitor.visitChildren(this); } } } -export class PostfixExpressionContext extends KipperParserRuleContext { - public computedPrimaryExpression(): ComputedPrimaryExpressionContext | undefined { - return this.tryGetRuleContext(0, ComputedPrimaryExpressionContext); - } - public incrementOrDecrementPostfixExpression(): IncrementOrDecrementPostfixExpressionContext | undefined { - return this.tryGetRuleContext(0, IncrementOrDecrementPostfixExpressionContext); - } + +export class MultiplicativeExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_postfixExpression; + public get ruleIndex(): number { return KipperParser.RULE_multiplicativeExpression; } + public copyFrom(ctx: MultiplicativeExpressionContext): void { + super.copyFrom(ctx); + } +} +export class PassOnMultiplicativeExpressionContext extends MultiplicativeExpressionContext { + public castOrConvertExpression(): CastOrConvertExpressionContext { + return this.getRuleContext(0, CastOrConvertExpressionContext); + } + constructor(ctx: MultiplicativeExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterPostfixExpression) { - listener.enterPostfixExpression(this); + if (listener.enterPassOnMultiplicativeExpression) { + listener.enterPassOnMultiplicativeExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitPostfixExpression) { - listener.exitPostfixExpression(this); + if (listener.exitPassOnMultiplicativeExpression) { + listener.exitPassOnMultiplicativeExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitPostfixExpression) { - return visitor.visitPostfixExpression(this); + if (visitor.visitPassOnMultiplicativeExpression) { + return visitor.visitPassOnMultiplicativeExpression(this); } else { return visitor.visitChildren(this); } } } - -export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRuleContext { - public computedPrimaryExpression(): ComputedPrimaryExpressionContext { - return this.getRuleContext(0, ComputedPrimaryExpressionContext); - } - public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { - return this.getRuleContext(0, IncrementOrDecrementOperatorContext); +export class ActualMultiplicativeExpressionContext extends MultiplicativeExpressionContext { + public multiplicativeExpression(): MultiplicativeExpressionContext { + return this.getRuleContext(0, MultiplicativeExpressionContext); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public castOrConvertExpression(): CastOrConvertExpressionContext { + return this.getRuleContext(0, CastOrConvertExpressionContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_incrementOrDecrementPostfixExpression; + public Star(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Star, 0); } + public Div(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Div, 0); } + public Mod(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Mod, 0); } + public PowerTo(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PowerTo, 0); } + constructor(ctx: MultiplicativeExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterIncrementOrDecrementPostfixExpression) { - listener.enterIncrementOrDecrementPostfixExpression(this); + if (listener.enterActualMultiplicativeExpression) { + listener.enterActualMultiplicativeExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitIncrementOrDecrementPostfixExpression) { - listener.exitIncrementOrDecrementPostfixExpression(this); + if (listener.exitActualMultiplicativeExpression) { + listener.exitActualMultiplicativeExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitIncrementOrDecrementPostfixExpression) { - return visitor.visitIncrementOrDecrementPostfixExpression(this); + if (visitor.visitActualMultiplicativeExpression) { + return visitor.visitActualMultiplicativeExpression(this); } else { return visitor.visitChildren(this); } } } -export class UnaryExpressionContext extends KipperParserRuleContext { - public postfixExpression(): PostfixExpressionContext | undefined { - return this.tryGetRuleContext(0, PostfixExpressionContext); - } - public incrementOrDecrementUnaryExpression(): IncrementOrDecrementUnaryExpressionContext | undefined { - return this.tryGetRuleContext(0, IncrementOrDecrementUnaryExpressionContext); - } - public operatorModifiedUnaryExpression(): OperatorModifiedUnaryExpressionContext | undefined { - return this.tryGetRuleContext(0, OperatorModifiedUnaryExpressionContext); - } + +export class AdditiveExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_unaryExpression; + public get ruleIndex(): number { return KipperParser.RULE_additiveExpression; } + public copyFrom(ctx: AdditiveExpressionContext): void { + super.copyFrom(ctx); + } +} +export class PassOnAdditiveExpressionContext extends AdditiveExpressionContext { + public multiplicativeExpression(): MultiplicativeExpressionContext { + return this.getRuleContext(0, MultiplicativeExpressionContext); + } + constructor(ctx: AdditiveExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterUnaryExpression) { - listener.enterUnaryExpression(this); + if (listener.enterPassOnAdditiveExpression) { + listener.enterPassOnAdditiveExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitUnaryExpression) { - listener.exitUnaryExpression(this); + if (listener.exitPassOnAdditiveExpression) { + listener.exitPassOnAdditiveExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitUnaryExpression) { - return visitor.visitUnaryExpression(this); + if (visitor.visitPassOnAdditiveExpression) { + return visitor.visitPassOnAdditiveExpression(this); } else { return visitor.visitChildren(this); } } } - -export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRuleContext { - public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { - return this.getRuleContext(0, IncrementOrDecrementOperatorContext); - } - public postfixExpression(): PostfixExpressionContext { - return this.getRuleContext(0, PostfixExpressionContext); +export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { + public additiveExpression(): AdditiveExpressionContext { + return this.getRuleContext(0, AdditiveExpressionContext); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public multiplicativeExpression(): MultiplicativeExpressionContext { + return this.getRuleContext(0, MultiplicativeExpressionContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_incrementOrDecrementUnaryExpression; + public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } + public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } + constructor(ctx: AdditiveExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterIncrementOrDecrementUnaryExpression) { - listener.enterIncrementOrDecrementUnaryExpression(this); + if (listener.enterActualAdditiveExpression) { + listener.enterActualAdditiveExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitIncrementOrDecrementUnaryExpression) { - listener.exitIncrementOrDecrementUnaryExpression(this); + if (listener.exitActualAdditiveExpression) { + listener.exitActualAdditiveExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitIncrementOrDecrementUnaryExpression) { - return visitor.visitIncrementOrDecrementUnaryExpression(this); + if (visitor.visitActualAdditiveExpression) { + return visitor.visitActualAdditiveExpression(this); } else { return visitor.visitChildren(this); } } } -export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleContext { - public unaryOperator(): UnaryOperatorContext { - return this.getRuleContext(0, UnaryOperatorContext); - } - public postfixExpression(): PostfixExpressionContext { - return this.getRuleContext(0, PostfixExpressionContext); - } + +export class BitwiseShiftExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_operatorModifiedUnaryExpression; + public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftExpression; } + public copyFrom(ctx: BitwiseShiftExpressionContext): void { + super.copyFrom(ctx); + } +} +export class PassOnBitwiseShiftExpressionContext extends BitwiseShiftExpressionContext { + public additiveExpression(): AdditiveExpressionContext { + return this.getRuleContext(0, AdditiveExpressionContext); + } + constructor(ctx: BitwiseShiftExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterOperatorModifiedUnaryExpression) { - listener.enterOperatorModifiedUnaryExpression(this); + if (listener.enterPassOnBitwiseShiftExpression) { + listener.enterPassOnBitwiseShiftExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitOperatorModifiedUnaryExpression) { - listener.exitOperatorModifiedUnaryExpression(this); + if (listener.exitPassOnBitwiseShiftExpression) { + listener.exitPassOnBitwiseShiftExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitOperatorModifiedUnaryExpression) { - return visitor.visitOperatorModifiedUnaryExpression(this); + if (visitor.visitPassOnBitwiseShiftExpression) { + return visitor.visitPassOnBitwiseShiftExpression(this); } else { return visitor.visitChildren(this); } } } - -export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext { - public PlusPlus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.PlusPlus, 0); +export class ActualBitwiseShiftExpressionContext extends BitwiseShiftExpressionContext { + public bitwiseShiftExpression(): BitwiseShiftExpressionContext { + return this.getRuleContext(0, BitwiseShiftExpressionContext); } - public MinusMinus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.MinusMinus, 0); + public bitwiseShiftOperators(): BitwiseShiftOperatorsContext { + return this.getRuleContext(0, BitwiseShiftOperatorsContext); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public bitwiseAndExpression(): BitwiseAndExpressionContext { + return this.getRuleContext(0, BitwiseAndExpressionContext); } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_incrementOrDecrementOperator; + constructor(ctx: BitwiseShiftExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterIncrementOrDecrementOperator) { - listener.enterIncrementOrDecrementOperator(this); + if (listener.enterActualBitwiseShiftExpression) { + listener.enterActualBitwiseShiftExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitIncrementOrDecrementOperator) { - listener.exitIncrementOrDecrementOperator(this); + if (listener.exitActualBitwiseShiftExpression) { + listener.exitActualBitwiseShiftExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitIncrementOrDecrementOperator) { - return visitor.visitIncrementOrDecrementOperator(this); + if (visitor.visitActualBitwiseShiftExpression) { + return visitor.visitActualBitwiseShiftExpression(this); } else { return visitor.visitChildren(this); } } } -export class UnaryOperatorContext extends KipperParserRuleContext { - public Plus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Plus, 0); - } - public Minus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Minus, 0); - } - public Not(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Not, 0); - } + +export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { + public BitwiseZeroFillLeftShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillLeftShift, 0); } + public BitwiseSignedRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseSignedRightShift, 0); } + public BitwiseZeroFillRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillRightShift, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_unaryOperator; - } + public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftOperators; } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterUnaryOperator) { - listener.enterUnaryOperator(this); + if (listener.enterBitwiseShiftOperators) { + listener.enterBitwiseShiftOperators(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitUnaryOperator) { - listener.exitUnaryOperator(this); + if (listener.exitBitwiseShiftOperators) { + listener.exitBitwiseShiftOperators(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitUnaryOperator) { - return visitor.visitUnaryOperator(this); + if (visitor.visitBitwiseShiftOperators) { + return visitor.visitBitwiseShiftOperators(this); } else { return visitor.visitChildren(this); } } } -export class CastOrConvertExpressionContext extends KipperParserRuleContext { + +export class RelationalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_castOrConvertExpression; - } - public copyFrom(ctx: CastOrConvertExpressionContext): void { + public get ruleIndex(): number { return KipperParser.RULE_relationalExpression; } + public copyFrom(ctx: RelationalExpressionContext): void { super.copyFrom(ctx); } } -export class PassOnCastOrConvertExpressionContext extends CastOrConvertExpressionContext { - public unaryExpression(): UnaryExpressionContext { - return this.getRuleContext(0, UnaryExpressionContext); +export class PassOnRelationalExpressionContext extends RelationalExpressionContext { + public bitwiseShiftExpression(): BitwiseShiftExpressionContext { + return this.getRuleContext(0, BitwiseShiftExpressionContext); } - constructor(ctx: CastOrConvertExpressionContext) { + constructor(ctx: RelationalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterPassOnCastOrConvertExpression) { - listener.enterPassOnCastOrConvertExpression(this); + if (listener.enterPassOnRelationalExpression) { + listener.enterPassOnRelationalExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitPassOnCastOrConvertExpression) { - listener.exitPassOnCastOrConvertExpression(this); + if (listener.exitPassOnRelationalExpression) { + listener.exitPassOnRelationalExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitPassOnCastOrConvertExpression) { - return visitor.visitPassOnCastOrConvertExpression(this); + if (visitor.visitPassOnRelationalExpression) { + return visitor.visitPassOnRelationalExpression(this); } else { return visitor.visitChildren(this); } } } -export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressionContext { - public unaryExpression(): UnaryExpressionContext { - return this.getRuleContext(0, UnaryExpressionContext); - } - public As(): TerminalNode { - return this.getToken(KipperParser.As, 0); +export class ActualRelationalExpressionContext extends RelationalExpressionContext { + public relationalExpression(): RelationalExpressionContext { + return this.getRuleContext(0, RelationalExpressionContext); } - public typeSpecifierExpression(): TypeSpecifierExpressionContext { - return this.getRuleContext(0, TypeSpecifierExpressionContext); + public bitwiseShiftExpression(): BitwiseShiftExpressionContext { + return this.getRuleContext(0, BitwiseShiftExpressionContext); } - constructor(ctx: CastOrConvertExpressionContext) { + public Less(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Less, 0); } + public Greater(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Greater, 0); } + public LessEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.LessEqual, 0); } + public GreaterEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.GreaterEqual, 0); } + constructor(ctx: RelationalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterActualCastOrConvertExpression) { - listener.enterActualCastOrConvertExpression(this); + if (listener.enterActualRelationalExpression) { + listener.enterActualRelationalExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitActualCastOrConvertExpression) { - listener.exitActualCastOrConvertExpression(this); + if (listener.exitActualRelationalExpression) { + listener.exitActualRelationalExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitActualCastOrConvertExpression) { - return visitor.visitActualCastOrConvertExpression(this); + if (visitor.visitActualRelationalExpression) { + return visitor.visitActualRelationalExpression(this); } else { return visitor.visitChildren(this); } } } -export class MultiplicativeExpressionContext extends KipperParserRuleContext { + +export class EqualityExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_multiplicativeExpression; - } - public copyFrom(ctx: MultiplicativeExpressionContext): void { + public get ruleIndex(): number { return KipperParser.RULE_equalityExpression; } + public copyFrom(ctx: EqualityExpressionContext): void { super.copyFrom(ctx); } } -export class PassOnMultiplicativeExpressionContext extends MultiplicativeExpressionContext { - public castOrConvertExpression(): CastOrConvertExpressionContext { - return this.getRuleContext(0, CastOrConvertExpressionContext); +export class PassOnEqualityExpressionContext extends EqualityExpressionContext { + public relationalExpression(): RelationalExpressionContext { + return this.getRuleContext(0, RelationalExpressionContext); } - constructor(ctx: MultiplicativeExpressionContext) { + constructor(ctx: EqualityExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterPassOnMultiplicativeExpression) { - listener.enterPassOnMultiplicativeExpression(this); + if (listener.enterPassOnEqualityExpression) { + listener.enterPassOnEqualityExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitPassOnMultiplicativeExpression) { - listener.exitPassOnMultiplicativeExpression(this); + if (listener.exitPassOnEqualityExpression) { + listener.exitPassOnEqualityExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitPassOnMultiplicativeExpression) { - return visitor.visitPassOnMultiplicativeExpression(this); + if (visitor.visitPassOnEqualityExpression) { + return visitor.visitPassOnEqualityExpression(this); } else { return visitor.visitChildren(this); } } } -export class ActualMultiplicativeExpressionContext extends MultiplicativeExpressionContext { - public multiplicativeExpression(): MultiplicativeExpressionContext { - return this.getRuleContext(0, MultiplicativeExpressionContext); - } - public castOrConvertExpression(): CastOrConvertExpressionContext { - return this.getRuleContext(0, CastOrConvertExpressionContext); - } - public Star(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Star, 0); - } - public Div(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Div, 0); - } - public Mod(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Mod, 0); +export class ActualEqualityExpressionContext extends EqualityExpressionContext { + public equalityExpression(): EqualityExpressionContext { + return this.getRuleContext(0, EqualityExpressionContext); } - public PowerTo(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.PowerTo, 0); + public relationalExpression(): RelationalExpressionContext { + return this.getRuleContext(0, RelationalExpressionContext); } - constructor(ctx: MultiplicativeExpressionContext) { + public Equal(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Equal, 0); } + public NotEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.NotEqual, 0); } + constructor(ctx: EqualityExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterActualMultiplicativeExpression) { - listener.enterActualMultiplicativeExpression(this); + if (listener.enterActualEqualityExpression) { + listener.enterActualEqualityExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitActualMultiplicativeExpression) { - listener.exitActualMultiplicativeExpression(this); + if (listener.exitActualEqualityExpression) { + listener.exitActualEqualityExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitActualMultiplicativeExpression) { - return visitor.visitActualMultiplicativeExpression(this); + if (visitor.visitActualEqualityExpression) { + return visitor.visitActualEqualityExpression(this); } else { return visitor.visitChildren(this); } } } -export class AdditiveExpressionContext extends KipperParserRuleContext { + +export class BitwiseAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_additiveExpression; - } - public copyFrom(ctx: AdditiveExpressionContext): void { + public get ruleIndex(): number { return KipperParser.RULE_bitwiseAndExpression; } + public copyFrom(ctx: BitwiseAndExpressionContext): void { super.copyFrom(ctx); } } -export class PassOnAdditiveExpressionContext extends AdditiveExpressionContext { - public multiplicativeExpression(): MultiplicativeExpressionContext { - return this.getRuleContext(0, MultiplicativeExpressionContext); +export class PassOnBitwiseAndExpressionContext extends BitwiseAndExpressionContext { + public equalityExpression(): EqualityExpressionContext { + return this.getRuleContext(0, EqualityExpressionContext); } - constructor(ctx: AdditiveExpressionContext) { + constructor(ctx: BitwiseAndExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterPassOnAdditiveExpression) { - listener.enterPassOnAdditiveExpression(this); + if (listener.enterPassOnBitwiseAndExpression) { + listener.enterPassOnBitwiseAndExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitPassOnAdditiveExpression) { - listener.exitPassOnAdditiveExpression(this); + if (listener.exitPassOnBitwiseAndExpression) { + listener.exitPassOnBitwiseAndExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitPassOnAdditiveExpression) { - return visitor.visitPassOnAdditiveExpression(this); + if (visitor.visitPassOnBitwiseAndExpression) { + return visitor.visitPassOnBitwiseAndExpression(this); } else { return visitor.visitChildren(this); } } } -export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { - public additiveExpression(): AdditiveExpressionContext { - return this.getRuleContext(0, AdditiveExpressionContext); - } - public multiplicativeExpression(): MultiplicativeExpressionContext { - return this.getRuleContext(0, MultiplicativeExpressionContext); - } - public Plus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Plus, 0); +export class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionContext { + public bitwiseAndExpression(): BitwiseAndExpressionContext { + return this.getRuleContext(0, BitwiseAndExpressionContext); } - public Minus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Minus, 0); + public BitwiseAnd(): TerminalNode { return this.getToken(KipperParser.BitwiseAnd, 0); } + public equalityExpression(): EqualityExpressionContext { + return this.getRuleContext(0, EqualityExpressionContext); } - constructor(ctx: AdditiveExpressionContext) { + constructor(ctx: BitwiseAndExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterActualAdditiveExpression) { - listener.enterActualAdditiveExpression(this); + if (listener.enterActualBitwiseAndExpression) { + listener.enterActualBitwiseAndExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitActualAdditiveExpression) { - listener.exitActualAdditiveExpression(this); + if (listener.exitActualBitwiseAndExpression) { + listener.exitActualBitwiseAndExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitActualAdditiveExpression) { - return visitor.visitActualAdditiveExpression(this); + if (visitor.visitActualBitwiseAndExpression) { + return visitor.visitActualBitwiseAndExpression(this); } else { return visitor.visitChildren(this); } } } -export class RelationalExpressionContext extends KipperParserRuleContext { + +export class BitwiseXorExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_relationalExpression; - } - public copyFrom(ctx: RelationalExpressionContext): void { + public get ruleIndex(): number { return KipperParser.RULE_bitwiseXorExpression; } + public copyFrom(ctx: BitwiseXorExpressionContext): void { super.copyFrom(ctx); } } -export class PassOnRelationalExpressionContext extends RelationalExpressionContext { - public additiveExpression(): AdditiveExpressionContext { - return this.getRuleContext(0, AdditiveExpressionContext); +export class PassOnBitwiseXorExpressionContext extends BitwiseXorExpressionContext { + public bitwiseAndExpression(): BitwiseAndExpressionContext { + return this.getRuleContext(0, BitwiseAndExpressionContext); } - constructor(ctx: RelationalExpressionContext) { + constructor(ctx: BitwiseXorExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterPassOnRelationalExpression) { - listener.enterPassOnRelationalExpression(this); + if (listener.enterPassOnBitwiseXorExpression) { + listener.enterPassOnBitwiseXorExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitPassOnRelationalExpression) { - listener.exitPassOnRelationalExpression(this); + if (listener.exitPassOnBitwiseXorExpression) { + listener.exitPassOnBitwiseXorExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitPassOnRelationalExpression) { - return visitor.visitPassOnRelationalExpression(this); + if (visitor.visitPassOnBitwiseXorExpression) { + return visitor.visitPassOnBitwiseXorExpression(this); } else { return visitor.visitChildren(this); } } } -export class ActualRelationalExpressionContext extends RelationalExpressionContext { - public relationalExpression(): RelationalExpressionContext { - return this.getRuleContext(0, RelationalExpressionContext); +export class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionContext { + public bitwiseXorExpression(): BitwiseXorExpressionContext { + return this.getRuleContext(0, BitwiseXorExpressionContext); } - public additiveExpression(): AdditiveExpressionContext { - return this.getRuleContext(0, AdditiveExpressionContext); - } - public Less(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Less, 0); - } - public Greater(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Greater, 0); + public BitwiseXor(): TerminalNode { return this.getToken(KipperParser.BitwiseXor, 0); } + public bitwiseAndExpression(): BitwiseAndExpressionContext { + return this.getRuleContext(0, BitwiseAndExpressionContext); } - public LessEqual(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.LessEqual, 0); - } - public GreaterEqual(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.GreaterEqual, 0); - } - constructor(ctx: RelationalExpressionContext) { + constructor(ctx: BitwiseXorExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterActualRelationalExpression) { - listener.enterActualRelationalExpression(this); + if (listener.enterActualBitwiseXorExpression) { + listener.enterActualBitwiseXorExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitActualRelationalExpression) { - listener.exitActualRelationalExpression(this); + if (listener.exitActualBitwiseXorExpression) { + listener.exitActualBitwiseXorExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitActualRelationalExpression) { - return visitor.visitActualRelationalExpression(this); + if (visitor.visitActualBitwiseXorExpression) { + return visitor.visitActualBitwiseXorExpression(this); } else { return visitor.visitChildren(this); } } } -export class EqualityExpressionContext extends KipperParserRuleContext { + +export class BitwiseOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_equalityExpression; - } - public copyFrom(ctx: EqualityExpressionContext): void { + public get ruleIndex(): number { return KipperParser.RULE_bitwiseOrExpression; } + public copyFrom(ctx: BitwiseOrExpressionContext): void { super.copyFrom(ctx); } } -export class PassOnEqualityExpressionContext extends EqualityExpressionContext { - public relationalExpression(): RelationalExpressionContext { - return this.getRuleContext(0, RelationalExpressionContext); +export class PassOnBitwiseOrExpressionContext extends BitwiseOrExpressionContext { + public bitwiseXorExpression(): BitwiseXorExpressionContext { + return this.getRuleContext(0, BitwiseXorExpressionContext); } - constructor(ctx: EqualityExpressionContext) { + constructor(ctx: BitwiseOrExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterPassOnEqualityExpression) { - listener.enterPassOnEqualityExpression(this); + if (listener.enterPassOnBitwiseOrExpression) { + listener.enterPassOnBitwiseOrExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitPassOnEqualityExpression) { - listener.exitPassOnEqualityExpression(this); + if (listener.exitPassOnBitwiseOrExpression) { + listener.exitPassOnBitwiseOrExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitPassOnEqualityExpression) { - return visitor.visitPassOnEqualityExpression(this); + if (visitor.visitPassOnBitwiseOrExpression) { + return visitor.visitPassOnBitwiseOrExpression(this); } else { return visitor.visitChildren(this); } } } -export class ActualEqualityExpressionContext extends EqualityExpressionContext { - public equalityExpression(): EqualityExpressionContext { - return this.getRuleContext(0, EqualityExpressionContext); - } - public relationalExpression(): RelationalExpressionContext { - return this.getRuleContext(0, RelationalExpressionContext); - } - public Equal(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Equal, 0); +export class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext { + public bitwiseOrExpression(): BitwiseOrExpressionContext { + return this.getRuleContext(0, BitwiseOrExpressionContext); } - public NotEqual(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.NotEqual, 0); + public BitwiseOr(): TerminalNode { return this.getToken(KipperParser.BitwiseOr, 0); } + public bitwiseXorExpression(): BitwiseXorExpressionContext { + return this.getRuleContext(0, BitwiseXorExpressionContext); } - constructor(ctx: EqualityExpressionContext) { + constructor(ctx: BitwiseOrExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterActualEqualityExpression) { - listener.enterActualEqualityExpression(this); + if (listener.enterActualBitwiseOrExpression) { + listener.enterActualBitwiseOrExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitActualEqualityExpression) { - listener.exitActualEqualityExpression(this); + if (listener.exitActualBitwiseOrExpression) { + listener.exitActualBitwiseOrExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitActualEqualityExpression) { - return visitor.visitActualEqualityExpression(this); + if (visitor.visitActualBitwiseOrExpression) { + return visitor.visitActualBitwiseOrExpression(this); } else { return visitor.visitChildren(this); } } } + export class LogicalAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_logicalAndExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_logicalAndExpression; } public copyFrom(ctx: LogicalAndExpressionContext): void { super.copyFrom(ctx); } } export class PassOnLogicalAndExpressionContext extends LogicalAndExpressionContext { - public equalityExpression(): EqualityExpressionContext { - return this.getRuleContext(0, EqualityExpressionContext); + public bitwiseOrExpression(): BitwiseOrExpressionContext { + return this.getRuleContext(0, BitwiseOrExpressionContext); } constructor(ctx: LogicalAndExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7199,11 +7124,9 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } - public AndAnd(): TerminalNode { - return this.getToken(KipperParser.AndAnd, 0); - } - public equalityExpression(): EqualityExpressionContext { - return this.getRuleContext(0, EqualityExpressionContext); + public AndAnd(): TerminalNode { return this.getToken(KipperParser.AndAnd, 0); } + public bitwiseOrExpression(): BitwiseOrExpressionContext { + return this.getRuleContext(0, BitwiseOrExpressionContext); } constructor(ctx: LogicalAndExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7231,14 +7154,13 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte } } + export class LogicalOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_logicalOrExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_logicalOrExpression; } public copyFrom(ctx: LogicalOrExpressionContext): void { super.copyFrom(ctx); } @@ -7276,9 +7198,7 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public OrOr(): TerminalNode { - return this.getToken(KipperParser.OrOr, 0); - } + public OrOr(): TerminalNode { return this.getToken(KipperParser.OrOr, 0); } public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } @@ -7308,14 +7228,13 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext } } + export class ConditionalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_conditionalExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_conditionalExpression; } public copyFrom(ctx: ConditionalExpressionContext): void { super.copyFrom(ctx); } @@ -7353,9 +7272,7 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public QuestionMark(): TerminalNode { - return this.getToken(KipperParser.QuestionMark, 0); - } + public QuestionMark(): TerminalNode { return this.getToken(KipperParser.QuestionMark, 0); } public conditionalExpression(): ConditionalExpressionContext[]; public conditionalExpression(i: number): ConditionalExpressionContext; public conditionalExpression(i?: number): ConditionalExpressionContext | ConditionalExpressionContext[] { @@ -7365,9 +7282,7 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon return this.getRuleContext(i, ConditionalExpressionContext); } } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } constructor(ctx: ConditionalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -7394,14 +7309,13 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon } } + export class AssignmentExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_assignmentExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_assignmentExpression; } public copyFrom(ctx: AssignmentExpressionContext): void { super.copyFrom(ctx); } @@ -7471,32 +7385,19 @@ export class ActualAssignmentExpressionContext extends AssignmentExpressionConte } } + export class AssignmentOperatorContext extends KipperParserRuleContext { - public Assign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Assign, 0); - } - public StarAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.StarAssign, 0); - } - public DivAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.DivAssign, 0); - } - public ModAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.ModAssign, 0); - } - public PlusAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.PlusAssign, 0); - } - public MinusAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.MinusAssign, 0); - } + public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } + public StarAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.StarAssign, 0); } + public DivAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DivAssign, 0); } + public ModAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.ModAssign, 0); } + public PlusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusAssign, 0); } + public MinusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusAssign, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_assignmentOperator; - } + public get ruleIndex(): number { return KipperParser.RULE_assignmentOperator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterAssignmentOperator) { @@ -7519,6 +7420,7 @@ export class AssignmentOperatorContext extends KipperParserRuleContext { } } + export class ExpressionContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext[]; public assignmentExpression(i: number): AssignmentExpressionContext; @@ -7542,9 +7444,7 @@ export class ExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_expression; - } + public get ruleIndex(): number { return KipperParser.RULE_expression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpression) { @@ -7567,6 +7467,7 @@ export class ExpressionContext extends KipperParserRuleContext { } } + export class TypeSpecifierExpressionContext extends KipperParserRuleContext { public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext | undefined { return this.tryGetRuleContext(0, IdentifierTypeSpecifierExpressionContext); @@ -7581,9 +7482,7 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_typeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierExpression) { @@ -7606,6 +7505,7 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { } } + export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); @@ -7614,9 +7514,7 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_identifierTypeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_identifierTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierTypeSpecifierExpression) { @@ -7639,6 +7537,7 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo } } + export class GenericTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext[]; public typeSpecifierIdentifier(i: number): TypeSpecifierIdentifierContext; @@ -7649,19 +7548,13 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte return this.getRuleContext(i, TypeSpecifierIdentifierContext); } } - public Less(): TerminalNode { - return this.getToken(KipperParser.Less, 0); - } - public Greater(): TerminalNode { - return this.getToken(KipperParser.Greater, 0); - } + public Less(): TerminalNode { return this.getToken(KipperParser.Less, 0); } + public Greater(): TerminalNode { return this.getToken(KipperParser.Greater, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_genericTypeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_genericTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterGenericTypeSpecifierExpression) { @@ -7684,26 +7577,19 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte } } + export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContext { - public Typeof(): TerminalNode { - return this.getToken(KipperParser.Typeof, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public Typeof(): TerminalNode { return this.getToken(KipperParser.Typeof, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_typeofTypeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_typeofTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeofTypeSpecifierExpression) { @@ -7726,26 +7612,17 @@ export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContex } } + export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Identifier, 0); - } - public Null(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Null, 0); - } - public Undefined(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Undefined, 0); - } - public Void(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Void, 0); - } + public Identifier(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Identifier, 0); } + public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } + public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } + public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_typeSpecifierIdentifier; - } + public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierIdentifier; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierIdentifier) { @@ -7767,3 +7644,5 @@ export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { } } } + + diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts index 0de2c55ac..5c06e8797 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts @@ -1,13 +1,21 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT -// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax -// kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + + // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax + // kind values. + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; import { PassOnLogicalAndExpressionContext } from "./KipperParser"; import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; import { ExternalBlockItemContext } from "./KipperParser"; import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; import { FunctionCallExpressionContext } from "./KipperParser"; @@ -19,6 +27,8 @@ import { PassOnAssignmentExpressionContext } from "./KipperParser"; import { ActualAssignmentExpressionContext } from "./KipperParser"; import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; import { PassOnEqualityExpressionContext } from "./KipperParser"; import { ActualEqualityExpressionContext } from "./KipperParser"; import { PassOnAdditiveExpressionContext } from "./KipperParser"; @@ -86,8 +96,13 @@ import { UnaryOperatorContext } from "./KipperParser"; import { CastOrConvertExpressionContext } from "./KipperParser"; import { MultiplicativeExpressionContext } from "./KipperParser"; import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; import { RelationalExpressionContext } from "./KipperParser"; import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; import { LogicalAndExpressionContext } from "./KipperParser"; import { LogicalOrExpressionContext } from "./KipperParser"; import { ConditionalExpressionContext } from "./KipperParser"; @@ -100,11 +115,64 @@ import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; + /** * This interface defines a complete listener for a parse tree produced by * `KipperParser`. */ export interface KipperParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by the `passOnBitwiseShiftExpression` + * labeled alternative in `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + */ + enterPassOnBitwiseShiftExpression?: (ctx: PassOnBitwiseShiftExpressionContext) => void; + /** + * Exit a parse tree produced by the `passOnBitwiseShiftExpression` + * labeled alternative in `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + */ + exitPassOnBitwiseShiftExpression?: (ctx: PassOnBitwiseShiftExpressionContext) => void; + + /** + * Enter a parse tree produced by the `actualBitwiseShiftExpression` + * labeled alternative in `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + */ + enterActualBitwiseShiftExpression?: (ctx: ActualBitwiseShiftExpressionContext) => void; + /** + * Exit a parse tree produced by the `actualBitwiseShiftExpression` + * labeled alternative in `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + */ + exitActualBitwiseShiftExpression?: (ctx: ActualBitwiseShiftExpressionContext) => void; + + /** + * Enter a parse tree produced by the `passOnBitwiseAndExpression` + * labeled alternative in `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + */ + enterPassOnBitwiseAndExpression?: (ctx: PassOnBitwiseAndExpressionContext) => void; + /** + * Exit a parse tree produced by the `passOnBitwiseAndExpression` + * labeled alternative in `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + */ + exitPassOnBitwiseAndExpression?: (ctx: PassOnBitwiseAndExpressionContext) => void; + + /** + * Enter a parse tree produced by the `actualBitwiseAndExpression` + * labeled alternative in `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + */ + enterActualBitwiseAndExpression?: (ctx: ActualBitwiseAndExpressionContext) => void; + /** + * Exit a parse tree produced by the `actualBitwiseAndExpression` + * labeled alternative in `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + */ + exitActualBitwiseAndExpression?: (ctx: ActualBitwiseAndExpressionContext) => void; + /** * Enter a parse tree produced by the `passOnLogicalAndExpression` * labeled alternative in `KipperParser.logicalAndExpression`. @@ -131,6 +199,32 @@ export interface KipperParserListener extends ParseTreeListener { */ exitActualLogicalAndExpression?: (ctx: ActualLogicalAndExpressionContext) => void; + /** + * Enter a parse tree produced by the `passOnBitwiseXorExpression` + * labeled alternative in `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + */ + enterPassOnBitwiseXorExpression?: (ctx: PassOnBitwiseXorExpressionContext) => void; + /** + * Exit a parse tree produced by the `passOnBitwiseXorExpression` + * labeled alternative in `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + */ + exitPassOnBitwiseXorExpression?: (ctx: PassOnBitwiseXorExpressionContext) => void; + + /** + * Enter a parse tree produced by the `actualBitwiseXorExpression` + * labeled alternative in `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + */ + enterActualBitwiseXorExpression?: (ctx: ActualBitwiseXorExpressionContext) => void; + /** + * Exit a parse tree produced by the `actualBitwiseXorExpression` + * labeled alternative in `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + */ + exitActualBitwiseXorExpression?: (ctx: ActualBitwiseXorExpressionContext) => void; + /** * Enter a parse tree produced by the `externalBlockItem` * labeled alternative in `KipperParser.externalItem`. @@ -274,6 +368,32 @@ export interface KipperParserListener extends ParseTreeListener { */ exitActualCastOrConvertExpression?: (ctx: ActualCastOrConvertExpressionContext) => void; + /** + * Enter a parse tree produced by the `passOnBitwiseOrExpression` + * labeled alternative in `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + */ + enterPassOnBitwiseOrExpression?: (ctx: PassOnBitwiseOrExpressionContext) => void; + /** + * Exit a parse tree produced by the `passOnBitwiseOrExpression` + * labeled alternative in `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + */ + exitPassOnBitwiseOrExpression?: (ctx: PassOnBitwiseOrExpressionContext) => void; + + /** + * Enter a parse tree produced by the `actualBitwiseOrExpression` + * labeled alternative in `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + */ + enterActualBitwiseOrExpression?: (ctx: ActualBitwiseOrExpressionContext) => void; + /** + * Exit a parse tree produced by the `actualBitwiseOrExpression` + * labeled alternative in `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + */ + exitActualBitwiseOrExpression?: (ctx: ActualBitwiseOrExpressionContext) => void; + /** * Enter a parse tree produced by the `passOnEqualityExpression` * labeled alternative in `KipperParser.equalityExpression`. @@ -1035,6 +1155,28 @@ export interface KipperParserListener extends ParseTreeListener { */ exitAdditiveExpression?: (ctx: AdditiveExpressionContext) => void; + /** + * Enter a parse tree produced by `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + */ + enterBitwiseShiftExpression?: (ctx: BitwiseShiftExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + */ + exitBitwiseShiftExpression?: (ctx: BitwiseShiftExpressionContext) => void; + + /** + * Enter a parse tree produced by `KipperParser.bitwiseShiftOperators`. + * @param ctx the parse tree + */ + enterBitwiseShiftOperators?: (ctx: BitwiseShiftOperatorsContext) => void; + /** + * Exit a parse tree produced by `KipperParser.bitwiseShiftOperators`. + * @param ctx the parse tree + */ + exitBitwiseShiftOperators?: (ctx: BitwiseShiftOperatorsContext) => void; + /** * Enter a parse tree produced by `KipperParser.relationalExpression`. * @param ctx the parse tree @@ -1057,6 +1199,39 @@ export interface KipperParserListener extends ParseTreeListener { */ exitEqualityExpression?: (ctx: EqualityExpressionContext) => void; + /** + * Enter a parse tree produced by `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + */ + enterBitwiseAndExpression?: (ctx: BitwiseAndExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + */ + exitBitwiseAndExpression?: (ctx: BitwiseAndExpressionContext) => void; + + /** + * Enter a parse tree produced by `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + */ + enterBitwiseXorExpression?: (ctx: BitwiseXorExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + */ + exitBitwiseXorExpression?: (ctx: BitwiseXorExpressionContext) => void; + + /** + * Enter a parse tree produced by `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + */ + enterBitwiseOrExpression?: (ctx: BitwiseOrExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + */ + exitBitwiseOrExpression?: (ctx: BitwiseOrExpressionContext) => void; + /** * Enter a parse tree produced by `KipperParser.logicalAndExpression`. * @param ctx the parse tree @@ -1178,3 +1353,4 @@ export interface KipperParserListener extends ParseTreeListener { */ exitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => void; } + diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts index ccc97c4da..bf61e5ba5 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts @@ -1,13 +1,21 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT -// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax -// kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + + // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax + // kind values. + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; import { PassOnLogicalAndExpressionContext } from "./KipperParser"; import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; import { ExternalBlockItemContext } from "./KipperParser"; import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; import { FunctionCallExpressionContext } from "./KipperParser"; @@ -19,6 +27,8 @@ import { PassOnAssignmentExpressionContext } from "./KipperParser"; import { ActualAssignmentExpressionContext } from "./KipperParser"; import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; import { PassOnEqualityExpressionContext } from "./KipperParser"; import { ActualEqualityExpressionContext } from "./KipperParser"; import { PassOnAdditiveExpressionContext } from "./KipperParser"; @@ -86,8 +96,13 @@ import { UnaryOperatorContext } from "./KipperParser"; import { CastOrConvertExpressionContext } from "./KipperParser"; import { MultiplicativeExpressionContext } from "./KipperParser"; import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; import { RelationalExpressionContext } from "./KipperParser"; import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; import { LogicalAndExpressionContext } from "./KipperParser"; import { LogicalOrExpressionContext } from "./KipperParser"; import { ConditionalExpressionContext } from "./KipperParser"; @@ -100,6 +115,7 @@ import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; + /** * This interface defines a complete generic visitor for a parse tree produced * by `KipperParser`. @@ -108,6 +124,38 @@ import { TypeSpecifierIdentifierContext } from "./KipperParser"; * operations with no return type. */ export interface KipperParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by the `passOnBitwiseShiftExpression` + * labeled alternative in `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPassOnBitwiseShiftExpression?: (ctx: PassOnBitwiseShiftExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `actualBitwiseShiftExpression` + * labeled alternative in `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitActualBitwiseShiftExpression?: (ctx: ActualBitwiseShiftExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `passOnBitwiseAndExpression` + * labeled alternative in `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPassOnBitwiseAndExpression?: (ctx: PassOnBitwiseAndExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `actualBitwiseAndExpression` + * labeled alternative in `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitActualBitwiseAndExpression?: (ctx: ActualBitwiseAndExpressionContext) => Result; + /** * Visit a parse tree produced by the `passOnLogicalAndExpression` * labeled alternative in `KipperParser.logicalAndExpression`. @@ -124,6 +172,22 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitActualLogicalAndExpression?: (ctx: ActualLogicalAndExpressionContext) => Result; + /** + * Visit a parse tree produced by the `passOnBitwiseXorExpression` + * labeled alternative in `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPassOnBitwiseXorExpression?: (ctx: PassOnBitwiseXorExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `actualBitwiseXorExpression` + * labeled alternative in `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitActualBitwiseXorExpression?: (ctx: ActualBitwiseXorExpressionContext) => Result; + /** * Visit a parse tree produced by the `externalBlockItem` * labeled alternative in `KipperParser.externalItem`. @@ -212,6 +276,22 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitActualCastOrConvertExpression?: (ctx: ActualCastOrConvertExpressionContext) => Result; + /** + * Visit a parse tree produced by the `passOnBitwiseOrExpression` + * labeled alternative in `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPassOnBitwiseOrExpression?: (ctx: PassOnBitwiseOrExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `actualBitwiseOrExpression` + * labeled alternative in `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitActualBitwiseOrExpression?: (ctx: ActualBitwiseOrExpressionContext) => Result; + /** * Visit a parse tree produced by the `passOnEqualityExpression` * labeled alternative in `KipperParser.equalityExpression`. @@ -693,6 +773,20 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitAdditiveExpression?: (ctx: AdditiveExpressionContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.bitwiseShiftExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBitwiseShiftExpression?: (ctx: BitwiseShiftExpressionContext) => Result; + + /** + * Visit a parse tree produced by `KipperParser.bitwiseShiftOperators`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBitwiseShiftOperators?: (ctx: BitwiseShiftOperatorsContext) => Result; + /** * Visit a parse tree produced by `KipperParser.relationalExpression`. * @param ctx the parse tree @@ -707,6 +801,27 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitEqualityExpression?: (ctx: EqualityExpressionContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.bitwiseAndExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBitwiseAndExpression?: (ctx: BitwiseAndExpressionContext) => Result; + + /** + * Visit a parse tree produced by `KipperParser.bitwiseXorExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBitwiseXorExpression?: (ctx: BitwiseXorExpressionContext) => Result; + + /** + * Visit a parse tree produced by `KipperParser.bitwiseOrExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBitwiseOrExpression?: (ctx: BitwiseOrExpressionContext) => Result; + /** * Visit a parse tree produced by `KipperParser.logicalAndExpression`. * @param ctx the parse tree @@ -784,3 +899,4 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => Result; } + diff --git a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts index ec4fc4ff5..c8af062bc 100644 --- a/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/parser/parse-rule-kind-mapping.ts @@ -74,22 +74,27 @@ export const ParseRuleKindMapping = { RULE_castOrConvertExpression: 52, RULE_multiplicativeExpression: 53, RULE_additiveExpression: 54, - RULE_relationalExpression: 55, - RULE_equalityExpression: 56, - RULE_logicalAndExpression: 57, - RULE_logicalOrExpression: 58, - RULE_conditionalExpression: 59, - RULE_assignmentExpression: 60, - RULE_assignmentOperator: 61, - RULE_expression: 62, - RULE_typeSpecifierExpression: 63, - RULE_identifierTypeSpecifierExpression: 64, - RULE_genericTypeSpecifierExpression: 65, - RULE_typeofTypeSpecifierExpression: 66, - RULE_typeSpecifierIdentifier: 67, + RULE_bitwiseShiftExpression: 55, + RULE_bitwiseShiftOperators: 56, + RULE_relationalExpression: 57, + RULE_equalityExpression: 58, + RULE_bitwiseAndExpression: 59, + RULE_bitwiseOrExpression: 60, + RULE_bitwiseXorExpression: 61, + RULE_logicalAndExpression: 62, + RULE_logicalOrExpression: 63, + RULE_conditionalExpression: 64, + RULE_assignmentExpression: 65, + RULE_assignmentOperator: 66, + RULE_expression: 67, + RULE_typeSpecifierExpression: 68, + RULE_identifierTypeSpecifierExpression: 69, + RULE_genericTypeSpecifierExpression: 70, + RULE_typeofTypeSpecifierExpression: 71, + RULE_typeSpecifierIdentifier: 72, // Labelled rules, which don't have a corresponding identifier number in KipperParser. - RULE_memberAccessExpression: 68, // -> See 'computedPrimaryExpression' - RULE_functionCallExpression: 69, // -> See 'computedPrimaryExpression' + RULE_memberAccessExpression: 73, // -> See 'computedPrimaryExpression' + RULE_functionCallExpression: 74, // -> See 'computedPrimaryExpression' } as const; /** diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index b868139e5..ead9c4ed5 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -46,6 +46,13 @@ import type { WhileLoopIterationStatement, } from "../ast"; import { KipperSemanticErrorHandler } from "../analysis"; +import { + BitwiseAndExpression +} from "../ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression"; +import { + BitwiseOrExpression +} from "../ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression"; +import { BitwiseXorExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-xor-expression"; /** * Represents a function that checks the semantics for a {@link AnalysableASTNode}. @@ -253,4 +260,10 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa * Performs translation-specific semantic analysis for {@link AssignmentExpression} instances. */ public abstract assignmentExpression?: TargetASTNodeSemanticAnalyser; + + public abstract bitwiseAndExpression?: TargetASTNodeSemanticAnalyser; + + public abstract bitwiseOrExpression?: TargetASTNodeSemanticAnalyser; + + public abstract bitwiseXorExpression?: TargetASTNodeSemanticAnalyser; } diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 37267cfe1..ced0eedde 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -44,6 +44,13 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; +import { + BitwiseAndExpression +} from "../../ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression"; +import { + BitwiseOrExpression +} from "../../ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression"; +import { BitwiseXorExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-xor-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -324,4 +331,10 @@ export abstract class KipperTargetCodeGenerator { * Translates a {@link AssignmentExpression} into a specific language. */ public abstract assignmentExpression: TargetASTNodeCodeGenerator; + + public abstract bitwiseAndExpression: TargetASTNodeCodeGenerator; + + public abstract bitwiseOrExpression: TargetASTNodeCodeGenerator; + + public abstract bitwiseXorExpression: TargetASTNodeCodeGenerator; } From cda70908b4573b4b343a489e7c50de24151b9821 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Mon, 1 Jul 2024 16:44:34 +0200 Subject: [PATCH 161/257] minor (#493): added zero fill right shift expression --- .../index.ts | 3 + ...o-fill-right-shift-expression-semantics.ts | 9 +++ ...l-right-shift-expression-type-semantics.ts | 3 + ...itwise-zero-fill-right-shift-expression.ts | 70 +++++++++++++++++++ .../index.ts | 3 + 5 files changed, 88 insertions(+) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts new file mode 100644 index 000000000..b22f7b74c --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts @@ -0,0 +1,3 @@ +export * from "./bitwise-zero-fill-left-shift-expression"; +export * from "./bitwise-zero-fill-left-shift-expression-semantics"; +export * from "./bitwise-zero-fill-left-shift-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts new file mode 100644 index 000000000..cff3d1424 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts @@ -0,0 +1,9 @@ +import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; +import { Expression } from "../../expression"; +import { KipperBitwiseZeroFillRightShiftOperator } from "../../../../../const"; + +export interface BitwiseZeroFillRightShiftExpressionSemantics extends BitwiseExpressionSemantics { + leftOp: Expression; + rightOp: Expression; + operator: KipperBitwiseZeroFillRightShiftOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts new file mode 100644 index 000000000..65e63cbe6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts @@ -0,0 +1,3 @@ +import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; + +export interface BitwiseZeroFillRightShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts new file mode 100644 index 000000000..69b68f87a --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts @@ -0,0 +1,70 @@ +import { BitwiseExpression } from "../bitwise-expression"; +import { + BitwiseAndExpressionContext, + BitwiseShiftExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { Expression } from "../../expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; +import { BitwiseZeroFillRightShiftExpressionSemantics } from "./bitwise-zero-fill-right-shift-expression-semantics"; +import { + BitwiseZeroFillRightShiftExpressionTypeSemantics +} from "./bitwise-zero-fill-right-shift-expression-type-semantics"; + +export class BitwiseZeroFillRightShiftExpressionExpression extends BitwiseExpression< + BitwiseZeroFillRightShiftExpressionSemantics, + BitwiseZeroFillRightShiftExpressionTypeSemantics +> { + protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; + + public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; + + public override get kind() { + return BitwiseZeroFillRightShiftExpressionExpression.kind; + } + + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + public override get ruleName() { + return BitwiseZeroFillRightShiftExpressionExpression.ruleName; + } + + constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public async primarySemanticAnalysis(): Promise { + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + if(!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: ">>>", + }; + } + + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + public checkForWarnings = undefined; + + public override get antlrRuleCtx(): BitwiseShiftExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseOrExpression; + + readonly targetCodeGenerator = this.codeGenerator.bitwiseXorExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts new file mode 100644 index 000000000..a98eb1440 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts @@ -0,0 +1,3 @@ +export * from "./bitwise-zero-fill-right-shift-expression"; +export * from "./bitwise-zero-fill-right-shift-expression-semantics"; +export * from "./bitwise-zero-fill-right-shift-expression-type-semantics"; From 569b0ce736fa161120d00f5f2a26239d4550b7a8 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 21:04:23 +0200 Subject: [PATCH 162/257] other: Updated CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e5137634..0072fa737 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ To use development versions of Kipper download the ([#287](https://github.com/Kipper-Lang/Kipper/issues/287)). - Support for string multiplication using the `*` operator. ([#478](https://github.com/Kipper-Lang/Kipper/issues/478)). +- New CLI flag `--dry-run` in `compile`, which only compiles the program and does not write any outputs. + ([#532](https://github.com/Kipper-Lang/Kipper/issues/532)). - New valid conversions: - `void` to `str`. - `null` to `str`. @@ -159,6 +161,8 @@ To use development versions of Kipper download the ### Removed +- Removed CLI command `analyse` in favor of the flag `--dry-run` in the CLI command `compile`. + ([#532](https://github.com/Kipper-Lang/Kipper/issues/532)). - Removed AST parent class `ConstantExpression`, its interfaces `ConstantExpressionSemantics` and `ConstantExpressionTypeSemantics`, as they were not really needed and unnecessarily added another level of complexity to the AST. All classes which previously inherited from `ConstantExpression` now inherit from From 72df43a32449c00bcfa551d113a0696d3e4b75df Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 21:06:25 +0200 Subject: [PATCH 163/257] other: Removed CLI command `analyse` tests --- test/module/cli/analyse.test.ts | 107 -------------------------------- 1 file changed, 107 deletions(-) delete mode 100644 test/module/cli/analyse.test.ts diff --git a/test/module/cli/analyse.test.ts b/test/module/cli/analyse.test.ts deleted file mode 100644 index f2ec86d05..000000000 --- a/test/module/cli/analyse.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { expect, test } from "@oclif/test"; -import * as path from "path"; - -const validFilePath = path.resolve(`${__dirname}/../../kipper-files/main.kip`); -const invalidFilePath = path.resolve(`${__dirname}/../../kipper-files/invalid.kip`); -const utf16filePath = path.resolve(`${__dirname}/../../kipper-files/hello-world-utf16.kip`); - -describe("Kipper CLI 'analyse'", () => { - describe("primary", () => { - test - .stdout() - .command(["analyse", validFilePath]) - .it("Valid syntax", (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'main.kip'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stdout).to.contain("Finished syntax check successfully."); - expect(ctx.stdout).to.contain("Done in"); - }); - - test - .stderr() - .stdout() - .command(["analyse", invalidFilePath]) - .it("Invalid syntax", (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'invalid.kip'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stderr).to.contain("Traceback:"); - expect(ctx.stderr).to.contain(`File '${invalidFilePath}'`); - expect(ctx.stderr).to.contain("SyntaxError: Missing ';' at 'is'"); - }); - }); - - describe("encoding", () => { - describe("using 'file'", () => { - test - .stdout() - .command(["analyse", validFilePath, "-e", "ascii"]) - .it("Compile using encoding 'ascii'", async (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'main.kip'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stdout).to.contain("Finished syntax check successfully."); - expect(ctx.stdout).to.contain("Done in"); - }); - - test - .stdout() - .command(["analyse", validFilePath, "-e", "utf8"]) - .it("Compile using encoding 'utf8'", async (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'main.kip'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stdout).to.contain("Finished syntax check successfully."); - expect(ctx.stdout).to.contain("Done in"); - }); - - test - .stdout() - .command(["analyse", utf16filePath, "-e", "utf16le"]) - .it("Compile using encoding 'utf16le'", async (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'hello-world-utf16.kip'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stdout).to.contain("Finished syntax check successfully."); - expect(ctx.stdout).to.contain("Done in"); - }); - }); - - // Setting the encoding should not change the output whatsoever when using the '-s' flag - describe("using '-s'", () => { - test - .stdout() - .command(["analyse", "-s", `call print("Hello world!");`, "-e", "ascii"]) - .it("Compile using encoding 'ascii'", async (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'anonymous-script'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stdout).to.contain("Finished syntax check successfully."); - expect(ctx.stdout).to.contain("Done in"); - }); - - test - .stdout() - .command(["analyse", "-s", `call print("Hello world!");`, "-e", "utf8"]) - .it("Compile using encoding 'utf8'", async (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'anonymous-script'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stdout).to.contain("Finished syntax check successfully."); - expect(ctx.stdout).to.contain("Done in"); - }); - - test - .stdout() - .command(["analyse", "-s", `call print("Hello world!");`, "-e", "utf16le"]) - .it("Compile using encoding 'utf16le'", async (ctx) => { - expect(ctx.stdout).to.length.greaterThan(0); - expect(ctx.stdout).to.contain("Starting syntax check for 'anonymous-script'."); - expect(ctx.stdout).to.contain("Parsing"); - expect(ctx.stdout).to.contain("Finished syntax check successfully."); - expect(ctx.stdout).to.contain("Done in"); - }); - }); - }); -}); From 92966388d39d193e9874f9f2ac695cab37db1327 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 21:09:05 +0200 Subject: [PATCH 164/257] other: Updated CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0072fa737..6ebda4282 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,7 +30,7 @@ To use development versions of Kipper download the - Support for string multiplication using the `*` operator. ([#478](https://github.com/Kipper-Lang/Kipper/issues/478)). - New CLI flag `--dry-run` in `compile`, which only compiles the program and does not write any outputs. - ([#532](https://github.com/Kipper-Lang/Kipper/issues/532)). + ([#532](https://github.com/Kipper-Lang/Kipper/issues/532)). - New valid conversions: - `void` to `str`. - `null` to `str`. @@ -162,7 +162,7 @@ To use development versions of Kipper download the ### Removed - Removed CLI command `analyse` in favor of the flag `--dry-run` in the CLI command `compile`. - ([#532](https://github.com/Kipper-Lang/Kipper/issues/532)). + ([#532](https://github.com/Kipper-Lang/Kipper/issues/532)). - Removed AST parent class `ConstantExpression`, its interfaces `ConstantExpressionSemantics` and `ConstantExpressionTypeSemantics`, as they were not really needed and unnecessarily added another level of complexity to the AST. All classes which previously inherited from `ConstantExpression` now inherit from From 06abc7115c8aafc720a25916f0350ba6dc303a94 Mon Sep 17 00:00:00 2001 From: Luna Date: Mon, 1 Jul 2024 21:21:02 +0200 Subject: [PATCH 165/257] other: Bumped PNPM version to v8 in renovate.json Signed-off-by: Luna --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index f20f9c05a..0aac56af6 100644 --- a/renovate.json +++ b/renovate.json @@ -6,7 +6,7 @@ "Dependencies" ], "compatibility": { - "pnpm": "^7.0.0" + "pnpm": "^8.0.0" }, "lockFileMaintenance": { "enabled": true From c26e5797a1fb4d386461f8bd01df3c67e306eb84 Mon Sep 17 00:00:00 2001 From: Luna Date: Mon, 1 Jul 2024 21:26:37 +0200 Subject: [PATCH 166/257] other: Changed `baseBranches` in renovate.json to dev branches Signed-off-by: Luna --- renovate.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/renovate.json b/renovate.json index 0aac56af6..09d8abe64 100644 --- a/renovate.json +++ b/renovate.json @@ -11,6 +11,10 @@ "lockFileMaintenance": { "enabled": true }, + "baseBranches": [ + "dev-main", + "dev-next" + ], "packageRules": [ { "matchDepTypes": ["devDependencies"], From 79a1c81153ed052584f56e6e1f6bf9eb934e7c8a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 21:32:15 +0200 Subject: [PATCH 167/257] release: Bumped Kipper project version to 0.11.0-alpha.6 --- CITATION.cff | 10 +++++----- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index de1ac5c50..296be1a95 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,8 +13,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.5 - description: The GitHub release URL of tag 0.11.0-alpha.5 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.11.0-alpha.6 + description: The GitHub release URL of tag 0.11.0-alpha.6 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -31,6 +31,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/LICENSE' -version: 0.11.0-alpha.5 -date-released: '2023-08-15' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.6/LICENSE' +version: 0.11.0-alpha.6 +date-released: '2024-07-01' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 3e2dcf9a4..f1282dc1c 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.5"; +export const version = "0.11.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index a274dc6d3..87d99928d 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.5"; +export const version = "0.11.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 26d0e50a4..6c00e46fc 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.5"; +export const version = "0.11.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 2ae915fe4..2ee766178 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.5"; +export const version = "0.11.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 6e385c9e7..477a30df1 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.5"; +export const version = "0.11.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 73ba04e6a..8d706c5a9 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.11.0-alpha.5"; +export const version = "0.11.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 8869ef0ffa921cb48cdb5a1655a07315aa5d9c3c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 1 Jul 2024 21:33:20 +0200 Subject: [PATCH 168/257] Release 0.11.0-alpha.6 --- kipper/cli/README.md | 39 ++++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 25 insertions(+), 28 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index c88dfe760..b54145554 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,31 +39,28 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.11.0-alpha.5 linux-x64 node-v18.18.2 +@kipper/cli/0.11.0-alpha.6 linux-x64 node-v20.10.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper analyse [FILE]`](#kipper-analyse-file) -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper analyse [FILE]`](#kipper-analyse-file) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper analyse [FILE]` @@ -86,7 +82,7 @@ OPTIONS -w, --[no-]warnings Show warnings that were emitted during the analysis. ``` -_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/analyse.ts)_ +_See code: [src/commands/analyse.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.6/kipper/cli/src/commands/analyse.ts)_ ## `kipper compile [FILE]` @@ -103,6 +99,8 @@ OPTIONS -b, --[no-]optimise-builtins Optimise the generated built-in functions using tree-shaking to reduce the size of the output. + -d, --[no-]dry-run Run the compiler without writing any output. Useful for checking for errors. + -e, --encoding=encoding The encoding that should be used to read the file (ascii,utf8,utf16le). -i, --[no-]optimise-internals Optimise the generated internal functions using tree-shaking to reduce the size of the @@ -126,7 +124,7 @@ OPTIONS --[no-]recover Recover from compiler errors and log all detected semantic issues. ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.6/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -143,7 +141,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.6/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -160,7 +158,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.6/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -199,7 +197,7 @@ OPTIONS --[no-]recover Recover from compiler errors and display all detected compiler errors. ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.6/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -210,8 +208,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.5/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.11.0-alpha.6/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 55eeddb74..e233aa213 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.11.0-alpha.5", + "version": "0.11.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run" diff --git a/kipper/config/package.json b/kipper/config/package.json index bfbb1d9c4..c41163a88 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.11.0-alpha.5", + "version": "0.11.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 5ab852419..793334235 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.11.0-alpha.5", + "version": "0.11.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index c87581161..dc8785e20 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.5", + "version": "0.11.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 52540e8b2..f908dddab 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.11.0-alpha.5", + "version": "0.11.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index f04a7eb71..a02a8038b 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.11.0-alpha.5", + "version": "0.11.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index 2ec338825..b35990a16 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.11.0-alpha.5", + "version": "0.11.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 032705d76fac39c1e265320bd12e89fd6a38db21 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Mon, 1 Jul 2024 23:41:26 +0200 Subject: [PATCH 169/257] minor (#493): compiles but doesn't generate code properly --- .../core/src/compiler/ast/common/ast-types.ts | 2 +- .../compiler/ast/mapping/ast-node-mapper.ts | 14 +- .../bitwise-and-expression.ts | 2 +- .../bitwise-expression-semantics.ts | 18 +- .../bitwise-expression-type-semantics.ts | 2 - .../bitwise-expression/bitwise-expression.ts | 1 - .../bitwise-or-expression.ts | 2 +- .../bitwise-or-expression/index.ts | 6 +- ...signed-right-shift-expression-semantics.ts | 7 + ...d-right-shift-expression-type-semantics.ts | 3 + .../bitwise-signed-right-shift-expression.ts | 68 + .../bitwise-xor-expression.ts | 2 +- ...ll-left-shift-expression-type-semantics.ts | 2 +- ...bitwise-zero-fill-left-shift-expression.ts | 16 +- ...l-right-shift-expression-type-semantics.ts | 2 +- ...itwise-zero-fill-right-shift-expression.ts | 16 +- .../expressions/bitwise-expression/index.ts | 1 + .../compiler/ast/nodes/expressions/index.ts | 1 + .../src/compiler/parser/antlr/KipperLexer.ts | 457 +- .../src/compiler/parser/antlr/KipperParser.ts | 5391 ++++++++++------- .../parser/antlr/KipperParserListener.ts | 10 +- .../parser/antlr/KipperParserVisitor.ts | 10 +- .../target-presets/semantic-analyser.ts | 17 +- .../translation/code-generator.ts | 26 +- kipper/target-js/src/code-generator.ts | 39 +- kipper/target-js/src/semantic-analyser.ts | 30 + test/kipper-files/bitshift.kip | 3 + 27 files changed, 3719 insertions(+), 2429 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts create mode 100644 test/kipper-files/bitshift.kip diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index f94f0fe98..a9b58dd17 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -168,7 +168,7 @@ export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_identifierTypeSpecifierExpression | typeof ParseRuleKindMapping.RULE_genericTypeSpecifierExpression | typeof ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression - | typeof ParseRuleKindMapping.RULE_bitwiseOrExpression + | typeof ParseRuleKindMapping.RULE_bitwiseOrExpression | typeof ParseRuleKindMapping.RULE_bitwiseAndExpression | typeof ParseRuleKindMapping.RULE_bitwiseXorExpression | typeof ParseRuleKindMapping.RULE_memberAccessExpression; diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index fc747b93b..063e4f407 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -7,7 +7,10 @@ import { AdditiveExpressionContext, ArrayPrimaryExpressionContext, - AssignmentExpressionContext, BitwiseAndExpressionContext, BitwiseOrExpressionContext, BitwiseXorExpressionContext, + AssignmentExpressionContext, + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + BitwiseXorExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, CastOrConvertExpressionContext, @@ -96,6 +99,9 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; +import { BitwiseXorExpression } from "../nodes/expressions/bitwise-expression/bitwise-xor-expression"; +import { BitwiseAndExpression, BitwiseOrExpression } from "../nodes/expressions/bitwise-expression"; +import { BitwiseSignedRightShiftExpression } from "../nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -146,6 +152,9 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_genericTypeSpecifierExpression]: GenericTypeSpecifierExpression, [ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression]: TypeofTypeSpecifierExpression, [ParseRuleKindMapping.RULE_memberAccessExpression]: MemberAccessExpression, + [ParseRuleKindMapping.RULE_bitwiseOrExpression]: BitwiseOrExpression, + [ParseRuleKindMapping.RULE_bitwiseAndExpression]: BitwiseAndExpression, + [ParseRuleKindMapping.RULE_bitwiseXorExpression]: BitwiseXorExpression, } satisfies Record>; /** @@ -276,6 +285,9 @@ export class ASTNodeMapper { RULE_genericTypeSpecifierExpression: GenericTypeSpecifierExpression, RULE_typeofTypeSpecifierExpression: TypeofTypeSpecifierExpression, RULE_memberAccessExpression: MemberAccessExpression, + RULE_bitwiseOrExpression: BitwiseOrExpression, + RULE_bitwiseAndExpression: BitwiseAndExpression, + RULE_bitwiseXorExpression: BitwiseXorExpression, } satisfies Record>; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts index 4c2c8d8de..d34ada5dc 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression.ts @@ -34,7 +34,7 @@ export class BitwiseAndExpression extends BitwiseExpression< const leftOp: Expression = this.children[0]; const rightOp: Expression = this.children[1]; - if(!leftOp || !rightOp) { + if (!leftOp || !rightOp) { throw new UnableToDetermineSemanticDataError(); } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts index f76f907f8..c37b61dea 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts @@ -1,14 +1,22 @@ import { ExpressionSemantics } from "../expression-semantics"; import { KipperBitwiseAndOperator, - KipperBitwiseOrOperator, KipperBitwiseSignedRightShiftOperator, + KipperBitwiseOrOperator, + KipperBitwiseSignedRightShiftOperator, KipperBitwiseXorOperator, - KipperBitwiseZeroFillLeftShiftOperator, KipperBitwiseZeroFillRightShiftOperator, + KipperBitwiseZeroFillLeftShiftOperator, + KipperBitwiseZeroFillRightShiftOperator, } from "../../../../const"; import { Expression } from "../expression"; export interface BitwiseExpressionSemantics extends ExpressionSemantics { - operator: KipperBitwiseAndOperator | KipperBitwiseOrOperator | KipperBitwiseXorOperator | KipperBitwiseZeroFillLeftShiftOperator | KipperBitwiseZeroFillRightShiftOperator | KipperBitwiseSignedRightShiftOperator; - leftOp: Expression; - rightOp: Expression; + operator: + | KipperBitwiseAndOperator + | KipperBitwiseOrOperator + | KipperBitwiseXorOperator + | KipperBitwiseZeroFillLeftShiftOperator + | KipperBitwiseZeroFillRightShiftOperator + | KipperBitwiseSignedRightShiftOperator; + leftOp: Expression; + rightOp: Expression; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts index 55f8c969e..edc7da808 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts @@ -1,5 +1,3 @@ -import { BitwiseExpressionSemantics } from "./bitwise-expression-semantics"; import { ExpressionTypeSemantics } from "../expression-type-semantics"; - export interface BitwiseExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts index c515e5849..594a05f73 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts @@ -8,7 +8,6 @@ import { Expression } from "../expression"; import { BitwiseExpressionTypeSemantics } from "./bitwise-expression-type-semantics"; import { BitwiseExpressionSemantics } from "./bitwise-expression-semantics"; - export type ASTBitwiseExpressionKind = | typeof ParseRuleKindMapping.RULE_bitwiseAndExpression | typeof ParseRuleKindMapping.RULE_bitwiseOrExpression diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts index a31877d9e..87447601d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression.ts @@ -39,7 +39,7 @@ export class BitwiseOrExpression extends BitwiseExpression< const leftOp: Expression = this.children[0]; const rightOp: Expression = this.children[1]; - if(!leftOp || !rightOp) { + if (!leftOp || !rightOp) { throw new UnableToDetermineSemanticDataError(); } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts index 85b3fa6ba..dbfc860b2 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-or-expression/index.ts @@ -1,3 +1,3 @@ -export * from './bitwise-or-expression'; -export * from './bitwise-or-expression-semantics'; -export * from './bitwise-or-expression-type-semantics'; +export * from "./bitwise-or-expression"; +export * from "./bitwise-or-expression-semantics"; +export * from "./bitwise-or-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts new file mode 100644 index 000000000..f3c43454d --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts @@ -0,0 +1,7 @@ +import { Expression } from "../../expression"; + +export interface BitwiseSignedRightShiftExpressionSemantics { + leftOp: Expression; + rightOp: Expression; + operator: ">>"; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts new file mode 100644 index 000000000..de47496b9 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts @@ -0,0 +1,3 @@ +import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; + +export interface BitwiseSignedRightShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts new file mode 100644 index 000000000..340a46124 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts @@ -0,0 +1,68 @@ +import { BitwiseExpression } from "../bitwise-expression"; +import { + BitwiseAndExpressionContext, + BitwiseShiftExpressionContext, + KindParseRuleMapping, + ParseRuleKindMapping, +} from "../../../../../parser"; +import { CompilableASTNode } from "../../../../compilable-ast-node"; +import { Expression } from "../../expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { CheckedType } from "../../../../../analysis"; +import { BitwiseSignedRightShiftExpressionSemantics } from "./bitwise-signed-right-shift-expression-semantics"; +import { BitwiseSignedRightShiftExpressionTypeSemantics } from "./bitwise-signed-right-shift-expression-type-semantics"; + +export class BitwiseSignedRightShiftExpression extends BitwiseExpression< + BitwiseSignedRightShiftExpressionSemantics, + BitwiseSignedRightShiftExpressionTypeSemantics +> { + protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; + + public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; + + public override get kind() { + return BitwiseSignedRightShiftExpression.kind; + } + + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + public override get ruleName() { + return BitwiseSignedRightShiftExpression.ruleName; + } + + constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public async primarySemanticAnalysis(): Promise { + const leftOp: Expression = this.children[0]; + const rightOp: Expression = this.children[1]; + + if (!leftOp || !rightOp) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + leftOp: leftOp, + rightOp: rightOp, + operator: ">>", + }; + } + + public async primarySemanticTypeChecking(): Promise { + this.typeSemantics = { + evaluatedType: CheckedType.fromCompilableType("num"), + }; + } + + public checkForWarnings = undefined; + + public override get antlrRuleCtx(): BitwiseShiftExpressionContext { + return this._antlrRuleCtx; + } + + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseSignedRightShiftExpression; + + readonly targetCodeGenerator = this.codeGenerator.bitwiseSignedRightShiftExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts index 5c811a16b..9389cfdb6 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-xor-expression/bitwise-xor-expression.ts @@ -39,7 +39,7 @@ export class BitwiseXorExpression extends BitwiseExpression< const leftOp: Expression = this.children[0]; const rightOp: Expression = this.children[1]; - if(!leftOp || !rightOp) { + if (!leftOp || !rightOp) { throw new UnableToDetermineSemanticDataError(); } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts index bba78be85..f83e4d910 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts @@ -1,3 +1,3 @@ import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; -export interface BitwiseZeroFillLeftShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} +export interface BitwiseZeroFillLeftShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts index 53618a69c..eb0482501 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts @@ -10,11 +10,9 @@ import { Expression } from "../../expression"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; import { BitwiseZeroFillLeftShiftExpressionSemantics } from "./bitwise-zero-fill-left-shift-expression-semantics"; -import { - BitwiseZeroFillLeftShiftExpressionTypeSemantics -} from "./bitwise-zero-fill-left-shift-expression-type-semantics"; +import { BitwiseZeroFillLeftShiftExpressionTypeSemantics } from "./bitwise-zero-fill-left-shift-expression-type-semantics"; -export class BitwiseZeroFillLeftShiftExpressionExpression extends BitwiseExpression< +export class BitwiseZeroFillLeftShiftExpression extends BitwiseExpression< BitwiseZeroFillLeftShiftExpressionSemantics, BitwiseZeroFillLeftShiftExpressionTypeSemantics > { @@ -23,13 +21,13 @@ export class BitwiseZeroFillLeftShiftExpressionExpression extends BitwiseExpress public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; public override get kind() { - return BitwiseZeroFillLeftShiftExpressionExpression.kind; + return BitwiseZeroFillLeftShiftExpression.kind; } public static readonly ruleName = KindParseRuleMapping[this.kind]; public override get ruleName() { - return BitwiseZeroFillLeftShiftExpressionExpression.ruleName; + return BitwiseZeroFillLeftShiftExpression.ruleName; } constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { @@ -41,7 +39,7 @@ export class BitwiseZeroFillLeftShiftExpressionExpression extends BitwiseExpress const leftOp: Expression = this.children[0]; const rightOp: Expression = this.children[1]; - if(!leftOp || !rightOp) { + if (!leftOp || !rightOp) { throw new UnableToDetermineSemanticDataError(); } @@ -64,7 +62,7 @@ export class BitwiseZeroFillLeftShiftExpressionExpression extends BitwiseExpress return this._antlrRuleCtx; } - readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseXorExpression; + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseZeroFillLeftShiftOperations; - readonly targetCodeGenerator = this.codeGenerator.bitwiseXorExpression; + readonly targetCodeGenerator = this.codeGenerator.bitwiseZeroFillLeftShiftExpression; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts index 65e63cbe6..356fff0c3 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts @@ -1,3 +1,3 @@ import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; -export interface BitwiseZeroFillRightShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} +export interface BitwiseZeroFillRightShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts index 69b68f87a..1c02f7175 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts @@ -10,11 +10,9 @@ import { Expression } from "../../expression"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; import { BitwiseZeroFillRightShiftExpressionSemantics } from "./bitwise-zero-fill-right-shift-expression-semantics"; -import { - BitwiseZeroFillRightShiftExpressionTypeSemantics -} from "./bitwise-zero-fill-right-shift-expression-type-semantics"; +import { BitwiseZeroFillRightShiftExpressionTypeSemantics } from "./bitwise-zero-fill-right-shift-expression-type-semantics"; -export class BitwiseZeroFillRightShiftExpressionExpression extends BitwiseExpression< +export class BitwiseZeroFillRightShiftExpression extends BitwiseExpression< BitwiseZeroFillRightShiftExpressionSemantics, BitwiseZeroFillRightShiftExpressionTypeSemantics > { @@ -23,13 +21,13 @@ export class BitwiseZeroFillRightShiftExpressionExpression extends BitwiseExpres public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; public override get kind() { - return BitwiseZeroFillRightShiftExpressionExpression.kind; + return BitwiseZeroFillRightShiftExpression.kind; } public static readonly ruleName = KindParseRuleMapping[this.kind]; public override get ruleName() { - return BitwiseZeroFillRightShiftExpressionExpression.ruleName; + return BitwiseZeroFillRightShiftExpression.ruleName; } constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { @@ -41,7 +39,7 @@ export class BitwiseZeroFillRightShiftExpressionExpression extends BitwiseExpres const leftOp: Expression = this.children[0]; const rightOp: Expression = this.children[1]; - if(!leftOp || !rightOp) { + if (!leftOp || !rightOp) { throw new UnableToDetermineSemanticDataError(); } @@ -64,7 +62,7 @@ export class BitwiseZeroFillRightShiftExpressionExpression extends BitwiseExpres return this._antlrRuleCtx; } - readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseOrExpression; + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseZeroFillRightShiftOperations; - readonly targetCodeGenerator = this.codeGenerator.bitwiseXorExpression; + readonly targetCodeGenerator = this.codeGenerator.bitwiseZeroFillRightShiftExpression; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts index 3526a55f6..e11c29432 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts @@ -3,3 +3,4 @@ export * from "./bitwise-expression-semantics"; export * from "./bitwise-expression-type-semantics"; export * from "./bitwise-and-expression/"; export * from "./bitwise-or-expression/"; +export * from "./bitwise-xor-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/index.ts index b845a0109..cdb877b9a 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/index.ts @@ -19,3 +19,4 @@ export * from "./cast-or-convert-expression/"; export * from "./conditional-expression/"; export * from "./function-call-expression/"; export * from "./member-access-expression/"; +export * from "./bitwise-expression/"; diff --git a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts index da3094008..717207fc8 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperLexer.ts @@ -1,8 +1,6 @@ // Generated from ./KipperLexer.g4 by ANTLR 4.9.0-SNAPSHOT - - import KipperLexerBase from "./base/KipperLexerBase"; - +import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; @@ -17,7 +15,6 @@ import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; - export class KipperLexer extends KipperLexerBase { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -107,70 +104,292 @@ export class KipperLexer extends KipperLexerBase { public static readonly DOUBLE_QUOTE_FSTRING = 2; // tslint:disable:no-trailing-whitespace - public static readonly channelNames: string[] = [ - "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT", - ]; + public static readonly channelNames: string[] = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT"]; // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = [ - "DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING", - ]; + public static readonly modeNames: string[] = ["DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING"]; public static readonly ruleNames: string[] = [ - "BlockComment", "LineComment", "Const", "Var", "As", "Spread", "Switch", - "Case", "Default", "Break", "Continue", "Do", "While", "If", "Else", "For", - "Enum", "DefFunc", "Return", "CallFunc", "RetIndicator", "True", "False", - "Typeof", "Void", "Null", "Undefined", "Comma", "SemiColon", "QuestionMark", - "Colon", "LeftParen", "RightParen", "LeftBracket", "RightBracket", "FStringExpEnd", - "LeftBrace", "RightBrace", "Plus", "PlusPlus", "Minus", "MinusMinus", - "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", - "MinusAssign", "StarAssign", "DivAssign", "ModAssign", "Equal", "NotEqual", - "Less", "LessEqual", "Greater", "GreaterEqual", "BitwiseAnd", "BitwiseOr", - "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", - "BitwiseZeroFillRightShift", "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", "FloatingConstant", "Whitespace", "Newline", - "FStringSingleQuoteStart", "FStringDoubleQuoteStart", "FStringSingleQuoteExpStart", - "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", "FStringDoubleQuoteExpStart", - "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", "IdentifierNondigit", - "Nondigit", "Digit", "DecimalConstant", "BinaryConstant", "OctalConstant", - "HexadecimalConstant", "NonzeroDigit", "BinaryDigit", "OctalDigit", "HexadecimalDigit", - "DecimalFloatingConstant", "FractionalConstant", "ExponentPart", "DigitSequence", - "Sign", "CCharSequence", "CChar", "EscapeSequence", "SimpleEscapeSequence", - "OctalEscapeSequence", "HexadecimalEscapeSequence", "SingleQuoteFStringSCharSequence", - "SingleQuoteFStringSChar", "DoubleQuoteFStringSCharSequence", "DoubleQuoteFStringSChar", - "SingleQuoteSCharSequence", "SingleQuoteSChar", "DoubleQuoteSCharSequence", + "BlockComment", + "LineComment", + "Const", + "Var", + "As", + "Spread", + "Switch", + "Case", + "Default", + "Break", + "Continue", + "Do", + "While", + "If", + "Else", + "For", + "Enum", + "DefFunc", + "Return", + "CallFunc", + "RetIndicator", + "True", + "False", + "Typeof", + "Void", + "Null", + "Undefined", + "Comma", + "SemiColon", + "QuestionMark", + "Colon", + "LeftParen", + "RightParen", + "LeftBracket", + "RightBracket", + "FStringExpEnd", + "LeftBrace", + "RightBrace", + "Plus", + "PlusPlus", + "Minus", + "MinusMinus", + "Star", + "Div", + "Mod", + "PowerTo", + "AndAnd", + "OrOr", + "Not", + "Assign", + "PlusAssign", + "MinusAssign", + "StarAssign", + "DivAssign", + "ModAssign", + "Equal", + "NotEqual", + "Less", + "LessEqual", + "Greater", + "GreaterEqual", + "BitwiseAnd", + "BitwiseOr", + "BitwiseXor", + "BitwiseNot", + "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", + "Dot", + "Identifier", + "IntegerConstant", + "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", + "FloatingConstant", + "Whitespace", + "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteExpStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteExpStart", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", + "IdentifierNondigit", + "Nondigit", + "Digit", + "DecimalConstant", + "BinaryConstant", + "OctalConstant", + "HexadecimalConstant", + "NonzeroDigit", + "BinaryDigit", + "OctalDigit", + "HexadecimalDigit", + "DecimalFloatingConstant", + "FractionalConstant", + "ExponentPart", + "DigitSequence", + "Sign", + "CCharSequence", + "CChar", + "EscapeSequence", + "SimpleEscapeSequence", + "OctalEscapeSequence", + "HexadecimalEscapeSequence", + "SingleQuoteFStringSCharSequence", + "SingleQuoteFStringSChar", + "DoubleQuoteFStringSCharSequence", + "DoubleQuoteFStringSChar", + "SingleQuoteSCharSequence", + "SingleQuoteSChar", + "DoubleQuoteSCharSequence", "DoubleQuoteSChar", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, undefined, undefined, undefined, "'const'", "'var'", "'as'", - "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", "'do'", - "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", "'call'", - "'->'", "'true'", "'false'", "'typeof'", "'void'", "'null'", "'undefined'", - "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", - "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", - "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", - "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", - "'>>'", "'>>>'", "'.'", + undefined, + undefined, + undefined, + undefined, + "'const'", + "'var'", + "'as'", + "'...'", + "'switch'", + "'case'", + "'default'", + "'break'", + "'continue'", + "'do'", + "'while'", + "'if'", + "'else'", + "'for'", + "'enum'", + "'def'", + "'return'", + "'call'", + "'->'", + "'true'", + "'false'", + "'typeof'", + "'void'", + "'null'", + "'undefined'", + "','", + "';'", + "'?'", + "':'", + "'('", + "')'", + "'['", + "']'", + undefined, + "'{'", + "'}'", + "'+'", + "'++'", + "'-'", + "'--'", + "'*'", + "'/'", + "'%'", + "'**'", + "'&&'", + "'||'", + "'!'", + "'='", + "'+='", + "'-='", + "'*='", + "'/='", + "'%='", + "'=='", + "'!='", + "'<'", + "'<='", + "'>'", + "'>='", + "'&'", + "'|'", + "'^'", + "'~'", + "'<<'", + "'>>'", + "'>>>'", + "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "FStringExpStart", "BlockComment", "LineComment", "Const", - "Var", "As", "Spread", "Switch", "Case", "Default", "Break", "Continue", - "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", - "RetIndicator", "True", "False", "Typeof", "Void", "Null", "Undefined", - "Comma", "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", - "LeftBracket", "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", - "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", - "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", - "DivAssign", "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", - "GreaterEqual", "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", - "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", - "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", - "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", + undefined, + "FStringExpStart", + "BlockComment", + "LineComment", + "Const", + "Var", + "As", + "Spread", + "Switch", + "Case", + "Default", + "Break", + "Continue", + "Do", + "While", + "If", + "Else", + "For", + "Enum", + "DefFunc", + "Return", + "CallFunc", + "RetIndicator", + "True", + "False", + "Typeof", + "Void", + "Null", + "Undefined", + "Comma", + "SemiColon", + "QuestionMark", + "Colon", + "LeftParen", + "RightParen", + "LeftBracket", + "RightBracket", + "FStringExpEnd", + "LeftBrace", + "RightBrace", + "Plus", + "PlusPlus", + "Minus", + "MinusMinus", + "Star", + "Div", + "Mod", + "PowerTo", + "AndAnd", + "OrOr", + "Not", + "Assign", + "PlusAssign", + "MinusAssign", + "StarAssign", + "DivAssign", + "ModAssign", + "Equal", + "NotEqual", + "Less", + "LessEqual", + "Greater", + "GreaterEqual", + "BitwiseAnd", + "BitwiseOr", + "BitwiseXor", + "BitwiseNot", + "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", + "Dot", + "Identifier", + "IntegerConstant", + "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", + "FloatingConstant", + "Whitespace", + "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperLexer._LITERAL_NAMES, KipperLexer._SYMBOLIC_NAMES, []); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( + KipperLexer._LITERAL_NAMES, + KipperLexer._SYMBOLIC_NAMES, + [], + ); // @Override // @NotNull @@ -179,107 +398,116 @@ export class KipperLexer extends KipperLexerBase { } // tslint:enable:no-trailing-whitespace - constructor(input: CharStream) { super(input); this._interp = new LexerATNSimulator(KipperLexer._ATN, this); } // @Override - public get grammarFileName(): string { return "KipperLexer.g4"; } + public get grammarFileName(): string { + return "KipperLexer.g4"; + } // @Override - public get ruleNames(): string[] { return KipperLexer.ruleNames; } + public get ruleNames(): string[] { + return KipperLexer.ruleNames; + } // @Override - public get serializedATN(): string { return KipperLexer._serializedATN; } + public get serializedATN(): string { + return KipperLexer._serializedATN; + } // @Override - public get channelNames(): string[] { return KipperLexer.channelNames; } + public get channelNames(): string[] { + return KipperLexer.channelNames; + } // @Override - public get modeNames(): string[] { return KipperLexer.modeNames; } + public get modeNames(): string[] { + return KipperLexer.modeNames; + } // @Override public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { switch (ruleIndex) { - case 76: - this.FStringSingleQuoteStart_action(_localctx, actionIndex); - break; + case 76: + this.FStringSingleQuoteStart_action(_localctx, actionIndex); + break; - case 77: - this.FStringDoubleQuoteStart_action(_localctx, actionIndex); - break; + case 77: + this.FStringDoubleQuoteStart_action(_localctx, actionIndex); + break; - case 79: - this.FStringSingleQuoteEnd_action(_localctx, actionIndex); - break; + case 79: + this.FStringSingleQuoteEnd_action(_localctx, actionIndex); + break; - case 82: - this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); - break; + case 82: + this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); + break; } } private FStringSingleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 0: - this.incrementFStringDepth() - break; + case 0: + this.incrementFStringDepth(); + break; } } private FStringDoubleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 1: - this.incrementFStringDepth() - break; + case 1: + this.incrementFStringDepth(); + break; } } private FStringSingleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 2: - this.decrementFStringDepth() - break; + case 2: + this.decrementFStringDepth(); + break; } } private FStringDoubleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 3: - this.decrementFStringDepth() - break; + case 3: + this.decrementFStringDepth(); + break; } } // @Override public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 35: - return this.FStringExpEnd_sempred(_localctx, predIndex); + case 35: + return this.FStringExpEnd_sempred(_localctx, predIndex); - case 78: - return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); + case 78: + return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); - case 81: - return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); + case 81: + return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); } return true; } private FStringExpEnd_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.insideFString(); + case 0: + return this.insideFString(); } return true; } private FStringSingleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 1: - return this.insideFString(); + case 1: + return this.insideFString(); } return true; } private FStringDoubleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 2: - return this.insideFString(); + case 2: + return this.insideFString(); } return true; } @@ -293,7 +521,7 @@ export class KipperLexer extends KipperLexerBase { "\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16" + "\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B" + "\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!" + - "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t" + + "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t" + ")\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x04" + "2\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04" + ";\t;\x04<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04" + @@ -320,8 +548,8 @@ export class KipperLexer extends KipperLexerBase { "\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03" + "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + "\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03" + - " \x03 \x03!\x03!\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03%\x03%\x03" + - "%\x03&\x03&\x03\'\x03\'\x03(\x03(\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03" + + ' \x03 \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x03%\x03%\x03%\x03%\x03' + + "%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03" + "+\x03,\x03,\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x030\x030\x030\x031\x03" + "1\x031\x032\x032\x033\x033\x034\x034\x034\x035\x035\x035\x036\x036\x03" + "6\x037\x037\x037\x038\x038\x038\x039\x039\x039\x03:\x03:\x03:\x03;\x03" + @@ -347,10 +575,10 @@ export class KipperLexer extends KipperLexerBase { "\x03q\x03q\x05q\u02C4\nq\x03r\x06r\u02C7\nr\rr\x0Er\u02C8\x03s\x03s\x05" + "s\u02CD\ns\x03\xEF\x02\x02t\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07" + "\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E" + - "\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02" + + "\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14'\x02" + "\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02" + - "\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02" + - "\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c" + + '\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02"C\x02#E\x02$G\x02%I\x02&K\x02' + + "'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c" + "\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B" + "\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B" + @@ -361,7 +589,7 @@ export class KipperLexer extends KipperLexerBase { "\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02\xD7\x02\x02\xD9\x02" + "\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3\x02\x02\xE5\x02" + "\x02\xE7\x02\x02\x05\x02\x03\x04\x14\x05\x02\f\f\x0F\x0F\u202A\u202B\x06" + - "\x02\v\v\r\x0E\"\"\xA2\xA2\x05\x02C\\aac|\x03\x022;\x04\x02DDdd\x04\x02" + + '\x02\v\v\r\x0E""\xA2\xA2\x05\x02C\\aac|\x03\x022;\x04\x02DDdd\x04\x02' + "QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05\x022;CHch\x04\x02G" + "Ggg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$))AA^^cdhhppttvvxx}}" + "\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f\x0F\x0F$$^^}}\x7F\x7F" + @@ -371,7 +599,7 @@ export class KipperLexer extends KipperLexerBase { "\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02" + "\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02" + "\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02" + - "\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-" + + "\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-" + "\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02" + "\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02" + "\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03" + @@ -397,7 +625,7 @@ export class KipperLexer extends KipperLexerBase { "\x02\x13\u011A\x03\x02\x02\x02\x15\u011F\x03\x02\x02\x02\x17\u0127\x03" + "\x02\x02\x02\x19\u012D\x03\x02\x02\x02\x1B\u0136\x03\x02\x02\x02\x1D\u0139" + "\x03\x02\x02\x02\x1F\u013F\x03\x02\x02\x02!\u0142\x03\x02\x02\x02#\u0147" + - "\x03\x02\x02\x02%\u014B\x03\x02\x02\x02\'\u0150\x03\x02\x02\x02)\u0154" + + "\x03\x02\x02\x02%\u014B\x03\x02\x02\x02'\u0150\x03\x02\x02\x02)\u0154" + "\x03\x02\x02\x02+\u015B\x03\x02\x02\x02-\u0160\x03\x02\x02\x02/\u0163" + "\x03\x02\x02\x021\u0168\x03\x02\x02\x023\u016E\x03\x02\x02\x025\u0175" + "\x03\x02\x02\x027\u017A\x03\x02\x02\x029\u017F\x03\x02\x02\x02;\u0189" + @@ -464,7 +692,7 @@ export class KipperLexer extends KipperLexerBase { "\u013C\u013D\x07n\x02\x02\u013D\u013E\x07g\x02\x02\u013E\x1E\x03\x02\x02" + "\x02\u013F\u0140\x07k\x02\x02\u0140\u0141\x07h\x02\x02\u0141 \x03\x02" + "\x02\x02\u0142\u0143\x07g\x02\x02\u0143\u0144\x07n\x02\x02\u0144\u0145" + - "\x07u\x02\x02\u0145\u0146\x07g\x02\x02\u0146\"\x03\x02\x02\x02\u0147\u0148" + + '\x07u\x02\x02\u0145\u0146\x07g\x02\x02\u0146"\x03\x02\x02\x02\u0147\u0148' + "\x07h\x02\x02\u0148\u0149\x07q\x02\x02\u0149\u014A\x07t\x02\x02\u014A" + "$\x03\x02\x02\x02\u014B\u014C\x07g\x02\x02\u014C\u014D\x07p\x02\x02\u014D" + "\u014E\x07w\x02\x02\u014E\u014F\x07o\x02\x02\u014F&\x03\x02\x02\x02\u0150" + @@ -501,7 +729,7 @@ export class KipperLexer extends KipperLexerBase { "\x02\u01A6T\x03\x02\x02\x02\u01A7\u01A8\x07/\x02\x02\u01A8V\x03\x02\x02" + "\x02\u01A9\u01AA\x07/\x02\x02\u01AA\u01AB\x07/\x02\x02\u01ABX\x03\x02" + "\x02\x02\u01AC\u01AD\x07,\x02\x02\u01ADZ\x03\x02\x02\x02\u01AE\u01AF\x07" + - "1\x02\x02\u01AF\\\x03\x02\x02\x02\u01B0\u01B1\x07\'\x02\x02\u01B1^\x03" + + "1\x02\x02\u01AF\\\x03\x02\x02\x02\u01B0\u01B1\x07'\x02\x02\u01B1^\x03" + "\x02\x02\x02\u01B2\u01B3\x07,\x02\x02\u01B3\u01B4\x07,\x02\x02\u01B4`" + "\x03\x02\x02\x02\u01B5\u01B6\x07(\x02\x02\u01B6\u01B7\x07(\x02\x02\u01B7" + "b\x03\x02\x02\x02\u01B8\u01B9\x07~\x02\x02\u01B9\u01BA\x07~\x02\x02\u01BA" + @@ -510,7 +738,7 @@ export class KipperLexer extends KipperLexerBase { "\u01C1\x07?\x02\x02\u01C1j\x03\x02\x02\x02\u01C2\u01C3\x07/\x02\x02\u01C3" + "\u01C4\x07?\x02\x02\u01C4l\x03\x02\x02\x02\u01C5\u01C6\x07,\x02\x02\u01C6" + "\u01C7\x07?\x02\x02\u01C7n\x03\x02\x02\x02\u01C8\u01C9\x071\x02\x02\u01C9" + - "\u01CA\x07?\x02\x02\u01CAp\x03\x02\x02\x02\u01CB\u01CC\x07\'\x02\x02\u01CC" + + "\u01CA\x07?\x02\x02\u01CAp\x03\x02\x02\x02\u01CB\u01CC\x07'\x02\x02\u01CC" + "\u01CD\x07?\x02\x02\u01CDr\x03\x02\x02\x02\u01CE\u01CF\x07?\x02\x02\u01CF" + "\u01D0\x07?\x02\x02\u01D0t\x03\x02\x02\x02\u01D1\u01D2\x07#\x02\x02\u01D2" + "\u01D3\x07?\x02\x02\u01D3v\x03\x02\x02\x02\u01D4\u01D5\x07>\x02\x02\u01D5" + @@ -625,10 +853,7 @@ export class KipperLexer extends KipperLexerBase { "\u02C3\u02C8\u02CC\r\x02\x04\x02\x06\x02\x02\x02\x03\x02\x03N\x02\x07" + "\x03\x02\x03O\x03\x07\x04\x02\t\x03\x02\x07\x02\x02\x03Q\x04\x03T\x05"; public static readonly _serializedATN: string = Utils.join( - [ - KipperLexer._serializedATNSegment0, - KipperLexer._serializedATNSegment1, - ], + [KipperLexer._serializedATNSegment0, KipperLexer._serializedATNSegment1], "", ); public static __ATN: ATN; @@ -639,6 +864,4 @@ export class KipperLexer extends KipperLexerBase { return KipperLexer.__ATN; } - } - diff --git a/kipper/core/src/compiler/parser/antlr/KipperParser.ts b/kipper/core/src/compiler/parser/antlr/KipperParser.ts index 875eac453..7227e15dc 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParser.ts @@ -1,10 +1,8 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT - - // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax - // kind values. - import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; - +// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax +// kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; @@ -31,7 +29,6 @@ import * as Utils from "antlr4ts/misc/Utils"; import { KipperParserListener } from "./KipperParserListener"; import { KipperParserVisitor } from "./KipperParserVisitor"; - export class KipperParser extends Parser { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -191,59 +188,245 @@ export class KipperParser extends Parser { public static readonly RULE_typeSpecifierIdentifier = 72; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ - "compilationUnit", "translationUnit", "externalItem", "blockItemList", - "blockItem", "declaration", "functionDeclaration", "variableDeclaration", - "storageTypeSpecifier", "declarator", "directDeclarator", "initDeclarator", - "parameterList", "parameterDeclaration", "initializer", "statement", "compoundStatement", - "expressionStatement", "selectionStatement", "ifStatement", "switchStatement", - "switchLabeledStatement", "iterationStatement", "forLoopIterationStatement", - "whileLoopIterationStatement", "doWhileLoopIterationStatement", "jumpStatement", - "returnStatement", "primaryExpression", "tangledPrimaryExpression", "boolPrimaryExpression", - "identifierPrimaryExpression", "identifier", "stringPrimaryExpression", - "fStringPrimaryExpression", "fStringSingleQuoteAtom", "fStringDoubleQuoteAtom", - "numberPrimaryExpression", "arrayPrimaryExpression", "voidOrNullOrUndefinedPrimaryExpression", - "computedPrimaryExpression", "argumentExpressionList", "dotNotation", - "bracketNotation", "sliceNotation", "postfixExpression", "incrementOrDecrementPostfixExpression", - "unaryExpression", "incrementOrDecrementUnaryExpression", "operatorModifiedUnaryExpression", - "incrementOrDecrementOperator", "unaryOperator", "castOrConvertExpression", - "multiplicativeExpression", "additiveExpression", "bitwiseShiftExpression", - "bitwiseShiftOperators", "relationalExpression", "equalityExpression", - "bitwiseAndExpression", "bitwiseXorExpression", "bitwiseOrExpression", - "logicalAndExpression", "logicalOrExpression", "conditionalExpression", - "assignmentExpression", "assignmentOperator", "expression", "typeSpecifierExpression", - "identifierTypeSpecifierExpression", "genericTypeSpecifierExpression", - "typeofTypeSpecifierExpression", "typeSpecifierIdentifier", + "compilationUnit", + "translationUnit", + "externalItem", + "blockItemList", + "blockItem", + "declaration", + "functionDeclaration", + "variableDeclaration", + "storageTypeSpecifier", + "declarator", + "directDeclarator", + "initDeclarator", + "parameterList", + "parameterDeclaration", + "initializer", + "statement", + "compoundStatement", + "expressionStatement", + "selectionStatement", + "ifStatement", + "switchStatement", + "switchLabeledStatement", + "iterationStatement", + "forLoopIterationStatement", + "whileLoopIterationStatement", + "doWhileLoopIterationStatement", + "jumpStatement", + "returnStatement", + "primaryExpression", + "tangledPrimaryExpression", + "boolPrimaryExpression", + "identifierPrimaryExpression", + "identifier", + "stringPrimaryExpression", + "fStringPrimaryExpression", + "fStringSingleQuoteAtom", + "fStringDoubleQuoteAtom", + "numberPrimaryExpression", + "arrayPrimaryExpression", + "voidOrNullOrUndefinedPrimaryExpression", + "computedPrimaryExpression", + "argumentExpressionList", + "dotNotation", + "bracketNotation", + "sliceNotation", + "postfixExpression", + "incrementOrDecrementPostfixExpression", + "unaryExpression", + "incrementOrDecrementUnaryExpression", + "operatorModifiedUnaryExpression", + "incrementOrDecrementOperator", + "unaryOperator", + "castOrConvertExpression", + "multiplicativeExpression", + "additiveExpression", + "bitwiseShiftExpression", + "bitwiseShiftOperators", + "relationalExpression", + "equalityExpression", + "bitwiseAndExpression", + "bitwiseXorExpression", + "bitwiseOrExpression", + "logicalAndExpression", + "logicalOrExpression", + "conditionalExpression", + "assignmentExpression", + "assignmentOperator", + "expression", + "typeSpecifierExpression", + "identifierTypeSpecifierExpression", + "genericTypeSpecifierExpression", + "typeofTypeSpecifierExpression", + "typeSpecifierIdentifier", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, undefined, undefined, undefined, "'const'", "'var'", "'as'", - "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", "'do'", - "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", "'call'", - "'->'", "'true'", "'false'", "'typeof'", "'void'", "'null'", "'undefined'", - "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", - "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", - "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", - "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", - "'>>'", "'>>>'", "'.'", + undefined, + undefined, + undefined, + undefined, + "'const'", + "'var'", + "'as'", + "'...'", + "'switch'", + "'case'", + "'default'", + "'break'", + "'continue'", + "'do'", + "'while'", + "'if'", + "'else'", + "'for'", + "'enum'", + "'def'", + "'return'", + "'call'", + "'->'", + "'true'", + "'false'", + "'typeof'", + "'void'", + "'null'", + "'undefined'", + "','", + "';'", + "'?'", + "':'", + "'('", + "')'", + "'['", + "']'", + undefined, + "'{'", + "'}'", + "'+'", + "'++'", + "'-'", + "'--'", + "'*'", + "'/'", + "'%'", + "'**'", + "'&&'", + "'||'", + "'!'", + "'='", + "'+='", + "'-='", + "'*='", + "'/='", + "'%='", + "'=='", + "'!='", + "'<'", + "'<='", + "'>'", + "'>='", + "'&'", + "'|'", + "'^'", + "'~'", + "'<<'", + "'>>'", + "'>>>'", + "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "FStringExpStart", "BlockComment", "LineComment", "Const", - "Var", "As", "Spread", "Switch", "Case", "Default", "Break", "Continue", - "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", - "RetIndicator", "True", "False", "Typeof", "Void", "Null", "Undefined", - "Comma", "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", - "LeftBracket", "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", - "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", - "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", - "DivAssign", "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", - "GreaterEqual", "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", - "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", - "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", - "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", + undefined, + "FStringExpStart", + "BlockComment", + "LineComment", + "Const", + "Var", + "As", + "Spread", + "Switch", + "Case", + "Default", + "Break", + "Continue", + "Do", + "While", + "If", + "Else", + "For", + "Enum", + "DefFunc", + "Return", + "CallFunc", + "RetIndicator", + "True", + "False", + "Typeof", + "Void", + "Null", + "Undefined", + "Comma", + "SemiColon", + "QuestionMark", + "Colon", + "LeftParen", + "RightParen", + "LeftBracket", + "RightBracket", + "FStringExpEnd", + "LeftBrace", + "RightBrace", + "Plus", + "PlusPlus", + "Minus", + "MinusMinus", + "Star", + "Div", + "Mod", + "PowerTo", + "AndAnd", + "OrOr", + "Not", + "Assign", + "PlusAssign", + "MinusAssign", + "StarAssign", + "DivAssign", + "ModAssign", + "Equal", + "NotEqual", + "Less", + "LessEqual", + "Greater", + "GreaterEqual", + "BitwiseAnd", + "BitwiseOr", + "BitwiseXor", + "BitwiseNot", + "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", + "Dot", + "Identifier", + "IntegerConstant", + "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", + "FloatingConstant", + "Whitespace", + "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperParser._LITERAL_NAMES, KipperParser._SYMBOLIC_NAMES, []); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( + KipperParser._LITERAL_NAMES, + KipperParser._SYMBOLIC_NAMES, + [], + ); // @Override // @NotNull @@ -253,13 +436,19 @@ export class KipperParser extends Parser { // tslint:enable:no-trailing-whitespace // @Override - public get grammarFileName(): string { return "KipperParser.g4"; } + public get grammarFileName(): string { + return "KipperParser.g4"; + } // @Override - public get ruleNames(): string[] { return KipperParser.ruleNames; } + public get ruleNames(): string[] { + return KipperParser.ruleNames; + } // @Override - public get serializedATN(): string { return KipperParser._serializedATN; } + public get serializedATN(): string { + return KipperParser._serializedATN; + } protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { return new FailedPredicateException(this, predicate, message); @@ -277,21 +466,63 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 147; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.Switch) | (1 << KipperParser.Break) | (1 << KipperParser.Continue) | (1 << KipperParser.Do) | (1 << KipperParser.While) | (1 << KipperParser.If) | (1 << KipperParser.For) | (1 << KipperParser.DefFunc) | (1 << KipperParser.Return) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.LeftBrace - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 146; - this.translationUnit(); + this.state = 147; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + ((_la & ~0x1f) === 0 && + ((1 << _la) & + ((1 << KipperParser.Const) | + (1 << KipperParser.Var) | + (1 << KipperParser.Switch) | + (1 << KipperParser.Break) | + (1 << KipperParser.Continue) | + (1 << KipperParser.Do) | + (1 << KipperParser.While) | + (1 << KipperParser.If) | + (1 << KipperParser.For) | + (1 << KipperParser.DefFunc) | + (1 << KipperParser.Return) | + (1 << KipperParser.CallFunc) | + (1 << KipperParser.True) | + (1 << KipperParser.False) | + (1 << KipperParser.Void) | + (1 << KipperParser.Null) | + (1 << KipperParser.Undefined) | + (1 << KipperParser.SemiColon))) !== + 0) || + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.LeftBrace - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 146; + this.translationUnit(); + } } - } - this.state = 149; - this.match(KipperParser.EOF); + this.state = 149; + this.match(KipperParser.EOF); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -299,8 +530,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -313,23 +543,65 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 152; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - { - { - this.state = 151; - this.externalItem(); - } - } - this.state = 154; + this.state = 152; this._errHandler.sync(this); _la = this._input.LA(1); - } while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.Switch) | (1 << KipperParser.Break) | (1 << KipperParser.Continue) | (1 << KipperParser.Do) | (1 << KipperParser.While) | (1 << KipperParser.If) | (1 << KipperParser.For) | (1 << KipperParser.DefFunc) | (1 << KipperParser.Return) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.LeftBrace - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)); - } - } - catch (re) { + do { + { + { + this.state = 151; + this.externalItem(); + } + } + this.state = 154; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while ( + ((_la & ~0x1f) === 0 && + ((1 << _la) & + ((1 << KipperParser.Const) | + (1 << KipperParser.Var) | + (1 << KipperParser.Switch) | + (1 << KipperParser.Break) | + (1 << KipperParser.Continue) | + (1 << KipperParser.Do) | + (1 << KipperParser.While) | + (1 << KipperParser.If) | + (1 << KipperParser.For) | + (1 << KipperParser.DefFunc) | + (1 << KipperParser.Return) | + (1 << KipperParser.CallFunc) | + (1 << KipperParser.True) | + (1 << KipperParser.False) | + (1 << KipperParser.Void) | + (1 << KipperParser.Null) | + (1 << KipperParser.Undefined) | + (1 << KipperParser.SemiColon))) !== + 0) || + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.LeftBrace - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ); + } + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -337,8 +609,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -351,11 +622,10 @@ export class KipperParser extends Parser { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 156; - this.blockItemList(); + this.state = 156; + this.blockItemList(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -363,8 +633,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -377,29 +646,28 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 159; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 158; - this.blockItem(); - } - } - break; - default: - throw new NoViableAltException(this); - } - this.state = 161; + this.state = 159; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 158; + this.blockItem(); + } + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 161; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -407,8 +675,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -420,63 +687,62 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 166; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Switch: - case KipperParser.Break: - case KipperParser.Continue: - case KipperParser.Do: - case KipperParser.While: - case KipperParser.If: - case KipperParser.For: - case KipperParser.Return: - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - { - this.state = 163; - this.statement(); - } - break; - case KipperParser.Const: - case KipperParser.Var: - case KipperParser.DefFunc: - { - this.state = 164; - this.declaration(); - } - break; - case KipperParser.SemiColon: - { - this.state = 165; - this.match(KipperParser.SemiColon); + this.state = 166; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.Switch: + case KipperParser.Break: + case KipperParser.Continue: + case KipperParser.Do: + case KipperParser.While: + case KipperParser.If: + case KipperParser.For: + case KipperParser.Return: + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + { + this.state = 163; + this.statement(); + } + break; + case KipperParser.Const: + case KipperParser.Var: + case KipperParser.DefFunc: + { + this.state = 164; + this.declaration(); + } + break; + case KipperParser.SemiColon: + { + this.state = 165; + this.match(KipperParser.SemiColon); + } + break; + default: + throw new NoViableAltException(this); } - break; - default: - throw new NoViableAltException(this); - } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -484,8 +750,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -498,38 +763,37 @@ export class KipperParser extends Parser { this.state = 175; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - this.enterOuterAlt(_localctx, 1); - { - this.state = 168; - this.variableDeclaration(); - this.state = 169; - this.match(KipperParser.SemiColon); - } - break; - case KipperParser.DefFunc: - this.enterOuterAlt(_localctx, 2); - { - this.state = 171; - this.functionDeclaration(); - this.state = 173; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { - case 1: + case KipperParser.Const: + case KipperParser.Var: + this.enterOuterAlt(_localctx, 1); { - this.state = 172; - this.match(KipperParser.SemiColon); + this.state = 168; + this.variableDeclaration(); + this.state = 169; + this.match(KipperParser.SemiColon); } break; - } - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.DefFunc: + this.enterOuterAlt(_localctx, 2); + { + this.state = 171; + this.functionDeclaration(); + this.state = 173; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 4, this._ctx)) { + case 1: + { + this.state = 172; + this.match(KipperParser.SemiColon); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -537,8 +801,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -551,41 +814,40 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 177; - this.match(KipperParser.DefFunc); - this.state = 178; - this.declarator(); - this.state = 179; - this.match(KipperParser.LeftParen); - this.state = 181; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 180; - this.parameterList(); + this.state = 177; + this.match(KipperParser.DefFunc); + this.state = 178; + this.declarator(); + this.state = 179; + this.match(KipperParser.LeftParen); + this.state = 181; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 180; + this.parameterList(); + } } - } - this.state = 183; - this.match(KipperParser.RightParen); - this.state = 184; - this.match(KipperParser.RetIndicator); - this.state = 185; - this.typeSpecifierExpression(); - this.state = 187; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { - case 1: - { - this.state = 186; - this.compoundStatement(); + this.state = 183; + this.match(KipperParser.RightParen); + this.state = 184; + this.match(KipperParser.RetIndicator); + this.state = 185; + this.typeSpecifierExpression(); + this.state = 187; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { + case 1: + { + this.state = 186; + this.compoundStatement(); + } + break; } - break; - } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -593,8 +855,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -606,13 +867,12 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 189; - this.storageTypeSpecifier(); - this.state = 190; - this.initDeclarator(); + this.state = 189; + this.storageTypeSpecifier(); + this.state = 190; + this.initDeclarator(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -620,8 +880,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -634,21 +893,20 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 192; - _la = this._input.LA(1); - if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 192; + _la = this._input.LA(1); + if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -656,8 +914,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -669,11 +926,10 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 194; - this.directDeclarator(); + this.state = 194; + this.directDeclarator(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -681,8 +937,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -694,11 +949,10 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 196; - this.match(KipperParser.Identifier); + this.state = 196; + this.match(KipperParser.Identifier); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -706,8 +960,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -720,27 +973,25 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 198; - this.declarator(); - this.state = 199; - this.match(KipperParser.Colon); - this.state = 200; - this.typeSpecifierExpression(); - this.state = 203; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Assign) { - { - this.state = 201; - this.match(KipperParser.Assign); - this.state = 202; - this.initializer(); + this.state = 198; + this.declarator(); + this.state = 199; + this.match(KipperParser.Colon); + this.state = 200; + this.typeSpecifierExpression(); + this.state = 203; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Assign) { + { + this.state = 201; + this.match(KipperParser.Assign); + this.state = 202; + this.initializer(); + } } } - - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -748,8 +999,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -762,27 +1012,26 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 205; - this.parameterDeclaration(); - this.state = 210; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 206; - this.match(KipperParser.Comma); - this.state = 207; + this.state = 205; this.parameterDeclaration(); - } - } - this.state = 212; + this.state = 210; this._errHandler.sync(this); _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 206; + this.match(KipperParser.Comma); + this.state = 207; + this.parameterDeclaration(); + } + } + this.state = 212; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -790,8 +1039,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -803,15 +1051,14 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 213; - this.declarator(); - this.state = 214; - this.match(KipperParser.Colon); - this.state = 215; - this.typeSpecifierExpression(); + this.state = 213; + this.declarator(); + this.state = 214; + this.match(KipperParser.Colon); + this.state = 215; + this.typeSpecifierExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -819,8 +1066,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -832,11 +1078,10 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 217; - this.assignmentExpression(); + this.state = 217; + this.assignmentExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -844,8 +1089,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -858,76 +1102,75 @@ export class KipperParser extends Parser { this.state = 225; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.LeftBrace: - this.enterOuterAlt(_localctx, 1); - { - this.state = 219; - this.compoundStatement(); - } - break; - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 220; - this.expressionStatement(); - } - break; - case KipperParser.Switch: - case KipperParser.If: - this.enterOuterAlt(_localctx, 3); - { - this.state = 221; - this.selectionStatement(); - } - break; - case KipperParser.Do: - case KipperParser.While: - case KipperParser.For: - this.enterOuterAlt(_localctx, 4); - { - this.state = 222; - this.iterationStatement(); - } - break; - case KipperParser.Break: - case KipperParser.Continue: - this.enterOuterAlt(_localctx, 5); - { - this.state = 223; - this.jumpStatement(); - } - break; - case KipperParser.Return: - this.enterOuterAlt(_localctx, 6); - { - this.state = 224; - this.returnStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.LeftBrace: + this.enterOuterAlt(_localctx, 1); + { + this.state = 219; + this.compoundStatement(); + } + break; + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 220; + this.expressionStatement(); + } + break; + case KipperParser.Switch: + case KipperParser.If: + this.enterOuterAlt(_localctx, 3); + { + this.state = 221; + this.selectionStatement(); + } + break; + case KipperParser.Do: + case KipperParser.While: + case KipperParser.For: + this.enterOuterAlt(_localctx, 4); + { + this.state = 222; + this.iterationStatement(); + } + break; + case KipperParser.Break: + case KipperParser.Continue: + this.enterOuterAlt(_localctx, 5); + { + this.state = 223; + this.jumpStatement(); + } + break; + case KipperParser.Return: + this.enterOuterAlt(_localctx, 6); + { + this.state = 224; + this.returnStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -935,8 +1178,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -949,23 +1191,65 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 227; - this.match(KipperParser.LeftBrace); - this.state = 229; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.Switch) | (1 << KipperParser.Break) | (1 << KipperParser.Continue) | (1 << KipperParser.Do) | (1 << KipperParser.While) | (1 << KipperParser.If) | (1 << KipperParser.For) | (1 << KipperParser.DefFunc) | (1 << KipperParser.Return) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined) | (1 << KipperParser.SemiColon))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.LeftBrace - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 228; - this.blockItemList(); + this.state = 227; + this.match(KipperParser.LeftBrace); + this.state = 229; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + ((_la & ~0x1f) === 0 && + ((1 << _la) & + ((1 << KipperParser.Const) | + (1 << KipperParser.Var) | + (1 << KipperParser.Switch) | + (1 << KipperParser.Break) | + (1 << KipperParser.Continue) | + (1 << KipperParser.Do) | + (1 << KipperParser.While) | + (1 << KipperParser.If) | + (1 << KipperParser.For) | + (1 << KipperParser.DefFunc) | + (1 << KipperParser.Return) | + (1 << KipperParser.CallFunc) | + (1 << KipperParser.True) | + (1 << KipperParser.False) | + (1 << KipperParser.Void) | + (1 << KipperParser.Null) | + (1 << KipperParser.Undefined) | + (1 << KipperParser.SemiColon))) !== + 0) || + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.LeftBrace - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 228; + this.blockItemList(); + } } - } - this.state = 231; - this.match(KipperParser.RightBrace); + this.state = 231; + this.match(KipperParser.RightBrace); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -973,8 +1257,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -986,13 +1269,12 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 233; - this.expression(); - this.state = 234; - this.match(KipperParser.SemiColon); + this.state = 233; + this.expression(); + this.state = 234; + this.match(KipperParser.SemiColon); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1000,8 +1282,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1014,25 +1295,24 @@ export class KipperParser extends Parser { this.state = 238; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.If: - this.enterOuterAlt(_localctx, 1); - { - this.state = 236; - this.ifStatement(); - } - break; - case KipperParser.Switch: - this.enterOuterAlt(_localctx, 2); - { - this.state = 237; - this.switchStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.If: + this.enterOuterAlt(_localctx, 1); + { + this.state = 236; + this.ifStatement(); + } + break; + case KipperParser.Switch: + this.enterOuterAlt(_localctx, 2); + { + this.state = 237; + this.switchStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1040,8 +1320,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1053,31 +1332,30 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 240; - this.match(KipperParser.If); - this.state = 241; - this.match(KipperParser.LeftParen); - this.state = 242; - this.expression(); - this.state = 243; - this.match(KipperParser.RightParen); - this.state = 244; - this.statement(); - this.state = 247; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 13, this._ctx) ) { - case 1: - { - this.state = 245; - this.match(KipperParser.Else); - this.state = 246; + this.state = 240; + this.match(KipperParser.If); + this.state = 241; + this.match(KipperParser.LeftParen); + this.state = 242; + this.expression(); + this.state = 243; + this.match(KipperParser.RightParen); + this.state = 244; this.statement(); + this.state = 247; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 13, this._ctx)) { + case 1: + { + this.state = 245; + this.match(KipperParser.Else); + this.state = 246; + this.statement(); + } + break; } - break; - } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1085,8 +1363,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1099,35 +1376,34 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 249; - this.match(KipperParser.Switch); - this.state = 250; - this.match(KipperParser.LeftParen); - this.state = 251; - this.expression(); - this.state = 252; - this.match(KipperParser.RightParen); - this.state = 253; - this.match(KipperParser.LeftBrace); - this.state = 257; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Case || _la === KipperParser.Default) { - { - { - this.state = 254; - this.switchLabeledStatement(); - } - } - this.state = 259; + this.state = 249; + this.match(KipperParser.Switch); + this.state = 250; + this.match(KipperParser.LeftParen); + this.state = 251; + this.expression(); + this.state = 252; + this.match(KipperParser.RightParen); + this.state = 253; + this.match(KipperParser.LeftBrace); + this.state = 257; this._errHandler.sync(this); _la = this._input.LA(1); + while (_la === KipperParser.Case || _la === KipperParser.Default) { + { + { + this.state = 254; + this.switchLabeledStatement(); + } + } + this.state = 259; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 260; + this.match(KipperParser.RightBrace); } - this.state = 260; - this.match(KipperParser.RightBrace); - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1135,8 +1411,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1149,35 +1424,34 @@ export class KipperParser extends Parser { this.state = 270; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Case: - this.enterOuterAlt(_localctx, 1); - { - this.state = 262; - this.match(KipperParser.Case); - this.state = 263; - this.expression(); - this.state = 264; - this.match(KipperParser.Colon); - this.state = 265; - this.statement(); - } - break; - case KipperParser.Default: - this.enterOuterAlt(_localctx, 2); - { - this.state = 267; - this.match(KipperParser.Default); - this.state = 268; - this.match(KipperParser.Colon); - this.state = 269; - this.statement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Case: + this.enterOuterAlt(_localctx, 1); + { + this.state = 262; + this.match(KipperParser.Case); + this.state = 263; + this.expression(); + this.state = 264; + this.match(KipperParser.Colon); + this.state = 265; + this.statement(); + } + break; + case KipperParser.Default: + this.enterOuterAlt(_localctx, 2); + { + this.state = 267; + this.match(KipperParser.Default); + this.state = 268; + this.match(KipperParser.Colon); + this.state = 269; + this.statement(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1185,8 +1459,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1199,32 +1472,31 @@ export class KipperParser extends Parser { this.state = 275; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.For: - this.enterOuterAlt(_localctx, 1); - { - this.state = 272; - this.forLoopIterationStatement(); - } - break; - case KipperParser.While: - this.enterOuterAlt(_localctx, 2); - { - this.state = 273; - this.whileLoopIterationStatement(); - } - break; - case KipperParser.Do: - this.enterOuterAlt(_localctx, 3); - { - this.state = 274; - this.doWhileLoopIterationStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.For: + this.enterOuterAlt(_localctx, 1); + { + this.state = 272; + this.forLoopIterationStatement(); + } + break; + case KipperParser.While: + this.enterOuterAlt(_localctx, 2); + { + this.state = 273; + this.whileLoopIterationStatement(); + } + break; + case KipperParser.Do: + this.enterOuterAlt(_localctx, 3); + { + this.state = 274; + this.doWhileLoopIterationStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1232,8 +1504,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1246,90 +1517,175 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 277; - this.match(KipperParser.For); - this.state = 278; - this.match(KipperParser.LeftParen); - this.state = 285; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.CallFunc) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (KipperParser.LeftParen - 33)) | (1 << (KipperParser.LeftBracket - 33)) | (1 << (KipperParser.Plus - 33)) | (1 << (KipperParser.PlusPlus - 33)) | (1 << (KipperParser.Minus - 33)) | (1 << (KipperParser.MinusMinus - 33)) | (1 << (KipperParser.Not - 33)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 281; + this.state = 277; + this.match(KipperParser.For); + this.state = 278; + this.match(KipperParser.LeftParen); + this.state = 285; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - { - this.state = 279; - this.variableDeclaration(); - } - break; - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: + _la = this._input.LA(1); + if ( + ((_la & ~0x1f) === 0 && + ((1 << _la) & + ((1 << KipperParser.Const) | + (1 << KipperParser.Var) | + (1 << KipperParser.CallFunc) | + (1 << KipperParser.True) | + (1 << KipperParser.False) | + (1 << KipperParser.Void) | + (1 << KipperParser.Null) | + (1 << KipperParser.Undefined))) !== + 0) || + (((_la - 33) & ~0x1f) === 0 && + ((1 << (_la - 33)) & + ((1 << (KipperParser.LeftParen - 33)) | + (1 << (KipperParser.LeftBracket - 33)) | + (1 << (KipperParser.Plus - 33)) | + (1 << (KipperParser.PlusPlus - 33)) | + (1 << (KipperParser.Minus - 33)) | + (1 << (KipperParser.MinusMinus - 33)) | + (1 << (KipperParser.Not - 33)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { { - this.state = 280; - this.expression(); + this.state = 281; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.Const: + case KipperParser.Var: + { + this.state = 279; + this.variableDeclaration(); + } + break; + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + { + this.state = 280; + this.expression(); + } + break; + default: + throw new NoViableAltException(this); + } + _localctx._forDeclaration = true; } - break; - default: - throw new NoViableAltException(this); - } - _localctx._forDeclaration = true } - } - this.state = 287; - this.match(KipperParser.SemiColon); - this.state = 291; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 288; - this.expression(); - _localctx._forCondition = true + this.state = 287; + this.match(KipperParser.SemiColon); + this.state = 291; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 288; + this.expression(); + _localctx._forCondition = true; + } } - } - this.state = 293; - this.match(KipperParser.SemiColon); - this.state = 297; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 294; - this.expression(); - _localctx._forIterationExp = true + this.state = 293; + this.match(KipperParser.SemiColon); + this.state = 297; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 294; + this.expression(); + _localctx._forIterationExp = true; + } } - } - this.state = 299; - this.match(KipperParser.RightParen); - this.state = 300; - this.statement(); + this.state = 299; + this.match(KipperParser.RightParen); + this.state = 300; + this.statement(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1337,8 +1693,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1350,19 +1705,18 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 302; - this.match(KipperParser.While); - this.state = 303; - this.match(KipperParser.LeftParen); - this.state = 304; - this.expression(); - this.state = 305; - this.match(KipperParser.RightParen); - this.state = 306; - this.statement(); - } - } - catch (re) { + this.state = 302; + this.match(KipperParser.While); + this.state = 303; + this.match(KipperParser.LeftParen); + this.state = 304; + this.expression(); + this.state = 305; + this.match(KipperParser.RightParen); + this.state = 306; + this.statement(); + } + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1370,36 +1724,37 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public doWhileLoopIterationStatement(): DoWhileLoopIterationStatementContext { - let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext(this._ctx, this.state); + let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 50, KipperParser.RULE_doWhileLoopIterationStatement); try { this.enterOuterAlt(_localctx, 1); { - this.state = 308; - this.match(KipperParser.Do); - this.state = 309; - this.statement(); - this.state = 310; - this.match(KipperParser.While); - this.state = 311; - this.match(KipperParser.LeftParen); - this.state = 312; - this.expression(); - this.state = 313; - this.match(KipperParser.RightParen); - this.state = 314; - this.match(KipperParser.SemiColon); - } - } - catch (re) { + this.state = 308; + this.match(KipperParser.Do); + this.state = 309; + this.statement(); + this.state = 310; + this.match(KipperParser.While); + this.state = 311; + this.match(KipperParser.LeftParen); + this.state = 312; + this.expression(); + this.state = 313; + this.match(KipperParser.RightParen); + this.state = 314; + this.match(KipperParser.SemiColon); + } + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1407,8 +1762,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1421,23 +1775,22 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 316; - _la = this._input.LA(1); - if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 316; + _la = this._input.LA(1); + if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 317; - this.match(KipperParser.SemiColon); + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 317; + this.match(KipperParser.SemiColon); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1445,8 +1798,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1459,23 +1811,49 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 319; - this.match(KipperParser.Return); - this.state = 321; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 320; - this.expression(); + this.state = 319; + this.match(KipperParser.Return); + this.state = 321; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 320; + this.expression(); + } } - } - this.state = 323; - this.match(KipperParser.SemiColon); + this.state = 323; + this.match(KipperParser.SemiColon); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1483,8 +1861,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1497,73 +1874,72 @@ export class KipperParser extends Parser { this.state = 333; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.LeftParen: - this.enterOuterAlt(_localctx, 1); - { - this.state = 325; - this.tangledPrimaryExpression(); - } - break; - case KipperParser.True: - case KipperParser.False: - this.enterOuterAlt(_localctx, 2); - { - this.state = 326; - this.boolPrimaryExpression(); - } - break; - case KipperParser.Identifier: - this.enterOuterAlt(_localctx, 3); - { - this.state = 327; - this.identifierPrimaryExpression(); - } - break; - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - this.enterOuterAlt(_localctx, 4); - { - this.state = 328; - this.stringPrimaryExpression(); - } - break; - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 5); - { - this.state = 329; - this.fStringPrimaryExpression(); - } - break; - case KipperParser.IntegerConstant: - case KipperParser.FloatingConstant: - this.enterOuterAlt(_localctx, 6); - { - this.state = 330; - this.numberPrimaryExpression(); - } - break; - case KipperParser.LeftBracket: - this.enterOuterAlt(_localctx, 7); - { - this.state = 331; - this.arrayPrimaryExpression(); - } - break; - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - this.enterOuterAlt(_localctx, 8); - { - this.state = 332; - this.voidOrNullOrUndefinedPrimaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.LeftParen: + this.enterOuterAlt(_localctx, 1); + { + this.state = 325; + this.tangledPrimaryExpression(); + } + break; + case KipperParser.True: + case KipperParser.False: + this.enterOuterAlt(_localctx, 2); + { + this.state = 326; + this.boolPrimaryExpression(); + } + break; + case KipperParser.Identifier: + this.enterOuterAlt(_localctx, 3); + { + this.state = 327; + this.identifierPrimaryExpression(); + } + break; + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + this.enterOuterAlt(_localctx, 4); + { + this.state = 328; + this.stringPrimaryExpression(); + } + break; + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 5); + { + this.state = 329; + this.fStringPrimaryExpression(); + } + break; + case KipperParser.IntegerConstant: + case KipperParser.FloatingConstant: + this.enterOuterAlt(_localctx, 6); + { + this.state = 330; + this.numberPrimaryExpression(); + } + break; + case KipperParser.LeftBracket: + this.enterOuterAlt(_localctx, 7); + { + this.state = 331; + this.arrayPrimaryExpression(); + } + break; + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + this.enterOuterAlt(_localctx, 8); + { + this.state = 332; + this.voidOrNullOrUndefinedPrimaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1571,8 +1947,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1584,15 +1959,14 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 335; - this.match(KipperParser.LeftParen); - this.state = 336; - this.expression(); - this.state = 337; - this.match(KipperParser.RightParen); + this.state = 335; + this.match(KipperParser.LeftParen); + this.state = 336; + this.expression(); + this.state = 337; + this.match(KipperParser.RightParen); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1600,8 +1974,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1614,21 +1987,20 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 339; - _la = this._input.LA(1); - if (!(_la === KipperParser.True || _la === KipperParser.False)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 339; + _la = this._input.LA(1); + if (!(_la === KipperParser.True || _la === KipperParser.False)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1636,8 +2008,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1649,11 +2020,10 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 341; - this.identifier(); + this.state = 341; + this.identifier(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1661,8 +2031,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1674,11 +2043,10 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 343; - this.match(KipperParser.Identifier); + this.state = 343; + this.match(KipperParser.Identifier); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1686,8 +2054,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1700,21 +2067,20 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 345; - _la = this._input.LA(1); - if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 345; + _la = this._input.LA(1); + if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1722,8 +2088,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1737,57 +2102,56 @@ export class KipperParser extends Parser { this.state = 363; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteStart: - this.enterOuterAlt(_localctx, 1); - { - this.state = 347; - this.match(KipperParser.FStringSingleQuoteStart); - this.state = 351; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { - { + case KipperParser.FStringSingleQuoteStart: + this.enterOuterAlt(_localctx, 1); { - this.state = 348; - this.fStringSingleQuoteAtom(); - } + this.state = 347; + this.match(KipperParser.FStringSingleQuoteStart); + this.state = 351; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { + { + { + this.state = 348; + this.fStringSingleQuoteAtom(); + } + } + this.state = 353; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 354; + this.match(KipperParser.FStringSingleQuoteEnd); } - this.state = 353; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 354; - this.match(KipperParser.FStringSingleQuoteEnd); - } - break; - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 355; - this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 359; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { - { + break; + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 2); { - this.state = 356; - this.fStringDoubleQuoteAtom(); - } + this.state = 355; + this.match(KipperParser.FStringDoubleQuoteStart); + this.state = 359; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { + { + { + this.state = 356; + this.fStringDoubleQuoteAtom(); + } + } + this.state = 361; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 362; + this.match(KipperParser.FStringDoubleQuoteEnd); } - this.state = 361; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 362; - this.match(KipperParser.FStringDoubleQuoteEnd); - } - break; - default: - throw new NoViableAltException(this); + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1795,8 +2159,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1810,37 +2173,63 @@ export class KipperParser extends Parser { this.state = 371; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteAtom: - this.enterOuterAlt(_localctx, 1); - { - this.state = 365; - this.match(KipperParser.FStringSingleQuoteAtom); - } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 366; - this.match(KipperParser.FStringExpStart); - this.state = 368; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + case KipperParser.FStringSingleQuoteAtom: + this.enterOuterAlt(_localctx, 1); { - this.state = 367; - this.expression(); + this.state = 365; + this.match(KipperParser.FStringSingleQuoteAtom); } - } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 366; + this.match(KipperParser.FStringExpStart); + this.state = 368; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 367; + this.expression(); + } + } - this.state = 370; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 370; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1848,8 +2237,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1863,37 +2251,63 @@ export class KipperParser extends Parser { this.state = 379; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringDoubleQuoteAtom: - this.enterOuterAlt(_localctx, 1); - { - this.state = 373; - this.match(KipperParser.FStringDoubleQuoteAtom); - } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 374; - this.match(KipperParser.FStringExpStart); - this.state = 376; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { + case KipperParser.FStringDoubleQuoteAtom: + this.enterOuterAlt(_localctx, 1); { - this.state = 375; - this.expression(); + this.state = 373; + this.match(KipperParser.FStringDoubleQuoteAtom); } - } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 374; + this.match(KipperParser.FStringExpStart); + this.state = 376; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 375; + this.expression(); + } + } - this.state = 378; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 378; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1901,8 +2315,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1915,21 +2328,20 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 381; - _la = this._input.LA(1); - if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 381; + _la = this._input.LA(1); + if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1937,8 +2349,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1951,39 +2362,65 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 383; - this.match(KipperParser.LeftBracket); - this.state = 392; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 384; - this.expression(); - this.state = 389; + this.state = 383; + this.match(KipperParser.LeftBracket); + this.state = 392; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Comma) { + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { { - { - this.state = 385; - this.match(KipperParser.Comma); - this.state = 386; - this.expression(); - } + this.state = 384; + this.expression(); + this.state = 389; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 385; + this.match(KipperParser.Comma); + this.state = 386; + this.expression(); + } + } + this.state = 391; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - this.state = 391; - this._errHandler.sync(this); - _la = this._input.LA(1); } - } - } - this.state = 394; - this.match(KipperParser.RightBracket); + this.state = 394; + this.match(KipperParser.RightBracket); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1991,35 +2428,41 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public voidOrNullOrUndefinedPrimaryExpression(): VoidOrNullOrUndefinedPrimaryExpressionContext { - let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext(this._ctx, this.state); + let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 78, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 396; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 396; + _la = this._input.LA(1); + if ( + !( + (_la & ~0x1f) === 0 && + ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2027,8 +2470,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2053,152 +2495,213 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 409; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - { - _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 399; - this.primaryExpression(); - } - break; - case KipperParser.CallFunc: - { - _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 400; - this.match(KipperParser.CallFunc); - this.state = 401; - this.computedPrimaryExpression(0); - this.state = 402; - this.match(KipperParser.LeftParen); - this.state = 404; + this.state = 409; this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 403; - this.argumentExpressionList(); - } - } - - this.state = 406; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression - } - break; - default: - throw new NoViableAltException(this); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 432; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - this.state = 430; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 35, this._ctx) ) { - case 1: + switch (this._input.LA(1)) { + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: { - _localctx = new FunctionCallExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 411; - if (!(this.precpred(this._ctx, 5))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); - } - this.state = 412; - this.match(KipperParser.LeftParen); - this.state = 414; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 413; - this.argumentExpressionList(); - } - } + _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 416; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression + this.state = 399; + this.primaryExpression(); } break; - - case 2: + case KipperParser.CallFunc: { - _localctx = new DotNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 418; - if (!(this.precpred(this._ctx, 3))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); - } - this.state = 419; - this.dotNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression - } - break; + _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 400; + this.match(KipperParser.CallFunc); + this.state = 401; + this.computedPrimaryExpression(0); + this.state = 402; + this.match(KipperParser.LeftParen); + this.state = 404; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 403; + this.argumentExpressionList(); + } + } - case 3: - { - _localctx = new BracketNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 422; - if (!(this.precpred(this._ctx, 2))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); - } - this.state = 423; - this.bracketNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + this.state = 406; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } break; - - case 4: - { - _localctx = new SliceNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 426; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + default: + throw new NoViableAltException(this); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 432; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); } - this.state = 427; - this.sliceNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + _prevctx = _localctx; + { + this.state = 430; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 35, this._ctx)) { + case 1: + { + _localctx = new FunctionCallExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 411; + if (!this.precpred(this._ctx, 5)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 412; + this.match(KipperParser.LeftParen); + this.state = 414; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 413; + this.argumentExpressionList(); + } + } + + this.state = 416; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; + } + break; + + case 2: + { + _localctx = new DotNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 418; + if (!this.precpred(this._ctx, 3)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 419; + this.dotNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 3: + { + _localctx = new BracketNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 422; + if (!this.precpred(this._ctx, 2)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 423; + this.bracketNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 4: + { + _localctx = new SliceNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 426; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 427; + this.sliceNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + } } - break; - } } + this.state = 434; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); } - this.state = 434; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); - } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2206,8 +2709,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -2220,27 +2722,26 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 435; - this.assignmentExpression(); - this.state = 440; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 436; - this.match(KipperParser.Comma); - this.state = 437; + this.state = 435; this.assignmentExpression(); - } - } - this.state = 442; + this.state = 440; this._errHandler.sync(this); _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 436; + this.match(KipperParser.Comma); + this.state = 437; + this.assignmentExpression(); + } + } + this.state = 442; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2248,8 +2749,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2261,13 +2761,12 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 443; - this.match(KipperParser.Dot); - this.state = 444; - this.identifier(); + this.state = 443; + this.match(KipperParser.Dot); + this.state = 444; + this.identifier(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2275,8 +2774,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2288,15 +2786,14 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 446; - this.match(KipperParser.LeftBracket); - this.state = 447; - this.expression(); - this.state = 448; - this.match(KipperParser.RightBracket); + this.state = 446; + this.match(KipperParser.LeftBracket); + this.state = 447; + this.expression(); + this.state = 448; + this.match(KipperParser.RightBracket); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2304,8 +2801,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2318,37 +2814,90 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 450; - this.match(KipperParser.LeftBracket); - this.state = 454; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 451; - this.expression(); - _localctx.sliceStart = true + this.state = 450; + this.match(KipperParser.LeftBracket); + this.state = 454; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 451; + this.expression(); + _localctx.sliceStart = true; + } } - } - this.state = 456; - this.match(KipperParser.Colon); - this.state = 460; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 21)) & ~0x1F) === 0 && ((1 << (_la - 21)) & ((1 << (KipperParser.CallFunc - 21)) | (1 << (KipperParser.True - 21)) | (1 << (KipperParser.False - 21)) | (1 << (KipperParser.Void - 21)) | (1 << (KipperParser.Null - 21)) | (1 << (KipperParser.Undefined - 21)) | (1 << (KipperParser.LeftParen - 21)) | (1 << (KipperParser.LeftBracket - 21)) | (1 << (KipperParser.Plus - 21)) | (1 << (KipperParser.PlusPlus - 21)) | (1 << (KipperParser.Minus - 21)) | (1 << (KipperParser.MinusMinus - 21)) | (1 << (KipperParser.Not - 21)))) !== 0) || ((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & ((1 << (KipperParser.Identifier - 71)) | (1 << (KipperParser.IntegerConstant - 71)) | (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | (1 << (KipperParser.FloatingConstant - 71)) | (1 << (KipperParser.FStringSingleQuoteStart - 71)) | (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0)) { - { - this.state = 457; - this.expression(); - _localctx.sliceEnd = true + this.state = 456; + this.match(KipperParser.Colon); + this.state = 460; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 21) & ~0x1f) === 0 && + ((1 << (_la - 21)) & + ((1 << (KipperParser.CallFunc - 21)) | + (1 << (KipperParser.True - 21)) | + (1 << (KipperParser.False - 21)) | + (1 << (KipperParser.Void - 21)) | + (1 << (KipperParser.Null - 21)) | + (1 << (KipperParser.Undefined - 21)) | + (1 << (KipperParser.LeftParen - 21)) | + (1 << (KipperParser.LeftBracket - 21)) | + (1 << (KipperParser.Plus - 21)) | + (1 << (KipperParser.PlusPlus - 21)) | + (1 << (KipperParser.Minus - 21)) | + (1 << (KipperParser.MinusMinus - 21)) | + (1 << (KipperParser.Not - 21)))) !== + 0) || + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + 0) + ) { + { + this.state = 457; + this.expression(); + _localctx.sliceEnd = true; + } } - } - this.state = 462; - this.match(KipperParser.RightBracket); + this.state = 462; + this.match(KipperParser.RightBracket); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2356,8 +2905,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2369,25 +2917,24 @@ export class KipperParser extends Parser { try { this.state = 466; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 40, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 464; - this.computedPrimaryExpression(0); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 40, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 464; + this.computedPrimaryExpression(0); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 465; - this.incrementOrDecrementPostfixExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 465; + this.incrementOrDecrementPostfixExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2395,26 +2942,27 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementPostfixExpression(): IncrementOrDecrementPostfixExpressionContext { - let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext(this._ctx, this.state); + let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 92, KipperParser.RULE_incrementOrDecrementPostfixExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 468; - this.computedPrimaryExpression(0); - this.state = 469; - this.incrementOrDecrementOperator(); + this.state = 468; + this.computedPrimaryExpression(0); + this.state = 469; + this.incrementOrDecrementOperator(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2422,8 +2970,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2436,49 +2983,48 @@ export class KipperParser extends Parser { this.state = 474; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.CallFunc: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 1); - { - this.state = 471; - this.postfixExpression(); - } - break; - case KipperParser.PlusPlus: - case KipperParser.MinusMinus: - this.enterOuterAlt(_localctx, 2); - { - this.state = 472; - this.incrementOrDecrementUnaryExpression(); - } - break; - case KipperParser.Plus: - case KipperParser.Minus: - case KipperParser.Not: - this.enterOuterAlt(_localctx, 3); - { - this.state = 473; - this.operatorModifiedUnaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.CallFunc: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 1); + { + this.state = 471; + this.postfixExpression(); + } + break; + case KipperParser.PlusPlus: + case KipperParser.MinusMinus: + this.enterOuterAlt(_localctx, 2); + { + this.state = 472; + this.incrementOrDecrementUnaryExpression(); + } + break; + case KipperParser.Plus: + case KipperParser.Minus: + case KipperParser.Not: + this.enterOuterAlt(_localctx, 3); + { + this.state = 473; + this.operatorModifiedUnaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2486,26 +3032,27 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementUnaryExpression(): IncrementOrDecrementUnaryExpressionContext { - let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext(this._ctx, this.state); + let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 96, KipperParser.RULE_incrementOrDecrementUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 476; - this.incrementOrDecrementOperator(); - this.state = 477; - this.postfixExpression(); + this.state = 476; + this.incrementOrDecrementOperator(); + this.state = 477; + this.postfixExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2513,26 +3060,27 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public operatorModifiedUnaryExpression(): OperatorModifiedUnaryExpressionContext { - let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext(this._ctx, this.state); + let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 98, KipperParser.RULE_operatorModifiedUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 479; - this.unaryOperator(); - this.state = 480; - this.postfixExpression(); + this.state = 479; + this.unaryOperator(); + this.state = 480; + this.postfixExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2540,8 +3088,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2554,21 +3101,20 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 482; - _la = this._input.LA(1); - if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 482; + _la = this._input.LA(1); + if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2576,8 +3122,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2590,21 +3135,27 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 484; - _la = this._input.LA(1); - if (!(((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & ((1 << (KipperParser.Plus - 40)) | (1 << (KipperParser.Minus - 40)) | (1 << (KipperParser.Not - 40)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 484; + _la = this._input.LA(1); + if ( + !( + ((_la - 40) & ~0x1f) === 0 && + ((1 << (_la - 40)) & + ((1 << (KipperParser.Plus - 40)) | (1 << (KipperParser.Minus - 40)) | (1 << (KipperParser.Not - 40)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2612,8 +3163,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2625,31 +3175,30 @@ export class KipperParser extends Parser { try { this.state = 491; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 42, this._ctx) ) { - case 1: - _localctx = new PassOnCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 486; - this.unaryExpression(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 42, this._ctx)) { + case 1: + _localctx = new PassOnCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 486; + this.unaryExpression(); + } + break; - case 2: - _localctx = new ActualCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 487; - this.unaryExpression(); - this.state = 488; - this.match(KipperParser.As); - this.state = 489; - this.typeSpecifierExpression(); - } - break; + case 2: + _localctx = new ActualCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 487; + this.unaryExpression(); + this.state = 488; + this.match(KipperParser.As); + this.state = 489; + this.typeSpecifierExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2657,8 +3206,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2683,56 +3231,67 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnMultiplicativeExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 494; - this.castOrConvertExpression(); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 501; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnMultiplicativeExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualMultiplicativeExpressionContext(new MultiplicativeExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 496; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 497; - _la = this._input.LA(1); - if (!(((((_la - 44)) & ~0x1F) === 0 && ((1 << (_la - 44)) & ((1 << (KipperParser.Star - 44)) | (1 << (KipperParser.Div - 44)) | (1 << (KipperParser.Mod - 44)) | (1 << (KipperParser.PowerTo - 44)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 498; + this.state = 494; this.castOrConvertExpression(); - } - } } - this.state = 503; + this._ctx._stop = this._input.tryLT(-1); + this.state = 501; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualMultiplicativeExpressionContext( + new MultiplicativeExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); + this.state = 496; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 497; + _la = this._input.LA(1); + if ( + !( + ((_la - 44) & ~0x1f) === 0 && + ((1 << (_la - 44)) & + ((1 << (KipperParser.Star - 44)) | + (1 << (KipperParser.Div - 44)) | + (1 << (KipperParser.Mod - 44)) | + (1 << (KipperParser.PowerTo - 44)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 498; + this.castOrConvertExpression(); + } + } + } + this.state = 503; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2740,8 +3299,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -2766,56 +3324,57 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnAdditiveExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 505; - this.multiplicativeExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 512; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnAdditiveExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualAdditiveExpressionContext(new AdditiveExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 507; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 508; - _la = this._input.LA(1); - if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 509; + this.state = 505; this.multiplicativeExpression(0); - } - } } - this.state = 514; + this._ctx._stop = this._input.tryLT(-1); + this.state = 512; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualAdditiveExpressionContext( + new AdditiveExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); + this.state = 507; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 508; + _la = this._input.LA(1); + if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 509; + this.multiplicativeExpression(0); + } + } + } + this.state = 514; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2823,8 +3382,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -2848,46 +3406,47 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseShiftExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 516; - this.additiveExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 524; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseShiftExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseShiftExpressionContext(new BitwiseShiftExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); - this.state = 518; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 519; - this.bitwiseShiftOperators(); - this.state = 520; - this.bitwiseAndExpression(0); - } - } + + this.state = 516; + this.additiveExpression(0); } - this.state = 526; + this._ctx._stop = this._input.tryLT(-1); + this.state = 524; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseShiftExpressionContext( + new BitwiseShiftExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); + this.state = 518; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 519; + this.bitwiseShiftOperators(); + this.state = 520; + this.bitwiseAndExpression(0); + } + } + } + this.state = 526; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2895,8 +3454,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -2909,21 +3467,29 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 527; - _la = this._input.LA(1); - if (!(((((_la - 67)) & ~0x1F) === 0 && ((1 << (_la - 67)) & ((1 << (KipperParser.BitwiseZeroFillLeftShift - 67)) | (1 << (KipperParser.BitwiseSignedRightShift - 67)) | (1 << (KipperParser.BitwiseZeroFillRightShift - 67)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 527; + _la = this._input.LA(1); + if ( + !( + ((_la - 67) & ~0x1f) === 0 && + ((1 << (_la - 67)) & + ((1 << (KipperParser.BitwiseZeroFillLeftShift - 67)) | + (1 << (KipperParser.BitwiseSignedRightShift - 67)) | + (1 << (KipperParser.BitwiseZeroFillRightShift - 67)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2931,8 +3497,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2957,56 +3522,67 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnRelationalExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 530; - this.bitwiseShiftExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 537; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnRelationalExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualRelationalExpressionContext(new RelationalExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 532; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 533; - _la = this._input.LA(1); - if (!(((((_la - 59)) & ~0x1F) === 0 && ((1 << (_la - 59)) & ((1 << (KipperParser.Less - 59)) | (1 << (KipperParser.LessEqual - 59)) | (1 << (KipperParser.Greater - 59)) | (1 << (KipperParser.GreaterEqual - 59)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 534; + this.state = 530; this.bitwiseShiftExpression(0); - } - } } - this.state = 539; + this._ctx._stop = this._input.tryLT(-1); + this.state = 537; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualRelationalExpressionContext( + new RelationalExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); + this.state = 532; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 533; + _la = this._input.LA(1); + if ( + !( + ((_la - 59) & ~0x1f) === 0 && + ((1 << (_la - 59)) & + ((1 << (KipperParser.Less - 59)) | + (1 << (KipperParser.LessEqual - 59)) | + (1 << (KipperParser.Greater - 59)) | + (1 << (KipperParser.GreaterEqual - 59)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 534; + this.bitwiseShiftExpression(0); + } + } + } + this.state = 539; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3014,8 +3590,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3040,56 +3615,57 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnEqualityExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 541; - this.relationalExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 548; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnEqualityExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualEqualityExpressionContext(new EqualityExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 543; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 544; - _la = this._input.LA(1); - if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 545; + this.state = 541; this.relationalExpression(0); - } - } } - this.state = 550; + this._ctx._stop = this._input.tryLT(-1); + this.state = 548; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualEqualityExpressionContext( + new EqualityExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); + this.state = 543; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 544; + _la = this._input.LA(1); + if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 545; + this.relationalExpression(0); + } + } + } + this.state = 550; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3097,8 +3673,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3122,46 +3697,47 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseAndExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 552; - this.equalityExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 559; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseAndExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseAndExpressionContext(new BitwiseAndExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 554; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 555; - this.match(KipperParser.BitwiseAnd); - this.state = 556; + + this.state = 552; this.equalityExpression(0); - } - } } - this.state = 561; + this._ctx._stop = this._input.tryLT(-1); + this.state = 559; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseAndExpressionContext( + new BitwiseAndExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); + this.state = 554; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 555; + this.match(KipperParser.BitwiseAnd); + this.state = 556; + this.equalityExpression(0); + } + } + } + this.state = 561; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3169,8 +3745,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3194,46 +3769,47 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseXorExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 563; - this.bitwiseAndExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 570; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseXorExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseXorExpressionContext(new BitwiseXorExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 565; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 566; - this.match(KipperParser.BitwiseXor); - this.state = 567; + + this.state = 563; this.bitwiseAndExpression(0); - } - } } - this.state = 572; + this._ctx._stop = this._input.tryLT(-1); + this.state = 570; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseXorExpressionContext( + new BitwiseXorExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); + this.state = 565; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 566; + this.match(KipperParser.BitwiseXor); + this.state = 567; + this.bitwiseAndExpression(0); + } + } + } + this.state = 572; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3241,8 +3817,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3266,46 +3841,47 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseOrExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 574; - this.bitwiseXorExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 581; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseOrExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseOrExpressionContext(new BitwiseOrExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 576; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 577; - this.match(KipperParser.BitwiseOr); - this.state = 578; + + this.state = 574; this.bitwiseXorExpression(0); - } - } } - this.state = 583; + this._ctx._stop = this._input.tryLT(-1); + this.state = 581; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseOrExpressionContext( + new BitwiseOrExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); + this.state = 576; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 577; + this.match(KipperParser.BitwiseOr); + this.state = 578; + this.bitwiseXorExpression(0); + } + } + } + this.state = 583; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3313,8 +3889,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3338,46 +3913,47 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalAndExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 585; - this.bitwiseOrExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 592; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnLogicalAndExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualLogicalAndExpressionContext(new LogicalAndExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 587; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 588; - this.match(KipperParser.AndAnd); - this.state = 589; + + this.state = 585; this.bitwiseOrExpression(0); - } - } } - this.state = 594; + this._ctx._stop = this._input.tryLT(-1); + this.state = 592; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalAndExpressionContext( + new LogicalAndExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); + this.state = 587; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 588; + this.match(KipperParser.AndAnd); + this.state = 589; + this.bitwiseOrExpression(0); + } + } + } + this.state = 594; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3385,8 +3961,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3410,46 +3985,47 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalOrExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 596; - this.logicalAndExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 603; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnLogicalOrExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualLogicalOrExpressionContext(new LogicalOrExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 598; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 599; - this.match(KipperParser.OrOr); - this.state = 600; + + this.state = 596; this.logicalAndExpression(0); - } - } } - this.state = 605; + this._ctx._stop = this._input.tryLT(-1); + this.state = 603; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalOrExpressionContext( + new LogicalOrExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); + this.state = 598; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 599; + this.match(KipperParser.OrOr); + this.state = 600; + this.logicalAndExpression(0); + } + } + } + this.state = 605; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3457,8 +4033,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3470,35 +4045,34 @@ export class KipperParser extends Parser { try { this.state = 613; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 53, this._ctx) ) { - case 1: - _localctx = new PassOnConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 606; - this.logicalOrExpression(0); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 53, this._ctx)) { + case 1: + _localctx = new PassOnConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 606; + this.logicalOrExpression(0); + } + break; - case 2: - _localctx = new ActualConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 607; - this.logicalOrExpression(0); - this.state = 608; - this.match(KipperParser.QuestionMark); - this.state = 609; - this.conditionalExpression(); - this.state = 610; - this.match(KipperParser.Colon); - this.state = 611; - this.conditionalExpression(); - } - break; + case 2: + _localctx = new ActualConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 607; + this.logicalOrExpression(0); + this.state = 608; + this.match(KipperParser.QuestionMark); + this.state = 609; + this.conditionalExpression(); + this.state = 610; + this.match(KipperParser.Colon); + this.state = 611; + this.conditionalExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3506,8 +4080,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3519,31 +4092,30 @@ export class KipperParser extends Parser { try { this.state = 620; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 54, this._ctx) ) { - case 1: - _localctx = new PassOnAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 615; - this.conditionalExpression(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 54, this._ctx)) { + case 1: + _localctx = new PassOnAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 615; + this.conditionalExpression(); + } + break; - case 2: - _localctx = new ActualAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 616; - this.computedPrimaryExpression(0); - this.state = 617; - this.assignmentOperator(); - this.state = 618; - this.assignmentExpression(); - } - break; + case 2: + _localctx = new ActualAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 616; + this.computedPrimaryExpression(0); + this.state = 617; + this.assignmentOperator(); + this.state = 618; + this.assignmentExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3551,8 +4123,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3565,21 +4136,32 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 622; - _la = this._input.LA(1); - if (!(((((_la - 51)) & ~0x1F) === 0 && ((1 << (_la - 51)) & ((1 << (KipperParser.Assign - 51)) | (1 << (KipperParser.PlusAssign - 51)) | (1 << (KipperParser.MinusAssign - 51)) | (1 << (KipperParser.StarAssign - 51)) | (1 << (KipperParser.DivAssign - 51)) | (1 << (KipperParser.ModAssign - 51)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 622; + _la = this._input.LA(1); + if ( + !( + ((_la - 51) & ~0x1f) === 0 && + ((1 << (_la - 51)) & + ((1 << (KipperParser.Assign - 51)) | + (1 << (KipperParser.PlusAssign - 51)) | + (1 << (KipperParser.MinusAssign - 51)) | + (1 << (KipperParser.StarAssign - 51)) | + (1 << (KipperParser.DivAssign - 51)) | + (1 << (KipperParser.ModAssign - 51)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3587,8 +4169,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3601,29 +4182,28 @@ export class KipperParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 624; - this.assignmentExpression(); - this.state = 629; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 55, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 625; - this.match(KipperParser.Comma); - this.state = 626; - this.assignmentExpression(); - } - } - } - this.state = 631; + this.state = 624; + this.assignmentExpression(); + this.state = 629; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 55, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 625; + this.match(KipperParser.Comma); + this.state = 626; + this.assignmentExpression(); + } + } + } + this.state = 631; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 55, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3631,8 +4211,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3644,33 +4223,32 @@ export class KipperParser extends Parser { try { this.state = 635; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 56, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 632; - this.identifierTypeSpecifierExpression(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 56, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 632; + this.identifierTypeSpecifierExpression(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 633; - this.genericTypeSpecifierExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 633; + this.genericTypeSpecifierExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 634; - this.typeofTypeSpecifierExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 634; + this.typeofTypeSpecifierExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3678,24 +4256,25 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext { - let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext(this._ctx, this.state); + let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 138, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 637; - this.typeSpecifierIdentifier(); + this.state = 637; + this.typeSpecifierIdentifier(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3703,30 +4282,31 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public genericTypeSpecifierExpression(): GenericTypeSpecifierExpressionContext { - let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext(this._ctx, this.state); + let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 140, KipperParser.RULE_genericTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 639; - this.typeSpecifierIdentifier(); - this.state = 640; - this.match(KipperParser.Less); - this.state = 641; - this.typeSpecifierIdentifier(); - this.state = 642; - this.match(KipperParser.Greater); - } - } - catch (re) { + this.state = 639; + this.typeSpecifierIdentifier(); + this.state = 640; + this.match(KipperParser.Less); + this.state = 641; + this.typeSpecifierIdentifier(); + this.state = 642; + this.match(KipperParser.Greater); + } + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3734,30 +4314,31 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public typeofTypeSpecifierExpression(): TypeofTypeSpecifierExpressionContext { - let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext(this._ctx, this.state); + let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 142, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 644; - this.match(KipperParser.Typeof); - this.state = 645; - this.match(KipperParser.LeftParen); - this.state = 646; - this.typeSpecifierIdentifier(); - this.state = 647; - this.match(KipperParser.RightParen); + this.state = 644; + this.match(KipperParser.Typeof); + this.state = 645; + this.match(KipperParser.LeftParen); + this.state = 646; + this.typeSpecifierIdentifier(); + this.state = 647; + this.match(KipperParser.RightParen); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3765,8 +4346,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3779,21 +4359,27 @@ export class KipperParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 649; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== 0) || _la === KipperParser.Identifier)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 649; + _la = this._input.LA(1); + if ( + !( + ((_la & ~0x1f) === 0 && + ((1 << _la) & ((1 << KipperParser.Void) | (1 << KipperParser.Null) | (1 << KipperParser.Undefined))) !== + 0) || + _la === KipperParser.Identifier + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3801,8 +4387,7 @@ export class KipperParser extends Parser { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3810,124 +4395,124 @@ export class KipperParser extends Parser { public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 40: - return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); + case 40: + return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); - case 53: - return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); + case 53: + return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); - case 54: - return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); + case 54: + return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); - case 55: - return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); + case 55: + return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); - case 57: - return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); + case 57: + return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); - case 58: - return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); + case 58: + return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); - case 59: - return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); + case 59: + return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); - case 60: - return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); + case 60: + return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); - case 61: - return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); + case 61: + return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); - case 62: - return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + case 62: + return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); - case 63: - return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); + case 63: + return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; } private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.precpred(this._ctx, 5); + case 0: + return this.precpred(this._ctx, 5); - case 1: - return this.precpred(this._ctx, 3); + case 1: + return this.precpred(this._ctx, 3); - case 2: - return this.precpred(this._ctx, 2); + case 2: + return this.precpred(this._ctx, 2); - case 3: - return this.precpred(this._ctx, 1); + case 3: + return this.precpred(this._ctx, 1); } return true; } private multiplicativeExpression_sempred(_localctx: MultiplicativeExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 4: - return this.precpred(this._ctx, 1); + case 4: + return this.precpred(this._ctx, 1); } return true; } private additiveExpression_sempred(_localctx: AdditiveExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 5: - return this.precpred(this._ctx, 1); + case 5: + return this.precpred(this._ctx, 1); } return true; } private bitwiseShiftExpression_sempred(_localctx: BitwiseShiftExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 6: - return this.precpred(this._ctx, 1); + case 6: + return this.precpred(this._ctx, 1); } return true; } private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 7: - return this.precpred(this._ctx, 1); + case 7: + return this.precpred(this._ctx, 1); } return true; } private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 8: - return this.precpred(this._ctx, 1); + case 8: + return this.precpred(this._ctx, 1); } return true; } private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 9: - return this.precpred(this._ctx, 1); + case 9: + return this.precpred(this._ctx, 1); } return true; } private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 10: - return this.precpred(this._ctx, 1); + case 10: + return this.precpred(this._ctx, 1); } return true; } private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 11: - return this.precpred(this._ctx, 1); + case 11: + return this.precpred(this._ctx, 1); } return true; } private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 12: - return this.precpred(this._ctx, 1); + case 12: + return this.precpred(this._ctx, 1); } return true; } private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 13: - return this.precpred(this._ctx, 1); + case 13: + return this.precpred(this._ctx, 1); } return true; } @@ -3940,8 +4525,8 @@ export class KipperParser extends Parser { "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + "\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C\x04" + - "\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04#" + - "\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + + '\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04"\t"\x04#' + + "\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + "\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x044" + "\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + @@ -3967,11 +4552,11 @@ export class KipperParser extends Parser { "\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03" + "\x1C\x03\x1D\x03\x1D\x05\x1D\u0144\n\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E" + "\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u0150\n\x1E\x03" + - "\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03\"\x03\"\x03#\x03" + + '\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03"\x03"\x03#\x03' + "#\x03$\x03$\x07$\u0160\n$\f$\x0E$\u0163\v$\x03$\x03$\x03$\x07$\u0168\n" + "$\f$\x0E$\u016B\v$\x03$\x05$\u016E\n$\x03%\x03%\x03%\x05%\u0173\n%\x03" + - "%\x05%\u0176\n%\x03&\x03&\x03&\x05&\u017B\n&\x03&\x05&\u017E\n&\x03\'" + - "\x03\'\x03(\x03(\x03(\x03(\x07(\u0186\n(\f(\x0E(\u0189\v(\x05(\u018B\n" + + "%\x05%\u0176\n%\x03&\x03&\x03&\x05&\u017B\n&\x03&\x05&\u017E\n&\x03'" + + "\x03'\x03(\x03(\x03(\x03(\x07(\u0186\n(\f(\x0E(\u0189\v(\x05(\u018B\n" + "(\x03(\x03(\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x05*\u0197\n*\x03" + "*\x03*\x03*\x05*\u019C\n*\x03*\x03*\x03*\x05*\u01A1\n*\x03*\x03*\x03*" + "\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x07*\u01B1\n*" + @@ -3994,7 +4579,7 @@ export class KipperParser extends Parser { "\nF\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03J\x03" + "J\x03J\x02\x02\rRlnptvxz|~\x80K\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f" + "\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E" + - "\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02" + + '\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02' + ":\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02" + "V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02" + "r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88" + @@ -4006,7 +4591,7 @@ export class KipperParser extends Parser { "\x02\x02\x02\f\xB1\x03\x02\x02\x02\x0E\xB3\x03\x02\x02\x02\x10\xBF\x03" + "\x02\x02\x02\x12\xC2\x03\x02\x02\x02\x14\xC4\x03\x02\x02\x02\x16\xC6\x03" + "\x02\x02\x02\x18\xC8\x03\x02\x02\x02\x1A\xCF\x03\x02\x02\x02\x1C\xD7\x03" + - "\x02\x02\x02\x1E\xDB\x03\x02\x02\x02 \xE3\x03\x02\x02\x02\"\xE5\x03\x02" + + '\x02\x02\x02\x1E\xDB\x03\x02\x02\x02 \xE3\x03\x02\x02\x02"\xE5\x03\x02' + "\x02\x02$\xEB\x03\x02\x02\x02&\xF0\x03\x02\x02\x02(\xF2\x03\x02\x02\x02" + "*\xFB\x03\x02\x02\x02,\u0110\x03\x02\x02\x02.\u0115\x03\x02\x02\x020\u0117" + "\x03\x02\x02\x022\u0130\x03\x02\x02\x024\u0136\x03\x02\x02\x026\u013E" + @@ -4041,19 +4626,19 @@ export class KipperParser extends Parser { "\x02\xB2\r\x03\x02\x02\x02\xB3\xB4\x07\x15\x02\x02\xB4\xB5\x05\x14\v\x02" + "\xB5\xB7\x07#\x02\x02\xB6\xB8\x05\x1A\x0E\x02\xB7\xB6\x03\x02\x02\x02" + "\xB7\xB8\x03\x02\x02\x02\xB8\xB9\x03\x02\x02\x02\xB9\xBA\x07$\x02\x02" + - "\xBA\xBB\x07\x18\x02\x02\xBB\xBD\x05\x8AF\x02\xBC\xBE\x05\"\x12\x02\xBD" + + '\xBA\xBB\x07\x18\x02\x02\xBB\xBD\x05\x8AF\x02\xBC\xBE\x05"\x12\x02\xBD' + "\xBC\x03\x02\x02\x02\xBD\xBE\x03\x02\x02\x02\xBE\x0F\x03\x02\x02\x02\xBF" + "\xC0\x05\x12\n\x02\xC0\xC1\x05\x18\r\x02\xC1\x11\x03\x02\x02\x02\xC2\xC3" + "\t\x02\x02\x02\xC3\x13\x03\x02\x02\x02\xC4\xC5\x05\x16\f\x02\xC5\x15\x03" + "\x02\x02\x02\xC6\xC7\x07I\x02\x02\xC7\x17\x03\x02\x02\x02\xC8\xC9\x05" + - "\x14\v\x02\xC9\xCA\x07\"\x02\x02\xCA\xCD\x05\x8AF\x02\xCB\xCC\x075\x02" + + '\x14\v\x02\xC9\xCA\x07"\x02\x02\xCA\xCD\x05\x8AF\x02\xCB\xCC\x075\x02' + "\x02\xCC\xCE\x05\x1E\x10\x02\xCD\xCB\x03\x02\x02\x02\xCD\xCE\x03\x02\x02" + "\x02\xCE\x19\x03\x02\x02\x02\xCF\xD4\x05\x1C\x0F\x02\xD0\xD1\x07\x1F\x02" + "\x02\xD1\xD3\x05\x1C\x0F\x02\xD2\xD0\x03\x02\x02\x02\xD3\xD6\x03\x02\x02" + "\x02\xD4\xD2\x03\x02\x02\x02\xD4\xD5\x03\x02\x02\x02\xD5\x1B\x03\x02\x02" + - "\x02\xD6\xD4\x03\x02\x02\x02\xD7\xD8\x05\x14\v\x02\xD8\xD9\x07\"\x02\x02" + + '\x02\xD6\xD4\x03\x02\x02\x02\xD7\xD8\x05\x14\v\x02\xD8\xD9\x07"\x02\x02' + "\xD9\xDA\x05\x8AF\x02\xDA\x1D\x03\x02\x02\x02\xDB\xDC\x05\x84C\x02\xDC" + - "\x1F\x03\x02\x02\x02\xDD\xE4\x05\"\x12\x02\xDE\xE4\x05$\x13\x02\xDF\xE4" + + '\x1F\x03\x02\x02\x02\xDD\xE4\x05"\x12\x02\xDE\xE4\x05$\x13\x02\xDF\xE4' + "\x05&\x14\x02\xE0\xE4\x05.\x18\x02\xE1\xE4\x056\x1C\x02\xE2\xE4\x058\x1D" + "\x02\xE3\xDD\x03\x02\x02\x02\xE3\xDE\x03\x02\x02\x02\xE3\xDF\x03\x02\x02" + "\x02\xE3\xE0\x03\x02\x02\x02\xE3\xE1\x03\x02\x02\x02\xE3\xE2\x03\x02\x02" + @@ -4061,7 +4646,7 @@ export class KipperParser extends Parser { "\xE6\x03\x02\x02\x02\xE7\xE8\x03\x02\x02\x02\xE8\xE9\x03\x02\x02\x02\xE9" + "\xEA\x07)\x02\x02\xEA#\x03\x02\x02\x02\xEB\xEC\x05\x88E\x02\xEC\xED\x07" + " \x02\x02\xED%\x03\x02\x02\x02\xEE\xF1\x05(\x15\x02\xEF\xF1\x05*\x16\x02" + - "\xF0\xEE\x03\x02\x02\x02\xF0\xEF\x03\x02\x02\x02\xF1\'\x03\x02\x02\x02" + + "\xF0\xEE\x03\x02\x02\x02\xF0\xEF\x03\x02\x02\x02\xF1'\x03\x02\x02\x02" + "\xF2\xF3\x07\x11\x02\x02\xF3\xF4\x07#\x02\x02\xF4\xF5\x05\x88E\x02\xF5" + "\xF6\x07$\x02\x02\xF6\xF9\x05 \x11\x02\xF7\xF8\x07\x12\x02\x02\xF8\xFA" + "\x05 \x11\x02\xF9\xF7\x03\x02\x02\x02\xF9\xFA\x03\x02\x02\x02\xFA)\x03" + @@ -4071,8 +4656,8 @@ export class KipperParser extends Parser { "\x03\x02\x02\x02\u0103\u0104\x03\x02\x02\x02\u0104\u0106\x03\x02\x02\x02" + "\u0105\u0103\x03\x02\x02\x02\u0106\u0107\x07)\x02\x02\u0107+\x03\x02\x02" + "\x02\u0108\u0109\x07\v\x02\x02\u0109\u010A\x05\x88E\x02\u010A\u010B\x07" + - "\"\x02\x02\u010B\u010C\x05 \x11\x02\u010C\u0111\x03\x02\x02\x02\u010D" + - "\u010E\x07\f\x02\x02\u010E\u010F\x07\"\x02\x02\u010F\u0111\x05 \x11\x02" + + '"\x02\x02\u010B\u010C\x05 \x11\x02\u010C\u0111\x03\x02\x02\x02\u010D' + + '\u010E\x07\f\x02\x02\u010E\u010F\x07"\x02\x02\u010F\u0111\x05 \x11\x02' + "\u0110\u0108\x03\x02\x02\x02\u0110\u010D\x03\x02\x02\x02\u0111-\x03\x02" + "\x02\x02\u0112\u0116\x050\x19\x02\u0113\u0116\x052\x1A\x02\u0114\u0116" + "\x054\x1B\x02\u0115\u0112\x03\x02\x02\x02\u0115\u0113\x03\x02\x02\x02" + @@ -4098,13 +4683,13 @@ export class KipperParser extends Parser { "\x02\x02\x02\u0144\u0145\x03\x02\x02\x02\u0145\u0146\x07 \x02\x02\u0146" + "9\x03\x02\x02\x02\u0147\u0150\x05<\x1F\x02\u0148\u0150\x05> \x02\u0149" + "\u0150\x05@!\x02\u014A\u0150\x05D#\x02\u014B\u0150\x05F$\x02\u014C\u0150" + - "\x05L\'\x02\u014D\u0150\x05N(\x02\u014E\u0150\x05P)\x02\u014F\u0147\x03" + + "\x05L'\x02\u014D\u0150\x05N(\x02\u014E\u0150\x05P)\x02\u014F\u0147\x03" + "\x02\x02\x02\u014F\u0148\x03\x02\x02\x02\u014F\u0149\x03\x02\x02\x02\u014F" + "\u014A\x03\x02\x02\x02\u014F\u014B\x03\x02\x02\x02\u014F\u014C\x03\x02" + "\x02\x02\u014F\u014D\x03\x02\x02\x02\u014F\u014E\x03\x02\x02\x02\u0150" + ";\x03\x02\x02\x02\u0151\u0152\x07#\x02\x02\u0152\u0153\x05\x88E\x02\u0153" + "\u0154\x07$\x02\x02\u0154=\x03\x02\x02\x02\u0155\u0156\t\x04\x02\x02\u0156" + - "?\x03\x02\x02\x02\u0157\u0158\x05B\"\x02\u0158A\x03\x02\x02\x02\u0159" + + '?\x03\x02\x02\x02\u0157\u0158\x05B"\x02\u0158A\x03\x02\x02\x02\u0159' + "\u015A\x07I\x02\x02\u015AC\x03\x02\x02\x02\u015B\u015C\t\x05\x02\x02\u015C" + "E\x03\x02\x02\x02\u015D\u0161\x07P\x02\x02\u015E\u0160\x05H%\x02\u015F" + "\u015E\x03\x02\x02\x02\u0160\u0163\x03\x02\x02\x02\u0161\u015F\x03\x02" + @@ -4116,11 +4701,11 @@ export class KipperParser extends Parser { "\x02\u016D\u015D\x03\x02\x02\x02\u016D\u0165\x03\x02\x02\x02\u016EG\x03" + "\x02\x02\x02\u016F\u0176\x07S\x02\x02\u0170\u0172\x07\x03\x02\x02\u0171" + "\u0173\x05\x88E\x02\u0172\u0171\x03\x02\x02\x02\u0172\u0173\x03\x02\x02" + - "\x02\u0173\u0174\x03\x02\x02\x02\u0174\u0176\x07\'\x02\x02\u0175\u016F" + + "\x02\u0173\u0174\x03\x02\x02\x02\u0174\u0176\x07'\x02\x02\u0175\u016F" + "\x03\x02\x02\x02\u0175\u0170\x03\x02\x02\x02\u0176I\x03\x02\x02\x02\u0177" + "\u017E\x07U\x02\x02\u0178\u017A\x07\x03\x02\x02\u0179\u017B\x05\x88E\x02" + "\u017A\u0179\x03\x02\x02\x02\u017A\u017B\x03\x02\x02\x02\u017B\u017C\x03" + - "\x02\x02\x02\u017C\u017E\x07\'\x02\x02\u017D\u0177\x03\x02\x02\x02\u017D" + + "\x02\x02\x02\u017C\u017E\x07'\x02\x02\u017D\u0177\x03\x02\x02\x02\u017D" + "\u0178\x03\x02\x02\x02\u017EK\x03\x02\x02\x02\u017F\u0180\t\x06\x02\x02" + "\u0180M\x03\x02\x02\x02\u0181\u018A\x07%\x02\x02\u0182\u0187\x05\x88E" + "\x02\u0183\u0184\x07\x1F\x02\x02\u0184\u0186\x05\x88E\x02\u0185\u0183" + @@ -4148,12 +4733,12 @@ export class KipperParser extends Parser { "\u01B6\u01B7\x07\x1F\x02\x02\u01B7\u01B9\x05\x84C\x02\u01B8\u01B6\x03" + "\x02\x02\x02\u01B9\u01BC\x03\x02\x02\x02\u01BA\u01B8\x03\x02\x02\x02\u01BA" + "\u01BB\x03\x02\x02\x02\u01BBU\x03\x02\x02\x02\u01BC\u01BA\x03\x02\x02" + - "\x02\u01BD\u01BE\x07H\x02\x02\u01BE\u01BF\x05B\"\x02\u01BFW\x03\x02\x02" + + '\x02\u01BD\u01BE\x07H\x02\x02\u01BE\u01BF\x05B"\x02\u01BFW\x03\x02\x02' + "\x02\u01C0\u01C1\x07%\x02\x02\u01C1\u01C2\x05\x88E\x02\u01C2\u01C3\x07" + "&\x02\x02\u01C3Y\x03\x02\x02\x02\u01C4\u01C8\x07%\x02\x02\u01C5\u01C6" + "\x05\x88E\x02\u01C6\u01C7\b.\x01\x02\u01C7\u01C9\x03\x02\x02\x02\u01C8" + "\u01C5\x03\x02\x02\x02\u01C8\u01C9\x03\x02\x02\x02\u01C9\u01CA\x03\x02" + - "\x02\x02\u01CA\u01CE\x07\"\x02\x02\u01CB\u01CC\x05\x88E\x02\u01CC\u01CD" + + '\x02\x02\u01CA\u01CE\x07"\x02\x02\u01CB\u01CC\x05\x88E\x02\u01CC\u01CD' + "\b.\x01\x02\u01CD\u01CF\x03\x02\x02\x02\u01CE\u01CB\x03\x02\x02\x02\u01CE" + "\u01CF\x03\x02\x02\x02\u01CF\u01D0\x03\x02\x02\x02\u01D0\u01D1\x07&\x02" + "\x02\u01D1[\x03\x02\x02\x02\u01D2\u01D5\x05R*\x02\u01D3\u01D5\x05^0\x02" + @@ -4214,7 +4799,7 @@ export class KipperParser extends Parser { "\u0258\x03\x02\x02\x02\u025C\u025F\x03\x02\x02\x02\u025D\u025B\x03\x02" + "\x02\x02\u025D\u025E\x03\x02\x02\x02\u025E\x81\x03\x02\x02\x02\u025F\u025D" + "\x03\x02\x02\x02\u0260\u0268\x05\x80A\x02\u0261\u0262\x05\x80A\x02\u0262" + - "\u0263\x07!\x02\x02\u0263\u0264\x05\x82B\x02\u0264\u0265\x07\"\x02\x02" + + '\u0263\x07!\x02\x02\u0263\u0264\x05\x82B\x02\u0264\u0265\x07"\x02\x02' + "\u0265\u0266\x05\x82B\x02\u0266\u0268\x03\x02\x02\x02\u0267\u0260\x03" + "\x02\x02\x02\u0267\u0261\x03\x02\x02\x02\u0268\x83\x03\x02\x02\x02\u0269" + "\u026F\x05\x82B\x02\u026A\u026B\x05R*\x02\u026B\u026C\x05\x86D\x02\u026C" + @@ -4237,10 +4822,7 @@ export class KipperParser extends Parser { "\u019B\u01A0\u01B0\u01B2\u01BA\u01C8\u01CE\u01D4\u01DC\u01ED\u01F7\u0202" + "\u020E\u021B\u0226\u0231\u023C\u0247\u0252\u025D\u0267\u026E\u0277\u027D"; public static readonly _serializedATN: string = Utils.join( - [ - KipperParser._serializedATNSegment0, - KipperParser._serializedATNSegment1, - ], + [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", ); public static __ATN: ATN; @@ -4251,11 +4833,12 @@ export class KipperParser extends Parser { return KipperParser.__ATN; } - } export class CompilationUnitContext extends KipperParserRuleContext { - public EOF(): TerminalNode { return this.getToken(KipperParser.EOF, 0); } + public EOF(): TerminalNode { + return this.getToken(KipperParser.EOF, 0); + } public translationUnit(): TranslationUnitContext | undefined { return this.tryGetRuleContext(0, TranslationUnitContext); } @@ -4263,7 +4846,9 @@ export class CompilationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_compilationUnit; } + public get ruleIndex(): number { + return KipperParser.RULE_compilationUnit; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompilationUnit) { @@ -4286,7 +4871,6 @@ export class CompilationUnitContext extends KipperParserRuleContext { } } - export class TranslationUnitContext extends KipperParserRuleContext { public externalItem(): ExternalItemContext[]; public externalItem(i: number): ExternalItemContext; @@ -4301,7 +4885,9 @@ export class TranslationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_translationUnit; } + public get ruleIndex(): number { + return KipperParser.RULE_translationUnit; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTranslationUnit) { @@ -4324,13 +4910,14 @@ export class TranslationUnitContext extends KipperParserRuleContext { } } - export class ExternalItemContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_externalItem; } + public get ruleIndex(): number { + return KipperParser.RULE_externalItem; + } public copyFrom(ctx: ExternalItemContext): void { super.copyFrom(ctx); } @@ -4365,7 +4952,6 @@ export class ExternalBlockItemContext extends ExternalItemContext { } } - export class BlockItemListContext extends KipperParserRuleContext { public blockItem(): BlockItemContext[]; public blockItem(i: number): BlockItemContext; @@ -4380,7 +4966,9 @@ export class BlockItemListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_blockItemList; } + public get ruleIndex(): number { + return KipperParser.RULE_blockItemList; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItemList) { @@ -4403,7 +4991,6 @@ export class BlockItemListContext extends KipperParserRuleContext { } } - export class BlockItemContext extends KipperParserRuleContext { public statement(): StatementContext | undefined { return this.tryGetRuleContext(0, StatementContext); @@ -4411,12 +4998,16 @@ export class BlockItemContext extends KipperParserRuleContext { public declaration(): DeclarationContext | undefined { return this.tryGetRuleContext(0, DeclarationContext); } - public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.SemiColon, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_blockItem; } + public get ruleIndex(): number { + return KipperParser.RULE_blockItem; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItem) { @@ -4439,12 +5030,13 @@ export class BlockItemContext extends KipperParserRuleContext { } } - export class DeclarationContext extends KipperParserRuleContext { public variableDeclaration(): VariableDeclarationContext | undefined { return this.tryGetRuleContext(0, VariableDeclarationContext); } - public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.SemiColon, 0); + } public functionDeclaration(): FunctionDeclarationContext | undefined { return this.tryGetRuleContext(0, FunctionDeclarationContext); } @@ -4452,7 +5044,9 @@ export class DeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_declaration; } + public get ruleIndex(): number { + return KipperParser.RULE_declaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclaration) { @@ -4475,15 +5069,22 @@ export class DeclarationContext extends KipperParserRuleContext { } } - export class FunctionDeclarationContext extends KipperParserRuleContext { - public DefFunc(): TerminalNode { return this.getToken(KipperParser.DefFunc, 0); } + public DefFunc(): TerminalNode { + return this.getToken(KipperParser.DefFunc, 0); + } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public RetIndicator(): TerminalNode { return this.getToken(KipperParser.RetIndicator, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public RetIndicator(): TerminalNode { + return this.getToken(KipperParser.RetIndicator, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -4497,7 +5098,9 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_functionDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_functionDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFunctionDeclaration) { @@ -4520,7 +5123,6 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { } } - export class VariableDeclarationContext extends KipperParserRuleContext { public storageTypeSpecifier(): StorageTypeSpecifierContext { return this.getRuleContext(0, StorageTypeSpecifierContext); @@ -4532,7 +5134,9 @@ export class VariableDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_variableDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_variableDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterVariableDeclaration) { @@ -4555,15 +5159,20 @@ export class VariableDeclarationContext extends KipperParserRuleContext { } } - export class StorageTypeSpecifierContext extends KipperParserRuleContext { - public Var(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Var, 0); } - public Const(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Const, 0); } + public Var(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Var, 0); + } + public Const(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Const, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_storageTypeSpecifier; } + public get ruleIndex(): number { + return KipperParser.RULE_storageTypeSpecifier; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStorageTypeSpecifier) { @@ -4586,7 +5195,6 @@ export class StorageTypeSpecifierContext extends KipperParserRuleContext { } } - export class DeclaratorContext extends KipperParserRuleContext { public directDeclarator(): DirectDeclaratorContext { return this.getRuleContext(0, DirectDeclaratorContext); @@ -4595,7 +5203,9 @@ export class DeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_declarator; } + public get ruleIndex(): number { + return KipperParser.RULE_declarator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclarator) { @@ -4618,14 +5228,17 @@ export class DeclaratorContext extends KipperParserRuleContext { } } - export class DirectDeclaratorContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } + public Identifier(): TerminalNode { + return this.getToken(KipperParser.Identifier, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_directDeclarator; } + public get ruleIndex(): number { + return KipperParser.RULE_directDeclarator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDirectDeclarator) { @@ -4648,16 +5261,19 @@ export class DirectDeclaratorContext extends KipperParserRuleContext { } } - export class InitDeclaratorContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } + public Assign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Assign, 0); + } public initializer(): InitializerContext | undefined { return this.tryGetRuleContext(0, InitializerContext); } @@ -4665,7 +5281,9 @@ export class InitDeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_initDeclarator; } + public get ruleIndex(): number { + return KipperParser.RULE_initDeclarator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitDeclarator) { @@ -4688,7 +5306,6 @@ export class InitDeclaratorContext extends KipperParserRuleContext { } } - export class ParameterListContext extends KipperParserRuleContext { public parameterDeclaration(): ParameterDeclarationContext[]; public parameterDeclaration(i: number): ParameterDeclarationContext; @@ -4712,7 +5329,9 @@ export class ParameterListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_parameterList; } + public get ruleIndex(): number { + return KipperParser.RULE_parameterList; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterList) { @@ -4735,12 +5354,13 @@ export class ParameterListContext extends KipperParserRuleContext { } } - export class ParameterDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -4748,7 +5368,9 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_parameterDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_parameterDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterDeclaration) { @@ -4771,7 +5393,6 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { } } - export class InitializerContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext { return this.getRuleContext(0, AssignmentExpressionContext); @@ -4780,7 +5401,9 @@ export class InitializerContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_initializer; } + public get ruleIndex(): number { + return KipperParser.RULE_initializer; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitializer) { @@ -4803,7 +5426,6 @@ export class InitializerContext extends KipperParserRuleContext { } } - export class StatementContext extends KipperParserRuleContext { public compoundStatement(): CompoundStatementContext | undefined { return this.tryGetRuleContext(0, CompoundStatementContext); @@ -4827,7 +5449,9 @@ export class StatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_statement; } + public get ruleIndex(): number { + return KipperParser.RULE_statement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStatement) { @@ -4850,10 +5474,13 @@ export class StatementContext extends KipperParserRuleContext { } } - export class CompoundStatementContext extends KipperParserRuleContext { - public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } - public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } public blockItemList(): BlockItemListContext | undefined { return this.tryGetRuleContext(0, BlockItemListContext); } @@ -4861,7 +5488,9 @@ export class CompoundStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_compoundStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_compoundStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompoundStatement) { @@ -4884,17 +5513,20 @@ export class CompoundStatementContext extends KipperParserRuleContext { } } - export class ExpressionStatementContext extends KipperParserRuleContext { public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_expressionStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_expressionStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpressionStatement) { @@ -4917,7 +5549,6 @@ export class ExpressionStatementContext extends KipperParserRuleContext { } } - export class SelectionStatementContext extends KipperParserRuleContext { public ifStatement(): IfStatementContext | undefined { return this.tryGetRuleContext(0, IfStatementContext); @@ -4929,7 +5560,9 @@ export class SelectionStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_selectionStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_selectionStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSelectionStatement) { @@ -4952,14 +5585,19 @@ export class SelectionStatementContext extends KipperParserRuleContext { } } - export class IfStatementContext extends KipperParserRuleContext { - public If(): TerminalNode { return this.getToken(KipperParser.If, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public If(): TerminalNode { + return this.getToken(KipperParser.If, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public statement(): StatementContext[]; public statement(i: number): StatementContext; public statement(i?: number): StatementContext | StatementContext[] { @@ -4969,12 +5607,16 @@ export class IfStatementContext extends KipperParserRuleContext { return this.getRuleContext(i, StatementContext); } } - public Else(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Else, 0); } + public Else(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Else, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_ifStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_ifStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIfStatement) { @@ -4997,16 +5639,25 @@ export class IfStatementContext extends KipperParserRuleContext { } } - export class SwitchStatementContext extends KipperParserRuleContext { - public Switch(): TerminalNode { return this.getToken(KipperParser.Switch, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public Switch(): TerminalNode { + return this.getToken(KipperParser.Switch, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } - public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } public switchLabeledStatement(): SwitchLabeledStatementContext[]; public switchLabeledStatement(i: number): SwitchLabeledStatementContext; public switchLabeledStatement(i?: number): SwitchLabeledStatementContext | SwitchLabeledStatementContext[] { @@ -5020,7 +5671,9 @@ export class SwitchStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_switchStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_switchStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchStatement) { @@ -5043,22 +5696,29 @@ export class SwitchStatementContext extends KipperParserRuleContext { } } - export class SwitchLabeledStatementContext extends KipperParserRuleContext { - public Case(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Case, 0); } + public Case(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Case, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public Default(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Default, 0); } + public Default(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Default, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_switchLabeledStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_switchLabeledStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchLabeledStatement) { @@ -5081,7 +5741,6 @@ export class SwitchLabeledStatementContext extends KipperParserRuleContext { } } - export class IterationStatementContext extends KipperParserRuleContext { public forLoopIterationStatement(): ForLoopIterationStatementContext | undefined { return this.tryGetRuleContext(0, ForLoopIterationStatementContext); @@ -5096,7 +5755,9 @@ export class IterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_iterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_iterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIterationStatement) { @@ -5119,13 +5780,16 @@ export class IterationStatementContext extends KipperParserRuleContext { } } - export class ForLoopIterationStatementContext extends KipperParserRuleContext { public _forDeclaration: boolean = false; public _forCondition: boolean = false; public _forIterationExp: boolean = false; - public For(): TerminalNode { return this.getToken(KipperParser.For, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public For(): TerminalNode { + return this.getToken(KipperParser.For, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public SemiColon(): TerminalNode[]; public SemiColon(i: number): TerminalNode; public SemiColon(i?: number): TerminalNode | TerminalNode[] { @@ -5135,7 +5799,9 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { return this.getToken(KipperParser.SemiColon, i); } } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -5155,7 +5821,9 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_forLoopIterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_forLoopIterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterForLoopIterationStatement) { @@ -5178,14 +5846,19 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { } } - export class WhileLoopIterationStatementContext extends KipperParserRuleContext { - public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public While(): TerminalNode { + return this.getToken(KipperParser.While, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -5193,7 +5866,9 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_whileLoopIterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_whileLoopIterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterWhileLoopIterationStatement) { @@ -5216,24 +5891,35 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext } } - export class DoWhileLoopIterationStatementContext extends KipperParserRuleContext { - public Do(): TerminalNode { return this.getToken(KipperParser.Do, 0); } + public Do(): TerminalNode { + return this.getToken(KipperParser.Do, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public While(): TerminalNode { + return this.getToken(KipperParser.While, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_doWhileLoopIterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_doWhileLoopIterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDoWhileLoopIterationStatement) { @@ -5256,16 +5942,23 @@ export class DoWhileLoopIterationStatementContext extends KipperParserRuleContex } } - export class JumpStatementContext extends KipperParserRuleContext { - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } - public Continue(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Continue, 0); } - public Break(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Break, 0); } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } + public Continue(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Continue, 0); + } + public Break(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Break, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_jumpStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_jumpStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterJumpStatement) { @@ -5288,10 +5981,13 @@ export class JumpStatementContext extends KipperParserRuleContext { } } - export class ReturnStatementContext extends KipperParserRuleContext { - public Return(): TerminalNode { return this.getToken(KipperParser.Return, 0); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public Return(): TerminalNode { + return this.getToken(KipperParser.Return, 0); + } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -5299,7 +5995,9 @@ export class ReturnStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_returnStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_returnStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterReturnStatement) { @@ -5322,7 +6020,6 @@ export class ReturnStatementContext extends KipperParserRuleContext { } } - export class PrimaryExpressionContext extends KipperParserRuleContext { public tangledPrimaryExpression(): TangledPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, TangledPrimaryExpressionContext); @@ -5352,7 +6049,9 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_primaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_primaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterPrimaryExpression) { @@ -5375,18 +6074,23 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { } } - export class TangledPrimaryExpressionContext extends KipperParserRuleContext { - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_tangledPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_tangledPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTangledPrimaryExpression) { @@ -5409,15 +6113,20 @@ export class TangledPrimaryExpressionContext extends KipperParserRuleContext { } } - export class BoolPrimaryExpressionContext extends KipperParserRuleContext { - public True(): TerminalNode | undefined { return this.tryGetToken(KipperParser.True, 0); } - public False(): TerminalNode | undefined { return this.tryGetToken(KipperParser.False, 0); } + public True(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.True, 0); + } + public False(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.False, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_boolPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_boolPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBoolPrimaryExpression) { @@ -5440,7 +6149,6 @@ export class BoolPrimaryExpressionContext extends KipperParserRuleContext { } } - export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext { public identifier(): IdentifierContext { return this.getRuleContext(0, IdentifierContext); @@ -5449,7 +6157,9 @@ export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_identifierPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_identifierPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierPrimaryExpression) { @@ -5472,14 +6182,17 @@ export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext } } - export class IdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } + public Identifier(): TerminalNode { + return this.getToken(KipperParser.Identifier, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_identifier; } + public get ruleIndex(): number { + return KipperParser.RULE_identifier; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifier) { @@ -5502,15 +6215,20 @@ export class IdentifierContext extends KipperParserRuleContext { } } - export class StringPrimaryExpressionContext extends KipperParserRuleContext { - public SingleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); } - public DoubleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); } + public SingleQuoteStringLiteral(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); + } + public DoubleQuoteStringLiteral(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_stringPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_stringPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStringPrimaryExpression) { @@ -5533,10 +6251,13 @@ export class StringPrimaryExpressionContext extends KipperParserRuleContext { } } - export class FStringPrimaryExpressionContext extends KipperParserRuleContext { - public FStringSingleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); } - public FStringSingleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); } + public FStringSingleQuoteStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); + } + public FStringSingleQuoteEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); + } public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext[]; public fStringSingleQuoteAtom(i: number): FStringSingleQuoteAtomContext; public fStringSingleQuoteAtom(i?: number): FStringSingleQuoteAtomContext | FStringSingleQuoteAtomContext[] { @@ -5546,8 +6267,12 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { return this.getRuleContext(i, FStringSingleQuoteAtomContext); } } - public FStringDoubleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); } - public FStringDoubleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); } + public FStringDoubleQuoteStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); + } + public FStringDoubleQuoteEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); + } public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext[]; public fStringDoubleQuoteAtom(i: number): FStringDoubleQuoteAtomContext; public fStringDoubleQuoteAtom(i?: number): FStringDoubleQuoteAtomContext | FStringDoubleQuoteAtomContext[] { @@ -5561,7 +6286,9 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_fStringPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_fStringPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringPrimaryExpression) { @@ -5584,11 +6311,16 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { } } - export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { - public FStringSingleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); } - public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } - public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } + public FStringSingleQuoteAtom(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); + } + public FStringExpStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpStart, 0); + } + public FStringExpEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpEnd, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -5596,7 +6328,9 @@ export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_fStringSingleQuoteAtom; } + public get ruleIndex(): number { + return KipperParser.RULE_fStringSingleQuoteAtom; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringSingleQuoteAtom) { @@ -5619,11 +6353,16 @@ export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { } } - export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { - public FStringDoubleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); } - public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } - public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } + public FStringDoubleQuoteAtom(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); + } + public FStringExpStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpStart, 0); + } + public FStringExpEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpEnd, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -5631,7 +6370,9 @@ export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_fStringDoubleQuoteAtom; } + public get ruleIndex(): number { + return KipperParser.RULE_fStringDoubleQuoteAtom; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringDoubleQuoteAtom) { @@ -5654,15 +6395,20 @@ export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { } } - export class NumberPrimaryExpressionContext extends KipperParserRuleContext { - public IntegerConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.IntegerConstant, 0); } - public FloatingConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FloatingConstant, 0); } + public IntegerConstant(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.IntegerConstant, 0); + } + public FloatingConstant(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FloatingConstant, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_numberPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_numberPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterNumberPrimaryExpression) { @@ -5685,10 +6431,13 @@ export class NumberPrimaryExpressionContext extends KipperParserRuleContext { } } - export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } - public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public LeftBracket(): TerminalNode { + return this.getToken(KipperParser.LeftBracket, 0); + } + public RightBracket(): TerminalNode { + return this.getToken(KipperParser.RightBracket, 0); + } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -5711,7 +6460,9 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_arrayPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_arrayPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterArrayPrimaryExpression) { @@ -5734,16 +6485,23 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { } } - export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserRuleContext { - public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } - public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } - public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } + public Void(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Void, 0); + } + public Null(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Null, 0); + } + public Undefined(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Undefined, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterVoidOrNullOrUndefinedPrimaryExpression) { @@ -5766,14 +6524,15 @@ export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserR } } - export class ComputedPrimaryExpressionContext extends KipperParserRuleContext { public _labelASTKind: ASTKind | undefined; constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_computedPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_computedPrimaryExpression; + } public copyFrom(ctx: ComputedPrimaryExpressionContext): void { super.copyFrom(ctx); this._labelASTKind = ctx._labelASTKind; @@ -5812,8 +6571,12 @@ export class FunctionCallExpressionContext extends ComputedPrimaryExpressionCont public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -5843,12 +6606,18 @@ export class FunctionCallExpressionContext extends ComputedPrimaryExpressionCont } } export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { - public CallFunc(): TerminalNode { return this.getToken(KipperParser.CallFunc, 0); } + public CallFunc(): TerminalNode { + return this.getToken(KipperParser.CallFunc, 0); + } public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -5974,7 +6743,6 @@ export class SliceNotationMemberAccessExpressionContext extends ComputedPrimaryE } } - export class ArgumentExpressionListContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext[]; public assignmentExpression(i: number): AssignmentExpressionContext; @@ -5998,7 +6766,9 @@ export class ArgumentExpressionListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_argumentExpressionList; } + public get ruleIndex(): number { + return KipperParser.RULE_argumentExpressionList; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterArgumentExpressionList) { @@ -6021,9 +6791,10 @@ export class ArgumentExpressionListContext extends KipperParserRuleContext { } } - export class DotNotationContext extends KipperParserRuleContext { - public Dot(): TerminalNode { return this.getToken(KipperParser.Dot, 0); } + public Dot(): TerminalNode { + return this.getToken(KipperParser.Dot, 0); + } public identifier(): IdentifierContext { return this.getRuleContext(0, IdentifierContext); } @@ -6031,7 +6802,9 @@ export class DotNotationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_dotNotation; } + public get ruleIndex(): number { + return KipperParser.RULE_dotNotation; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDotNotation) { @@ -6054,18 +6827,23 @@ export class DotNotationContext extends KipperParserRuleContext { } } - export class BracketNotationContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } + public LeftBracket(): TerminalNode { + return this.getToken(KipperParser.LeftBracket, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public RightBracket(): TerminalNode { + return this.getToken(KipperParser.RightBracket, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bracketNotation; } + public get ruleIndex(): number { + return KipperParser.RULE_bracketNotation; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBracketNotation) { @@ -6088,13 +6866,18 @@ export class BracketNotationContext extends KipperParserRuleContext { } } - export class SliceNotationContext extends KipperParserRuleContext { public sliceStart: boolean = false; public sliceEnd: boolean = false; - public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } - public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public LeftBracket(): TerminalNode { + return this.getToken(KipperParser.LeftBracket, 0); + } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } + public RightBracket(): TerminalNode { + return this.getToken(KipperParser.RightBracket, 0); + } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -6108,7 +6891,9 @@ export class SliceNotationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_sliceNotation; } + public get ruleIndex(): number { + return KipperParser.RULE_sliceNotation; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSliceNotation) { @@ -6131,7 +6916,6 @@ export class SliceNotationContext extends KipperParserRuleContext { } } - export class PostfixExpressionContext extends KipperParserRuleContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, ComputedPrimaryExpressionContext); @@ -6143,7 +6927,9 @@ export class PostfixExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_postfixExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_postfixExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterPostfixExpression) { @@ -6166,7 +6952,6 @@ export class PostfixExpressionContext extends KipperParserRuleContext { } } - export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRuleContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); @@ -6178,7 +6963,9 @@ export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRu super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementPostfixExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_incrementOrDecrementPostfixExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementPostfixExpression) { @@ -6201,7 +6988,6 @@ export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRu } } - export class UnaryExpressionContext extends KipperParserRuleContext { public postfixExpression(): PostfixExpressionContext | undefined { return this.tryGetRuleContext(0, PostfixExpressionContext); @@ -6216,7 +7002,9 @@ export class UnaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_unaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_unaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterUnaryExpression) { @@ -6239,7 +7027,6 @@ export class UnaryExpressionContext extends KipperParserRuleContext { } } - export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRuleContext { public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { return this.getRuleContext(0, IncrementOrDecrementOperatorContext); @@ -6251,7 +7038,9 @@ export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRule super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementUnaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_incrementOrDecrementUnaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementUnaryExpression) { @@ -6274,7 +7063,6 @@ export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRule } } - export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleContext { public unaryOperator(): UnaryOperatorContext { return this.getRuleContext(0, UnaryOperatorContext); @@ -6286,7 +7074,9 @@ export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleCont super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_operatorModifiedUnaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_operatorModifiedUnaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterOperatorModifiedUnaryExpression) { @@ -6309,15 +7099,20 @@ export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleCont } } - export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext { - public PlusPlus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusPlus, 0); } - public MinusMinus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusMinus, 0); } + public PlusPlus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.PlusPlus, 0); + } + public MinusMinus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.MinusMinus, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementOperator; } + public get ruleIndex(): number { + return KipperParser.RULE_incrementOrDecrementOperator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementOperator) { @@ -6340,16 +7135,23 @@ export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext } } - export class UnaryOperatorContext extends KipperParserRuleContext { - public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } - public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } - public Not(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Not, 0); } + public Plus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Plus, 0); + } + public Minus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Minus, 0); + } + public Not(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Not, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_unaryOperator; } + public get ruleIndex(): number { + return KipperParser.RULE_unaryOperator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterUnaryOperator) { @@ -6372,13 +7174,14 @@ export class UnaryOperatorContext extends KipperParserRuleContext { } } - export class CastOrConvertExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_castOrConvertExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_castOrConvertExpression; + } public copyFrom(ctx: CastOrConvertExpressionContext): void { super.copyFrom(ctx); } @@ -6416,7 +7219,9 @@ export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressio public unaryExpression(): UnaryExpressionContext { return this.getRuleContext(0, UnaryExpressionContext); } - public As(): TerminalNode { return this.getToken(KipperParser.As, 0); } + public As(): TerminalNode { + return this.getToken(KipperParser.As, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -6446,13 +7251,14 @@ export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressio } } - export class MultiplicativeExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_multiplicativeExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_multiplicativeExpression; + } public copyFrom(ctx: MultiplicativeExpressionContext): void { super.copyFrom(ctx); } @@ -6493,10 +7299,18 @@ export class ActualMultiplicativeExpressionContext extends MultiplicativeExpress public castOrConvertExpression(): CastOrConvertExpressionContext { return this.getRuleContext(0, CastOrConvertExpressionContext); } - public Star(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Star, 0); } - public Div(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Div, 0); } - public Mod(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Mod, 0); } - public PowerTo(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PowerTo, 0); } + public Star(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Star, 0); + } + public Div(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Div, 0); + } + public Mod(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Mod, 0); + } + public PowerTo(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.PowerTo, 0); + } constructor(ctx: MultiplicativeExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -6523,13 +7337,14 @@ export class ActualMultiplicativeExpressionContext extends MultiplicativeExpress } } - export class AdditiveExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_additiveExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_additiveExpression; + } public copyFrom(ctx: AdditiveExpressionContext): void { super.copyFrom(ctx); } @@ -6570,8 +7385,12 @@ export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { public multiplicativeExpression(): MultiplicativeExpressionContext { return this.getRuleContext(0, MultiplicativeExpressionContext); } - public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } - public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } + public Plus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Plus, 0); + } + public Minus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Minus, 0); + } constructor(ctx: AdditiveExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -6598,13 +7417,14 @@ export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { } } - export class BitwiseShiftExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseShiftExpression; + } public copyFrom(ctx: BitwiseShiftExpressionContext): void { super.copyFrom(ctx); } @@ -6674,16 +7494,23 @@ export class ActualBitwiseShiftExpressionContext extends BitwiseShiftExpressionC } } - export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { - public BitwiseZeroFillLeftShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillLeftShift, 0); } - public BitwiseSignedRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseSignedRightShift, 0); } - public BitwiseZeroFillRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillRightShift, 0); } + public BitwiseZeroFillLeftShift(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.BitwiseZeroFillLeftShift, 0); + } + public BitwiseSignedRightShift(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.BitwiseSignedRightShift, 0); + } + public BitwiseZeroFillRightShift(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.BitwiseZeroFillRightShift, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftOperators; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseShiftOperators; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBitwiseShiftOperators) { @@ -6706,13 +7533,14 @@ export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { } } - export class RelationalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_relationalExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_relationalExpression; + } public copyFrom(ctx: RelationalExpressionContext): void { super.copyFrom(ctx); } @@ -6753,10 +7581,18 @@ export class ActualRelationalExpressionContext extends RelationalExpressionConte public bitwiseShiftExpression(): BitwiseShiftExpressionContext { return this.getRuleContext(0, BitwiseShiftExpressionContext); } - public Less(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Less, 0); } - public Greater(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Greater, 0); } - public LessEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.LessEqual, 0); } - public GreaterEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.GreaterEqual, 0); } + public Less(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Less, 0); + } + public Greater(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Greater, 0); + } + public LessEqual(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.LessEqual, 0); + } + public GreaterEqual(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.GreaterEqual, 0); + } constructor(ctx: RelationalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -6783,13 +7619,14 @@ export class ActualRelationalExpressionContext extends RelationalExpressionConte } } - export class EqualityExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_equalityExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_equalityExpression; + } public copyFrom(ctx: EqualityExpressionContext): void { super.copyFrom(ctx); } @@ -6830,8 +7667,12 @@ export class ActualEqualityExpressionContext extends EqualityExpressionContext { public relationalExpression(): RelationalExpressionContext { return this.getRuleContext(0, RelationalExpressionContext); } - public Equal(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Equal, 0); } - public NotEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.NotEqual, 0); } + public Equal(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Equal, 0); + } + public NotEqual(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.NotEqual, 0); + } constructor(ctx: EqualityExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -6858,13 +7699,14 @@ export class ActualEqualityExpressionContext extends EqualityExpressionContext { } } - export class BitwiseAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseAndExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseAndExpression; + } public copyFrom(ctx: BitwiseAndExpressionContext): void { super.copyFrom(ctx); } @@ -6902,7 +7744,9 @@ export class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionConte public bitwiseAndExpression(): BitwiseAndExpressionContext { return this.getRuleContext(0, BitwiseAndExpressionContext); } - public BitwiseAnd(): TerminalNode { return this.getToken(KipperParser.BitwiseAnd, 0); } + public BitwiseAnd(): TerminalNode { + return this.getToken(KipperParser.BitwiseAnd, 0); + } public equalityExpression(): EqualityExpressionContext { return this.getRuleContext(0, EqualityExpressionContext); } @@ -6932,13 +7776,14 @@ export class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionConte } } - export class BitwiseXorExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseXorExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseXorExpression; + } public copyFrom(ctx: BitwiseXorExpressionContext): void { super.copyFrom(ctx); } @@ -6976,7 +7821,9 @@ export class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionConte public bitwiseXorExpression(): BitwiseXorExpressionContext { return this.getRuleContext(0, BitwiseXorExpressionContext); } - public BitwiseXor(): TerminalNode { return this.getToken(KipperParser.BitwiseXor, 0); } + public BitwiseXor(): TerminalNode { + return this.getToken(KipperParser.BitwiseXor, 0); + } public bitwiseAndExpression(): BitwiseAndExpressionContext { return this.getRuleContext(0, BitwiseAndExpressionContext); } @@ -7006,13 +7853,14 @@ export class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionConte } } - export class BitwiseOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseOrExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseOrExpression; + } public copyFrom(ctx: BitwiseOrExpressionContext): void { super.copyFrom(ctx); } @@ -7050,7 +7898,9 @@ export class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext public bitwiseOrExpression(): BitwiseOrExpressionContext { return this.getRuleContext(0, BitwiseOrExpressionContext); } - public BitwiseOr(): TerminalNode { return this.getToken(KipperParser.BitwiseOr, 0); } + public BitwiseOr(): TerminalNode { + return this.getToken(KipperParser.BitwiseOr, 0); + } public bitwiseXorExpression(): BitwiseXorExpressionContext { return this.getRuleContext(0, BitwiseXorExpressionContext); } @@ -7080,13 +7930,14 @@ export class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext } } - export class LogicalAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_logicalAndExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_logicalAndExpression; + } public copyFrom(ctx: LogicalAndExpressionContext): void { super.copyFrom(ctx); } @@ -7124,7 +7975,9 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } - public AndAnd(): TerminalNode { return this.getToken(KipperParser.AndAnd, 0); } + public AndAnd(): TerminalNode { + return this.getToken(KipperParser.AndAnd, 0); + } public bitwiseOrExpression(): BitwiseOrExpressionContext { return this.getRuleContext(0, BitwiseOrExpressionContext); } @@ -7154,13 +8007,14 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte } } - export class LogicalOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_logicalOrExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_logicalOrExpression; + } public copyFrom(ctx: LogicalOrExpressionContext): void { super.copyFrom(ctx); } @@ -7198,7 +8052,9 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public OrOr(): TerminalNode { return this.getToken(KipperParser.OrOr, 0); } + public OrOr(): TerminalNode { + return this.getToken(KipperParser.OrOr, 0); + } public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } @@ -7228,13 +8084,14 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext } } - export class ConditionalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_conditionalExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_conditionalExpression; + } public copyFrom(ctx: ConditionalExpressionContext): void { super.copyFrom(ctx); } @@ -7272,7 +8129,9 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public QuestionMark(): TerminalNode { return this.getToken(KipperParser.QuestionMark, 0); } + public QuestionMark(): TerminalNode { + return this.getToken(KipperParser.QuestionMark, 0); + } public conditionalExpression(): ConditionalExpressionContext[]; public conditionalExpression(i: number): ConditionalExpressionContext; public conditionalExpression(i?: number): ConditionalExpressionContext | ConditionalExpressionContext[] { @@ -7282,7 +8141,9 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon return this.getRuleContext(i, ConditionalExpressionContext); } } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } constructor(ctx: ConditionalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -7309,13 +8170,14 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon } } - export class AssignmentExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_assignmentExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_assignmentExpression; + } public copyFrom(ctx: AssignmentExpressionContext): void { super.copyFrom(ctx); } @@ -7385,19 +8247,32 @@ export class ActualAssignmentExpressionContext extends AssignmentExpressionConte } } - export class AssignmentOperatorContext extends KipperParserRuleContext { - public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } - public StarAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.StarAssign, 0); } - public DivAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DivAssign, 0); } - public ModAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.ModAssign, 0); } - public PlusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusAssign, 0); } - public MinusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusAssign, 0); } + public Assign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Assign, 0); + } + public StarAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.StarAssign, 0); + } + public DivAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.DivAssign, 0); + } + public ModAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.ModAssign, 0); + } + public PlusAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.PlusAssign, 0); + } + public MinusAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.MinusAssign, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_assignmentOperator; } + public get ruleIndex(): number { + return KipperParser.RULE_assignmentOperator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterAssignmentOperator) { @@ -7420,7 +8295,6 @@ export class AssignmentOperatorContext extends KipperParserRuleContext { } } - export class ExpressionContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext[]; public assignmentExpression(i: number): AssignmentExpressionContext; @@ -7444,7 +8318,9 @@ export class ExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_expression; } + public get ruleIndex(): number { + return KipperParser.RULE_expression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpression) { @@ -7467,7 +8343,6 @@ export class ExpressionContext extends KipperParserRuleContext { } } - export class TypeSpecifierExpressionContext extends KipperParserRuleContext { public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext | undefined { return this.tryGetRuleContext(0, IdentifierTypeSpecifierExpressionContext); @@ -7482,7 +8357,9 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_typeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierExpression) { @@ -7505,7 +8382,6 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { } } - export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); @@ -7514,7 +8390,9 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_identifierTypeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_identifierTypeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierTypeSpecifierExpression) { @@ -7537,7 +8415,6 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo } } - export class GenericTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext[]; public typeSpecifierIdentifier(i: number): TypeSpecifierIdentifierContext; @@ -7548,13 +8425,19 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte return this.getRuleContext(i, TypeSpecifierIdentifierContext); } } - public Less(): TerminalNode { return this.getToken(KipperParser.Less, 0); } - public Greater(): TerminalNode { return this.getToken(KipperParser.Greater, 0); } + public Less(): TerminalNode { + return this.getToken(KipperParser.Less, 0); + } + public Greater(): TerminalNode { + return this.getToken(KipperParser.Greater, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_genericTypeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_genericTypeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterGenericTypeSpecifierExpression) { @@ -7577,19 +8460,26 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte } } - export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContext { - public Typeof(): TerminalNode { return this.getToken(KipperParser.Typeof, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public Typeof(): TerminalNode { + return this.getToken(KipperParser.Typeof, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_typeofTypeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_typeofTypeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeofTypeSpecifierExpression) { @@ -7612,17 +8502,26 @@ export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContex } } - export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Identifier, 0); } - public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } - public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } - public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } + public Identifier(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Identifier, 0); + } + public Null(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Null, 0); + } + public Undefined(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Undefined, 0); + } + public Void(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Void, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierIdentifier; } + public get ruleIndex(): number { + return KipperParser.RULE_typeSpecifierIdentifier; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierIdentifier) { @@ -7644,5 +8543,3 @@ export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { } } } - - diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts index 5c06e8797..e619d0ed0 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserListener.ts @@ -1,10 +1,8 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT - - // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax - // kind values. - import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; - +// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax +// kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; @@ -115,7 +113,6 @@ import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; - /** * This interface defines a complete listener for a parse tree produced by * `KipperParser`. @@ -1353,4 +1350,3 @@ export interface KipperParserListener extends ParseTreeListener { */ exitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => void; } - diff --git a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts index bf61e5ba5..a0e3ac2bf 100644 --- a/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/parser/antlr/KipperParserVisitor.ts @@ -1,10 +1,8 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT - - // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax - // kind values. - import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; - +// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax +// kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; @@ -115,7 +113,6 @@ import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; - /** * This interface defines a complete generic visitor for a parse tree produced * by `KipperParser`. @@ -899,4 +896,3 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => Result; } - diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index ead9c4ed5..e4fea7b52 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -46,13 +46,12 @@ import type { WhileLoopIterationStatement, } from "../ast"; import { KipperSemanticErrorHandler } from "../analysis"; -import { - BitwiseAndExpression -} from "../ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression"; -import { - BitwiseOrExpression -} from "../ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression"; +import { BitwiseAndExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression"; +import { BitwiseOrExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression"; import { BitwiseXorExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-xor-expression"; +import { BitwiseSignedRightShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression"; +import { BitwiseZeroFillLeftShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression"; +import { BitwiseZeroFillRightShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression"; /** * Represents a function that checks the semantics for a {@link AnalysableASTNode}. @@ -266,4 +265,10 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa public abstract bitwiseOrExpression?: TargetASTNodeSemanticAnalyser; public abstract bitwiseXorExpression?: TargetASTNodeSemanticAnalyser; + + public abstract bitwiseSignedRightShiftExpression?: TargetASTNodeSemanticAnalyser; + + public abstract bitwiseZeroFillLeftShiftOperations?: TargetASTNodeSemanticAnalyser; + + public abstract bitwiseZeroFillRightShiftOperations?: TargetASTNodeSemanticAnalyser; } diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index ced0eedde..c30f2ddb7 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -44,13 +44,12 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; -import { - BitwiseAndExpression -} from "../../ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression"; -import { - BitwiseOrExpression -} from "../../ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression"; +import { BitwiseAndExpression } from "../../ast/nodes/expressions/bitwise-expression"; +import { BitwiseOrExpression } from "../../ast/nodes/expressions/bitwise-expression"; import { BitwiseXorExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-xor-expression"; +import { BitwiseZeroFillLeftShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression"; +import { BitwiseZeroFillRightShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression"; +import { BitwiseSignedRightShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -337,4 +336,19 @@ export abstract class KipperTargetCodeGenerator { public abstract bitwiseOrExpression: TargetASTNodeCodeGenerator; public abstract bitwiseXorExpression: TargetASTNodeCodeGenerator; + + public abstract bitwiseSignedRightShiftExpression: TargetASTNodeCodeGenerator< + BitwiseSignedRightShiftExpression, + TranslatedExpression + >; + + public abstract bitwiseZeroFillLeftShiftExpression: TargetASTNodeCodeGenerator< + BitwiseZeroFillLeftShiftExpression, + TranslatedExpression + >; + + public abstract bitwiseZeroFillRightShiftExpression: TargetASTNodeCodeGenerator< + BitwiseZeroFillRightShiftExpression, + TranslatedExpression + >; } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 91eee1504..af392c73b 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -2,12 +2,14 @@ * The JavaScript target-specific code generator for translating Kipper code into JavaScript. * @since 0.10.0 */ -import type { +import { TranslatedCodeToken, ComparativeExpressionSemantics, LogicalExpressionSemantics, TranslatedCodeLine, TranslatedExpression, + BitwiseExpressionSemantics, + BitwiseExpression, } from "@kipper/core"; import { AdditiveExpression, @@ -55,6 +57,8 @@ import { ScopeFunctionDeclaration, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, + BitwiseOrExpression, + BitwiseAndExpression, } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; @@ -629,10 +633,11 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { * @private */ protected translateOperatorExpressionWithOperands = async ( - node: ComparativeExpression | LogicalExpression, + node: ComparativeExpression | LogicalExpression | BitwiseExpression, ): Promise => { // Get the semantic data - const semanticData: ComparativeExpressionSemantics | LogicalExpressionSemantics = node.getSemanticData(); + const semanticData: ComparativeExpressionSemantics | LogicalExpressionSemantics | BitwiseExpressionSemantics = + node.getSemanticData(); // Generate the code for the operands const exp1: TranslatedExpression = await semanticData.leftOp.translateCtxAndChildren(); @@ -701,4 +706,32 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return [identifier, " ", semanticData.operator, " ", ...assignExp]; }; + + bitwiseOrExpression = async (node: BitwiseOrExpression): Promise => { + return await this.translateOperatorExpressionWithOperands(node); + }; + + bitwiseAndExpression = async (node: BitwiseAndExpression): Promise => { + return await this.translateOperatorExpressionWithOperands(node); + }; + + bitwiseXorExpression = async (node: BitwiseExpression): Promise => { + return await this.translateOperatorExpressionWithOperands(node); + }; + + bitwiseShiftExpression = async (node: BitwiseExpression): Promise => { + return await this.translateOperatorExpressionWithOperands(node); + }; + + bitwiseZeroFillLeftShiftExpression = async (node: BitwiseExpression): Promise => { + return await this.translateOperatorExpressionWithOperands(node); + }; + + bitwiseZeroFillRightShiftExpression = async (node: BitwiseExpression): Promise => { + return await this.translateOperatorExpressionWithOperands(node); + }; + + bitwiseSignedRightShiftExpression = async (node: BitwiseExpression): Promise => { + return await this.translateOperatorExpressionWithOperands(node); + }; } diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index 2e86f7572..2ca04a341 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -233,4 +233,34 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys * Performs typescript-specific semantic analysis for {@link AssignmentExpression} instances. */ assignmentExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link BitwiseAndExpression} instances. + */ + bitwiseAndExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link BitwiseOrExpression} instances. + */ + bitwiseOrExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link BitwiseXorExpression} instances. + */ + bitwiseXorExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link BitwiseSignedLeftShiftExpression} instances. + */ + bitwiseSignedRightShiftExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link BitwiseZeroFillLeftShiftExpression} instances. + */ + bitwiseZeroFillLeftShiftOperations = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link BitwiseZeroFillRightShiftExpression} instances. + */ + bitwiseZeroFillRightShiftOperations = undefined; } diff --git a/test/kipper-files/bitshift.kip b/test/kipper-files/bitshift.kip new file mode 100644 index 000000000..52348b6ad --- /dev/null +++ b/test/kipper-files/bitshift.kip @@ -0,0 +1,3 @@ +var a: num = 10; +var b: num = 5; +print(f"Result: {a << b}"); From 779bf38f94e2aa0ed2cb1fcb7142f8f39b001459 Mon Sep 17 00:00:00 2001 From: Luna Date: Tue, 2 Jul 2024 00:36:36 +0200 Subject: [PATCH 170/257] other: Added NPM package info to release-drafter.yml Signed-off-by: Luna --- .github/release-drafter.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 40e162d1f..4c4e349da 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -38,6 +38,7 @@ template: | ## Full Details + **View on NPM**: [`$RESOLVED_VERSION`](https://www.npmjs.com/package/kipper/v/$RESOLVED_VERSION) **Detailed Changelog**: [`CHANGELOG.md`](https://github.com/$OWNER/$REPOSITORY/blob/v$RESOLVED_VERSION/CHANGELOG.md) **Compare Changes**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION From ad433a77bee201490ca6e4b547605ed8c5afd572 Mon Sep 17 00:00:00 2001 From: Luna Date: Tue, 2 Jul 2024 00:39:57 +0200 Subject: [PATCH 171/257] other: Added package name to NPM URL in release-drafter.ym Signed-off-by: Luna --- .github/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 4c4e349da..26c977110 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -38,7 +38,7 @@ template: | ## Full Details - **View on NPM**: [`$RESOLVED_VERSION`](https://www.npmjs.com/package/kipper/v/$RESOLVED_VERSION) + **View on NPM**: [`kipper@$RESOLVED_VERSION`](https://www.npmjs.com/package/kipper/v/$RESOLVED_VERSION) **Detailed Changelog**: [`CHANGELOG.md`](https://github.com/$OWNER/$REPOSITORY/blob/v$RESOLVED_VERSION/CHANGELOG.md) **Compare Changes**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION From ea2eccab774750b4645c61d70c419b55eb761e09 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 2 Jul 2024 10:48:30 +0200 Subject: [PATCH 172/257] minor (#493): fixed code generation and merged bitshift expressions --- kipper/core/src/compiler/ast/ast-generator.ts | 58 +++++++++++++++- .../core/src/compiler/ast/common/ast-types.ts | 14 +++- .../compiler/ast/mapping/ast-node-mapper.ts | 6 +- .../bitwise-expression-semantics.ts | 12 +--- .../bitwise-expression-type-semantics.ts | 8 +++ .../bitwise-expression/bitwise-expression.ts | 3 +- .../bitwise-shift-expression-semantics.ts | 9 +++ ...bitwise-shift-expression-type-semantics.ts | 3 + .../bitwise-shift-expression.ts} | 46 +++++++++---- .../bitwise-shift-expression/index.ts | 3 + ...signed-right-shift-expression-semantics.ts | 7 -- ...d-right-shift-expression-type-semantics.ts | 3 - .../bitwise-signed-right-shift-expression.ts | 68 ------------------- ...ro-fill-left-shift-expression-semantics.ts | 9 --- ...ll-left-shift-expression-type-semantics.ts | 3 - .../index.ts | 3 - ...o-fill-right-shift-expression-semantics.ts | 9 --- ...l-right-shift-expression-type-semantics.ts | 3 - ...itwise-zero-fill-right-shift-expression.ts | 68 ------------------- .../index.ts | 3 - .../expressions/bitwise-expression/index.ts | 5 ++ kipper/core/src/compiler/const.ts | 44 ++---------- .../target-presets/semantic-analyser.ts | 10 +-- .../translation/code-generator.ts | 27 ++------ kipper/target-js/src/code-generator.ts | 30 ++++---- kipper/target-js/src/semantic-analyser.ts | 14 +--- test/kipper-files/bitshift.kip | 3 +- 27 files changed, 169 insertions(+), 302 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-type-semantics.ts rename kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/{bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts => bitwise-shift-expression/bitwise-shift-expression.ts} (51%) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/index.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts delete mode 100644 kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 3cac438a3..3b0ca7d5b 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -9,9 +9,13 @@ import type { ParserStatementContext, } from "./common"; import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import type { +import { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, + ActualBitwiseAndExpressionContext, + ActualBitwiseOrExpressionContext, + ActualBitwiseShiftExpressionContext, + ActualBitwiseXorExpressionContext, ActualCastOrConvertExpressionContext, ActualConditionalExpressionContext, ActualEqualityExpressionContext, @@ -20,6 +24,10 @@ import type { ActualMultiplicativeExpressionContext, ActualRelationalExpressionContext, ArrayPrimaryExpressionContext, + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + BitwiseShiftExpressionContext, + BitwiseXorExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, CompilationUnitContext, @@ -712,6 +720,54 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ public exitActualLogicalOrExpression: (ctx: ActualLogicalOrExpressionContext) => void = this.handleExitingTreeNode; + // NOTE: + // We are ignoring the 'bitwiseOrExpression' rule, and only going to handle the rule 'actualBitwiseOrExpression', + // which implements a more precise 'bitwiseOrExpression' rule. + + /** + * Enter a parse tree produced by the KipperParser.bitwiseOrExpression + */ + public enterActualBitwiseOrExpression: (ctx: ActualBitwiseOrExpressionContext) => void = this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by the KipperParser.bitwiseOrExpression + */ + public exitActualBitwiseOrExpression: (ctx: ActualBitwiseOrExpressionContext) => void = this.handleExitingTreeNode; + + /** + * Enter a parse tree produced by the KipperParser.bitwiseAndExpression + */ + public enterActualBitwiseAndExpression: (ctx: ActualBitwiseAndExpressionContext) => void = + this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by the KipperParser.bitwiseAndExpression + */ + public exitActualBitwiseAndExpression: (ctx: ActualBitwiseAndExpressionContext) => void = this.handleExitingTreeNode; + + /** + * Enter a parse tree produced by the KipperParser.bitwiseXorExpression + */ + public enterActualBitwiseXorExpression: (ctx: ActualBitwiseXorExpressionContext) => void = + this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by the KipperParser.bitwiseXorExpression + */ + public exitActualBitwiseXorExpression: (ctx: ActualBitwiseXorExpressionContext) => void = this.handleExitingTreeNode; + + /** + * Enter a parse tree produced by the KipperParser.bitwiseShiftExpression + */ + public enterActualBitwiseShiftExpression: (ctx: ActualBitwiseShiftExpressionContext) => void = + this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by the KipperParser.bitwiseShiftExpression + */ + public exitActualBitwiseShiftExpression: (ctx: ActualBitwiseShiftExpressionContext) => void = + this.handleExitingTreeNode; + // NOTE: // We are ignoring the 'conditionalExpression' rule, and only going to handle the rule // 'actualConditionalExpression', which implements a more precise 'conditionalExpression' rule. diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index a9b58dd17..0b1ecb4c6 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -2,10 +2,14 @@ * AST pre-set types that are used throughout the compiler. * @since 0.10.0 */ -import type { +import { AdditiveExpressionContext, ArrayPrimaryExpressionContext, AssignmentExpressionContext, + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + BitwiseShiftExpressionContext, + BitwiseXorExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, CastOrConvertExpressionContext, @@ -75,7 +79,11 @@ export type ParserExpressionContext = | DotNotationMemberAccessExpressionContext | BracketNotationMemberAccessExpressionContext | GenericTypeSpecifierExpressionContext - | TypeofTypeSpecifierExpressionContext; + | TypeofTypeSpecifierExpressionContext + | BitwiseOrExpressionContext + | BitwiseAndExpressionContext + | BitwiseXorExpressionContext + | BitwiseShiftExpressionContext; /** * Union type of all usable statement rule context classes implemented by the {@link ParseRuleKindMapping} for a @@ -171,6 +179,7 @@ export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_bitwiseOrExpression | typeof ParseRuleKindMapping.RULE_bitwiseAndExpression | typeof ParseRuleKindMapping.RULE_bitwiseXorExpression + | typeof ParseRuleKindMapping.RULE_bitwiseShiftExpression | typeof ParseRuleKindMapping.RULE_memberAccessExpression; /** @@ -241,6 +250,7 @@ export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseOrExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseAndExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseXorExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseShiftExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_memberAccessExpression]; /** diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 063e4f407..83492ffcf 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -10,6 +10,7 @@ import { AssignmentExpressionContext, BitwiseAndExpressionContext, BitwiseOrExpressionContext, + BitwiseShiftExpressionContext, BitwiseXorExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, @@ -101,7 +102,7 @@ import { } from "../nodes"; import { BitwiseXorExpression } from "../nodes/expressions/bitwise-expression/bitwise-xor-expression"; import { BitwiseAndExpression, BitwiseOrExpression } from "../nodes/expressions/bitwise-expression"; -import { BitwiseSignedRightShiftExpression } from "../nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression"; +import { BitwiseShiftExpression } from "../nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -155,6 +156,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_bitwiseOrExpression]: BitwiseOrExpression, [ParseRuleKindMapping.RULE_bitwiseAndExpression]: BitwiseAndExpression, [ParseRuleKindMapping.RULE_bitwiseXorExpression]: BitwiseXorExpression, + [ParseRuleKindMapping.RULE_bitwiseShiftExpression]: BitwiseShiftExpression, } satisfies Record>; /** @@ -218,6 +220,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_bitwiseOrExpression]: BitwiseOrExpressionContext, [ParseRuleKindMapping.RULE_bitwiseAndExpression]: BitwiseAndExpressionContext, [ParseRuleKindMapping.RULE_bitwiseXorExpression]: BitwiseXorExpressionContext, + [ParseRuleKindMapping.RULE_bitwiseShiftExpression]: BitwiseShiftExpressionContext, [ParseRuleKindMapping.RULE_memberAccessExpression]: [ // Due to the nature of the parser not handling the notations as one rule, it's an array DotNotationMemberAccessExpressionContext, @@ -288,6 +291,7 @@ export class ASTNodeMapper { RULE_bitwiseOrExpression: BitwiseOrExpression, RULE_bitwiseAndExpression: BitwiseAndExpression, RULE_bitwiseXorExpression: BitwiseXorExpression, + RULE_bitwiseShiftExpression: BitwiseShiftExpression, } satisfies Record>; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts index c37b61dea..9dd72b6ab 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-semantics.ts @@ -2,21 +2,13 @@ import { ExpressionSemantics } from "../expression-semantics"; import { KipperBitwiseAndOperator, KipperBitwiseOrOperator, - KipperBitwiseSignedRightShiftOperator, + KipperBitwiseShiftOperator, KipperBitwiseXorOperator, - KipperBitwiseZeroFillLeftShiftOperator, - KipperBitwiseZeroFillRightShiftOperator, } from "../../../../const"; import { Expression } from "../expression"; export interface BitwiseExpressionSemantics extends ExpressionSemantics { - operator: - | KipperBitwiseAndOperator - | KipperBitwiseOrOperator - | KipperBitwiseXorOperator - | KipperBitwiseZeroFillLeftShiftOperator - | KipperBitwiseZeroFillRightShiftOperator - | KipperBitwiseSignedRightShiftOperator; + operator: KipperBitwiseAndOperator | KipperBitwiseOrOperator | KipperBitwiseXorOperator | KipperBitwiseShiftOperator; leftOp: Expression; rightOp: Expression; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts index edc7da808..20fd75c9b 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression-type-semantics.ts @@ -1,3 +1,11 @@ +/** + * The semantics of a bitwise expression. + * @since 0.10.0 + */ import { ExpressionTypeSemantics } from "../expression-type-semantics"; +/** + * The semantics of a bitwise expression. + * @since 0.10.0 + */ export interface BitwiseExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts index 594a05f73..50c5d3899 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-expression.ts @@ -11,7 +11,8 @@ import { BitwiseExpressionSemantics } from "./bitwise-expression-semantics"; export type ASTBitwiseExpressionKind = | typeof ParseRuleKindMapping.RULE_bitwiseAndExpression | typeof ParseRuleKindMapping.RULE_bitwiseOrExpression - | typeof ParseRuleKindMapping.RULE_bitwiseXorExpression; + | typeof ParseRuleKindMapping.RULE_bitwiseXorExpression + | typeof ParseRuleKindMapping.RULE_bitwiseShiftExpression; export type ParserBitwiseExpressionContext = InstanceType< (typeof ASTNodeMapper.expressionKindToRuleContextMap)[ASTBitwiseExpressionKind] diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-semantics.ts new file mode 100644 index 000000000..7256033e4 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-semantics.ts @@ -0,0 +1,9 @@ +import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; +import { Expression } from "../../expression"; +import { KipperBitwiseShiftOperator } from "../../../../../const"; + +export interface BitwiseShiftExpressionSemantics extends BitwiseExpressionSemantics { + leftOp: Expression; + rightOp: Expression; + operator: KipperBitwiseShiftOperator; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-type-semantics.ts new file mode 100644 index 000000000..964c3c177 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression-type-semantics.ts @@ -0,0 +1,3 @@ +import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; + +export interface BitwiseShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression.ts similarity index 51% rename from kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression.ts index eb0482501..83f262bcb 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression.ts @@ -1,7 +1,8 @@ import { BitwiseExpression } from "../bitwise-expression"; import { - BitwiseAndExpressionContext, + BitwiseOrExpressionContext, BitwiseShiftExpressionContext, + BitwiseShiftOperatorsContext, KindParseRuleMapping, ParseRuleKindMapping, } from "../../../../../parser"; @@ -9,25 +10,32 @@ import { CompilableASTNode } from "../../../../compilable-ast-node"; import { Expression } from "../../expression"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { CheckedType } from "../../../../../analysis"; -import { BitwiseZeroFillLeftShiftExpressionSemantics } from "./bitwise-zero-fill-left-shift-expression-semantics"; -import { BitwiseZeroFillLeftShiftExpressionTypeSemantics } from "./bitwise-zero-fill-left-shift-expression-type-semantics"; +import { BitwiseShiftExpressionSemantics } from "./bitwise-shift-expression-semantics"; +import { BitwiseShiftExpressionTypeSemantics } from "./bitwise-shift-expression-type-semantics"; +import { + KipperBitwiseShiftOperator, + kipperBitwiseShiftOperators, + KipperMultiplicativeOperator, + kipperMultiplicativeOperators, +} from "../../../../../const"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -export class BitwiseZeroFillLeftShiftExpression extends BitwiseExpression< - BitwiseZeroFillLeftShiftExpressionSemantics, - BitwiseZeroFillLeftShiftExpressionTypeSemantics +export class BitwiseShiftExpression extends BitwiseExpression< + BitwiseShiftExpressionSemantics, + BitwiseShiftExpressionTypeSemantics > { - protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; + protected override readonly _antlrRuleCtx: BitwiseShiftExpressionContext; - public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; + public static readonly kind = ParseRuleKindMapping.RULE_bitwiseShiftExpression; public override get kind() { - return BitwiseZeroFillLeftShiftExpression.kind; + return BitwiseShiftExpression.kind; } public static readonly ruleName = KindParseRuleMapping[this.kind]; public override get ruleName() { - return BitwiseZeroFillLeftShiftExpression.ruleName; + return BitwiseShiftExpression.ruleName; } constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { @@ -36,17 +44,25 @@ export class BitwiseZeroFillLeftShiftExpression extends BitwiseExpression< } public async primarySemanticAnalysis(): Promise { + const antlrRuleChildren = this.getAntlrRuleChildren(); const leftOp: Expression = this.children[0]; const rightOp: Expression = this.children[1]; - if (!leftOp || !rightOp) { + const operator = antlrRuleChildren.find((token) => { + return ( + token instanceof BitwiseShiftOperatorsContext && + kipperBitwiseShiftOperators.find((op) => op === token.text) !== undefined + ); + })?.text; + + if (!operator || !leftOp || !rightOp) { throw new UnableToDetermineSemanticDataError(); } this.semanticData = { leftOp: leftOp, rightOp: rightOp, - operator: "<<", + operator: operator, }; } @@ -58,11 +74,11 @@ export class BitwiseZeroFillLeftShiftExpression extends BitwiseExpression< public checkForWarnings = undefined; - public override get antlrRuleCtx(): BitwiseShiftExpressionContext { + public override get antlrRuleCtx(): BitwiseOrExpressionContext { return this._antlrRuleCtx; } - readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseZeroFillLeftShiftOperations; + readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseOrExpression; - readonly targetCodeGenerator = this.codeGenerator.bitwiseZeroFillLeftShiftExpression; + readonly targetCodeGenerator = this.codeGenerator.bitwiseOrExpression; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/index.ts new file mode 100644 index 000000000..c7d1b2216 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/index.ts @@ -0,0 +1,3 @@ +export * from "./bitwise-shift-expression"; +export * from "./bitwise-shift-expression-semantics"; +export * from "./bitwise-shift-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts deleted file mode 100644 index f3c43454d..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-semantics.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Expression } from "../../expression"; - -export interface BitwiseSignedRightShiftExpressionSemantics { - leftOp: Expression; - rightOp: Expression; - operator: ">>"; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts deleted file mode 100644 index de47496b9..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression-type-semantics.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; - -export interface BitwiseSignedRightShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts deleted file mode 100644 index 340a46124..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { BitwiseExpression } from "../bitwise-expression"; -import { - BitwiseAndExpressionContext, - BitwiseShiftExpressionContext, - KindParseRuleMapping, - ParseRuleKindMapping, -} from "../../../../../parser"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; -import { Expression } from "../../expression"; -import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; -import { CheckedType } from "../../../../../analysis"; -import { BitwiseSignedRightShiftExpressionSemantics } from "./bitwise-signed-right-shift-expression-semantics"; -import { BitwiseSignedRightShiftExpressionTypeSemantics } from "./bitwise-signed-right-shift-expression-type-semantics"; - -export class BitwiseSignedRightShiftExpression extends BitwiseExpression< - BitwiseSignedRightShiftExpressionSemantics, - BitwiseSignedRightShiftExpressionTypeSemantics -> { - protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; - - public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; - - public override get kind() { - return BitwiseSignedRightShiftExpression.kind; - } - - public static readonly ruleName = KindParseRuleMapping[this.kind]; - - public override get ruleName() { - return BitwiseSignedRightShiftExpression.ruleName; - } - - constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public async primarySemanticAnalysis(): Promise { - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - if (!leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: ">>", - }; - } - - public async primarySemanticTypeChecking(): Promise { - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("num"), - }; - } - - public checkForWarnings = undefined; - - public override get antlrRuleCtx(): BitwiseShiftExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseSignedRightShiftExpression; - - readonly targetCodeGenerator = this.codeGenerator.bitwiseSignedRightShiftExpression; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts deleted file mode 100644 index a94de9add..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-semantics.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; -import { Expression } from "../../expression"; -import { KipperBitwiseZeroFillLeftShiftOperator } from "../../../../../const"; - -export interface BitwiseZeroFillLeftShiftExpressionSemantics extends BitwiseExpressionSemantics { - leftOp: Expression; - rightOp: Expression; - operator: KipperBitwiseZeroFillLeftShiftOperator; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts deleted file mode 100644 index f83e4d910..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/bitwise-zero-fill-left-shift-expression-type-semantics.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; - -export interface BitwiseZeroFillLeftShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts deleted file mode 100644 index b22f7b74c..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./bitwise-zero-fill-left-shift-expression"; -export * from "./bitwise-zero-fill-left-shift-expression-semantics"; -export * from "./bitwise-zero-fill-left-shift-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts deleted file mode 100644 index cff3d1424..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-semantics.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BitwiseExpressionSemantics } from "../bitwise-expression-semantics"; -import { Expression } from "../../expression"; -import { KipperBitwiseZeroFillRightShiftOperator } from "../../../../../const"; - -export interface BitwiseZeroFillRightShiftExpressionSemantics extends BitwiseExpressionSemantics { - leftOp: Expression; - rightOp: Expression; - operator: KipperBitwiseZeroFillRightShiftOperator; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts deleted file mode 100644 index 356fff0c3..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression-type-semantics.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { BitwiseExpressionTypeSemantics } from "../bitwise-expression-type-semantics"; - -export interface BitwiseZeroFillRightShiftExpressionTypeSemantics extends BitwiseExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts deleted file mode 100644 index 1c02f7175..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/bitwise-zero-fill-right-shift-expression.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { BitwiseExpression } from "../bitwise-expression"; -import { - BitwiseAndExpressionContext, - BitwiseShiftExpressionContext, - KindParseRuleMapping, - ParseRuleKindMapping, -} from "../../../../../parser"; -import { CompilableASTNode } from "../../../../compilable-ast-node"; -import { Expression } from "../../expression"; -import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; -import { CheckedType } from "../../../../../analysis"; -import { BitwiseZeroFillRightShiftExpressionSemantics } from "./bitwise-zero-fill-right-shift-expression-semantics"; -import { BitwiseZeroFillRightShiftExpressionTypeSemantics } from "./bitwise-zero-fill-right-shift-expression-type-semantics"; - -export class BitwiseZeroFillRightShiftExpression extends BitwiseExpression< - BitwiseZeroFillRightShiftExpressionSemantics, - BitwiseZeroFillRightShiftExpressionTypeSemantics -> { - protected override readonly _antlrRuleCtx: BitwiseAndExpressionContext; - - public static readonly kind = ParseRuleKindMapping.RULE_bitwiseXorExpression; - - public override get kind() { - return BitwiseZeroFillRightShiftExpression.kind; - } - - public static readonly ruleName = KindParseRuleMapping[this.kind]; - - public override get ruleName() { - return BitwiseZeroFillRightShiftExpression.ruleName; - } - - constructor(antlrRuleCtx: BitwiseShiftExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - - public async primarySemanticAnalysis(): Promise { - const leftOp: Expression = this.children[0]; - const rightOp: Expression = this.children[1]; - - if (!leftOp || !rightOp) { - throw new UnableToDetermineSemanticDataError(); - } - - this.semanticData = { - leftOp: leftOp, - rightOp: rightOp, - operator: ">>>", - }; - } - - public async primarySemanticTypeChecking(): Promise { - this.typeSemantics = { - evaluatedType: CheckedType.fromCompilableType("num"), - }; - } - - public checkForWarnings = undefined; - - public override get antlrRuleCtx(): BitwiseShiftExpressionContext { - return this._antlrRuleCtx; - } - - readonly targetSemanticAnalysis = this.semanticAnalyser.bitwiseZeroFillRightShiftOperations; - - readonly targetCodeGenerator = this.codeGenerator.bitwiseZeroFillRightShiftExpression; -} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts deleted file mode 100644 index a98eb1440..000000000 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./bitwise-zero-fill-right-shift-expression"; -export * from "./bitwise-zero-fill-right-shift-expression-semantics"; -export * from "./bitwise-zero-fill-right-shift-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts index e11c29432..b4b09eee9 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/index.ts @@ -1,6 +1,11 @@ +/** + * Bitwise expression. + * @since 0.11.0 + */ export * from "./bitwise-expression"; export * from "./bitwise-expression-semantics"; export * from "./bitwise-expression-type-semantics"; export * from "./bitwise-and-expression/"; export * from "./bitwise-or-expression/"; export * from "./bitwise-xor-expression/"; +export * from "./bitwise-shift-expression/"; diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index e624adcc1..2cbd2437b 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -324,52 +324,16 @@ export type KipperBitwiseOrOperator = "|"; export const kipperBitwiseOrOperator: KipperBitwiseOrOperator = "|"; /** - * The bitwise left-shift operator, which can be used to shift a number to the left by a certain amount of bits. - * @example - * EXP << EXP; - * @since 0.9.0 - */ -export type KipperBitwiseZeroFillLeftShiftOperator = "<<"; - -/** - * The bitwise left-shift operator, which can be used to shift a number to the left by a certain amount of bits. - * @example - * EXP << EXP; - * @since 0.9.0 - */ -export const kipperBitwiseLeftZeroFillShiftOperator: KipperBitwiseZeroFillLeftShiftOperator = "<<"; - -/** - * The bitwise right-shift operator, which can be used to shift a number to the right by a certain amount of bits. - * @example - * EXP >> EXP; - * @since 0.9.0 - */ -export type KipperBitwiseSignedRightShiftOperator = ">>"; - -/** - * The bitwise right-shift operator, which can be used to shift a number to the right by a certain amount of bits. - * @example - * EXP >> EXP; - * @since 0.9.0 - */ -export const kipperBitwiseRightShiftOperator: KipperBitwiseSignedRightShiftOperator = ">>"; - -/** - * The bitwise zero-fill right-shift operator, which can be used to shift a number to the right by a certain amount of bits. - * @example - * EXP >>> EXP; + * All available bitwise operators inside Kipper, which can be used to combine two numbers bitwise. * @since 0.9.0 */ -export type KipperBitwiseZeroFillRightShiftOperator = ">>>"; +export type KipperBitwiseShiftOperator = "<<" | ">>" | ">>>"; /** - * The bitwise zero-fill right-shift operator, which can be used to shift a number to the right by a certain amount of bits. - * @example - * EXP >>> EXP; + * All available bitwise operators inside Kipper, which can be used to combine two numbers bitwise. * @since 0.9.0 */ -export const kipperBitwiseZeroFillRightShiftOperator: KipperBitwiseZeroFillRightShiftOperator = ">>>"; +export const kipperBitwiseShiftOperators: Array = ["<<", ">>", ">>>"]; /** * The bitwise-xor operator, which can be used to combine two numbers bitwise. diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index e4fea7b52..2e031b8c3 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -49,9 +49,7 @@ import { KipperSemanticErrorHandler } from "../analysis"; import { BitwiseAndExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression"; import { BitwiseOrExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression"; import { BitwiseXorExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-xor-expression"; -import { BitwiseSignedRightShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression"; -import { BitwiseZeroFillLeftShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression"; -import { BitwiseZeroFillRightShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression"; +import { BitwiseShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-shift-expression"; /** * Represents a function that checks the semantics for a {@link AnalysableASTNode}. @@ -266,9 +264,5 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa public abstract bitwiseXorExpression?: TargetASTNodeSemanticAnalyser; - public abstract bitwiseSignedRightShiftExpression?: TargetASTNodeSemanticAnalyser; - - public abstract bitwiseZeroFillLeftShiftOperations?: TargetASTNodeSemanticAnalyser; - - public abstract bitwiseZeroFillRightShiftOperations?: TargetASTNodeSemanticAnalyser; + public abstract bitwiseShiftExpression?: TargetASTNodeSemanticAnalyser; } diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index c30f2ddb7..34595906f 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -2,7 +2,7 @@ * Code generator specifying how a Kipper parse tree should be translated into a specific language. * @since 0.10.0 */ -import type { +import { AdditiveExpression, ArrayPrimaryExpression, AssignmentExpression, @@ -41,15 +41,13 @@ import type { VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, + BitwiseAndExpression, + BitwiseOrExpression, + BitwiseXorExpression, } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; -import { BitwiseAndExpression } from "../../ast/nodes/expressions/bitwise-expression"; -import { BitwiseOrExpression } from "../../ast/nodes/expressions/bitwise-expression"; -import { BitwiseXorExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-xor-expression"; -import { BitwiseZeroFillLeftShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-left-shift-expression"; -import { BitwiseZeroFillRightShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-zero-fill-right-shift-expression"; -import { BitwiseSignedRightShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-signed-right-shift-expression/bitwise-signed-right-shift-expression"; +import { BitwiseShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-shift-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -337,18 +335,5 @@ export abstract class KipperTargetCodeGenerator { public abstract bitwiseXorExpression: TargetASTNodeCodeGenerator; - public abstract bitwiseSignedRightShiftExpression: TargetASTNodeCodeGenerator< - BitwiseSignedRightShiftExpression, - TranslatedExpression - >; - - public abstract bitwiseZeroFillLeftShiftExpression: TargetASTNodeCodeGenerator< - BitwiseZeroFillLeftShiftExpression, - TranslatedExpression - >; - - public abstract bitwiseZeroFillRightShiftExpression: TargetASTNodeCodeGenerator< - BitwiseZeroFillRightShiftExpression, - TranslatedExpression - >; + public abstract bitwiseShiftExpression: TargetASTNodeCodeGenerator; } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index af392c73b..e3a868881 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -10,6 +10,8 @@ import { TranslatedExpression, BitwiseExpressionSemantics, BitwiseExpression, + BitwiseXorExpression, + BitwiseShiftExpression, } from "@kipper/core"; import { AdditiveExpression, @@ -707,31 +709,31 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return [identifier, " ", semanticData.operator, " ", ...assignExp]; }; + /** + * Translates a {@link BitwiseOrExpression} into the JavaScript language. + */ bitwiseOrExpression = async (node: BitwiseOrExpression): Promise => { return await this.translateOperatorExpressionWithOperands(node); }; + /** + * Translates a {@link BitwiseAndExpression} into the JavaScript language. + */ bitwiseAndExpression = async (node: BitwiseAndExpression): Promise => { return await this.translateOperatorExpressionWithOperands(node); }; - bitwiseXorExpression = async (node: BitwiseExpression): Promise => { - return await this.translateOperatorExpressionWithOperands(node); - }; - - bitwiseShiftExpression = async (node: BitwiseExpression): Promise => { - return await this.translateOperatorExpressionWithOperands(node); - }; - - bitwiseZeroFillLeftShiftExpression = async (node: BitwiseExpression): Promise => { - return await this.translateOperatorExpressionWithOperands(node); - }; - - bitwiseZeroFillRightShiftExpression = async (node: BitwiseExpression): Promise => { + /** + * Translates a {@link BitwiseXorExpression} into the JavaScript language. + */ + bitwiseXorExpression = async (node: BitwiseXorExpression): Promise => { return await this.translateOperatorExpressionWithOperands(node); }; - bitwiseSignedRightShiftExpression = async (node: BitwiseExpression): Promise => { + /** + * Translates a {@link BitwiseShiftExpression} into the JavaScript language. + */ + bitwiseShiftExpression = async (node: BitwiseShiftExpression): Promise => { return await this.translateOperatorExpressionWithOperands(node); }; } diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index 2ca04a341..5186e505f 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -250,17 +250,7 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys bitwiseXorExpression = undefined; /** - * Performs typescript-specific semantic analysis for {@link BitwiseSignedLeftShiftExpression} instances. + * Performs typescript-specific semantic analysis for {@link BitwiseShiftExpression} instances. */ - bitwiseSignedRightShiftExpression = undefined; - - /** - * Performs typescript-specific semantic analysis for {@link BitwiseZeroFillLeftShiftExpression} instances. - */ - bitwiseZeroFillLeftShiftOperations = undefined; - - /** - * Performs typescript-specific semantic analysis for {@link BitwiseZeroFillRightShiftExpression} instances. - */ - bitwiseZeroFillRightShiftOperations = undefined; + bitwiseShiftExpression = undefined; } diff --git a/test/kipper-files/bitshift.kip b/test/kipper-files/bitshift.kip index 52348b6ad..a3479d342 100644 --- a/test/kipper-files/bitshift.kip +++ b/test/kipper-files/bitshift.kip @@ -1,3 +1,4 @@ var a: num = 10; var b: num = 5; -print(f"Result: {a << b}"); +var c: num = a >>> b; +print(f"Result: {c}"); From cfbbb7dc46bfa133ebb982d1249472de895872fc Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 2 Jul 2024 10:51:22 +0200 Subject: [PATCH 173/257] minor (#493): cleanup code --- kipper/core/src/compiler/ast/ast-generator.ts | 7 +------ kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts | 7 ++++--- .../bitwise-shift-expression/bitwise-shift-expression.ts | 3 --- .../core/src/compiler/target-presets/semantic-analyser.ts | 5 +---- .../compiler/target-presets/translation/code-generator.ts | 2 +- 5 files changed, 7 insertions(+), 17 deletions(-) diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 3b0ca7d5b..3f88cad0c 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -24,10 +24,6 @@ import { ActualMultiplicativeExpressionContext, ActualRelationalExpressionContext, ArrayPrimaryExpressionContext, - BitwiseAndExpressionContext, - BitwiseOrExpressionContext, - BitwiseShiftExpressionContext, - BitwiseXorExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, CompilationUnitContext, @@ -78,8 +74,7 @@ import { import type { KipperProgramContext } from "../program-ctx"; import type { CompilableASTNode } from "./compilable-ast-node"; import type { ParserRuleContext } from "antlr4ts/ParserRuleContext"; -import { Declaration, Expression, Statement } from "./nodes"; -import { RootASTNode } from "./nodes/root-ast-node"; +import { Declaration, Expression, Statement, RootASTNode } from "./nodes"; import { DeclarationASTNodeFactory, ExpressionASTNodeFactory, StatementASTNodeFactory } from "./factories"; import { KipperInternalError } from "../../errors"; diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 83492ffcf..1603969c2 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -99,10 +99,11 @@ import { VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, + BitwiseOrExpression, + BitwiseXorExpression, + BitwiseShiftExpression, + BitwiseAndExpression } from "../nodes"; -import { BitwiseXorExpression } from "../nodes/expressions/bitwise-expression/bitwise-xor-expression"; -import { BitwiseAndExpression, BitwiseOrExpression } from "../nodes/expressions/bitwise-expression"; -import { BitwiseShiftExpression } from "../nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression.ts index 83f262bcb..5683c18f4 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/bitwise-expression/bitwise-shift-expression/bitwise-shift-expression.ts @@ -15,10 +15,7 @@ import { BitwiseShiftExpressionTypeSemantics } from "./bitwise-shift-expression- import { KipperBitwiseShiftOperator, kipperBitwiseShiftOperators, - KipperMultiplicativeOperator, - kipperMultiplicativeOperators, } from "../../../../../const"; -import { TerminalNode } from "antlr4ts/tree/TerminalNode"; export class BitwiseShiftExpression extends BitwiseExpression< BitwiseShiftExpressionSemantics, diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index 2e031b8c3..8ce5a8fef 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -46,10 +46,7 @@ import type { WhileLoopIterationStatement, } from "../ast"; import { KipperSemanticErrorHandler } from "../analysis"; -import { BitwiseAndExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-and-expression/bitwise-and-expression"; -import { BitwiseOrExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-or-expression/bitwise-or-expression"; -import { BitwiseXorExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-xor-expression"; -import { BitwiseShiftExpression } from "../ast/nodes/expressions/bitwise-expression/bitwise-shift-expression"; +import { BitwiseAndExpression, BitwiseOrExpression, BitwiseXorExpression, BitwiseShiftExpression } from "../ast"; /** * Represents a function that checks the semantics for a {@link AnalysableASTNode}. diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 34595906f..1e2c8065d 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -44,10 +44,10 @@ import { BitwiseAndExpression, BitwiseOrExpression, BitwiseXorExpression, + BitwiseShiftExpression } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; -import { BitwiseShiftExpression } from "../../ast/nodes/expressions/bitwise-expression/bitwise-shift-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a From f40897f1d6836cdaaf9c2ec23f4a2bf24557ac11 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 2 Jul 2024 11:54:08 +0200 Subject: [PATCH 174/257] minor (534) Finished AST Node for Ternary Expression --- .run/{antlr4ts.run.xml => antlr4.run.xml} | 4 +-- .../analysis/analyser/type-checker.ts | 25 ++++++++++++++++++ .../conditional-expression-semantics.ts | 21 +++++++++++++-- .../conditional-expression.ts | 26 ++++++++++++++----- 4 files changed, 66 insertions(+), 10 deletions(-) rename .run/{antlr4ts.run.xml => antlr4.run.xml} (66%) diff --git a/.run/antlr4ts.run.xml b/.run/antlr4.run.xml similarity index 66% rename from .run/antlr4ts.run.xml rename to .run/antlr4.run.xml index f6fb8807f..70fdb8407 100644 --- a/.run/antlr4ts.run.xml +++ b/.run/antlr4.run.xml @@ -1,9 +1,9 @@ - + -